fin-primitives 3.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fin_primitives-3.2.0/CHANGELOG.md +439 -0
- fin_primitives-3.2.0/Cargo.lock +1585 -0
- fin_primitives-3.2.0/Cargo.toml +232 -0
- fin_primitives-3.2.0/LICENSE +21 -0
- fin_primitives-3.2.0/PKG-INFO +227 -0
- fin_primitives-3.2.0/README.md +52 -0
- fin_primitives-3.2.0/benches/tick_bench.rs +77 -0
- fin_primitives-3.2.0/docs/python.md +177 -0
- fin_primitives-3.2.0/examples/candles.rs +253 -0
- fin_primitives-3.2.0/examples/indicator_reference.rs +93 -0
- fin_primitives-3.2.0/examples/option_chain.rs +96 -0
- fin_primitives-3.2.0/examples/order_book.rs +217 -0
- fin_primitives-3.2.0/examples/position_risk.rs +203 -0
- fin_primitives-3.2.0/examples/support/mod.rs +122 -0
- fin_primitives-3.2.0/examples/value_at_risk.rs +63 -0
- fin_primitives-3.2.0/examples/with_ta.rs +58 -0
- fin_primitives-3.2.0/pyproject.toml +74 -0
- fin_primitives-3.2.0/python/LICENSE +21 -0
- fin_primitives-3.2.0/src/alternative_data/mod.rs +418 -0
- fin_primitives-3.2.0/src/arbitrage/mod.rs +472 -0
- fin_primitives-3.2.0/src/arrow.rs +257 -0
- fin_primitives-3.2.0/src/async_signals.rs +273 -0
- fin_primitives-3.2.0/src/attribution.rs +1447 -0
- fin_primitives-3.2.0/src/backtest/engine.rs +820 -0
- fin_primitives-3.2.0/src/backtest/mod.rs +446 -0
- fin_primitives-3.2.0/src/backtest/walk_forward.rs +719 -0
- fin_primitives-3.2.0/src/clustering/mod.rs +520 -0
- fin_primitives-3.2.0/src/correlation/mod.rs +350 -0
- fin_primitives-3.2.0/src/correlation/stats.rs +577 -0
- fin_primitives-3.2.0/src/credit/cds.rs +388 -0
- fin_primitives-3.2.0/src/credit/mod.rs +10 -0
- fin_primitives-3.2.0/src/cross_asset/mod.rs +608 -0
- fin_primitives-3.2.0/src/crypto/defi.rs +456 -0
- fin_primitives-3.2.0/src/crypto/mod.rs +435 -0
- fin_primitives-3.2.0/src/derivatives/credit_default_swap.rs +119 -0
- fin_primitives-3.2.0/src/derivatives/exotic_options.rs +562 -0
- fin_primitives-3.2.0/src/derivatives/forwards.rs +240 -0
- fin_primitives-3.2.0/src/derivatives/futures.rs +268 -0
- fin_primitives-3.2.0/src/derivatives/interest_rate_models.rs +220 -0
- fin_primitives-3.2.0/src/derivatives/mod.rs +27 -0
- fin_primitives-3.2.0/src/derivatives/option_strategies.rs +323 -0
- fin_primitives-3.2.0/src/derivatives/swaps.rs +551 -0
- fin_primitives-3.2.0/src/derivatives/variance_swap.rs +323 -0
- fin_primitives-3.2.0/src/error.rs +127 -0
- fin_primitives-3.2.0/src/events/mod.rs +480 -0
- fin_primitives-3.2.0/src/execution/mod.rs +449 -0
- fin_primitives-3.2.0/src/execution_cost/mod.rs +373 -0
- fin_primitives-3.2.0/src/factor/mod.rs +702 -0
- fin_primitives-3.2.0/src/fin_primitives/__init__.py +467 -0
- fin_primitives-3.2.0/src/fin_primitives/_fin_primitives.pyi +115 -0
- fin_primitives-3.2.0/src/fin_primitives/py.typed +0 -0
- fin_primitives-3.2.0/src/fixed_income/bond.rs +434 -0
- fin_primitives-3.2.0/src/fixed_income/mod.rs +29 -0
- fin_primitives-3.2.0/src/fixed_income/mortgage.rs +576 -0
- fin_primitives-3.2.0/src/fixed_income/spread_analytics.rs +366 -0
- fin_primitives-3.2.0/src/fixed_income/swaps.rs +451 -0
- fin_primitives-3.2.0/src/fixed_income/yield_curve.rs +440 -0
- fin_primitives-3.2.0/src/funding/mod.rs +357 -0
- fin_primitives-3.2.0/src/greeks.rs +1017 -0
- fin_primitives-3.2.0/src/impact/mod.rs +333 -0
- fin_primitives-3.2.0/src/interop/mod.rs +77 -0
- fin_primitives-3.2.0/src/interop/ta.rs +176 -0
- fin_primitives-3.2.0/src/interop/wickra.rs +133 -0
- fin_primitives-3.2.0/src/interop/yata.rs +128 -0
- fin_primitives-3.2.0/src/latency/mod.rs +341 -0
- fin_primitives-3.2.0/src/lib.rs +391 -0
- fin_primitives-3.2.0/src/liquidity/mod.rs +428 -0
- fin_primitives-3.2.0/src/microstructure/mod.rs +1365 -0
- fin_primitives-3.2.0/src/microstructure_anomaly_detection.rs +582 -0
- fin_primitives-3.2.0/src/ml/mod.rs +346 -0
- fin_primitives-3.2.0/src/ml_features/mod.rs +651 -0
- fin_primitives-3.2.0/src/montecarlo/mod.rs +476 -0
- fin_primitives-3.2.0/src/normal.rs +271 -0
- fin_primitives-3.2.0/src/ohlcv/mod.rs +9294 -0
- fin_primitives-3.2.0/src/options/greeks.rs +954 -0
- fin_primitives-3.2.0/src/options/mod.rs +347 -0
- fin_primitives-3.2.0/src/options/surface.rs +429 -0
- fin_primitives-3.2.0/src/orderbook/mod.rs +1512 -0
- fin_primitives-3.2.0/src/pairs_trading/mod.rs +510 -0
- fin_primitives-3.2.0/src/performance/mod.rs +394 -0
- fin_primitives-3.2.0/src/pnl/mod.rs +405 -0
- fin_primitives-3.2.0/src/portfolio/attribution.rs +304 -0
- fin_primitives-3.2.0/src/portfolio/black_litterman.rs +521 -0
- fin_primitives-3.2.0/src/portfolio/diversification.rs +383 -0
- fin_primitives-3.2.0/src/portfolio/factor_model.rs +479 -0
- fin_primitives-3.2.0/src/portfolio/mod.rs +46 -0
- fin_primitives-3.2.0/src/portfolio/optimization.rs +399 -0
- fin_primitives-3.2.0/src/portfolio/optimizer.rs +787 -0
- fin_primitives-3.2.0/src/portfolio/rebalancing.rs +413 -0
- fin_primitives-3.2.0/src/portfolio/structured_products.rs +165 -0
- fin_primitives-3.2.0/src/position/kelly.rs +342 -0
- fin_primitives-3.2.0/src/position/mod.rs +2701 -0
- fin_primitives-3.2.0/src/python/args.rs +231 -0
- fin_primitives-3.2.0/src/python/indicator.rs +368 -0
- fin_primitives-3.2.0/src/python/mod.rs +544 -0
- fin_primitives-3.2.0/src/python/registry.rs +7501 -0
- fin_primitives-3.2.0/src/rebalancing/mod.rs +408 -0
- fin_primitives-3.2.0/src/regime/hmm.rs +397 -0
- fin_primitives-3.2.0/src/regime/mod.rs +1277 -0
- fin_primitives-3.2.0/src/risk/attribution.rs +981 -0
- fin_primitives-3.2.0/src/risk/correlation_matrix.rs +446 -0
- fin_primitives-3.2.0/src/risk/credit_risk.rs +222 -0
- fin_primitives-3.2.0/src/risk/liquidity_risk.rs +532 -0
- fin_primitives-3.2.0/src/risk/mod.rs +2922 -0
- fin_primitives-3.2.0/src/risk/scenario_engine.rs +550 -0
- fin_primitives-3.2.0/src/risk/stress.rs +418 -0
- fin_primitives-3.2.0/src/risk/stress_scenarios.rs +375 -0
- fin_primitives-3.2.0/src/risk/var.rs +490 -0
- fin_primitives-3.2.0/src/risk/var_engine.rs +339 -0
- fin_primitives-3.2.0/src/scenario/mod.rs +560 -0
- fin_primitives-3.2.0/src/signals/combine.rs +686 -0
- fin_primitives-3.2.0/src/signals/compose.rs +1041 -0
- fin_primitives-3.2.0/src/signals/composite.rs +408 -0
- fin_primitives-3.2.0/src/signals/entropy.rs +365 -0
- fin_primitives-3.2.0/src/signals/float.rs +1485 -0
- fin_primitives-3.2.0/src/signals/indicators/abs_return_mean.rs +149 -0
- fin_primitives-3.2.0/src/signals/indicators/abs_return_sum.rs +94 -0
- fin_primitives-3.2.0/src/signals/indicators/acceleration_bands.rs +250 -0
- fin_primitives-3.2.0/src/signals/indicators/adaptive_rsi.rs +230 -0
- fin_primitives-3.2.0/src/signals/indicators/adaptive_supertrend.rs +258 -0
- fin_primitives-3.2.0/src/signals/indicators/adx.rs +244 -0
- fin_primitives-3.2.0/src/signals/indicators/alligator.rs +190 -0
- fin_primitives-3.2.0/src/signals/indicators/alma.rs +187 -0
- fin_primitives-3.2.0/src/signals/indicators/amplitude_ratio.rs +116 -0
- fin_primitives-3.2.0/src/signals/indicators/anchored_vwap.rs +154 -0
- fin_primitives-3.2.0/src/signals/indicators/apo.rs +189 -0
- fin_primitives-3.2.0/src/signals/indicators/aroon.rs +212 -0
- fin_primitives-3.2.0/src/signals/indicators/aroon_oscillator.rs +172 -0
- fin_primitives-3.2.0/src/signals/indicators/atr.rs +247 -0
- fin_primitives-3.2.0/src/signals/indicators/atr_channel_width.rs +165 -0
- fin_primitives-3.2.0/src/signals/indicators/atr_normalized_close.rs +219 -0
- fin_primitives-3.2.0/src/signals/indicators/atr_percent.rs +183 -0
- fin_primitives-3.2.0/src/signals/indicators/atr_percentile.rs +174 -0
- fin_primitives-3.2.0/src/signals/indicators/atr_ratio.rs +152 -0
- fin_primitives-3.2.0/src/signals/indicators/atr_stop.rs +186 -0
- fin_primitives-3.2.0/src/signals/indicators/atrp.rs +150 -0
- fin_primitives-3.2.0/src/signals/indicators/autocorrelation_1.rs +176 -0
- fin_primitives-3.2.0/src/signals/indicators/average_bar_range.rs +181 -0
- fin_primitives-3.2.0/src/signals/indicators/average_gain.rs +93 -0
- fin_primitives-3.2.0/src/signals/indicators/average_gap.rs +204 -0
- fin_primitives-3.2.0/src/signals/indicators/average_loss.rs +93 -0
- fin_primitives-3.2.0/src/signals/indicators/avg_down_return.rs +171 -0
- fin_primitives-3.2.0/src/signals/indicators/avg_true_range_pct.rs +222 -0
- fin_primitives-3.2.0/src/signals/indicators/avg_up_return.rs +193 -0
- fin_primitives-3.2.0/src/signals/indicators/awesome_oscillator.rs +146 -0
- fin_primitives-3.2.0/src/signals/indicators/bar_close_rank.rs +142 -0
- fin_primitives-3.2.0/src/signals/indicators/bar_efficiency.rs +90 -0
- fin_primitives-3.2.0/src/signals/indicators/bar_follow_through.rs +178 -0
- fin_primitives-3.2.0/src/signals/indicators/bar_momentum_index.rs +206 -0
- fin_primitives-3.2.0/src/signals/indicators/bar_momentum_score.rs +164 -0
- fin_primitives-3.2.0/src/signals/indicators/bar_open_position.rs +126 -0
- fin_primitives-3.2.0/src/signals/indicators/bar_overlap_ratio.rs +155 -0
- fin_primitives-3.2.0/src/signals/indicators/bar_polarity_ratio.rs +155 -0
- fin_primitives-3.2.0/src/signals/indicators/bar_polarity_streak.rs +167 -0
- fin_primitives-3.2.0/src/signals/indicators/bar_quality_score.rs +164 -0
- fin_primitives-3.2.0/src/signals/indicators/bar_range_consistency.rs +169 -0
- fin_primitives-3.2.0/src/signals/indicators/bar_range_expansion_pct.rs +169 -0
- fin_primitives-3.2.0/src/signals/indicators/bar_range_percentile.rs +185 -0
- fin_primitives-3.2.0/src/signals/indicators/bar_range_std_dev.rs +150 -0
- fin_primitives-3.2.0/src/signals/indicators/bar_strength_index.rs +88 -0
- fin_primitives-3.2.0/src/signals/indicators/bar_type.rs +128 -0
- fin_primitives-3.2.0/src/signals/indicators/bars_since.rs +170 -0
- fin_primitives-3.2.0/src/signals/indicators/bearish_bar_ratio.rs +90 -0
- fin_primitives-3.2.0/src/signals/indicators/bearish_engulfing.rs +143 -0
- fin_primitives-3.2.0/src/signals/indicators/body_acceleration.rs +173 -0
- fin_primitives-3.2.0/src/signals/indicators/body_atr_ratio.rs +189 -0
- fin_primitives-3.2.0/src/signals/indicators/body_center_position.rs +193 -0
- fin_primitives-3.2.0/src/signals/indicators/body_color_streak.rs +189 -0
- fin_primitives-3.2.0/src/signals/indicators/body_direction_ratio.rs +157 -0
- fin_primitives-3.2.0/src/signals/indicators/body_fill_ratio.rs +148 -0
- fin_primitives-3.2.0/src/signals/indicators/body_height_ratio.rs +159 -0
- fin_primitives-3.2.0/src/signals/indicators/body_high_ratio.rs +161 -0
- fin_primitives-3.2.0/src/signals/indicators/body_momentum.rs +84 -0
- fin_primitives-3.2.0/src/signals/indicators/body_position.rs +119 -0
- fin_primitives-3.2.0/src/signals/indicators/body_size_rank.rs +176 -0
- fin_primitives-3.2.0/src/signals/indicators/body_streak.rs +144 -0
- fin_primitives-3.2.0/src/signals/indicators/body_to_range_ema.rs +179 -0
- fin_primitives-3.2.0/src/signals/indicators/body_to_range_ratio.rs +88 -0
- fin_primitives-3.2.0/src/signals/indicators/body_to_shadow_ratio.rs +120 -0
- fin_primitives-3.2.0/src/signals/indicators/body_to_wick_ratio.rs +215 -0
- fin_primitives-3.2.0/src/signals/indicators/body_trend_strength.rs +160 -0
- fin_primitives-3.2.0/src/signals/indicators/body_volume_ratio.rs +160 -0
- fin_primitives-3.2.0/src/signals/indicators/body_width_ratio.rs +168 -0
- fin_primitives-3.2.0/src/signals/indicators/bollinger.rs +261 -0
- fin_primitives-3.2.0/src/signals/indicators/bollinger_pct_b.rs +196 -0
- fin_primitives-3.2.0/src/signals/indicators/bollinger_width.rs +124 -0
- fin_primitives-3.2.0/src/signals/indicators/bop.rs +214 -0
- fin_primitives-3.2.0/src/signals/indicators/breakout_signal.rs +194 -0
- fin_primitives-3.2.0/src/signals/indicators/bull_bear_balance.rs +175 -0
- fin_primitives-3.2.0/src/signals/indicators/bull_bear_power.rs +86 -0
- fin_primitives-3.2.0/src/signals/indicators/bull_power_bear_power.rs +97 -0
- fin_primitives-3.2.0/src/signals/indicators/bullish_engulfing.rs +143 -0
- fin_primitives-3.2.0/src/signals/indicators/bw_mfi.rs +126 -0
- fin_primitives-3.2.0/src/signals/indicators/calmar_ratio.rs +180 -0
- fin_primitives-3.2.0/src/signals/indicators/camarilla.rs +196 -0
- fin_primitives-3.2.0/src/signals/indicators/candle_body_size.rs +141 -0
- fin_primitives-3.2.0/src/signals/indicators/candle_color.rs +113 -0
- fin_primitives-3.2.0/src/signals/indicators/candle_efficiency.rs +160 -0
- fin_primitives-3.2.0/src/signals/indicators/candle_momentum.rs +162 -0
- fin_primitives-3.2.0/src/signals/indicators/candle_momentum_score.rs +167 -0
- fin_primitives-3.2.0/src/signals/indicators/candle_pattern.rs +179 -0
- fin_primitives-3.2.0/src/signals/indicators/candle_range_ma.rs +128 -0
- fin_primitives-3.2.0/src/signals/indicators/candle_symmetry.rs +93 -0
- fin_primitives-3.2.0/src/signals/indicators/cci.rs +208 -0
- fin_primitives-3.2.0/src/signals/indicators/chaikin_osc.rs +176 -0
- fin_primitives-3.2.0/src/signals/indicators/chaikin_volatility.rs +99 -0
- fin_primitives-3.2.0/src/signals/indicators/chande_forecast_osc.rs +176 -0
- fin_primitives-3.2.0/src/signals/indicators/chande_kroll.rs +232 -0
- fin_primitives-3.2.0/src/signals/indicators/chande_momentum_smoothed.rs +260 -0
- fin_primitives-3.2.0/src/signals/indicators/chandelier.rs +178 -0
- fin_primitives-3.2.0/src/signals/indicators/change_from_high.rs +143 -0
- fin_primitives-3.2.0/src/signals/indicators/choppiness.rs +188 -0
- fin_primitives-3.2.0/src/signals/indicators/climax_volume.rs +182 -0
- fin_primitives-3.2.0/src/signals/indicators/close_above_ema.rs +159 -0
- fin_primitives-3.2.0/src/signals/indicators/close_above_high_prev.rs +124 -0
- fin_primitives-3.2.0/src/signals/indicators/close_above_midpoint.rs +139 -0
- fin_primitives-3.2.0/src/signals/indicators/close_above_open.rs +185 -0
- fin_primitives-3.2.0/src/signals/indicators/close_above_open_streak.rs +134 -0
- fin_primitives-3.2.0/src/signals/indicators/close_above_pivot.rs +170 -0
- fin_primitives-3.2.0/src/signals/indicators/close_above_prev_close.rs +153 -0
- fin_primitives-3.2.0/src/signals/indicators/close_above_prev_close_pct.rs +146 -0
- fin_primitives-3.2.0/src/signals/indicators/close_above_prev_high.rs +91 -0
- fin_primitives-3.2.0/src/signals/indicators/close_above_prev_low.rs +176 -0
- fin_primitives-3.2.0/src/signals/indicators/close_above_prior_close.rs +178 -0
- fin_primitives-3.2.0/src/signals/indicators/close_above_sma_streak.rs +164 -0
- fin_primitives-3.2.0/src/signals/indicators/close_acceleration.rs +88 -0
- fin_primitives-3.2.0/src/signals/indicators/close_acceleration_sign.rs +99 -0
- fin_primitives-3.2.0/src/signals/indicators/close_below_low_prev.rs +89 -0
- fin_primitives-3.2.0/src/signals/indicators/close_distance_from_ema.rs +102 -0
- fin_primitives-3.2.0/src/signals/indicators/close_distance_from_open.rs +194 -0
- fin_primitives-3.2.0/src/signals/indicators/close_drawdown_from_high.rs +168 -0
- fin_primitives-3.2.0/src/signals/indicators/close_gap_ratio.rs +179 -0
- fin_primitives-3.2.0/src/signals/indicators/close_high_frequency.rs +165 -0
- fin_primitives-3.2.0/src/signals/indicators/close_high_low_spread.rs +158 -0
- fin_primitives-3.2.0/src/signals/indicators/close_in_range_pct.rs +193 -0
- fin_primitives-3.2.0/src/signals/indicators/close_location_ema.rs +186 -0
- fin_primitives-3.2.0/src/signals/indicators/close_location_value.rs +161 -0
- fin_primitives-3.2.0/src/signals/indicators/close_midpoint_diff.rs +115 -0
- fin_primitives-3.2.0/src/signals/indicators/close_midpoint_strength.rs +117 -0
- fin_primitives-3.2.0/src/signals/indicators/close_minus_open_ma.rs +133 -0
- fin_primitives-3.2.0/src/signals/indicators/close_minus_prev_high.rs +176 -0
- fin_primitives-3.2.0/src/signals/indicators/close_momentum_rank.rs +188 -0
- fin_primitives-3.2.0/src/signals/indicators/close_open_ema.rs +149 -0
- fin_primitives-3.2.0/src/signals/indicators/close_open_momentum.rs +185 -0
- fin_primitives-3.2.0/src/signals/indicators/close_pct_from_high.rs +88 -0
- fin_primitives-3.2.0/src/signals/indicators/close_pct_from_low.rs +88 -0
- fin_primitives-3.2.0/src/signals/indicators/close_pct_rank.rs +181 -0
- fin_primitives-3.2.0/src/signals/indicators/close_position_in_range.rs +108 -0
- fin_primitives-3.2.0/src/signals/indicators/close_range_position.rs +183 -0
- fin_primitives-3.2.0/src/signals/indicators/close_rank_momentum.rs +163 -0
- fin_primitives-3.2.0/src/signals/indicators/close_relative_to_ema.rs +83 -0
- fin_primitives-3.2.0/src/signals/indicators/close_relative_to_range.rs +95 -0
- fin_primitives-3.2.0/src/signals/indicators/close_retrace_pct.rs +125 -0
- fin_primitives-3.2.0/src/signals/indicators/close_return_acceleration.rs +164 -0
- fin_primitives-3.2.0/src/signals/indicators/close_return_z.rs +173 -0
- fin_primitives-3.2.0/src/signals/indicators/close_session_bias.rs +176 -0
- fin_primitives-3.2.0/src/signals/indicators/close_strength_ratio.rs +193 -0
- fin_primitives-3.2.0/src/signals/indicators/close_to_high_ratio.rs +87 -0
- fin_primitives-3.2.0/src/signals/indicators/close_to_low_distance.rs +165 -0
- fin_primitives-3.2.0/src/signals/indicators/close_to_low_ratio.rs +172 -0
- fin_primitives-3.2.0/src/signals/indicators/close_to_mid_range.rs +85 -0
- fin_primitives-3.2.0/src/signals/indicators/close_to_midrange.rs +179 -0
- fin_primitives-3.2.0/src/signals/indicators/close_to_open.rs +147 -0
- fin_primitives-3.2.0/src/signals/indicators/close_to_open_gap.rs +94 -0
- fin_primitives-3.2.0/src/signals/indicators/close_to_open_return.rs +159 -0
- fin_primitives-3.2.0/src/signals/indicators/close_to_range_top.rs +89 -0
- fin_primitives-3.2.0/src/signals/indicators/close_to_vwap_pct.rs +182 -0
- fin_primitives-3.2.0/src/signals/indicators/close_vs_open_range.rs +90 -0
- fin_primitives-3.2.0/src/signals/indicators/close_vs_prior_high.rs +145 -0
- fin_primitives-3.2.0/src/signals/indicators/close_vs_vwap.rs +143 -0
- fin_primitives-3.2.0/src/signals/indicators/closing_strength.rs +158 -0
- fin_primitives-3.2.0/src/signals/indicators/cmf.rs +184 -0
- fin_primitives-3.2.0/src/signals/indicators/cmo.rs +166 -0
- fin_primitives-3.2.0/src/signals/indicators/cog.rs +145 -0
- fin_primitives-3.2.0/src/signals/indicators/conditional_var5.rs +155 -0
- fin_primitives-3.2.0/src/signals/indicators/connors_rsi.rs +313 -0
- fin_primitives-3.2.0/src/signals/indicators/consecutive_bars.rs +149 -0
- fin_primitives-3.2.0/src/signals/indicators/consecutive_higher_highs.rs +138 -0
- fin_primitives-3.2.0/src/signals/indicators/consecutive_new_highs.rs +144 -0
- fin_primitives-3.2.0/src/signals/indicators/consecutive_volume_growth.rs +125 -0
- fin_primitives-3.2.0/src/signals/indicators/consolidation_score.rs +135 -0
- fin_primitives-3.2.0/src/signals/indicators/coppock.rs +165 -0
- fin_primitives-3.2.0/src/signals/indicators/coral_trend.rs +222 -0
- fin_primitives-3.2.0/src/signals/indicators/ctm.rs +143 -0
- fin_primitives-3.2.0/src/signals/indicators/cum_return_momentum.rs +84 -0
- fin_primitives-3.2.0/src/signals/indicators/cumulative_body_ratio.rs +169 -0
- fin_primitives-3.2.0/src/signals/indicators/cumulative_delta.rs +108 -0
- fin_primitives-3.2.0/src/signals/indicators/cumulative_log_return.rs +189 -0
- fin_primitives-3.2.0/src/signals/indicators/cumulative_volume.rs +126 -0
- fin_primitives-3.2.0/src/signals/indicators/cusum_price_change.rs +209 -0
- fin_primitives-3.2.0/src/signals/indicators/cyber_cycle.rs +218 -0
- fin_primitives-3.2.0/src/signals/indicators/daily_return_skew.rs +174 -0
- fin_primitives-3.2.0/src/signals/indicators/dark_cloud_cover.rs +164 -0
- fin_primitives-3.2.0/src/signals/indicators/delta_momentum.rs +173 -0
- fin_primitives-3.2.0/src/signals/indicators/delta_volume.rs +137 -0
- fin_primitives-3.2.0/src/signals/indicators/dema.rs +264 -0
- fin_primitives-3.2.0/src/signals/indicators/dema_cross.rs +250 -0
- fin_primitives-3.2.0/src/signals/indicators/dema_ratio.rs +219 -0
- fin_primitives-3.2.0/src/signals/indicators/deviation_from_ma.rs +164 -0
- fin_primitives-3.2.0/src/signals/indicators/didi_index.rs +225 -0
- fin_primitives-3.2.0/src/signals/indicators/direction_changes.rs +171 -0
- fin_primitives-3.2.0/src/signals/indicators/directional_candle_ratio.rs +160 -0
- fin_primitives-3.2.0/src/signals/indicators/directional_efficiency.rs +177 -0
- fin_primitives-3.2.0/src/signals/indicators/disparity.rs +164 -0
- fin_primitives-3.2.0/src/signals/indicators/dmi.rs +218 -0
- fin_primitives-3.2.0/src/signals/indicators/doji_detector.rs +127 -0
- fin_primitives-3.2.0/src/signals/indicators/donchian.rs +136 -0
- fin_primitives-3.2.0/src/signals/indicators/donchian_width.rs +87 -0
- fin_primitives-3.2.0/src/signals/indicators/downside_deviation.rs +107 -0
- fin_primitives-3.2.0/src/signals/indicators/dpo.rs +167 -0
- fin_primitives-3.2.0/src/signals/indicators/dsp.rs +192 -0
- fin_primitives-3.2.0/src/signals/indicators/dual_atr_ratio.rs +208 -0
- fin_primitives-3.2.0/src/signals/indicators/dual_momentum.rs +182 -0
- fin_primitives-3.2.0/src/signals/indicators/dual_rsi.rs +205 -0
- fin_primitives-3.2.0/src/signals/indicators/dynamic_momentum_index.rs +257 -0
- fin_primitives-3.2.0/src/signals/indicators/ease_of_movement.rs +180 -0
- fin_primitives-3.2.0/src/signals/indicators/efficiency_ratio.rs +170 -0
- fin_primitives-3.2.0/src/signals/indicators/elastic_volume_weighted_ma.rs +216 -0
- fin_primitives-3.2.0/src/signals/indicators/elder.rs +160 -0
- fin_primitives-3.2.0/src/signals/indicators/elder_impulse.rs +224 -0
- fin_primitives-3.2.0/src/signals/indicators/ema.rs +277 -0
- fin_primitives-3.2.0/src/signals/indicators/ema_alignment.rs +162 -0
- fin_primitives-3.2.0/src/signals/indicators/ema_band_width.rs +174 -0
- fin_primitives-3.2.0/src/signals/indicators/ema_convergence.rs +191 -0
- fin_primitives-3.2.0/src/signals/indicators/ema_cross.rs +230 -0
- fin_primitives-3.2.0/src/signals/indicators/ema_ratio.rs +220 -0
- fin_primitives-3.2.0/src/signals/indicators/ema_slope.rs +171 -0
- fin_primitives-3.2.0/src/signals/indicators/emv.rs +163 -0
- fin_primitives-3.2.0/src/signals/indicators/engulfing_detector.rs +147 -0
- fin_primitives-3.2.0/src/signals/indicators/engulfing_pattern.rs +149 -0
- fin_primitives-3.2.0/src/signals/indicators/env.rs +188 -0
- fin_primitives-3.2.0/src/signals/indicators/evening_star.rs +194 -0
- fin_primitives-3.2.0/src/signals/indicators/fair_value_gap.rs +237 -0
- fin_primitives-3.2.0/src/signals/indicators/fibonacci_retrace.rs +211 -0
- fin_primitives-3.2.0/src/signals/indicators/fisher.rs +210 -0
- fin_primitives-3.2.0/src/signals/indicators/flat_bar_pct.rs +149 -0
- fin_primitives-3.2.0/src/signals/indicators/force_index.rs +190 -0
- fin_primitives-3.2.0/src/signals/indicators/fractal_dimension_index.rs +209 -0
- fin_primitives-3.2.0/src/signals/indicators/frama.rs +200 -0
- fin_primitives-3.2.0/src/signals/indicators/gann_hilo.rs +169 -0
- fin_primitives-3.2.0/src/signals/indicators/gap_body_ratio.rs +191 -0
- fin_primitives-3.2.0/src/signals/indicators/gap_continuation_ratio.rs +218 -0
- fin_primitives-3.2.0/src/signals/indicators/gap_detector.rs +141 -0
- fin_primitives-3.2.0/src/signals/indicators/gap_direction_streak.rs +201 -0
- fin_primitives-3.2.0/src/signals/indicators/gap_fill_detector.rs +164 -0
- fin_primitives-3.2.0/src/signals/indicators/gap_fill_ratio.rs +125 -0
- fin_primitives-3.2.0/src/signals/indicators/gap_momentum.rs +187 -0
- fin_primitives-3.2.0/src/signals/indicators/gap_range_ratio.rs +157 -0
- fin_primitives-3.2.0/src/signals/indicators/gap_signal.rs +125 -0
- fin_primitives-3.2.0/src/signals/indicators/gap_streak.rs +176 -0
- fin_primitives-3.2.0/src/signals/indicators/gap_volatility.rs +180 -0
- fin_primitives-3.2.0/src/signals/indicators/garman_klass_volatility.rs +184 -0
- fin_primitives-3.2.0/src/signals/indicators/golden_cross_signal.rs +177 -0
- fin_primitives-3.2.0/src/signals/indicators/half_trend.rs +261 -0
- fin_primitives-3.2.0/src/signals/indicators/hammer_detector.rs +196 -0
- fin_primitives-3.2.0/src/signals/indicators/hammer_pattern.rs +148 -0
- fin_primitives-3.2.0/src/signals/indicators/harami_detector.rs +193 -0
- fin_primitives-3.2.0/src/signals/indicators/heikin_ashi.rs +153 -0
- fin_primitives-3.2.0/src/signals/indicators/high_break_count.rs +135 -0
- fin_primitives-3.2.0/src/signals/indicators/high_close_ratio.rs +151 -0
- fin_primitives-3.2.0/src/signals/indicators/high_low_crossover.rs +150 -0
- fin_primitives-3.2.0/src/signals/indicators/high_low_divergence.rs +99 -0
- fin_primitives-3.2.0/src/signals/indicators/high_low_midpoint.rs +82 -0
- fin_primitives-3.2.0/src/signals/indicators/high_low_momentum.rs +193 -0
- fin_primitives-3.2.0/src/signals/indicators/high_low_oscillator.rs +92 -0
- fin_primitives-3.2.0/src/signals/indicators/high_low_pct.rs +162 -0
- fin_primitives-3.2.0/src/signals/indicators/high_low_pct_range.rs +158 -0
- fin_primitives-3.2.0/src/signals/indicators/high_low_persistence.rs +186 -0
- fin_primitives-3.2.0/src/signals/indicators/high_low_ratio.rs +158 -0
- fin_primitives-3.2.0/src/signals/indicators/high_low_ratio_ma.rs +176 -0
- fin_primitives-3.2.0/src/signals/indicators/high_low_return_correlation.rs +134 -0
- fin_primitives-3.2.0/src/signals/indicators/high_low_spread.rs +161 -0
- fin_primitives-3.2.0/src/signals/indicators/high_low_spread_ma.rs +160 -0
- fin_primitives-3.2.0/src/signals/indicators/high_low_squeeze.rs +171 -0
- fin_primitives-3.2.0/src/signals/indicators/high_low_symmetry.rs +192 -0
- fin_primitives-3.2.0/src/signals/indicators/high_minus_prev_close.rs +175 -0
- fin_primitives-3.2.0/src/signals/indicators/high_of_period.rs +111 -0
- fin_primitives-3.2.0/src/signals/indicators/high_open_range.rs +84 -0
- fin_primitives-3.2.0/src/signals/indicators/high_to_open_range.rs +166 -0
- fin_primitives-3.2.0/src/signals/indicators/high_volume_bar_ratio.rs +158 -0
- fin_primitives-3.2.0/src/signals/indicators/higher_close_streak.rs +121 -0
- fin_primitives-3.2.0/src/signals/indicators/higher_high_count.rs +86 -0
- fin_primitives-3.2.0/src/signals/indicators/higher_high_lower_low.rs +88 -0
- fin_primitives-3.2.0/src/signals/indicators/higher_low_count.rs +90 -0
- fin_primitives-3.2.0/src/signals/indicators/higher_low_streak.rs +127 -0
- fin_primitives-3.2.0/src/signals/indicators/higher_timeframe_trend.rs +181 -0
- fin_primitives-3.2.0/src/signals/indicators/historical_volatility.rs +162 -0
- fin_primitives-3.2.0/src/signals/indicators/hl_midpoint_deviation.rs +192 -0
- fin_primitives-3.2.0/src/signals/indicators/hl_ratio.rs +140 -0
- fin_primitives-3.2.0/src/signals/indicators/hullma.rs +175 -0
- fin_primitives-3.2.0/src/signals/indicators/hurst_exponent.rs +197 -0
- fin_primitives-3.2.0/src/signals/indicators/ichimoku.rs +245 -0
- fin_primitives-3.2.0/src/signals/indicators/inertia.rs +187 -0
- fin_primitives-3.2.0/src/signals/indicators/inside_bar_counter.rs +178 -0
- fin_primitives-3.2.0/src/signals/indicators/inside_bar_ratio.rs +96 -0
- fin_primitives-3.2.0/src/signals/indicators/intrabar_momentum.rs +191 -0
- fin_primitives-3.2.0/src/signals/indicators/intrabar_return.rs +96 -0
- fin_primitives-3.2.0/src/signals/indicators/intraday_momentum.rs +157 -0
- fin_primitives-3.2.0/src/signals/indicators/intraday_spread_pct.rs +99 -0
- fin_primitives-3.2.0/src/signals/indicators/jurik_ma.rs +197 -0
- fin_primitives-3.2.0/src/signals/indicators/kama.rs +208 -0
- fin_primitives-3.2.0/src/signals/indicators/kaufman_er.rs +173 -0
- fin_primitives-3.2.0/src/signals/indicators/keltner.rs +196 -0
- fin_primitives-3.2.0/src/signals/indicators/key_reversal.rs +151 -0
- fin_primitives-3.2.0/src/signals/indicators/kicking_pattern.rs +180 -0
- fin_primitives-3.2.0/src/signals/indicators/kst.rs +205 -0
- fin_primitives-3.2.0/src/signals/indicators/kvo.rs +200 -0
- fin_primitives-3.2.0/src/signals/indicators/laguerre.rs +209 -0
- fin_primitives-3.2.0/src/signals/indicators/linear_deviation.rs +187 -0
- fin_primitives-3.2.0/src/signals/indicators/linear_regression_r2.rs +195 -0
- fin_primitives-3.2.0/src/signals/indicators/linear_regression_slope.rs +178 -0
- fin_primitives-3.2.0/src/signals/indicators/linreg_channel.rs +200 -0
- fin_primitives-3.2.0/src/signals/indicators/linreg_forecast.rs +147 -0
- fin_primitives-3.2.0/src/signals/indicators/linreg_slope.rs +186 -0
- fin_primitives-3.2.0/src/signals/indicators/log_return_volatility.rs +190 -0
- fin_primitives-3.2.0/src/signals/indicators/low_close_ratio.rs +153 -0
- fin_primitives-3.2.0/src/signals/indicators/low_minus_prev_close.rs +175 -0
- fin_primitives-3.2.0/src/signals/indicators/low_of_period.rs +111 -0
- fin_primitives-3.2.0/src/signals/indicators/low_to_close_ratio.rs +154 -0
- fin_primitives-3.2.0/src/signals/indicators/lower_high_count.rs +90 -0
- fin_primitives-3.2.0/src/signals/indicators/lower_high_streak.rs +130 -0
- fin_primitives-3.2.0/src/signals/indicators/lower_low_count.rs +86 -0
- fin_primitives-3.2.0/src/signals/indicators/lower_low_rate.rs +169 -0
- fin_primitives-3.2.0/src/signals/indicators/lower_shadow_ratio.rs +114 -0
- fin_primitives-3.2.0/src/signals/indicators/lower_tail_ratio.rs +160 -0
- fin_primitives-3.2.0/src/signals/indicators/lower_wick_pct.rs +92 -0
- fin_primitives-3.2.0/src/signals/indicators/lower_wick_ratio.rs +180 -0
- fin_primitives-3.2.0/src/signals/indicators/lsma.rs +167 -0
- fin_primitives-3.2.0/src/signals/indicators/macd.rs +311 -0
- fin_primitives-3.2.0/src/signals/indicators/market_regime.rs +219 -0
- fin_primitives-3.2.0/src/signals/indicators/marubozu_detector.rs +216 -0
- fin_primitives-3.2.0/src/signals/indicators/mass_index.rs +212 -0
- fin_primitives-3.2.0/src/signals/indicators/max_adverse_excursion.rs +147 -0
- fin_primitives-3.2.0/src/signals/indicators/max_drawdown_window.rs +158 -0
- fin_primitives-3.2.0/src/signals/indicators/max_drawup_window.rs +170 -0
- fin_primitives-3.2.0/src/signals/indicators/max_favorable_excursion.rs +154 -0
- fin_primitives-3.2.0/src/signals/indicators/mcginley.rs +163 -0
- fin_primitives-3.2.0/src/signals/indicators/mean_reversion_score.rs +108 -0
- fin_primitives-3.2.0/src/signals/indicators/median_body_size.rs +170 -0
- fin_primitives-3.2.0/src/signals/indicators/median_close_dev.rs +135 -0
- fin_primitives-3.2.0/src/signals/indicators/median_high_low.rs +183 -0
- fin_primitives-3.2.0/src/signals/indicators/median_price.rs +153 -0
- fin_primitives-3.2.0/src/signals/indicators/median_price_ma.rs +137 -0
- fin_primitives-3.2.0/src/signals/indicators/median_return_deviation.rs +203 -0
- fin_primitives-3.2.0/src/signals/indicators/median_volume.rs +141 -0
- fin_primitives-3.2.0/src/signals/indicators/mesa_adaptive_ma.rs +303 -0
- fin_primitives-3.2.0/src/signals/indicators/mfi.rs +195 -0
- fin_primitives-3.2.0/src/signals/indicators/midpoint_oscillator.rs +114 -0
- fin_primitives-3.2.0/src/signals/indicators/mod.rs +1530 -0
- fin_primitives-3.2.0/src/signals/indicators/momentum.rs +141 -0
- fin_primitives-3.2.0/src/signals/indicators/momentum_consistency.rs +101 -0
- fin_primitives-3.2.0/src/signals/indicators/momentum_divergence.rs +211 -0
- fin_primitives-3.2.0/src/signals/indicators/momentum_oscillator.rs +200 -0
- fin_primitives-3.2.0/src/signals/indicators/momentum_quality.rs +163 -0
- fin_primitives-3.2.0/src/signals/indicators/momentum_regime.rs +176 -0
- fin_primitives-3.2.0/src/signals/indicators/momentum_reversal.rs +95 -0
- fin_primitives-3.2.0/src/signals/indicators/momentum_streak.rs +153 -0
- fin_primitives-3.2.0/src/signals/indicators/morning_star.rs +204 -0
- fin_primitives-3.2.0/src/signals/indicators/narrow_range_bar.rs +143 -0
- fin_primitives-3.2.0/src/signals/indicators/natr.rs +177 -0
- fin_primitives-3.2.0/src/signals/indicators/negative_volume_index.rs +149 -0
- fin_primitives-3.2.0/src/signals/indicators/net_bar_bias.rs +169 -0
- fin_primitives-3.2.0/src/signals/indicators/net_body_accumulation.rs +166 -0
- fin_primitives-3.2.0/src/signals/indicators/net_buying_pressure.rs +170 -0
- fin_primitives-3.2.0/src/signals/indicators/net_high_low_count.rs +165 -0
- fin_primitives-3.2.0/src/signals/indicators/net_volume.rs +157 -0
- fin_primitives-3.2.0/src/signals/indicators/new_high_pct.rs +164 -0
- fin_primitives-3.2.0/src/signals/indicators/new_high_streak.rs +162 -0
- fin_primitives-3.2.0/src/signals/indicators/new_low_pct.rs +158 -0
- fin_primitives-3.2.0/src/signals/indicators/normalized_atr.rs +173 -0
- fin_primitives-3.2.0/src/signals/indicators/normalized_momentum.rs +172 -0
- fin_primitives-3.2.0/src/signals/indicators/normalized_price.rs +171 -0
- fin_primitives-3.2.0/src/signals/indicators/normalized_volume.rs +176 -0
- fin_primitives-3.2.0/src/signals/indicators/nvi.rs +155 -0
- fin_primitives-3.2.0/src/signals/indicators/obv.rs +140 -0
- fin_primitives-3.2.0/src/signals/indicators/obv_momentum.rs +178 -0
- fin_primitives-3.2.0/src/signals/indicators/ohlc_spread.rs +132 -0
- fin_primitives-3.2.0/src/signals/indicators/on_balance_volume_ma.rs +164 -0
- fin_primitives-3.2.0/src/signals/indicators/open_above_prev_close.rs +177 -0
- fin_primitives-3.2.0/src/signals/indicators/open_close_balance.rs +201 -0
- fin_primitives-3.2.0/src/signals/indicators/open_close_gap.rs +178 -0
- fin_primitives-3.2.0/src/signals/indicators/open_close_momentum.rs +163 -0
- fin_primitives-3.2.0/src/signals/indicators/open_close_pressure.rs +203 -0
- fin_primitives-3.2.0/src/signals/indicators/open_close_ratio.rs +88 -0
- fin_primitives-3.2.0/src/signals/indicators/open_close_spread.rs +153 -0
- fin_primitives-3.2.0/src/signals/indicators/open_close_symmetry.rs +90 -0
- fin_primitives-3.2.0/src/signals/indicators/open_close_velocity.rs +177 -0
- fin_primitives-3.2.0/src/signals/indicators/open_drive.rs +120 -0
- fin_primitives-3.2.0/src/signals/indicators/open_gap_direction.rs +123 -0
- fin_primitives-3.2.0/src/signals/indicators/open_gap_pct.rs +124 -0
- fin_primitives-3.2.0/src/signals/indicators/open_gap_size.rs +92 -0
- fin_primitives-3.2.0/src/signals/indicators/open_high_low_close_avg.rs +85 -0
- fin_primitives-3.2.0/src/signals/indicators/open_high_ratio.rs +124 -0
- fin_primitives-3.2.0/src/signals/indicators/open_interest_proxy.rs +184 -0
- fin_primitives-3.2.0/src/signals/indicators/open_low_range.rs +84 -0
- fin_primitives-3.2.0/src/signals/indicators/open_midpoint_bias.rs +174 -0
- fin_primitives-3.2.0/src/signals/indicators/open_midpoint_deviation.rs +119 -0
- fin_primitives-3.2.0/src/signals/indicators/open_range_position.rs +173 -0
- fin_primitives-3.2.0/src/signals/indicators/open_range_ratio.rs +160 -0
- fin_primitives-3.2.0/src/signals/indicators/open_range_strength.rs +192 -0
- fin_primitives-3.2.0/src/signals/indicators/open_to_close_ratio.rs +147 -0
- fin_primitives-3.2.0/src/signals/indicators/open_to_close_return.rs +85 -0
- fin_primitives-3.2.0/src/signals/indicators/open_to_high_ratio.rs +88 -0
- fin_primitives-3.2.0/src/signals/indicators/open_to_low_range.rs +166 -0
- fin_primitives-3.2.0/src/signals/indicators/open_vs_prev_close.rs +147 -0
- fin_primitives-3.2.0/src/signals/indicators/outside_bar_count.rs +161 -0
- fin_primitives-3.2.0/src/signals/indicators/overnight_return.rs +123 -0
- fin_primitives-3.2.0/src/signals/indicators/parkinson_volatility.rs +191 -0
- fin_primitives-3.2.0/src/signals/indicators/payoff_ratio.rs +193 -0
- fin_primitives-3.2.0/src/signals/indicators/percent_rank.rs +155 -0
- fin_primitives-3.2.0/src/signals/indicators/percent_rank_range.rs +176 -0
- fin_primitives-3.2.0/src/signals/indicators/pfe.rs +185 -0
- fin_primitives-3.2.0/src/signals/indicators/pgo.rs +148 -0
- fin_primitives-3.2.0/src/signals/indicators/piercing_line.rs +168 -0
- fin_primitives-3.2.0/src/signals/indicators/pivot_distance.rs +167 -0
- fin_primitives-3.2.0/src/signals/indicators/pivot_point.rs +138 -0
- fin_primitives-3.2.0/src/signals/indicators/pivot_range_width.rs +167 -0
- fin_primitives-3.2.0/src/signals/indicators/pivot_strength.rs +209 -0
- fin_primitives-3.2.0/src/signals/indicators/pivots.rs +172 -0
- fin_primitives-3.2.0/src/signals/indicators/pmo.rs +282 -0
- fin_primitives-3.2.0/src/signals/indicators/positive_volume_index.rs +150 -0
- fin_primitives-3.2.0/src/signals/indicators/ppo.rs +166 -0
- fin_primitives-3.2.0/src/signals/indicators/prev_high_breakout.rs +172 -0
- fin_primitives-3.2.0/src/signals/indicators/price_above_ma.rs +160 -0
- fin_primitives-3.2.0/src/signals/indicators/price_above_ma_pct.rs +158 -0
- fin_primitives-3.2.0/src/signals/indicators/price_above_rolling_high.rs +135 -0
- fin_primitives-3.2.0/src/signals/indicators/price_acceleration.rs +173 -0
- fin_primitives-3.2.0/src/signals/indicators/price_action_index.rs +173 -0
- fin_primitives-3.2.0/src/signals/indicators/price_bandwidth.rs +151 -0
- fin_primitives-3.2.0/src/signals/indicators/price_change_count.rs +92 -0
- fin_primitives-3.2.0/src/signals/indicators/price_change_mad.rs +201 -0
- fin_primitives-3.2.0/src/signals/indicators/price_change_pct.rs +118 -0
- fin_primitives-3.2.0/src/signals/indicators/price_channel.rs +176 -0
- fin_primitives-3.2.0/src/signals/indicators/price_channel_position.rs +88 -0
- fin_primitives-3.2.0/src/signals/indicators/price_channel_width.rs +187 -0
- fin_primitives-3.2.0/src/signals/indicators/price_compression.rs +151 -0
- fin_primitives-3.2.0/src/signals/indicators/price_compression_breakout.rs +192 -0
- fin_primitives-3.2.0/src/signals/indicators/price_compression_index.rs +190 -0
- fin_primitives-3.2.0/src/signals/indicators/price_compression_ratio.rs +98 -0
- fin_primitives-3.2.0/src/signals/indicators/price_compression_streak.rs +169 -0
- fin_primitives-3.2.0/src/signals/indicators/price_density.rs +201 -0
- fin_primitives-3.2.0/src/signals/indicators/price_distance_ma.rs +151 -0
- fin_primitives-3.2.0/src/signals/indicators/price_efficiency_ratio.rs +90 -0
- fin_primitives-3.2.0/src/signals/indicators/price_entropy.rs +155 -0
- fin_primitives-3.2.0/src/signals/indicators/price_entropy_score.rs +114 -0
- fin_primitives-3.2.0/src/signals/indicators/price_envelope.rs +148 -0
- fin_primitives-3.2.0/src/signals/indicators/price_excursion.rs +126 -0
- fin_primitives-3.2.0/src/signals/indicators/price_gap.rs +154 -0
- fin_primitives-3.2.0/src/signals/indicators/price_gap_frequency.rs +159 -0
- fin_primitives-3.2.0/src/signals/indicators/price_gap_momentum.rs +175 -0
- fin_primitives-3.2.0/src/signals/indicators/price_gravity.rs +174 -0
- fin_primitives-3.2.0/src/signals/indicators/price_impulse.rs +154 -0
- fin_primitives-3.2.0/src/signals/indicators/price_intensity.rs +167 -0
- fin_primitives-3.2.0/src/signals/indicators/price_level_oscillator.rs +186 -0
- fin_primitives-3.2.0/src/signals/indicators/price_level_pct.rs +155 -0
- fin_primitives-3.2.0/src/signals/indicators/price_mean_deviation.rs +93 -0
- fin_primitives-3.2.0/src/signals/indicators/price_momentum_oscillator.rs +98 -0
- fin_primitives-3.2.0/src/signals/indicators/price_momentum_rank.rs +194 -0
- fin_primitives-3.2.0/src/signals/indicators/price_oscillator.rs +162 -0
- fin_primitives-3.2.0/src/signals/indicators/price_oscillator2.rs +163 -0
- fin_primitives-3.2.0/src/signals/indicators/price_oscillator_pct.rs +103 -0
- fin_primitives-3.2.0/src/signals/indicators/price_oscillator_sign.rs +108 -0
- fin_primitives-3.2.0/src/signals/indicators/price_path_efficiency.rs +180 -0
- fin_primitives-3.2.0/src/signals/indicators/price_position.rs +168 -0
- fin_primitives-3.2.0/src/signals/indicators/price_position_rank.rs +100 -0
- fin_primitives-3.2.0/src/signals/indicators/price_range_expansion.rs +90 -0
- fin_primitives-3.2.0/src/signals/indicators/price_range_momentum.rs +188 -0
- fin_primitives-3.2.0/src/signals/indicators/price_range_oscillator.rs +200 -0
- fin_primitives-3.2.0/src/signals/indicators/price_range_pct.rs +122 -0
- fin_primitives-3.2.0/src/signals/indicators/price_range_rank.rs +159 -0
- fin_primitives-3.2.0/src/signals/indicators/price_relative_strength.rs +121 -0
- fin_primitives-3.2.0/src/signals/indicators/price_return_skew.rs +190 -0
- fin_primitives-3.2.0/src/signals/indicators/price_reversal.rs +167 -0
- fin_primitives-3.2.0/src/signals/indicators/price_reversal_index.rs +165 -0
- fin_primitives-3.2.0/src/signals/indicators/price_reversal_strength.rs +141 -0
- fin_primitives-3.2.0/src/signals/indicators/price_spread_ratio.rs +176 -0
- fin_primitives-3.2.0/src/signals/indicators/price_symmetry.rs +129 -0
- fin_primitives-3.2.0/src/signals/indicators/price_to_sma_ratio.rs +135 -0
- fin_primitives-3.2.0/src/signals/indicators/price_trend_quality.rs +167 -0
- fin_primitives-3.2.0/src/signals/indicators/price_velocity.rs +94 -0
- fin_primitives-3.2.0/src/signals/indicators/price_velocity_ratio.rs +186 -0
- fin_primitives-3.2.0/src/signals/indicators/price_velocity_score.rs +134 -0
- fin_primitives-3.2.0/src/signals/indicators/price_volatility_ratio.rs +195 -0
- fin_primitives-3.2.0/src/signals/indicators/price_volume_ratio.rs +169 -0
- fin_primitives-3.2.0/src/signals/indicators/price_zscore.rs +160 -0
- fin_primitives-3.2.0/src/signals/indicators/profit_factor.rs +179 -0
- fin_primitives-3.2.0/src/signals/indicators/psar.rs +223 -0
- fin_primitives-3.2.0/src/signals/indicators/psychological_line.rs +165 -0
- fin_primitives-3.2.0/src/signals/indicators/pvo.rs +184 -0
- fin_primitives-3.2.0/src/signals/indicators/qqe.rs +257 -0
- fin_primitives-3.2.0/src/signals/indicators/range_breakout_count.rs +160 -0
- fin_primitives-3.2.0/src/signals/indicators/range_compression_ratio.rs +158 -0
- fin_primitives-3.2.0/src/signals/indicators/range_contraction_count.rs +122 -0
- fin_primitives-3.2.0/src/signals/indicators/range_contraction_index.rs +171 -0
- fin_primitives-3.2.0/src/signals/indicators/range_efficiency.rs +178 -0
- fin_primitives-3.2.0/src/signals/indicators/range_expansion_count.rs +160 -0
- fin_primitives-3.2.0/src/signals/indicators/range_expansion_index.rs +99 -0
- fin_primitives-3.2.0/src/signals/indicators/range_expansion_rate.rs +191 -0
- fin_primitives-3.2.0/src/signals/indicators/range_filter.rs +179 -0
- fin_primitives-3.2.0/src/signals/indicators/range_midpoint_position.rs +183 -0
- fin_primitives-3.2.0/src/signals/indicators/range_momentum.rs +113 -0
- fin_primitives-3.2.0/src/signals/indicators/range_pct_of_close.rs +107 -0
- fin_primitives-3.2.0/src/signals/indicators/range_percentile.rs +152 -0
- fin_primitives-3.2.0/src/signals/indicators/range_persistence.rs +93 -0
- fin_primitives-3.2.0/src/signals/indicators/range_position_oscillator.rs +194 -0
- fin_primitives-3.2.0/src/signals/indicators/range_pressure_index.rs +210 -0
- fin_primitives-3.2.0/src/signals/indicators/range_ratio.rs +171 -0
- fin_primitives-3.2.0/src/signals/indicators/range_return_ratio.rs +103 -0
- fin_primitives-3.2.0/src/signals/indicators/range_to_atr_ratio.rs +166 -0
- fin_primitives-3.2.0/src/signals/indicators/range_trend_slope.rs +186 -0
- fin_primitives-3.2.0/src/signals/indicators/range_volatility_ratio.rs +195 -0
- fin_primitives-3.2.0/src/signals/indicators/range_z_score.rs +103 -0
- fin_primitives-3.2.0/src/signals/indicators/rate_of_change_pct.rs +160 -0
- fin_primitives-3.2.0/src/signals/indicators/regime_volatility.rs +191 -0
- fin_primitives-3.2.0/src/signals/indicators/relative_bar_range.rs +204 -0
- fin_primitives-3.2.0/src/signals/indicators/relative_close.rs +107 -0
- fin_primitives-3.2.0/src/signals/indicators/relative_range_rank.rs +154 -0
- fin_primitives-3.2.0/src/signals/indicators/relative_volatility.rs +131 -0
- fin_primitives-3.2.0/src/signals/indicators/relative_volume_rank.rs +150 -0
- fin_primitives-3.2.0/src/signals/indicators/relative_volume_score.rs +145 -0
- fin_primitives-3.2.0/src/signals/indicators/return_above_zero_pct.rs +141 -0
- fin_primitives-3.2.0/src/signals/indicators/return_autocorrelation.rs +126 -0
- fin_primitives-3.2.0/src/signals/indicators/return_concentration.rs +181 -0
- fin_primitives-3.2.0/src/signals/indicators/return_consistency.rs +186 -0
- fin_primitives-3.2.0/src/signals/indicators/return_dispersion.rs +112 -0
- fin_primitives-3.2.0/src/signals/indicators/return_iqr.rs +183 -0
- fin_primitives-3.2.0/src/signals/indicators/return_kurtosis.rs +179 -0
- fin_primitives-3.2.0/src/signals/indicators/return_mean_deviation.rs +168 -0
- fin_primitives-3.2.0/src/signals/indicators/return_over_volatility.rs +172 -0
- fin_primitives-3.2.0/src/signals/indicators/return_percent_rank.rs +205 -0
- fin_primitives-3.2.0/src/signals/indicators/return_persistence.rs +158 -0
- fin_primitives-3.2.0/src/signals/indicators/return_sign_changes.rs +153 -0
- fin_primitives-3.2.0/src/signals/indicators/return_sign_sum.rs +89 -0
- fin_primitives-3.2.0/src/signals/indicators/rmi.rs +229 -0
- fin_primitives-3.2.0/src/signals/indicators/roc.rs +147 -0
- fin_primitives-3.2.0/src/signals/indicators/roc_acceleration.rs +189 -0
- fin_primitives-3.2.0/src/signals/indicators/roc_ratio.rs +164 -0
- fin_primitives-3.2.0/src/signals/indicators/rogers_satchell_volatility.rs +190 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_beta.rs +196 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_correlation.rs +183 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_high_low_position.rs +200 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_high_low_ratio.rs +151 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_kurtosis.rs +178 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_low_break.rs +177 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_mad.rs +159 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_max_dd.rs +145 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_max_drawdown.rs +99 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_max_return.rs +138 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_min_return.rs +124 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_open_bias.rs +167 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_return_kurtosis.rs +105 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_shadow_balance.rs +174 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_skew_returns.rs +160 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_skewness.rs +102 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_volume_cv.rs +173 -0
- fin_primitives-3.2.0/src/signals/indicators/rolling_vwap.rs +109 -0
- fin_primitives-3.2.0/src/signals/indicators/rsi.rs +354 -0
- fin_primitives-3.2.0/src/signals/indicators/rsi_divergence.rs +191 -0
- fin_primitives-3.2.0/src/signals/indicators/rsi_ma.rs +197 -0
- fin_primitives-3.2.0/src/signals/indicators/rsi_slope.rs +236 -0
- fin_primitives-3.2.0/src/signals/indicators/rsi_stochastic.rs +216 -0
- fin_primitives-3.2.0/src/signals/indicators/rsx.rs +198 -0
- fin_primitives-3.2.0/src/signals/indicators/rvi.rs +184 -0
- fin_primitives-3.2.0/src/signals/indicators/rwi.rs +201 -0
- fin_primitives-3.2.0/src/signals/indicators/session_range_pct.rs +156 -0
- fin_primitives-3.2.0/src/signals/indicators/shadow_imbalance.rs +118 -0
- fin_primitives-3.2.0/src/signals/indicators/shadow_pressure.rs +162 -0
- fin_primitives-3.2.0/src/signals/indicators/shadow_ratio.rs +98 -0
- fin_primitives-3.2.0/src/signals/indicators/sharpe_ratio.rs +191 -0
- fin_primitives-3.2.0/src/signals/indicators/signed_body_ratio.rs +192 -0
- fin_primitives-3.2.0/src/signals/indicators/signed_gap_sum.rs +149 -0
- fin_primitives-3.2.0/src/signals/indicators/slope_oscillator.rs +197 -0
- fin_primitives-3.2.0/src/signals/indicators/sma.rs +225 -0
- fin_primitives-3.2.0/src/signals/indicators/sma_distance_pct.rs +194 -0
- fin_primitives-3.2.0/src/signals/indicators/smi.rs +218 -0
- fin_primitives-3.2.0/src/signals/indicators/smma.rs +164 -0
- fin_primitives-3.2.0/src/signals/indicators/smoothed_rsi.rs +233 -0
- fin_primitives-3.2.0/src/signals/indicators/sortino_ratio.rs +198 -0
- fin_primitives-3.2.0/src/signals/indicators/spinning_top.rs +199 -0
- fin_primitives-3.2.0/src/signals/indicators/stc.rs +235 -0
- fin_primitives-3.2.0/src/signals/indicators/std_dev_channel.rs +171 -0
- fin_primitives-3.2.0/src/signals/indicators/stddev.rs +160 -0
- fin_primitives-3.2.0/src/signals/indicators/stiffness.rs +168 -0
- fin_primitives-3.2.0/src/signals/indicators/stoch_rsi.rs +228 -0
- fin_primitives-3.2.0/src/signals/indicators/stoch_rsi_smoothed.rs +188 -0
- fin_primitives-3.2.0/src/signals/indicators/stochastic.rs +207 -0
- fin_primitives-3.2.0/src/signals/indicators/stochastic_d.rs +174 -0
- fin_primitives-3.2.0/src/signals/indicators/stochastic_position.rs +168 -0
- fin_primitives-3.2.0/src/signals/indicators/supertrend.rs +239 -0
- fin_primitives-3.2.0/src/signals/indicators/support_resistance_distance.rs +182 -0
- fin_primitives-3.2.0/src/signals/indicators/support_test_count.rs +86 -0
- fin_primitives-3.2.0/src/signals/indicators/swing_index.rs +201 -0
- fin_primitives-3.2.0/src/signals/indicators/swing_point_detector.rs +188 -0
- fin_primitives-3.2.0/src/signals/indicators/swma.rs +160 -0
- fin_primitives-3.2.0/src/signals/indicators/t3.rs +202 -0
- fin_primitives-3.2.0/src/signals/indicators/tail_asymmetry.rs +177 -0
- fin_primitives-3.2.0/src/signals/indicators/tail_ratio.rs +93 -0
- fin_primitives-3.2.0/src/signals/indicators/tail_ratio_pct.rs +131 -0
- fin_primitives-3.2.0/src/signals/indicators/td_sequential.rs +205 -0
- fin_primitives-3.2.0/src/signals/indicators/tema.rs +281 -0
- fin_primitives-3.2.0/src/signals/indicators/three_bar_pattern.rs +153 -0
- fin_primitives-3.2.0/src/signals/indicators/three_black_crows.rs +203 -0
- fin_primitives-3.2.0/src/signals/indicators/three_white_soldiers.rs +204 -0
- fin_primitives-3.2.0/src/signals/indicators/tick_move_ratio.rs +169 -0
- fin_primitives-3.2.0/src/signals/indicators/tii.rs +170 -0
- fin_primitives-3.2.0/src/signals/indicators/trend_acceleration.rs +189 -0
- fin_primitives-3.2.0/src/signals/indicators/trend_age.rs +152 -0
- fin_primitives-3.2.0/src/signals/indicators/trend_angle.rs +170 -0
- fin_primitives-3.2.0/src/signals/indicators/trend_bias_index.rs +187 -0
- fin_primitives-3.2.0/src/signals/indicators/trend_consistency.rs +193 -0
- fin_primitives-3.2.0/src/signals/indicators/trend_consistency_score.rs +95 -0
- fin_primitives-3.2.0/src/signals/indicators/trend_exhaustion.rs +162 -0
- fin_primitives-3.2.0/src/signals/indicators/trend_following_filter.rs +199 -0
- fin_primitives-3.2.0/src/signals/indicators/trend_magic.rs +256 -0
- fin_primitives-3.2.0/src/signals/indicators/trend_persistence.rs +200 -0
- fin_primitives-3.2.0/src/signals/indicators/trend_purity.rs +161 -0
- fin_primitives-3.2.0/src/signals/indicators/trend_score.rs +168 -0
- fin_primitives-3.2.0/src/signals/indicators/trend_slope_ratio.rs +180 -0
- fin_primitives-3.2.0/src/signals/indicators/trend_strength.rs +163 -0
- fin_primitives-3.2.0/src/signals/indicators/trend_strength_index.rs +184 -0
- fin_primitives-3.2.0/src/signals/indicators/trend_volatility_ratio.rs +161 -0
- fin_primitives-3.2.0/src/signals/indicators/trima.rs +154 -0
- fin_primitives-3.2.0/src/signals/indicators/trix.rs +191 -0
- fin_primitives-3.2.0/src/signals/indicators/true_range_ema.rs +155 -0
- fin_primitives-3.2.0/src/signals/indicators/true_range_expansion.rs +182 -0
- fin_primitives-3.2.0/src/signals/indicators/true_range_percentile.rs +91 -0
- fin_primitives-3.2.0/src/signals/indicators/true_range_ratio.rs +159 -0
- fin_primitives-3.2.0/src/signals/indicators/true_range_zscore.rs +197 -0
- fin_primitives-3.2.0/src/signals/indicators/true_strength_index.rs +138 -0
- fin_primitives-3.2.0/src/signals/indicators/tsi.rs +257 -0
- fin_primitives-3.2.0/src/signals/indicators/ttm_squeeze.rs +239 -0
- fin_primitives-3.2.0/src/signals/indicators/tweezer_bottom.rs +171 -0
- fin_primitives-3.2.0/src/signals/indicators/tweezer_top.rs +172 -0
- fin_primitives-3.2.0/src/signals/indicators/typical_price.rs +145 -0
- fin_primitives-3.2.0/src/signals/indicators/typical_price_deviation.rs +94 -0
- fin_primitives-3.2.0/src/signals/indicators/typical_price_roc.rs +168 -0
- fin_primitives-3.2.0/src/signals/indicators/ulcer_index.rs +154 -0
- fin_primitives-3.2.0/src/signals/indicators/ultimate.rs +214 -0
- fin_primitives-3.2.0/src/signals/indicators/up_bar_ratio.rs +139 -0
- fin_primitives-3.2.0/src/signals/indicators/up_close_streak.rs +180 -0
- fin_primitives-3.2.0/src/signals/indicators/up_down_volume_ratio.rs +144 -0
- fin_primitives-3.2.0/src/signals/indicators/up_momentum_pct.rs +167 -0
- fin_primitives-3.2.0/src/signals/indicators/up_volume_fraction.rs +107 -0
- fin_primitives-3.2.0/src/signals/indicators/up_volume_ratio.rs +93 -0
- fin_primitives-3.2.0/src/signals/indicators/upper_shadow_ratio.rs +114 -0
- fin_primitives-3.2.0/src/signals/indicators/upper_tail_ratio.rs +161 -0
- fin_primitives-3.2.0/src/signals/indicators/upper_to_lower_wick.rs +144 -0
- fin_primitives-3.2.0/src/signals/indicators/upper_wick_pct.rs +92 -0
- fin_primitives-3.2.0/src/signals/indicators/upper_wick_ratio.rs +165 -0
- fin_primitives-3.2.0/src/signals/indicators/upper_wick_streak.rs +174 -0
- fin_primitives-3.2.0/src/signals/indicators/usm.rs +215 -0
- fin_primitives-3.2.0/src/signals/indicators/value_at_risk5.rs +155 -0
- fin_primitives-3.2.0/src/signals/indicators/vam.rs +175 -0
- fin_primitives-3.2.0/src/signals/indicators/variance_ratio.rs +220 -0
- fin_primitives-3.2.0/src/signals/indicators/velocity_ratio.rs +172 -0
- fin_primitives-3.2.0/src/signals/indicators/vhf.rs +139 -0
- fin_primitives-3.2.0/src/signals/indicators/vidya.rs +162 -0
- fin_primitives-3.2.0/src/signals/indicators/vix_fix.rs +161 -0
- fin_primitives-3.2.0/src/signals/indicators/vol_normalized_return.rs +203 -0
- fin_primitives-3.2.0/src/signals/indicators/volatility_adjusted_momentum.rs +123 -0
- fin_primitives-3.2.0/src/signals/indicators/volatility_adjusted_range.rs +175 -0
- fin_primitives-3.2.0/src/signals/indicators/volatility_bands.rs +196 -0
- fin_primitives-3.2.0/src/signals/indicators/volatility_bias.rs +196 -0
- fin_primitives-3.2.0/src/signals/indicators/volatility_break.rs +212 -0
- fin_primitives-3.2.0/src/signals/indicators/volatility_compression.rs +172 -0
- fin_primitives-3.2.0/src/signals/indicators/volatility_momentum.rs +168 -0
- fin_primitives-3.2.0/src/signals/indicators/volatility_of_volatility.rs +207 -0
- fin_primitives-3.2.0/src/signals/indicators/volatility_percentile.rs +138 -0
- fin_primitives-3.2.0/src/signals/indicators/volatility_ratio.rs +174 -0
- fin_primitives-3.2.0/src/signals/indicators/volatility_regime_detector.rs +120 -0
- fin_primitives-3.2.0/src/signals/indicators/volatility_skew.rs +217 -0
- fin_primitives-3.2.0/src/signals/indicators/volatility_spike.rs +100 -0
- fin_primitives-3.2.0/src/signals/indicators/volatility_stop.rs +267 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_acceleration.rs +138 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_acceleration_index.rs +184 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_accumulation.rs +97 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_at_close.rs +180 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_breadth.rs +162 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_breakout_score.rs +172 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_climax_ratio.rs +181 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_consistency.rs +179 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_cv.rs +165 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_delta_ema.rs +193 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_delta_oscillator.rs +98 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_delta_ratio.rs +175 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_density.rs +141 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_deviation.rs +151 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_direction_ratio.rs +109 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_energy.rs +132 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_exhaustion.rs +137 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_flow_ratio.rs +207 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_imbalance.rs +166 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_momentum.rs +192 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_momentum_divergence.rs +101 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_momentum_index.rs +184 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_momentum_oscillator.rs +192 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_momentum_ratio.rs +180 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_open_bias.rs +161 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_oscillator.rs +107 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_per_range.rs +108 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_pressure_ratio.rs +187 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_price_corr.rs +166 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_price_correlation.rs +202 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_price_efficiency.rs +180 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_price_impact.rs +92 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_price_rank.rs +168 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_price_trend.rs +152 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_rate_of_change.rs +84 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_ratio_signal.rs +143 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_ratio_trend.rs +165 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_return_corr.rs +211 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_return_correlation.rs +202 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_rsi.rs +194 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_spike.rs +163 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_spike_ratio.rs +93 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_spike_score.rs +88 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_streak_count.rs +92 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_surge.rs +144 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_surge2.rs +144 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_surge_detector.rs +165 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_swing.rs +187 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_to_range_ratio.rs +88 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_trend.rs +153 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_trend_index.rs +154 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_trend_slope.rs +105 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_trend_strength.rs +181 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_up_down_ratio.rs +152 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_weighted_atr.rs +196 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_weighted_close.rs +95 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_weighted_hl.rs +196 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_weighted_momentum.rs +90 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_weighted_range.rs +161 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_weighted_return.rs +201 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_weighted_rsi.rs +187 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_weighted_std_dev.rs +166 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_weighted_volatility.rs +192 -0
- fin_primitives-3.2.0/src/signals/indicators/volume_zscore.rs +214 -0
- fin_primitives-3.2.0/src/signals/indicators/vortex.rs +196 -0
- fin_primitives-3.2.0/src/signals/indicators/vpt.rs +159 -0
- fin_primitives-3.2.0/src/signals/indicators/vroc.rs +172 -0
- fin_primitives-3.2.0/src/signals/indicators/vw_momentum.rs +169 -0
- fin_primitives-3.2.0/src/signals/indicators/vwap.rs +155 -0
- fin_primitives-3.2.0/src/signals/indicators/vwma.rs +173 -0
- fin_primitives-3.2.0/src/signals/indicators/vzo.rs +184 -0
- fin_primitives-3.2.0/src/signals/indicators/weighted_close.rs +145 -0
- fin_primitives-3.2.0/src/signals/indicators/weighted_close_roc.rs +168 -0
- fin_primitives-3.2.0/src/signals/indicators/weighted_close_volatility.rs +93 -0
- fin_primitives-3.2.0/src/signals/indicators/weighted_momentum.rs +155 -0
- fin_primitives-3.2.0/src/signals/indicators/wick_asymmetry_streak.rs +170 -0
- fin_primitives-3.2.0/src/signals/indicators/wick_imbalance.rs +196 -0
- fin_primitives-3.2.0/src/signals/indicators/wick_ratio.rs +166 -0
- fin_primitives-3.2.0/src/signals/indicators/wick_rejection_score.rs +92 -0
- fin_primitives-3.2.0/src/signals/indicators/wick_to_atr_ratio.rs +220 -0
- fin_primitives-3.2.0/src/signals/indicators/wick_to_body_ratio.rs +172 -0
- fin_primitives-3.2.0/src/signals/indicators/wicks_vs_body_ratio.rs +170 -0
- fin_primitives-3.2.0/src/signals/indicators/wilder_smoothed_range.rs +119 -0
- fin_primitives-3.2.0/src/signals/indicators/williams_ad.rs +158 -0
- fin_primitives-3.2.0/src/signals/indicators/williams_fractal.rs +211 -0
- fin_primitives-3.2.0/src/signals/indicators/williams_r.rs +149 -0
- fin_primitives-3.2.0/src/signals/indicators/wma.rs +183 -0
- fin_primitives-3.2.0/src/signals/indicators/yang_zhang_volatility.rs +247 -0
- fin_primitives-3.2.0/src/signals/indicators/zigzag.rs +225 -0
- fin_primitives-3.2.0/src/signals/indicators/zlema.rs +163 -0
- fin_primitives-3.2.0/src/signals/indicators/zscore.rs +193 -0
- fin_primitives-3.2.0/src/signals/mod.rs +1253 -0
- fin_primitives-3.2.0/src/signals/multi_tf.rs +386 -0
- fin_primitives-3.2.0/src/signals/pipeline.rs +1352 -0
- fin_primitives-3.2.0/src/signals/warmup.rs +769 -0
- fin_primitives-3.2.0/src/ta_compat/indicators.rs +1460 -0
- fin_primitives-3.2.0/src/ta_compat/mod.rs +411 -0
- fin_primitives-3.2.0/src/tax/mod.rs +486 -0
- fin_primitives-3.2.0/src/technical/mod.rs +569 -0
- fin_primitives-3.2.0/src/tick/mod.rs +1567 -0
- fin_primitives-3.2.0/src/types/mod.rs +2100 -0
- fin_primitives-3.2.0/src/volatility/garch.rs +493 -0
- fin_primitives-3.2.0/src/volatility/mod.rs +447 -0
- fin_primitives-3.2.0/src/yield_curve/mod.rs +615 -0
- fin_primitives-3.2.0/tests/api_coverage.rs +231 -0
- fin_primitives-3.2.0/tests/book_reconstruction.rs +69 -0
- fin_primitives-3.2.0/tests/core_only.rs +178 -0
- fin_primitives-3.2.0/tests/edge_cases.rs +512 -0
- fin_primitives-3.2.0/tests/float_fast_path.rs +359 -0
- fin_primitives-3.2.0/tests/indicator_accuracy.rs +729 -0
- fin_primitives-3.2.0/tests/ohlcv_scenarios.rs +356 -0
- fin_primitives-3.2.0/tests/orderbook_advanced.rs +612 -0
- fin_primitives-3.2.0/tests/orderbook_stress.rs +268 -0
- fin_primitives-3.2.0/tests/position_lifecycle.rs +233 -0
- fin_primitives-3.2.0/tests/position_risk_integration.rs +395 -0
- fin_primitives-3.2.0/tests/property_math_book.rs +134 -0
- fin_primitives-3.2.0/tests/property_tests.rs +226 -0
- fin_primitives-3.2.0/tests/risk_monitor.rs +123 -0
- fin_primitives-3.2.0/tests/serde_roundtrip.rs +214 -0
- fin_primitives-3.2.0/tests/signal_pipeline.rs +60 -0
- fin_primitives-3.2.0/tests/ta_compat.rs +528 -0
- fin_primitives-3.2.0/tests/talib_reference/gen.py +102 -0
- fin_primitives-3.2.0/tests/talib_reference/mod.rs +42 -0
- fin_primitives-3.2.0/tests/tick_to_ohlcv.rs +69 -0
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [3.2.0] - 2026-11-14
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- **`ta-compat` feature: `fin_primitives::ta_compat`, a drop-in replacement for the
|
|
13
|
+
unmaintained `ta` crate's API.** Same traits (`Next<T>`, `Reset`, `Period`, `Open`,
|
|
14
|
+
`High`, `Low`, `Close`, `Volume`), `DataItem` with the same builder checks,
|
|
15
|
+
`errors::{TaError, Result}`, and the indicator structs with `ta`'s names,
|
|
16
|
+
constructors, output structs, `Default`s and `Display` strings:
|
|
17
|
+
`SimpleMovingAverage`, `ExponentialMovingAverage`, `RelativeStrengthIndex`,
|
|
18
|
+
`MovingAverageConvergenceDivergence`, `PercentagePriceOscillator`, `BollingerBands`,
|
|
19
|
+
`KeltnerChannel`, `AverageTrueRange`, `TrueRange`, `Maximum`, `Minimum`,
|
|
20
|
+
`StandardDeviation`, `MeanAbsoluteDeviation`, `FastStochastic`, `SlowStochastic`,
|
|
21
|
+
`RateOfChange`, `OnBalanceVolume`, `MoneyFlowIndex`, `CommodityChannelIndex`,
|
|
22
|
+
`EfficiencyRatio`, `ChandelierExit`. Migrating is a dependency swap plus
|
|
23
|
+
`use fin_primitives::ta_compat as ta;`. Values follow TA-Lib (Wilder RSI and ATR,
|
|
24
|
+
SMA-seeded EMAs, TA-Lib MACD seeding) and are `NaN` during warm-up; the module docs
|
|
25
|
+
list every place the numbers differ from `ta` and why. `OhlcvBar` and `BarInput`
|
|
26
|
+
implement the input traits; with the `ta` feature also on, so does `ta::DataItem`.
|
|
27
|
+
No new dependencies. Included in `full`.
|
|
28
|
+
- **`f64` fast path, `signals::float`**: native `f64` versions of the main
|
|
29
|
+
indicators, with constructors on the `Decimal` types so float codebases skip the
|
|
30
|
+
`Decimal` round trip: `Sma::new_f64`, `Ema::new_f64` / `Ema::wilder_f64`,
|
|
31
|
+
`Rsi::new_f64`, `Macd::new_f64`, `BollingerB::new_f64` (upper / middle / lower /
|
|
32
|
+
%B), `Atr::new_f64` / `Atr::wilder_f64`, `StdDev::new_f64`, `StochasticK::new_f64`,
|
|
33
|
+
`Roc::new_f64`, `Obv::new_f64`, `Mfi::new_f64`, `Cci::new_f64`,
|
|
34
|
+
`EfficiencyRatio::new_f64`, `Ppo::new_f64`, `RollingMAD::new_f64`. Each runs the same
|
|
35
|
+
algorithm as its `Decimal` twin (`update` returns `None` during warm-up). Also
|
|
36
|
+
`TrueRangeF64`, `MaxF64` / `MinF64` (monotonic deque, NaN skipped), and
|
|
37
|
+
`MacdF64::talib` / `PpoF64::talib` for TA-Lib's MACD seeding and parameter rules.
|
|
38
|
+
- `Atr::wilder` (and `Atr::is_wilder`): Wilder's ATR in exact `Decimal`, matching
|
|
39
|
+
TA-Lib's `ATR`. `Atr::new` is unchanged (simple average of the true range).
|
|
40
|
+
- Tests against TA-Lib 0.8.3: `tests/talib_reference/gen.py` writes TA-Lib's output for
|
|
41
|
+
a fixed 120-bar series into `tests/talib_reference/mod.rs`; `tests/ta_compat.rs` and
|
|
42
|
+
`tests/float_fast_path.rs` check every `ta_compat` indicator, every `f64` type and
|
|
43
|
+
the `Decimal` RSI and Wilder ATR against it (1e-9 relative), every `f64` type against
|
|
44
|
+
its `Decimal` twin, and, with the `ta` feature, the indicators documented as
|
|
45
|
+
unchanged against the `ta` crate itself.
|
|
46
|
+
|
|
47
|
+
## [3.1.0] - 2026-11-14
|
|
48
|
+
|
|
49
|
+
### Added
|
|
50
|
+
- **Python package `fin-primitives`** (PyPI name checked free; built from `python/` with maturin, abi3 wheels for CPython 3.9+). Guide: `docs/python.md`.
|
|
51
|
+
- `Indicator(kind, *params, mode="exact" | "float", **kwargs)` over the whole indicator library: all 743 `Signal` types in `signals::indicators` (every exported indicator; `IchimokuLines` is a value type, not an indicator). The catalogue (`src/python/registry.rs`) is generated from the Rust sources by `python/tools/gen_registry.py`, so new indicators show up by rerunning it. Keys are snake_case type names (`"bollinger_b"`), module names work as aliases (`"bollinger"`, `"psar"`); `catalogue()`, `aliases()`, `resolve()` and `DEFAULTS` (conventional parameters for 26 common indicators) are exported.
|
|
52
|
+
- Exact mode takes `str`, `int`, `float` or `decimal.Decimal` and returns `decimal.Decimal`; float mode returns the nearest float to the same exact value (`float(Decimal)`), so the modes never disagree.
|
|
53
|
+
- Streaming `update(close)` and `update_bar(close, high, low, open, volume)`; `batch(...)` and one-shot `compute()`, `sma`, `ema`, `rsi`, `macd`, `bollinger_b`, `atr` take lists, 1-D numpy arrays, pandas Series or polars Series and return the same type (pandas index kept). numpy, pandas and polars are optional and never imported unless passed in. The float batch path reads float64 buffers and releases the GIL.
|
|
54
|
+
- Batch input checks: a numpy array that is not 1-D raises `ValueError` in both modes (it is never flattened); pandas columns with different indexes raise `ValueError` (columns are paired by position).
|
|
55
|
+
- Exact-mode polars results are checked against the computed values: polars infers one `Decimal(38, scale)` for the whole column and turns values that do not fit into null without an error (28 decimal places in one row, 11 integer digits in another), so such results come back as an `Object` Series of `decimal.Decimal` instead. Nothing is ever replaced by null.
|
|
56
|
+
- A non-zero input that would round to zero in a 28-decimal-place `Decimal` (`1e-30`, `"0.00000000000000000000000000001"`) raises `ValueError` instead of becoming `0`; `"0E-30"` (a zero) is accepted.
|
|
57
|
+
- `catalogue()` returns independent copies; `Indicator` raises a clear `TypeError` on `pickle`, `copy.copy` and `copy.deepcopy` (it holds native state; rebuild it from `key`, `params` and `mode`).
|
|
58
|
+
- The wheels ship the MIT license as `.dist-info/licenses/LICENSE` (`python/LICENSE` is a copy of `LICENSE`; CI checks they match). `.venv` and `.pytest_cache` next to `pyproject.toml` are excluded from wheels and the sdist.
|
|
59
|
+
- Type stubs (`py.typed`, `_fin_primitives.pyi`).
|
|
60
|
+
- Tests (`python/tests`, pytest): RSI, EMA, SMA, MACD, Bollinger %B and ATR match the Rust crate digit for digit on 120 seeded bars (fixture from the new example `indicator_reference`); every catalogue entry is built and run in both modes; numpy / pandas / polars round trips.
|
|
61
|
+
- `.github/workflows/python-wheels.yml`: wheels for Linux x86_64 and aarch64, macOS x86_64 and arm64, Windows x86_64, plus an sdist; tests on CPython 3.13 and on the oldest supported version (3.9 on x86_64; 3.10 on the arm64 runners, where setup-python may have no 3.9 build); checks every wheel contains `LICENSE`; publishes to PyPI with trusted publishing on `py-v*` tags (run it once by hand with workflow_dispatch before pushing the tag).
|
|
62
|
+
- Cargo profile `release-python` (release with `panic = "unwind"`), selected by `python/pyproject.toml`, so a Rust panic inside the extension raises a Python exception instead of aborting the interpreter. Build with plain `maturin build` / `maturin develop`: `--release` selects the aborting `release` profile.
|
|
63
|
+
|
|
64
|
+
### Changed
|
|
65
|
+
- `python` feature: `PyPrice`, `PyQuantity`, `PyOrderBook.apply_delta` and `PySMA`/`PyEMA`/`PyRSI.update` accept `str`, `int`, `float` or `decimal.Decimal` from Python (floats still work); `PyPrice.decimal` and `PyQuantity.decimal` return the exact value. The Rust-side `new(f64)`, `update(f64)` and `apply_delta(.., f64, f64, ..)` methods are unchanged.
|
|
66
|
+
- The extension module is now `fin_primitives._fin_primitives` inside the `fin_primitives` package (it was a top-level `_fin_primitives`, never published). Everything it held is also re-exported from `fin_primitives`.
|
|
67
|
+
## [3.0.0] - Unreleased
|
|
68
|
+
|
|
69
|
+
The default build no longer pulls in a Tokio runtime, every domain module outside the
|
|
70
|
+
core sits behind its own Cargo feature, and `statrs` is gone. With
|
|
71
|
+
`default-features = false` the crate is now the core types, order book, candles and
|
|
72
|
+
the `Signal` trait on top of four dependencies (chrono, rust_decimal, thiserror, libm).
|
|
73
|
+
Measured `cargo check` times are in [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md#feature-flags-and-compile-time).
|
|
74
|
+
|
|
75
|
+
### Migrating from 2.x
|
|
76
|
+
|
|
77
|
+
- **Using `async_signals`?** `async` is no longer a default feature. Add it:
|
|
78
|
+
`fin-primitives = { version = "3", features = ["async"] }` (or `features = ["full"]`).
|
|
79
|
+
- **Using `default-features = false`?** That now means the core only. Add back the
|
|
80
|
+
domains you use, for example `features = ["serde", "indicators", "options"]`. The
|
|
81
|
+
table below maps modules to features.
|
|
82
|
+
- **Default features, no `async_signals`?** Nothing to do for the module layout; check
|
|
83
|
+
the signature changes below.
|
|
84
|
+
- **Signature changes.** Eleven public `assert!`s became errors, so these now return
|
|
85
|
+
`Result<_, FinError>` (`FinError::InvalidInput`) instead of panicking: add a `?`.
|
|
86
|
+
- `clustering::KMeans::fit` (empty data, `k == 0`, `k > data.len()`, and now also
|
|
87
|
+
ragged rows) and `clustering::CorrelationClusterer::cluster`
|
|
88
|
+
- `credit::cds::HazardCurve::from_par_spreads` (length mismatch)
|
|
89
|
+
- `crypto::FundingHistory::new` (`max_size == 0`)
|
|
90
|
+
- `derivatives::swaps::DiscountCurve::new` (length mismatch)
|
|
91
|
+
- `fixed_income::swaps::DiscountCurve::from_par_rates` (length mismatch)
|
|
92
|
+
- `risk::stress_scenarios::portfolio_var_stressed` (vols/weights/correlation sizes)
|
|
93
|
+
- `signals::composite::CompositeBuilder::build` (no constituents)
|
|
94
|
+
- `yield_curve::YieldCurve::forward_rate` (`t2 <= t1` or NaN)
|
|
95
|
+
|
|
96
|
+
### Changed (breaking)
|
|
97
|
+
- `default = ["serde", "indicators", "options", "portfolio", "risk", "fixed-income",
|
|
98
|
+
"derivatives", "crypto", "credit", "ml", "backtest", "tax", "yield-curve",
|
|
99
|
+
"clustering", "montecarlo"]`: everything except `async`. New alias `full` adds `async`.
|
|
100
|
+
- Module features (all default on):
|
|
101
|
+
|
|
102
|
+
| feature | modules |
|
|
103
|
+
|---|---|
|
|
104
|
+
| `indicators` | `signals::indicators`, `technical`, `regime`, `correlation`, `volatility` |
|
|
105
|
+
| `options` | `greeks`, `options` |
|
|
106
|
+
| `portfolio` | `portfolio`, `position`, `pnl`, `attribution`, `factor`, `rebalancing`, `performance` |
|
|
107
|
+
| `risk` (implies `portfolio`) | `risk`, `scenario`, `cross_asset`, `liquidity` |
|
|
108
|
+
| `backtest` (implies `portfolio`) | `backtest`, `execution`, `execution_cost`, `impact`, `latency`, `microstructure` |
|
|
109
|
+
| `ml` | `ml`, `ml_features`, `alternative_data`, `pairs_trading`, `events` |
|
|
110
|
+
| `crypto` | `crypto`, `funding`, `arbitrage` |
|
|
111
|
+
| `fixed-income`, `yield-curve`, `derivatives`, `credit`, `tax`, `clustering`, `montecarlo` | the module of the same name |
|
|
112
|
+
|
|
113
|
+
Always compiled: `types`, `tick`, `orderbook`, `ohlcv`, `signals` (the `Signal` trait,
|
|
114
|
+
`BarInput`, `SignalValue`, pipeline, composition and warm-up tools), `normal`,
|
|
115
|
+
`interop`, `error`.
|
|
116
|
+
- `python` now turns on `indicators` (the bindings expose SMA, EMA and RSI).
|
|
117
|
+
- docs.rs builds with `full`.
|
|
118
|
+
|
|
119
|
+
### Removed
|
|
120
|
+
- `statrs` dependency (and with it `approx`; `num-traits` and `arrayvec` stay, via chrono and rust_decimal).
|
|
121
|
+
`normal::inv_cdf` is now Wichura's AS 241 (`PPND16`), about 1e-16 relative error.
|
|
122
|
+
New tests: mpmath quantiles down to p = 1e-300, `|inv_cdf(cdf(x)) - x| < 1e-12` for
|
|
123
|
+
x in [-37, 3] in steps of 0.01, and odd symmetry.
|
|
124
|
+
|
|
125
|
+
### Fixed
|
|
126
|
+
- `backtest::Backtester` no longer contains an `unreachable!()`; library code outside
|
|
127
|
+
tests now has no `assert!`, `panic!` or `unreachable!`.
|
|
128
|
+
|
|
129
|
+
### Added
|
|
130
|
+
- `tests/core_only.rs`: Price/Quantity validation, the order book (sequence gaps,
|
|
131
|
+
crossed-book rollback, VWAP), ticks to OHLCV and a user-defined `Signal`, run with
|
|
132
|
+
`cargo test --no-default-features --test core_only`.
|
|
133
|
+
- Examples and integration tests declare `required-features`, and tests and doc
|
|
134
|
+
examples that use the indicator library are gated on `indicators`, so
|
|
135
|
+
`cargo test --no-default-features` builds and passes (532 unit, 105 integration,
|
|
136
|
+
30 doc tests).
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## [2.15.2] - 2026-10-21
|
|
141
|
+
|
|
142
|
+
### Changed
|
|
143
|
+
- Version bump only, published to crates.io from a tree whose `src/` is byte-identical
|
|
144
|
+
to 2.15.1. The bump was not committed at the time; this entry records it. No code
|
|
145
|
+
changes.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## [2.15.1] - 2026-10-17
|
|
150
|
+
|
|
151
|
+
### Changed
|
|
152
|
+
- `repository` now points at GitHub (GitLab stays as the mirror). README: CI and MSRV badges. No code changes.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## [2.15.0] - 2026-10-03
|
|
157
|
+
|
|
158
|
+
### Fixed
|
|
159
|
+
- **Normal distribution.** Nine copies of the Abramowitz-Stegun polynomial CDF (relative error 0.16% at x = -5 and 7% at x = -8; two copies returned exactly 0 below -8) and two probit approximations (error about 4e-4) are replaced by one `normal` module: `cdf` from `libm::erfc` (about 1e-15 relative error, tails included) and `inv_cdf` from `statrs`. A deep out-of-the-money put (S=100, K=60, 30% vol, 3 months) priced 0.00091894 before and 0.00092008 now (reference 0.000920079805, mpmath).
|
|
160
|
+
- `VarEngine::parametric_var` looked z up in a three-row table: 97.5% used 1.645 (true 1.960), 99.9% used 2.326 (3.090), 85% used 1.40 (1.036). It now uses the exact quantile. It also scaled the daily mean by `sqrt(h)` instead of `h` over an `h`-day horizon; fixed for VaR and expected shortfall.
|
|
161
|
+
- `LiquidityRiskEngine::portfolio_liquidity_var` used 1.645 for everything below 99%; now the exact quantile.
|
|
162
|
+
- `options::greeks::implied_vol` stopped at an absolute 1e-8 price error, which is coarse for options worth fractions of a cent. It is now a safeguarded Newton solver (Newton steps inside a shrinking bisection bracket): 6 times faster (1.22 us to 0.19 us) and exact to a 1e-12 vol step.
|
|
163
|
+
- `Timeframe::bucket_start` rounded timestamps before 1970 toward zero (into the wrong bucket); weekly bars started on Thursday (the epoch's weekday) and now start Monday 00:00 UTC; `Weeks(u32::MAX)` overflowed silently and is now `InvalidTimeframe`.
|
|
164
|
+
- `OhlcvAggregator::push_tick`: a tick older than the open bar closed that bar early and opened a bar back in time. Late ticks are now dropped and counted (`late_tick_count()`).
|
|
165
|
+
- `CusumPriceChange` never reset at zero crossings as documented (the check compared the new sum with itself).
|
|
166
|
+
- Deserializing `Price`, `Quantity` and `Symbol` skipped validation (a JSON `"-5"` became a negative `Price`). Deserialization now goes through `new`; the wire format is unchanged.
|
|
167
|
+
- `python` feature: did not compile (missing docs under `deny(missing_docs)`), `pyproject.toml` pointed maturin at a module folder that does not exist, and `PyPrice(0.1)` stored `0.1000000000000000055...`. All fixed; a smoke test builds the wheel and imports it.
|
|
168
|
+
- 252 `unwrap`/`expect` calls in library code are gone: invariant checks now return `FinError` (and `total_cmp` replaces `partial_cmp().unwrap()` where NaN input used to panic).
|
|
169
|
+
- The crate no longer forces `crate-type = ["cdylib"]` on every dependent (each one used to link an unused `fin_primitives.dll`/`.so`); maturin builds the extension itself.
|
|
170
|
+
|
|
171
|
+
### Added
|
|
172
|
+
- `normal` module: `cdf`, `pdf`, `inv_cdf`.
|
|
173
|
+
- Interop features, all off by default: `ta` (bars implement ta's `Open/High/Low/Close/Volume`, `BarInput::try_from(&ta::DataItem)`), `yata` (bars implement `yata::core::OHLCV`, `BarInput::try_from(&yata::core::Candle)`), `wickra` (`wickra_core::Candle` to and from bars), and `arrow` (`arrow::bars_to_record_batch` / `record_batch_to_bars` with exact `Decimal128` columns). New example: `with_ta`.
|
|
174
|
+
- `serde` and `async` cargo features (both on by default, so nothing changes unless you opt out). With `default-features = false` the crate builds without serde and tokio, and for `wasm32-unknown-unknown`.
|
|
175
|
+
- `TryFrom<Decimal>` for `Price` and `Quantity`, `From<Price>`/`From<Quantity>` for `Decimal`, `PartialEq` for `BarInput`.
|
|
176
|
+
- Example `value_at_risk`; property tests for the normal functions, implied vol, bucket alignment, the order book (never crossed under random deltas) and bar aggregation (ordered, volume conserved with late ticks).
|
|
177
|
+
- `bench/competitors`: criterion benchmarks and an agreement check against `ta`, `yata` and `black_scholes` on the same 100,000 closes. Honest result: the f64 crates are 40 to 160 times faster per indicator update; values agree to 1e-12 except `ta`'s RSI, which uses a different smoothing.
|
|
178
|
+
|
|
179
|
+
### Changed
|
|
180
|
+
- `Sma` keeps a running sum: 2 times faster, same values.
|
|
181
|
+
- `thiserror` 2, `pyo3` 0.29 (cargo-audit flagged RUSTSEC-2025-0020 and RUSTSEC-2026-0177 on 0.23), `rust_decimal` and `chrono` without default features. `rust_decimal_macros` is now only a dev-dependency.
|
|
182
|
+
- Clippy: the `pedantic` group is off (over 1,000 style warnings); the `unwrap_used`, `expect_used` and `panic` lints stay on, and `cargo clippy --all-targets -- -D warnings` is clean.
|
|
183
|
+
- CI runs clippy, docs with warnings denied, every feature combination, wasm32, MSRV 1.81, the Python wheel and the README code blocks.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## [2.14.3] - 2026-09-30
|
|
188
|
+
|
|
189
|
+
### Fixed
|
|
190
|
+
- All 5,541 unit tests pass (18 failed in 2.14.2) and CI now runs `cargo test --lib` and the integration tests. Real bugs found along the way:
|
|
191
|
+
- `CorrelationClusterer::silhouette_score` returned NaN when a point had no other populated cluster; singleton points now score 0 (Rousseeuw's definition).
|
|
192
|
+
- `EventStudy::significance` left the event-day abnormal return out of each event's CAR; it now uses the full-window CAR.
|
|
193
|
+
- `DiscountCurve::from_par_rates` did not reprice its own input swaps when tenors had gaps (e.g. 3y then 5y): it now bootstraps each knot against the annual coupon schedule with the curve's own interpolation, so every input par swap has zero NPV.
|
|
194
|
+
- `VaRCalculator::cornish_fisher_var` had the skewness term with the wrong sign, so negative skew lowered VaR instead of raising it (a fat left tail could give 0 VaR).
|
|
195
|
+
- `Aroon::down()` broke ties toward the oldest low while `up()` used the newest high, so Aroon Down read 0 instead of 100 when the newest bar tied the window's oldest low. Found by the TA-Lib comparison below.
|
|
196
|
+
- 13 tests had wrong expectations and were corrected, not loosened: tolerance boundary (documented as inclusive), collinear factors in a regression test, ATM delta (N(0.35) = 0.637, not 0.5), a contradictory ADF assertion, sample vs population variance, Brinson-Fachler vs BHB totals (equal when weights sum to 1), Sharpe compared at two different risk-free rates, HMM emission likelihoods, Calmar with no drawdown, exact-zero volatility in floating point, a multi-timeframe test that fed a flat bar, and the duration of a single cash flow.
|
|
197
|
+
|
|
198
|
+
### Added
|
|
199
|
+
- `bench/talib_compare/`: a reproducible comparison with TA-Lib on 100,000 seeded bars (22 indicators): numerical agreement, definitional differences and per-bar throughput. Summary in the README under "Compared with TA-Lib".
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## [2.14.2] - 2026-09-28
|
|
204
|
+
|
|
205
|
+
### Changed
|
|
206
|
+
- README cut from 85 KB to under 10 KB: install, animated "how it works" diagrams (ticks to bars to indicators, and a risk check), real example output, a 3-step first program. The module guides and API reference moved, unchanged, to `docs/REFERENCE.md`, `docs/ARCHITECTURE.md` and `docs/TESTING.md`.
|
|
207
|
+
- docs.rs front page shows the ticks-to-bars diagram. No code changes.
|
|
208
|
+
- Project site: How it works section, search title and description, canonical URL, Open Graph and Twitter cards, JSON-LD.
|
|
209
|
+
- Repaired garbled characters in older CHANGELOG entries.
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## [2.14.1] - 2026-09-25
|
|
214
|
+
|
|
215
|
+
### Changed
|
|
216
|
+
- README and docs.rs front page lead with a one-sentence summary, a recorded demo GIF, an install table and a 3-step first program whose output is shown.
|
|
217
|
+
- Install line now adds `rust_decimal` too: the `dec!` macro does not compile without it.
|
|
218
|
+
- Package metadata: clearer description, keywords, categories and homepage.
|
|
219
|
+
|
|
220
|
+
### Fixed
|
|
221
|
+
- The library builds without compiler warnings (unused imports and variables removed, dead code in `CompositeSignal` Any mode dropped). No API changes.
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## [2.13.0] - 2026-03-21
|
|
226
|
+
|
|
227
|
+
### Added
|
|
228
|
+
- `AvgUpReturn`: rolling mean of close-to-close returns on up bars only: typical gain magnitude per winning bar.
|
|
229
|
+
- `AvgDownReturn`: rolling mean of close-to-close returns on down bars only: typical loss magnitude per losing bar (negative).
|
|
230
|
+
- `TailAsymmetry`: EMA of `(high - close) / (close - low)`: upper shadow vs lower shadow ratio; > 1 = bearish close position, < 1 = bullish.
|
|
231
|
+
- `PrevHighBreakout`: rolling fraction of bars where `high > prev_high`: frequency of upside breakout attempts.
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## [2.12.0] - 2026-03-21
|
|
236
|
+
|
|
237
|
+
### Added
|
|
238
|
+
- `CloseInRangePct`: rolling mean of `(close - low) / range * 100`: intrabar close bias on a 0-100 scale.
|
|
239
|
+
- `GapDirectionStreak`: streak of consecutive same-direction opening gaps: detects persistent overnight momentum.
|
|
240
|
+
- `VolumeCv`: rolling coefficient of variation of volume `std(vol) / mean(vol)`: measures volume erraticism.
|
|
241
|
+
- `BodyToWickRatio`: rolling mean of `body / total_wicks`: directional commitment vs rejection ratio.
|
|
242
|
+
- `GapVolatility`, `UpperWickStreak`, `SignedBodyRatio`, `VolumeDeltaEma`: previously registered in round-108 hook commit; tests all passing.
|
|
243
|
+
- `CloseMinusPrevHigh`, `HighMinusPrevClose`, `HigherTimeframeTrend`, `PriceSpreadRatio`, `VolumePriceTrend`, `OnBalanceVolumeMA`, `CloseToMidrange`, `LowMinusPrevClose`, `CloseAbovePrevLow`, `CloseSessionBias`: previously untracked files now committed (703+ indicators).
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## [2.11.0] - 2026-03-21
|
|
248
|
+
|
|
249
|
+
### Added
|
|
250
|
+
- `CloseLocationEma`: EMA of the Close Location Value `(2*close - high - low) / range`: smoothed buy/sell pressure position.
|
|
251
|
+
- `HighLowPersistence`: rolling fraction of inside bars (bar range fully within prior bar): range compression detector.
|
|
252
|
+
- `RangeContractionIndex`: `current_range / min_range_in_window`: how far above the recent tightest range the market currently is.
|
|
253
|
+
- `OpenCloseBalance`: rolling `sum(close-open) / sum(|close-open|)`: directional body balance from -1 (bearish) to +1 (bullish).
|
|
254
|
+
- `PriceGapMomentum`, `CloseAboveOpenStreak`, `SwingPointDetector`, `VolumeSurgeDetector`, `CandleMomentumScore`, `ConsecutiveHigherHighs`, `RangePercentile`, `TrendExhaustion`, `PriceReversalIndex`: previously untracked files now registered (673+ indicators).
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## [2.10.0] - 2026-03-21
|
|
259
|
+
|
|
260
|
+
### Added
|
|
261
|
+
- `HlMidpointDeviation`: EMA of `(close - bar_midpoint) / range`: measures persistent close bias above/below the bar midpoint.
|
|
262
|
+
- `TrendBiasIndex`: `mean(ret) / MAD(ret)`: signal-to-noise ratio for returns; high = trending, near 0 = choppy.
|
|
263
|
+
- `BodyCenterPosition`: EMA of body-centre position within the bar's range; near 1 = bullish commitment, near 0 = bearish.
|
|
264
|
+
- `PriceChangeMad`: rolling mean absolute deviation of raw close-to-close price changes in price units.
|
|
265
|
+
- `GapContinuationRatio`: rolling fraction of bars where the opening gap direction aligns with the intraday session direction.
|
|
266
|
+
- `BodyTrendStrength`, `DirectionalCandleRatio`, `KickingPattern`, `MomentumRegime`, `PriceActionIndex`, `RelativeRangeRank`, `ReturnConcentration`, `ShadowPressure`, `VolatilityAdjustedRange`, `VolumeTrendStrength`, `RangeToAtrRatio`, `TickMoveRatio`: previously untracked files now registered.
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## [2.8.0] - 2026-03-20
|
|
271
|
+
|
|
272
|
+
### Added
|
|
273
|
+
- `OpenCloseVelocity`: rolling mean of `close - open` per bar: measures average intrabar directional conviction.
|
|
274
|
+
- `BarRangePercentile`: interpolated percentile rank of current bar range within the window.
|
|
275
|
+
- `VolumeMomentumRatio`: fast average volume / slow average volume: detects participation acceleration.
|
|
276
|
+
- `PriceReturnSkew`: rolling skewness of close-to-close returns: identifies tail risk asymmetry.
|
|
277
|
+
- `BarQualityScore`, `ThreeBlackCrows`, `ThreeWhiteSoldiers`, `TweezerBottom`, `TweezerTop`: previously untracked files now registered.
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## [2.7.0] - 2026-03-20
|
|
282
|
+
|
|
283
|
+
### Added
|
|
284
|
+
- `BodyAcceleration`: average change in body size per bar: detects momentum building or fading.
|
|
285
|
+
- `HighLowSqueeze`: current range / max range in window * 100: measures compression toward breakout.
|
|
286
|
+
- `VolumeConsistency`: fraction of bars where volume increased vs prior bar: detects accumulation/distribution.
|
|
287
|
+
- `ReturnConsistency`: fraction of individual bar returns consistent with the N-period net direction: trend quality metric.
|
|
288
|
+
- `HighLowRatioMa`, `IntrabarMomentum`: previously untracked files now registered.
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## [2.6.0] - 2026-03-20
|
|
293
|
+
|
|
294
|
+
### Added
|
|
295
|
+
- `RangeVolatilityRatio`: current bar range / rolling average range: measures single-bar volatility expansion/compression.
|
|
296
|
+
- `TrendStrengthIndex`: net displacement / total path * 100: measures directional efficiency (100 = straight trend, 0 = pure chop).
|
|
297
|
+
- `VolumePriceRank`: percentile rank of `volume * |close - open|`: identifies high-conviction moves vs volume-without-price-action.
|
|
298
|
+
- `PriceVolatilityRatio`: current return / rolling std dev of prior returns: a forward-looking return surprise metric.
|
|
299
|
+
- `MarubozuDetector`: committed (was untracked); fixed test with wrong bar wicks.
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## [2.5.0] - 2026-03-20
|
|
304
|
+
|
|
305
|
+
### Added
|
|
306
|
+
- `CalmarRatio`: rolling cumulative return / max drawdown ratio.
|
|
307
|
+
- `RollingBeta`: serial autocorrelation beta (lagged OLS) for detecting momentum vs mean-reversion regimes.
|
|
308
|
+
- `OpenCloseGap`: rolling mean of percent gap between previous close and current open: measures overnight drift bias.
|
|
309
|
+
- `VolumeWeightedVolatility`: standard deviation of returns weighted by each bar's volume share.
|
|
310
|
+
- `VolumeZScore`: rolling z-score of volume (previously untracked, now registered).
|
|
311
|
+
- `BodyVolumeRatio`, `GapBodyRatio`: previously untracked files now committed.
|
|
312
|
+
- `Evwma` (Elastic Volume-Weighted MA), `FractalDimensionIndex`, `GarmanKlassVolatility`, `ParkinsonVolatility`, `RogersSatchellVolatility`, `YangZhangVolatility`: previously untracked files now registered and committed.
|
|
313
|
+
- Fixed `FractalDimensionIndex` test using price `0` (invalid): changed to start from 1.
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## [2.4.0] - 2026-03-20
|
|
318
|
+
|
|
319
|
+
### Added
|
|
320
|
+
- `SharpeRatio`: rolling mean return / std dev of returns over `period` bars.
|
|
321
|
+
- `SortinoRatio`: rolling mean return / downside deviation (negative returns only) over `period` bars.
|
|
322
|
+
- `MaxFavorableExcursion`: rolling max % rally from the window's trough to any subsequent close: complement to `MaxAdverseExcursion`.
|
|
323
|
+
- `PercentRankRange`: percentile rank of the current bar's range (`high - low`) within the rolling `period`-bar range window.
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## [1.1.0] - 2026-03-18
|
|
328
|
+
|
|
329
|
+
### Added
|
|
330
|
+
- `[profile.release]`: `opt-level = 3`, `lto = "thin"`, `codegen-units = 1`,
|
|
331
|
+
`strip = "debuginfo"`, `panic = "abort"` for maximum release performance.
|
|
332
|
+
- `[profile.bench]`: dedicated bench profile with `lto = "thin"`.
|
|
333
|
+
- `[lints.clippy]`: crate-level lint configuration (`unwrap_used`, `expect_used`,
|
|
334
|
+
`panic`, `todo` as `warn`; full `pedantic` group enabled; common false-positive
|
|
335
|
+
pedantic lints explicitly `allow`ed).
|
|
336
|
+
- `rust-version = "1.75"` declared in `Cargo.toml` (MSRV).
|
|
337
|
+
- `include` field in `Cargo.toml` to control published crate contents.
|
|
338
|
+
- CI `bench` job split into its own dedicated job (compile + `--sample-size 10` run).
|
|
339
|
+
- README: complete rewrite with mathematical definitions for all indicators and
|
|
340
|
+
types, OHLCV invariant table, precision/accuracy notes, full API reference with
|
|
341
|
+
examples for every module, and custom `Signal`/`RiskRule` implementation guides.
|
|
342
|
+
|
|
343
|
+
### Changed
|
|
344
|
+
- Version bumped to `1.1.0`.
|
|
345
|
+
- CI `bench` step promoted from the `test` job to a dedicated `bench` job.
|
|
346
|
+
- README restructured with "What Is Included" table, mathematical definitions
|
|
347
|
+
section, full API reference, and precision/accuracy section.
|
|
348
|
+
- Production-readiness pass: doc comments, error handling, CI, tests, and README reviewed.
|
|
349
|
+
All existing tests continue to pass (341 total across unit, integration, and property suites).
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
### Added (originally [Unreleased])
|
|
354
|
+
- **RSI implementation**: `src/signals/indicators/rsi.rs` fully implemented with Wilder
|
|
355
|
+
smoothing. Seed phase uses SMA over `period` changes; subsequent bars apply Wilder
|
|
356
|
+
smoothing. Returns `Unavailable` until `period + 1` bars; value always in `[0, 100]`.
|
|
357
|
+
- **Safety attributes**: `#![forbid(unsafe_code)]` and `#![deny(missing_docs)]` added to
|
|
358
|
+
`lib.rs`: enforced at compile time.
|
|
359
|
+
- **CI `bench` job**: runs `cargo bench -- --sample-size 10` on every push/PR so
|
|
360
|
+
benchmark compilation is always validated.
|
|
361
|
+
- **Release workflow**: `.github/workflows/release.yml` triggers on `v*.*.*` tags,
|
|
362
|
+
validates (fmt/clippy/test/doc), verifies Cargo.toml version matches the tag,
|
|
363
|
+
publishes to crates.io, and creates a GitHub release with changelog notes.
|
|
364
|
+
|
|
365
|
+
## [1.0.0] - 2026-03-18
|
|
366
|
+
|
|
367
|
+
### Added
|
|
368
|
+
- `deny.toml` with license allow-list (MIT, Apache-2.0, ISC, Unicode-DFS-2016, BSD-2-Clause, BSD-3-Clause).
|
|
369
|
+
- CI test matrix extended to include Windows and macOS runners.
|
|
370
|
+
- `cargo-deny` check step added to CI.
|
|
371
|
+
- All public items verified to carry `///` doc comments; every `Result`-returning function documents a `# Errors` section.
|
|
372
|
+
|
|
373
|
+
### Changed
|
|
374
|
+
- Version bumped to `1.0.0` (stable public API).
|
|
375
|
+
- CI test job expanded to a matrix of `ubuntu-latest`, `windows-latest`, and `macos-latest`.
|
|
376
|
+
|
|
377
|
+
## [0.2.0] - 2026-03-17
|
|
378
|
+
|
|
379
|
+
### Added
|
|
380
|
+
- **Tests**: partial fill sequence tests for `vwap_for_qty` (single-level fill, multi-level sweep, exact exhaustion, insufficient liquidity error)
|
|
381
|
+
- **Tests**: order cancellation (cancel best bid, cancel non-best level, cancel all levels, re-book after cancel)
|
|
382
|
+
- **Tests**: book reconstruction from a sequential delta stream (snapshot followed by incremental updates)
|
|
383
|
+
- **Tests**: RSI overbought (>= 70) and oversold (<= 30) boundary assertions
|
|
384
|
+
- **Tests**: SMA, EMA, RSI with single data point (period 1) and all-same price values
|
|
385
|
+
- **Tests**: average-cost basis across two and three buys at different prices
|
|
386
|
+
- **Tests**: short position unrealized PnL (profit when price falls, loss when price rises)
|
|
387
|
+
- **Tests**: flat -> long -> flat -> short lifecycle, and direct long-to-short flip in one oversized fill
|
|
388
|
+
- **Tests**: SMA/EMA convergence rate (both converge to a stable price after 20 identical bars)
|
|
389
|
+
- **Tests**: `MaxDrawdownRule` and `MinEquityRule` exact-boundary assertions (at threshold = no breach; one unit over = breach)
|
|
390
|
+
- **Tests**: two-rule scenario where only one fires (equity between the two thresholds)
|
|
391
|
+
- **Tests**: three-rule scenario where all fire simultaneously
|
|
392
|
+
- **Property tests**: price arithmetic closure (sum of two positive prices is always positive)
|
|
393
|
+
- **Property tests**: OHLCV ordering invariant (H >= max(O,C) >= min(O,C) >= L for any valid bar)
|
|
394
|
+
- **Property tests**: position quantity non-negative after an arbitrary sequence of buy-only fills
|
|
395
|
+
- **CI**: `cargo test --release` step to verify numeric correctness at optimisation level
|
|
396
|
+
- **CI**: `PROPTEST_CASES=1000` environment variable for increased property test coverage
|
|
397
|
+
- **CI**: `cargo audit` security vulnerability scan
|
|
398
|
+
- **CI**: separate jobs for `rustfmt`, `clippy`, `test`, `doc`, and `coverage` (cargo-tarpaulin + Codecov upload)
|
|
399
|
+
- **Cargo.toml**: `description`, `authors`, `repository`, `documentation`, `readme`, `license`, `keywords`, `categories` metadata fields
|
|
400
|
+
|
|
401
|
+
### Changed
|
|
402
|
+
- Version bumped to `0.2.0`
|
|
403
|
+
- README expanded with code examples for price arithmetic, order book operations, and position tracking; performance characteristics; indicator formula notes; integration guide
|
|
404
|
+
|
|
405
|
+
---
|
|
406
|
+
|
|
407
|
+
## [0.1.0] - 2026-03-17
|
|
408
|
+
|
|
409
|
+
### Added
|
|
410
|
+
|
|
411
|
+
- `types` module: validated newtypes `Price`, `Quantity`, `Symbol`, `NanoTimestamp`, `Side`.
|
|
412
|
+
- `Price`: strictly positive `Decimal`; rejects zero and negative values with `FinError::InvalidPrice`.
|
|
413
|
+
- `Quantity`: non-negative `Decimal`; rejects negative values with `FinError::InvalidQuantity`.
|
|
414
|
+
- `Symbol`: non-empty, whitespace-free string with `FinError::InvalidSymbol` on violation.
|
|
415
|
+
- `NanoTimestamp`: nanosecond-resolution UTC epoch integer with `now()` and `to_datetime()`.
|
|
416
|
+
- `Side`: `Bid` / `Ask` market-side enum.
|
|
417
|
+
- `orderbook` module: level-2 order book backed by `BTreeMap`.
|
|
418
|
+
- `apply_delta` with strict sequence-number validation (`FinError::SequenceMismatch`).
|
|
419
|
+
- Inverted-spread guard: deltas that would cross the book are rejected and fully rolled back.
|
|
420
|
+
- `vwap_for_qty`: walks book from best to worst, returns `FinError::InsufficientLiquidity` on shortfall.
|
|
421
|
+
- `best_bid`, `best_ask`, `mid_price`, `spread`, `top_bids(n)`, `top_asks(n)`, `bid_count`, `ask_count`.
|
|
422
|
+
- `tick` module: `Tick`, `TickFilter` (symbol/side/min-quantity predicates ANDed together), `TickReplayer` (timestamp-sorted replay with `reset` and `remaining`).
|
|
423
|
+
- `ohlcv` module: `OhlcvBar` with `validate()`, `typical_price()`, `range()`, `is_bullish()`; `Timeframe` (Seconds/Minutes/Hours/Days) with `to_nanos()` and `bucket_start()`; `OhlcvAggregator` with `push_tick` and `flush`; `OhlcvSeries` with `window`, `closes`, `volumes`.
|
|
424
|
+
- `signals` module: `Signal` trait with `update`, `is_ready`, `period`; `SignalValue` enum (`Scalar` / `Unavailable`).
|
|
425
|
+
- `Sma`: rolling window simple moving average.
|
|
426
|
+
- `Ema`: exponential moving average using SMA seed for first `period` bars, then Wilder multiplier `2/(period+1)`.
|
|
427
|
+
- `Rsi`: Wilder-smoothed RSI; returns `Unavailable` until `period + 1` bars; always in `[0, 100]`.
|
|
428
|
+
- `SignalPipeline`: applies multiple signals per bar and collects results into a `SignalMap`.
|
|
429
|
+
- `position` module: `Fill`, `Position` (average-cost tracking, realized P&L via average-cost method, unrealized P&L, `is_flat`), `PositionLedger` (cash-balanced multi-symbol ledger, `equity` computation).
|
|
430
|
+
- `risk` module: `DrawdownTracker` (peak-tracking, drawdown-percentage), `RiskBreach`, `RiskRule` trait, `MaxDrawdownRule`, `MinEquityRule`, `RiskMonitor` (builder pattern, `update` returns all breaches).
|
|
431
|
+
- `error` module: `FinError` enum with `thiserror`-derived `Display` and structured fields for all failure modes.
|
|
432
|
+
- 242 tests across unit, integration, and property suites.
|
|
433
|
+
- Benchmark harness via Criterion (`benches/tick_bench.rs`).
|
|
434
|
+
|
|
435
|
+
[Unreleased]: https://github.com/Mattbusel/fin-primitives/compare/v1.1.0...HEAD
|
|
436
|
+
[1.1.0]: https://github.com/Mattbusel/fin-primitives/compare/v1.0.0...v1.1.0
|
|
437
|
+
[1.0.0]: https://github.com/Mattbusel/fin-primitives/compare/v0.2.0...v1.0.0
|
|
438
|
+
[0.2.0]: https://github.com/Mattbusel/fin-primitives/compare/v0.1.0...v0.2.0
|
|
439
|
+
[0.1.0]: https://github.com/Mattbusel/fin-primitives/releases/tag/v0.1.0
|