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.
Files changed (897) hide show
  1. fin_primitives-3.2.0/CHANGELOG.md +439 -0
  2. fin_primitives-3.2.0/Cargo.lock +1585 -0
  3. fin_primitives-3.2.0/Cargo.toml +232 -0
  4. fin_primitives-3.2.0/LICENSE +21 -0
  5. fin_primitives-3.2.0/PKG-INFO +227 -0
  6. fin_primitives-3.2.0/README.md +52 -0
  7. fin_primitives-3.2.0/benches/tick_bench.rs +77 -0
  8. fin_primitives-3.2.0/docs/python.md +177 -0
  9. fin_primitives-3.2.0/examples/candles.rs +253 -0
  10. fin_primitives-3.2.0/examples/indicator_reference.rs +93 -0
  11. fin_primitives-3.2.0/examples/option_chain.rs +96 -0
  12. fin_primitives-3.2.0/examples/order_book.rs +217 -0
  13. fin_primitives-3.2.0/examples/position_risk.rs +203 -0
  14. fin_primitives-3.2.0/examples/support/mod.rs +122 -0
  15. fin_primitives-3.2.0/examples/value_at_risk.rs +63 -0
  16. fin_primitives-3.2.0/examples/with_ta.rs +58 -0
  17. fin_primitives-3.2.0/pyproject.toml +74 -0
  18. fin_primitives-3.2.0/python/LICENSE +21 -0
  19. fin_primitives-3.2.0/src/alternative_data/mod.rs +418 -0
  20. fin_primitives-3.2.0/src/arbitrage/mod.rs +472 -0
  21. fin_primitives-3.2.0/src/arrow.rs +257 -0
  22. fin_primitives-3.2.0/src/async_signals.rs +273 -0
  23. fin_primitives-3.2.0/src/attribution.rs +1447 -0
  24. fin_primitives-3.2.0/src/backtest/engine.rs +820 -0
  25. fin_primitives-3.2.0/src/backtest/mod.rs +446 -0
  26. fin_primitives-3.2.0/src/backtest/walk_forward.rs +719 -0
  27. fin_primitives-3.2.0/src/clustering/mod.rs +520 -0
  28. fin_primitives-3.2.0/src/correlation/mod.rs +350 -0
  29. fin_primitives-3.2.0/src/correlation/stats.rs +577 -0
  30. fin_primitives-3.2.0/src/credit/cds.rs +388 -0
  31. fin_primitives-3.2.0/src/credit/mod.rs +10 -0
  32. fin_primitives-3.2.0/src/cross_asset/mod.rs +608 -0
  33. fin_primitives-3.2.0/src/crypto/defi.rs +456 -0
  34. fin_primitives-3.2.0/src/crypto/mod.rs +435 -0
  35. fin_primitives-3.2.0/src/derivatives/credit_default_swap.rs +119 -0
  36. fin_primitives-3.2.0/src/derivatives/exotic_options.rs +562 -0
  37. fin_primitives-3.2.0/src/derivatives/forwards.rs +240 -0
  38. fin_primitives-3.2.0/src/derivatives/futures.rs +268 -0
  39. fin_primitives-3.2.0/src/derivatives/interest_rate_models.rs +220 -0
  40. fin_primitives-3.2.0/src/derivatives/mod.rs +27 -0
  41. fin_primitives-3.2.0/src/derivatives/option_strategies.rs +323 -0
  42. fin_primitives-3.2.0/src/derivatives/swaps.rs +551 -0
  43. fin_primitives-3.2.0/src/derivatives/variance_swap.rs +323 -0
  44. fin_primitives-3.2.0/src/error.rs +127 -0
  45. fin_primitives-3.2.0/src/events/mod.rs +480 -0
  46. fin_primitives-3.2.0/src/execution/mod.rs +449 -0
  47. fin_primitives-3.2.0/src/execution_cost/mod.rs +373 -0
  48. fin_primitives-3.2.0/src/factor/mod.rs +702 -0
  49. fin_primitives-3.2.0/src/fin_primitives/__init__.py +467 -0
  50. fin_primitives-3.2.0/src/fin_primitives/_fin_primitives.pyi +115 -0
  51. fin_primitives-3.2.0/src/fin_primitives/py.typed +0 -0
  52. fin_primitives-3.2.0/src/fixed_income/bond.rs +434 -0
  53. fin_primitives-3.2.0/src/fixed_income/mod.rs +29 -0
  54. fin_primitives-3.2.0/src/fixed_income/mortgage.rs +576 -0
  55. fin_primitives-3.2.0/src/fixed_income/spread_analytics.rs +366 -0
  56. fin_primitives-3.2.0/src/fixed_income/swaps.rs +451 -0
  57. fin_primitives-3.2.0/src/fixed_income/yield_curve.rs +440 -0
  58. fin_primitives-3.2.0/src/funding/mod.rs +357 -0
  59. fin_primitives-3.2.0/src/greeks.rs +1017 -0
  60. fin_primitives-3.2.0/src/impact/mod.rs +333 -0
  61. fin_primitives-3.2.0/src/interop/mod.rs +77 -0
  62. fin_primitives-3.2.0/src/interop/ta.rs +176 -0
  63. fin_primitives-3.2.0/src/interop/wickra.rs +133 -0
  64. fin_primitives-3.2.0/src/interop/yata.rs +128 -0
  65. fin_primitives-3.2.0/src/latency/mod.rs +341 -0
  66. fin_primitives-3.2.0/src/lib.rs +391 -0
  67. fin_primitives-3.2.0/src/liquidity/mod.rs +428 -0
  68. fin_primitives-3.2.0/src/microstructure/mod.rs +1365 -0
  69. fin_primitives-3.2.0/src/microstructure_anomaly_detection.rs +582 -0
  70. fin_primitives-3.2.0/src/ml/mod.rs +346 -0
  71. fin_primitives-3.2.0/src/ml_features/mod.rs +651 -0
  72. fin_primitives-3.2.0/src/montecarlo/mod.rs +476 -0
  73. fin_primitives-3.2.0/src/normal.rs +271 -0
  74. fin_primitives-3.2.0/src/ohlcv/mod.rs +9294 -0
  75. fin_primitives-3.2.0/src/options/greeks.rs +954 -0
  76. fin_primitives-3.2.0/src/options/mod.rs +347 -0
  77. fin_primitives-3.2.0/src/options/surface.rs +429 -0
  78. fin_primitives-3.2.0/src/orderbook/mod.rs +1512 -0
  79. fin_primitives-3.2.0/src/pairs_trading/mod.rs +510 -0
  80. fin_primitives-3.2.0/src/performance/mod.rs +394 -0
  81. fin_primitives-3.2.0/src/pnl/mod.rs +405 -0
  82. fin_primitives-3.2.0/src/portfolio/attribution.rs +304 -0
  83. fin_primitives-3.2.0/src/portfolio/black_litterman.rs +521 -0
  84. fin_primitives-3.2.0/src/portfolio/diversification.rs +383 -0
  85. fin_primitives-3.2.0/src/portfolio/factor_model.rs +479 -0
  86. fin_primitives-3.2.0/src/portfolio/mod.rs +46 -0
  87. fin_primitives-3.2.0/src/portfolio/optimization.rs +399 -0
  88. fin_primitives-3.2.0/src/portfolio/optimizer.rs +787 -0
  89. fin_primitives-3.2.0/src/portfolio/rebalancing.rs +413 -0
  90. fin_primitives-3.2.0/src/portfolio/structured_products.rs +165 -0
  91. fin_primitives-3.2.0/src/position/kelly.rs +342 -0
  92. fin_primitives-3.2.0/src/position/mod.rs +2701 -0
  93. fin_primitives-3.2.0/src/python/args.rs +231 -0
  94. fin_primitives-3.2.0/src/python/indicator.rs +368 -0
  95. fin_primitives-3.2.0/src/python/mod.rs +544 -0
  96. fin_primitives-3.2.0/src/python/registry.rs +7501 -0
  97. fin_primitives-3.2.0/src/rebalancing/mod.rs +408 -0
  98. fin_primitives-3.2.0/src/regime/hmm.rs +397 -0
  99. fin_primitives-3.2.0/src/regime/mod.rs +1277 -0
  100. fin_primitives-3.2.0/src/risk/attribution.rs +981 -0
  101. fin_primitives-3.2.0/src/risk/correlation_matrix.rs +446 -0
  102. fin_primitives-3.2.0/src/risk/credit_risk.rs +222 -0
  103. fin_primitives-3.2.0/src/risk/liquidity_risk.rs +532 -0
  104. fin_primitives-3.2.0/src/risk/mod.rs +2922 -0
  105. fin_primitives-3.2.0/src/risk/scenario_engine.rs +550 -0
  106. fin_primitives-3.2.0/src/risk/stress.rs +418 -0
  107. fin_primitives-3.2.0/src/risk/stress_scenarios.rs +375 -0
  108. fin_primitives-3.2.0/src/risk/var.rs +490 -0
  109. fin_primitives-3.2.0/src/risk/var_engine.rs +339 -0
  110. fin_primitives-3.2.0/src/scenario/mod.rs +560 -0
  111. fin_primitives-3.2.0/src/signals/combine.rs +686 -0
  112. fin_primitives-3.2.0/src/signals/compose.rs +1041 -0
  113. fin_primitives-3.2.0/src/signals/composite.rs +408 -0
  114. fin_primitives-3.2.0/src/signals/entropy.rs +365 -0
  115. fin_primitives-3.2.0/src/signals/float.rs +1485 -0
  116. fin_primitives-3.2.0/src/signals/indicators/abs_return_mean.rs +149 -0
  117. fin_primitives-3.2.0/src/signals/indicators/abs_return_sum.rs +94 -0
  118. fin_primitives-3.2.0/src/signals/indicators/acceleration_bands.rs +250 -0
  119. fin_primitives-3.2.0/src/signals/indicators/adaptive_rsi.rs +230 -0
  120. fin_primitives-3.2.0/src/signals/indicators/adaptive_supertrend.rs +258 -0
  121. fin_primitives-3.2.0/src/signals/indicators/adx.rs +244 -0
  122. fin_primitives-3.2.0/src/signals/indicators/alligator.rs +190 -0
  123. fin_primitives-3.2.0/src/signals/indicators/alma.rs +187 -0
  124. fin_primitives-3.2.0/src/signals/indicators/amplitude_ratio.rs +116 -0
  125. fin_primitives-3.2.0/src/signals/indicators/anchored_vwap.rs +154 -0
  126. fin_primitives-3.2.0/src/signals/indicators/apo.rs +189 -0
  127. fin_primitives-3.2.0/src/signals/indicators/aroon.rs +212 -0
  128. fin_primitives-3.2.0/src/signals/indicators/aroon_oscillator.rs +172 -0
  129. fin_primitives-3.2.0/src/signals/indicators/atr.rs +247 -0
  130. fin_primitives-3.2.0/src/signals/indicators/atr_channel_width.rs +165 -0
  131. fin_primitives-3.2.0/src/signals/indicators/atr_normalized_close.rs +219 -0
  132. fin_primitives-3.2.0/src/signals/indicators/atr_percent.rs +183 -0
  133. fin_primitives-3.2.0/src/signals/indicators/atr_percentile.rs +174 -0
  134. fin_primitives-3.2.0/src/signals/indicators/atr_ratio.rs +152 -0
  135. fin_primitives-3.2.0/src/signals/indicators/atr_stop.rs +186 -0
  136. fin_primitives-3.2.0/src/signals/indicators/atrp.rs +150 -0
  137. fin_primitives-3.2.0/src/signals/indicators/autocorrelation_1.rs +176 -0
  138. fin_primitives-3.2.0/src/signals/indicators/average_bar_range.rs +181 -0
  139. fin_primitives-3.2.0/src/signals/indicators/average_gain.rs +93 -0
  140. fin_primitives-3.2.0/src/signals/indicators/average_gap.rs +204 -0
  141. fin_primitives-3.2.0/src/signals/indicators/average_loss.rs +93 -0
  142. fin_primitives-3.2.0/src/signals/indicators/avg_down_return.rs +171 -0
  143. fin_primitives-3.2.0/src/signals/indicators/avg_true_range_pct.rs +222 -0
  144. fin_primitives-3.2.0/src/signals/indicators/avg_up_return.rs +193 -0
  145. fin_primitives-3.2.0/src/signals/indicators/awesome_oscillator.rs +146 -0
  146. fin_primitives-3.2.0/src/signals/indicators/bar_close_rank.rs +142 -0
  147. fin_primitives-3.2.0/src/signals/indicators/bar_efficiency.rs +90 -0
  148. fin_primitives-3.2.0/src/signals/indicators/bar_follow_through.rs +178 -0
  149. fin_primitives-3.2.0/src/signals/indicators/bar_momentum_index.rs +206 -0
  150. fin_primitives-3.2.0/src/signals/indicators/bar_momentum_score.rs +164 -0
  151. fin_primitives-3.2.0/src/signals/indicators/bar_open_position.rs +126 -0
  152. fin_primitives-3.2.0/src/signals/indicators/bar_overlap_ratio.rs +155 -0
  153. fin_primitives-3.2.0/src/signals/indicators/bar_polarity_ratio.rs +155 -0
  154. fin_primitives-3.2.0/src/signals/indicators/bar_polarity_streak.rs +167 -0
  155. fin_primitives-3.2.0/src/signals/indicators/bar_quality_score.rs +164 -0
  156. fin_primitives-3.2.0/src/signals/indicators/bar_range_consistency.rs +169 -0
  157. fin_primitives-3.2.0/src/signals/indicators/bar_range_expansion_pct.rs +169 -0
  158. fin_primitives-3.2.0/src/signals/indicators/bar_range_percentile.rs +185 -0
  159. fin_primitives-3.2.0/src/signals/indicators/bar_range_std_dev.rs +150 -0
  160. fin_primitives-3.2.0/src/signals/indicators/bar_strength_index.rs +88 -0
  161. fin_primitives-3.2.0/src/signals/indicators/bar_type.rs +128 -0
  162. fin_primitives-3.2.0/src/signals/indicators/bars_since.rs +170 -0
  163. fin_primitives-3.2.0/src/signals/indicators/bearish_bar_ratio.rs +90 -0
  164. fin_primitives-3.2.0/src/signals/indicators/bearish_engulfing.rs +143 -0
  165. fin_primitives-3.2.0/src/signals/indicators/body_acceleration.rs +173 -0
  166. fin_primitives-3.2.0/src/signals/indicators/body_atr_ratio.rs +189 -0
  167. fin_primitives-3.2.0/src/signals/indicators/body_center_position.rs +193 -0
  168. fin_primitives-3.2.0/src/signals/indicators/body_color_streak.rs +189 -0
  169. fin_primitives-3.2.0/src/signals/indicators/body_direction_ratio.rs +157 -0
  170. fin_primitives-3.2.0/src/signals/indicators/body_fill_ratio.rs +148 -0
  171. fin_primitives-3.2.0/src/signals/indicators/body_height_ratio.rs +159 -0
  172. fin_primitives-3.2.0/src/signals/indicators/body_high_ratio.rs +161 -0
  173. fin_primitives-3.2.0/src/signals/indicators/body_momentum.rs +84 -0
  174. fin_primitives-3.2.0/src/signals/indicators/body_position.rs +119 -0
  175. fin_primitives-3.2.0/src/signals/indicators/body_size_rank.rs +176 -0
  176. fin_primitives-3.2.0/src/signals/indicators/body_streak.rs +144 -0
  177. fin_primitives-3.2.0/src/signals/indicators/body_to_range_ema.rs +179 -0
  178. fin_primitives-3.2.0/src/signals/indicators/body_to_range_ratio.rs +88 -0
  179. fin_primitives-3.2.0/src/signals/indicators/body_to_shadow_ratio.rs +120 -0
  180. fin_primitives-3.2.0/src/signals/indicators/body_to_wick_ratio.rs +215 -0
  181. fin_primitives-3.2.0/src/signals/indicators/body_trend_strength.rs +160 -0
  182. fin_primitives-3.2.0/src/signals/indicators/body_volume_ratio.rs +160 -0
  183. fin_primitives-3.2.0/src/signals/indicators/body_width_ratio.rs +168 -0
  184. fin_primitives-3.2.0/src/signals/indicators/bollinger.rs +261 -0
  185. fin_primitives-3.2.0/src/signals/indicators/bollinger_pct_b.rs +196 -0
  186. fin_primitives-3.2.0/src/signals/indicators/bollinger_width.rs +124 -0
  187. fin_primitives-3.2.0/src/signals/indicators/bop.rs +214 -0
  188. fin_primitives-3.2.0/src/signals/indicators/breakout_signal.rs +194 -0
  189. fin_primitives-3.2.0/src/signals/indicators/bull_bear_balance.rs +175 -0
  190. fin_primitives-3.2.0/src/signals/indicators/bull_bear_power.rs +86 -0
  191. fin_primitives-3.2.0/src/signals/indicators/bull_power_bear_power.rs +97 -0
  192. fin_primitives-3.2.0/src/signals/indicators/bullish_engulfing.rs +143 -0
  193. fin_primitives-3.2.0/src/signals/indicators/bw_mfi.rs +126 -0
  194. fin_primitives-3.2.0/src/signals/indicators/calmar_ratio.rs +180 -0
  195. fin_primitives-3.2.0/src/signals/indicators/camarilla.rs +196 -0
  196. fin_primitives-3.2.0/src/signals/indicators/candle_body_size.rs +141 -0
  197. fin_primitives-3.2.0/src/signals/indicators/candle_color.rs +113 -0
  198. fin_primitives-3.2.0/src/signals/indicators/candle_efficiency.rs +160 -0
  199. fin_primitives-3.2.0/src/signals/indicators/candle_momentum.rs +162 -0
  200. fin_primitives-3.2.0/src/signals/indicators/candle_momentum_score.rs +167 -0
  201. fin_primitives-3.2.0/src/signals/indicators/candle_pattern.rs +179 -0
  202. fin_primitives-3.2.0/src/signals/indicators/candle_range_ma.rs +128 -0
  203. fin_primitives-3.2.0/src/signals/indicators/candle_symmetry.rs +93 -0
  204. fin_primitives-3.2.0/src/signals/indicators/cci.rs +208 -0
  205. fin_primitives-3.2.0/src/signals/indicators/chaikin_osc.rs +176 -0
  206. fin_primitives-3.2.0/src/signals/indicators/chaikin_volatility.rs +99 -0
  207. fin_primitives-3.2.0/src/signals/indicators/chande_forecast_osc.rs +176 -0
  208. fin_primitives-3.2.0/src/signals/indicators/chande_kroll.rs +232 -0
  209. fin_primitives-3.2.0/src/signals/indicators/chande_momentum_smoothed.rs +260 -0
  210. fin_primitives-3.2.0/src/signals/indicators/chandelier.rs +178 -0
  211. fin_primitives-3.2.0/src/signals/indicators/change_from_high.rs +143 -0
  212. fin_primitives-3.2.0/src/signals/indicators/choppiness.rs +188 -0
  213. fin_primitives-3.2.0/src/signals/indicators/climax_volume.rs +182 -0
  214. fin_primitives-3.2.0/src/signals/indicators/close_above_ema.rs +159 -0
  215. fin_primitives-3.2.0/src/signals/indicators/close_above_high_prev.rs +124 -0
  216. fin_primitives-3.2.0/src/signals/indicators/close_above_midpoint.rs +139 -0
  217. fin_primitives-3.2.0/src/signals/indicators/close_above_open.rs +185 -0
  218. fin_primitives-3.2.0/src/signals/indicators/close_above_open_streak.rs +134 -0
  219. fin_primitives-3.2.0/src/signals/indicators/close_above_pivot.rs +170 -0
  220. fin_primitives-3.2.0/src/signals/indicators/close_above_prev_close.rs +153 -0
  221. fin_primitives-3.2.0/src/signals/indicators/close_above_prev_close_pct.rs +146 -0
  222. fin_primitives-3.2.0/src/signals/indicators/close_above_prev_high.rs +91 -0
  223. fin_primitives-3.2.0/src/signals/indicators/close_above_prev_low.rs +176 -0
  224. fin_primitives-3.2.0/src/signals/indicators/close_above_prior_close.rs +178 -0
  225. fin_primitives-3.2.0/src/signals/indicators/close_above_sma_streak.rs +164 -0
  226. fin_primitives-3.2.0/src/signals/indicators/close_acceleration.rs +88 -0
  227. fin_primitives-3.2.0/src/signals/indicators/close_acceleration_sign.rs +99 -0
  228. fin_primitives-3.2.0/src/signals/indicators/close_below_low_prev.rs +89 -0
  229. fin_primitives-3.2.0/src/signals/indicators/close_distance_from_ema.rs +102 -0
  230. fin_primitives-3.2.0/src/signals/indicators/close_distance_from_open.rs +194 -0
  231. fin_primitives-3.2.0/src/signals/indicators/close_drawdown_from_high.rs +168 -0
  232. fin_primitives-3.2.0/src/signals/indicators/close_gap_ratio.rs +179 -0
  233. fin_primitives-3.2.0/src/signals/indicators/close_high_frequency.rs +165 -0
  234. fin_primitives-3.2.0/src/signals/indicators/close_high_low_spread.rs +158 -0
  235. fin_primitives-3.2.0/src/signals/indicators/close_in_range_pct.rs +193 -0
  236. fin_primitives-3.2.0/src/signals/indicators/close_location_ema.rs +186 -0
  237. fin_primitives-3.2.0/src/signals/indicators/close_location_value.rs +161 -0
  238. fin_primitives-3.2.0/src/signals/indicators/close_midpoint_diff.rs +115 -0
  239. fin_primitives-3.2.0/src/signals/indicators/close_midpoint_strength.rs +117 -0
  240. fin_primitives-3.2.0/src/signals/indicators/close_minus_open_ma.rs +133 -0
  241. fin_primitives-3.2.0/src/signals/indicators/close_minus_prev_high.rs +176 -0
  242. fin_primitives-3.2.0/src/signals/indicators/close_momentum_rank.rs +188 -0
  243. fin_primitives-3.2.0/src/signals/indicators/close_open_ema.rs +149 -0
  244. fin_primitives-3.2.0/src/signals/indicators/close_open_momentum.rs +185 -0
  245. fin_primitives-3.2.0/src/signals/indicators/close_pct_from_high.rs +88 -0
  246. fin_primitives-3.2.0/src/signals/indicators/close_pct_from_low.rs +88 -0
  247. fin_primitives-3.2.0/src/signals/indicators/close_pct_rank.rs +181 -0
  248. fin_primitives-3.2.0/src/signals/indicators/close_position_in_range.rs +108 -0
  249. fin_primitives-3.2.0/src/signals/indicators/close_range_position.rs +183 -0
  250. fin_primitives-3.2.0/src/signals/indicators/close_rank_momentum.rs +163 -0
  251. fin_primitives-3.2.0/src/signals/indicators/close_relative_to_ema.rs +83 -0
  252. fin_primitives-3.2.0/src/signals/indicators/close_relative_to_range.rs +95 -0
  253. fin_primitives-3.2.0/src/signals/indicators/close_retrace_pct.rs +125 -0
  254. fin_primitives-3.2.0/src/signals/indicators/close_return_acceleration.rs +164 -0
  255. fin_primitives-3.2.0/src/signals/indicators/close_return_z.rs +173 -0
  256. fin_primitives-3.2.0/src/signals/indicators/close_session_bias.rs +176 -0
  257. fin_primitives-3.2.0/src/signals/indicators/close_strength_ratio.rs +193 -0
  258. fin_primitives-3.2.0/src/signals/indicators/close_to_high_ratio.rs +87 -0
  259. fin_primitives-3.2.0/src/signals/indicators/close_to_low_distance.rs +165 -0
  260. fin_primitives-3.2.0/src/signals/indicators/close_to_low_ratio.rs +172 -0
  261. fin_primitives-3.2.0/src/signals/indicators/close_to_mid_range.rs +85 -0
  262. fin_primitives-3.2.0/src/signals/indicators/close_to_midrange.rs +179 -0
  263. fin_primitives-3.2.0/src/signals/indicators/close_to_open.rs +147 -0
  264. fin_primitives-3.2.0/src/signals/indicators/close_to_open_gap.rs +94 -0
  265. fin_primitives-3.2.0/src/signals/indicators/close_to_open_return.rs +159 -0
  266. fin_primitives-3.2.0/src/signals/indicators/close_to_range_top.rs +89 -0
  267. fin_primitives-3.2.0/src/signals/indicators/close_to_vwap_pct.rs +182 -0
  268. fin_primitives-3.2.0/src/signals/indicators/close_vs_open_range.rs +90 -0
  269. fin_primitives-3.2.0/src/signals/indicators/close_vs_prior_high.rs +145 -0
  270. fin_primitives-3.2.0/src/signals/indicators/close_vs_vwap.rs +143 -0
  271. fin_primitives-3.2.0/src/signals/indicators/closing_strength.rs +158 -0
  272. fin_primitives-3.2.0/src/signals/indicators/cmf.rs +184 -0
  273. fin_primitives-3.2.0/src/signals/indicators/cmo.rs +166 -0
  274. fin_primitives-3.2.0/src/signals/indicators/cog.rs +145 -0
  275. fin_primitives-3.2.0/src/signals/indicators/conditional_var5.rs +155 -0
  276. fin_primitives-3.2.0/src/signals/indicators/connors_rsi.rs +313 -0
  277. fin_primitives-3.2.0/src/signals/indicators/consecutive_bars.rs +149 -0
  278. fin_primitives-3.2.0/src/signals/indicators/consecutive_higher_highs.rs +138 -0
  279. fin_primitives-3.2.0/src/signals/indicators/consecutive_new_highs.rs +144 -0
  280. fin_primitives-3.2.0/src/signals/indicators/consecutive_volume_growth.rs +125 -0
  281. fin_primitives-3.2.0/src/signals/indicators/consolidation_score.rs +135 -0
  282. fin_primitives-3.2.0/src/signals/indicators/coppock.rs +165 -0
  283. fin_primitives-3.2.0/src/signals/indicators/coral_trend.rs +222 -0
  284. fin_primitives-3.2.0/src/signals/indicators/ctm.rs +143 -0
  285. fin_primitives-3.2.0/src/signals/indicators/cum_return_momentum.rs +84 -0
  286. fin_primitives-3.2.0/src/signals/indicators/cumulative_body_ratio.rs +169 -0
  287. fin_primitives-3.2.0/src/signals/indicators/cumulative_delta.rs +108 -0
  288. fin_primitives-3.2.0/src/signals/indicators/cumulative_log_return.rs +189 -0
  289. fin_primitives-3.2.0/src/signals/indicators/cumulative_volume.rs +126 -0
  290. fin_primitives-3.2.0/src/signals/indicators/cusum_price_change.rs +209 -0
  291. fin_primitives-3.2.0/src/signals/indicators/cyber_cycle.rs +218 -0
  292. fin_primitives-3.2.0/src/signals/indicators/daily_return_skew.rs +174 -0
  293. fin_primitives-3.2.0/src/signals/indicators/dark_cloud_cover.rs +164 -0
  294. fin_primitives-3.2.0/src/signals/indicators/delta_momentum.rs +173 -0
  295. fin_primitives-3.2.0/src/signals/indicators/delta_volume.rs +137 -0
  296. fin_primitives-3.2.0/src/signals/indicators/dema.rs +264 -0
  297. fin_primitives-3.2.0/src/signals/indicators/dema_cross.rs +250 -0
  298. fin_primitives-3.2.0/src/signals/indicators/dema_ratio.rs +219 -0
  299. fin_primitives-3.2.0/src/signals/indicators/deviation_from_ma.rs +164 -0
  300. fin_primitives-3.2.0/src/signals/indicators/didi_index.rs +225 -0
  301. fin_primitives-3.2.0/src/signals/indicators/direction_changes.rs +171 -0
  302. fin_primitives-3.2.0/src/signals/indicators/directional_candle_ratio.rs +160 -0
  303. fin_primitives-3.2.0/src/signals/indicators/directional_efficiency.rs +177 -0
  304. fin_primitives-3.2.0/src/signals/indicators/disparity.rs +164 -0
  305. fin_primitives-3.2.0/src/signals/indicators/dmi.rs +218 -0
  306. fin_primitives-3.2.0/src/signals/indicators/doji_detector.rs +127 -0
  307. fin_primitives-3.2.0/src/signals/indicators/donchian.rs +136 -0
  308. fin_primitives-3.2.0/src/signals/indicators/donchian_width.rs +87 -0
  309. fin_primitives-3.2.0/src/signals/indicators/downside_deviation.rs +107 -0
  310. fin_primitives-3.2.0/src/signals/indicators/dpo.rs +167 -0
  311. fin_primitives-3.2.0/src/signals/indicators/dsp.rs +192 -0
  312. fin_primitives-3.2.0/src/signals/indicators/dual_atr_ratio.rs +208 -0
  313. fin_primitives-3.2.0/src/signals/indicators/dual_momentum.rs +182 -0
  314. fin_primitives-3.2.0/src/signals/indicators/dual_rsi.rs +205 -0
  315. fin_primitives-3.2.0/src/signals/indicators/dynamic_momentum_index.rs +257 -0
  316. fin_primitives-3.2.0/src/signals/indicators/ease_of_movement.rs +180 -0
  317. fin_primitives-3.2.0/src/signals/indicators/efficiency_ratio.rs +170 -0
  318. fin_primitives-3.2.0/src/signals/indicators/elastic_volume_weighted_ma.rs +216 -0
  319. fin_primitives-3.2.0/src/signals/indicators/elder.rs +160 -0
  320. fin_primitives-3.2.0/src/signals/indicators/elder_impulse.rs +224 -0
  321. fin_primitives-3.2.0/src/signals/indicators/ema.rs +277 -0
  322. fin_primitives-3.2.0/src/signals/indicators/ema_alignment.rs +162 -0
  323. fin_primitives-3.2.0/src/signals/indicators/ema_band_width.rs +174 -0
  324. fin_primitives-3.2.0/src/signals/indicators/ema_convergence.rs +191 -0
  325. fin_primitives-3.2.0/src/signals/indicators/ema_cross.rs +230 -0
  326. fin_primitives-3.2.0/src/signals/indicators/ema_ratio.rs +220 -0
  327. fin_primitives-3.2.0/src/signals/indicators/ema_slope.rs +171 -0
  328. fin_primitives-3.2.0/src/signals/indicators/emv.rs +163 -0
  329. fin_primitives-3.2.0/src/signals/indicators/engulfing_detector.rs +147 -0
  330. fin_primitives-3.2.0/src/signals/indicators/engulfing_pattern.rs +149 -0
  331. fin_primitives-3.2.0/src/signals/indicators/env.rs +188 -0
  332. fin_primitives-3.2.0/src/signals/indicators/evening_star.rs +194 -0
  333. fin_primitives-3.2.0/src/signals/indicators/fair_value_gap.rs +237 -0
  334. fin_primitives-3.2.0/src/signals/indicators/fibonacci_retrace.rs +211 -0
  335. fin_primitives-3.2.0/src/signals/indicators/fisher.rs +210 -0
  336. fin_primitives-3.2.0/src/signals/indicators/flat_bar_pct.rs +149 -0
  337. fin_primitives-3.2.0/src/signals/indicators/force_index.rs +190 -0
  338. fin_primitives-3.2.0/src/signals/indicators/fractal_dimension_index.rs +209 -0
  339. fin_primitives-3.2.0/src/signals/indicators/frama.rs +200 -0
  340. fin_primitives-3.2.0/src/signals/indicators/gann_hilo.rs +169 -0
  341. fin_primitives-3.2.0/src/signals/indicators/gap_body_ratio.rs +191 -0
  342. fin_primitives-3.2.0/src/signals/indicators/gap_continuation_ratio.rs +218 -0
  343. fin_primitives-3.2.0/src/signals/indicators/gap_detector.rs +141 -0
  344. fin_primitives-3.2.0/src/signals/indicators/gap_direction_streak.rs +201 -0
  345. fin_primitives-3.2.0/src/signals/indicators/gap_fill_detector.rs +164 -0
  346. fin_primitives-3.2.0/src/signals/indicators/gap_fill_ratio.rs +125 -0
  347. fin_primitives-3.2.0/src/signals/indicators/gap_momentum.rs +187 -0
  348. fin_primitives-3.2.0/src/signals/indicators/gap_range_ratio.rs +157 -0
  349. fin_primitives-3.2.0/src/signals/indicators/gap_signal.rs +125 -0
  350. fin_primitives-3.2.0/src/signals/indicators/gap_streak.rs +176 -0
  351. fin_primitives-3.2.0/src/signals/indicators/gap_volatility.rs +180 -0
  352. fin_primitives-3.2.0/src/signals/indicators/garman_klass_volatility.rs +184 -0
  353. fin_primitives-3.2.0/src/signals/indicators/golden_cross_signal.rs +177 -0
  354. fin_primitives-3.2.0/src/signals/indicators/half_trend.rs +261 -0
  355. fin_primitives-3.2.0/src/signals/indicators/hammer_detector.rs +196 -0
  356. fin_primitives-3.2.0/src/signals/indicators/hammer_pattern.rs +148 -0
  357. fin_primitives-3.2.0/src/signals/indicators/harami_detector.rs +193 -0
  358. fin_primitives-3.2.0/src/signals/indicators/heikin_ashi.rs +153 -0
  359. fin_primitives-3.2.0/src/signals/indicators/high_break_count.rs +135 -0
  360. fin_primitives-3.2.0/src/signals/indicators/high_close_ratio.rs +151 -0
  361. fin_primitives-3.2.0/src/signals/indicators/high_low_crossover.rs +150 -0
  362. fin_primitives-3.2.0/src/signals/indicators/high_low_divergence.rs +99 -0
  363. fin_primitives-3.2.0/src/signals/indicators/high_low_midpoint.rs +82 -0
  364. fin_primitives-3.2.0/src/signals/indicators/high_low_momentum.rs +193 -0
  365. fin_primitives-3.2.0/src/signals/indicators/high_low_oscillator.rs +92 -0
  366. fin_primitives-3.2.0/src/signals/indicators/high_low_pct.rs +162 -0
  367. fin_primitives-3.2.0/src/signals/indicators/high_low_pct_range.rs +158 -0
  368. fin_primitives-3.2.0/src/signals/indicators/high_low_persistence.rs +186 -0
  369. fin_primitives-3.2.0/src/signals/indicators/high_low_ratio.rs +158 -0
  370. fin_primitives-3.2.0/src/signals/indicators/high_low_ratio_ma.rs +176 -0
  371. fin_primitives-3.2.0/src/signals/indicators/high_low_return_correlation.rs +134 -0
  372. fin_primitives-3.2.0/src/signals/indicators/high_low_spread.rs +161 -0
  373. fin_primitives-3.2.0/src/signals/indicators/high_low_spread_ma.rs +160 -0
  374. fin_primitives-3.2.0/src/signals/indicators/high_low_squeeze.rs +171 -0
  375. fin_primitives-3.2.0/src/signals/indicators/high_low_symmetry.rs +192 -0
  376. fin_primitives-3.2.0/src/signals/indicators/high_minus_prev_close.rs +175 -0
  377. fin_primitives-3.2.0/src/signals/indicators/high_of_period.rs +111 -0
  378. fin_primitives-3.2.0/src/signals/indicators/high_open_range.rs +84 -0
  379. fin_primitives-3.2.0/src/signals/indicators/high_to_open_range.rs +166 -0
  380. fin_primitives-3.2.0/src/signals/indicators/high_volume_bar_ratio.rs +158 -0
  381. fin_primitives-3.2.0/src/signals/indicators/higher_close_streak.rs +121 -0
  382. fin_primitives-3.2.0/src/signals/indicators/higher_high_count.rs +86 -0
  383. fin_primitives-3.2.0/src/signals/indicators/higher_high_lower_low.rs +88 -0
  384. fin_primitives-3.2.0/src/signals/indicators/higher_low_count.rs +90 -0
  385. fin_primitives-3.2.0/src/signals/indicators/higher_low_streak.rs +127 -0
  386. fin_primitives-3.2.0/src/signals/indicators/higher_timeframe_trend.rs +181 -0
  387. fin_primitives-3.2.0/src/signals/indicators/historical_volatility.rs +162 -0
  388. fin_primitives-3.2.0/src/signals/indicators/hl_midpoint_deviation.rs +192 -0
  389. fin_primitives-3.2.0/src/signals/indicators/hl_ratio.rs +140 -0
  390. fin_primitives-3.2.0/src/signals/indicators/hullma.rs +175 -0
  391. fin_primitives-3.2.0/src/signals/indicators/hurst_exponent.rs +197 -0
  392. fin_primitives-3.2.0/src/signals/indicators/ichimoku.rs +245 -0
  393. fin_primitives-3.2.0/src/signals/indicators/inertia.rs +187 -0
  394. fin_primitives-3.2.0/src/signals/indicators/inside_bar_counter.rs +178 -0
  395. fin_primitives-3.2.0/src/signals/indicators/inside_bar_ratio.rs +96 -0
  396. fin_primitives-3.2.0/src/signals/indicators/intrabar_momentum.rs +191 -0
  397. fin_primitives-3.2.0/src/signals/indicators/intrabar_return.rs +96 -0
  398. fin_primitives-3.2.0/src/signals/indicators/intraday_momentum.rs +157 -0
  399. fin_primitives-3.2.0/src/signals/indicators/intraday_spread_pct.rs +99 -0
  400. fin_primitives-3.2.0/src/signals/indicators/jurik_ma.rs +197 -0
  401. fin_primitives-3.2.0/src/signals/indicators/kama.rs +208 -0
  402. fin_primitives-3.2.0/src/signals/indicators/kaufman_er.rs +173 -0
  403. fin_primitives-3.2.0/src/signals/indicators/keltner.rs +196 -0
  404. fin_primitives-3.2.0/src/signals/indicators/key_reversal.rs +151 -0
  405. fin_primitives-3.2.0/src/signals/indicators/kicking_pattern.rs +180 -0
  406. fin_primitives-3.2.0/src/signals/indicators/kst.rs +205 -0
  407. fin_primitives-3.2.0/src/signals/indicators/kvo.rs +200 -0
  408. fin_primitives-3.2.0/src/signals/indicators/laguerre.rs +209 -0
  409. fin_primitives-3.2.0/src/signals/indicators/linear_deviation.rs +187 -0
  410. fin_primitives-3.2.0/src/signals/indicators/linear_regression_r2.rs +195 -0
  411. fin_primitives-3.2.0/src/signals/indicators/linear_regression_slope.rs +178 -0
  412. fin_primitives-3.2.0/src/signals/indicators/linreg_channel.rs +200 -0
  413. fin_primitives-3.2.0/src/signals/indicators/linreg_forecast.rs +147 -0
  414. fin_primitives-3.2.0/src/signals/indicators/linreg_slope.rs +186 -0
  415. fin_primitives-3.2.0/src/signals/indicators/log_return_volatility.rs +190 -0
  416. fin_primitives-3.2.0/src/signals/indicators/low_close_ratio.rs +153 -0
  417. fin_primitives-3.2.0/src/signals/indicators/low_minus_prev_close.rs +175 -0
  418. fin_primitives-3.2.0/src/signals/indicators/low_of_period.rs +111 -0
  419. fin_primitives-3.2.0/src/signals/indicators/low_to_close_ratio.rs +154 -0
  420. fin_primitives-3.2.0/src/signals/indicators/lower_high_count.rs +90 -0
  421. fin_primitives-3.2.0/src/signals/indicators/lower_high_streak.rs +130 -0
  422. fin_primitives-3.2.0/src/signals/indicators/lower_low_count.rs +86 -0
  423. fin_primitives-3.2.0/src/signals/indicators/lower_low_rate.rs +169 -0
  424. fin_primitives-3.2.0/src/signals/indicators/lower_shadow_ratio.rs +114 -0
  425. fin_primitives-3.2.0/src/signals/indicators/lower_tail_ratio.rs +160 -0
  426. fin_primitives-3.2.0/src/signals/indicators/lower_wick_pct.rs +92 -0
  427. fin_primitives-3.2.0/src/signals/indicators/lower_wick_ratio.rs +180 -0
  428. fin_primitives-3.2.0/src/signals/indicators/lsma.rs +167 -0
  429. fin_primitives-3.2.0/src/signals/indicators/macd.rs +311 -0
  430. fin_primitives-3.2.0/src/signals/indicators/market_regime.rs +219 -0
  431. fin_primitives-3.2.0/src/signals/indicators/marubozu_detector.rs +216 -0
  432. fin_primitives-3.2.0/src/signals/indicators/mass_index.rs +212 -0
  433. fin_primitives-3.2.0/src/signals/indicators/max_adverse_excursion.rs +147 -0
  434. fin_primitives-3.2.0/src/signals/indicators/max_drawdown_window.rs +158 -0
  435. fin_primitives-3.2.0/src/signals/indicators/max_drawup_window.rs +170 -0
  436. fin_primitives-3.2.0/src/signals/indicators/max_favorable_excursion.rs +154 -0
  437. fin_primitives-3.2.0/src/signals/indicators/mcginley.rs +163 -0
  438. fin_primitives-3.2.0/src/signals/indicators/mean_reversion_score.rs +108 -0
  439. fin_primitives-3.2.0/src/signals/indicators/median_body_size.rs +170 -0
  440. fin_primitives-3.2.0/src/signals/indicators/median_close_dev.rs +135 -0
  441. fin_primitives-3.2.0/src/signals/indicators/median_high_low.rs +183 -0
  442. fin_primitives-3.2.0/src/signals/indicators/median_price.rs +153 -0
  443. fin_primitives-3.2.0/src/signals/indicators/median_price_ma.rs +137 -0
  444. fin_primitives-3.2.0/src/signals/indicators/median_return_deviation.rs +203 -0
  445. fin_primitives-3.2.0/src/signals/indicators/median_volume.rs +141 -0
  446. fin_primitives-3.2.0/src/signals/indicators/mesa_adaptive_ma.rs +303 -0
  447. fin_primitives-3.2.0/src/signals/indicators/mfi.rs +195 -0
  448. fin_primitives-3.2.0/src/signals/indicators/midpoint_oscillator.rs +114 -0
  449. fin_primitives-3.2.0/src/signals/indicators/mod.rs +1530 -0
  450. fin_primitives-3.2.0/src/signals/indicators/momentum.rs +141 -0
  451. fin_primitives-3.2.0/src/signals/indicators/momentum_consistency.rs +101 -0
  452. fin_primitives-3.2.0/src/signals/indicators/momentum_divergence.rs +211 -0
  453. fin_primitives-3.2.0/src/signals/indicators/momentum_oscillator.rs +200 -0
  454. fin_primitives-3.2.0/src/signals/indicators/momentum_quality.rs +163 -0
  455. fin_primitives-3.2.0/src/signals/indicators/momentum_regime.rs +176 -0
  456. fin_primitives-3.2.0/src/signals/indicators/momentum_reversal.rs +95 -0
  457. fin_primitives-3.2.0/src/signals/indicators/momentum_streak.rs +153 -0
  458. fin_primitives-3.2.0/src/signals/indicators/morning_star.rs +204 -0
  459. fin_primitives-3.2.0/src/signals/indicators/narrow_range_bar.rs +143 -0
  460. fin_primitives-3.2.0/src/signals/indicators/natr.rs +177 -0
  461. fin_primitives-3.2.0/src/signals/indicators/negative_volume_index.rs +149 -0
  462. fin_primitives-3.2.0/src/signals/indicators/net_bar_bias.rs +169 -0
  463. fin_primitives-3.2.0/src/signals/indicators/net_body_accumulation.rs +166 -0
  464. fin_primitives-3.2.0/src/signals/indicators/net_buying_pressure.rs +170 -0
  465. fin_primitives-3.2.0/src/signals/indicators/net_high_low_count.rs +165 -0
  466. fin_primitives-3.2.0/src/signals/indicators/net_volume.rs +157 -0
  467. fin_primitives-3.2.0/src/signals/indicators/new_high_pct.rs +164 -0
  468. fin_primitives-3.2.0/src/signals/indicators/new_high_streak.rs +162 -0
  469. fin_primitives-3.2.0/src/signals/indicators/new_low_pct.rs +158 -0
  470. fin_primitives-3.2.0/src/signals/indicators/normalized_atr.rs +173 -0
  471. fin_primitives-3.2.0/src/signals/indicators/normalized_momentum.rs +172 -0
  472. fin_primitives-3.2.0/src/signals/indicators/normalized_price.rs +171 -0
  473. fin_primitives-3.2.0/src/signals/indicators/normalized_volume.rs +176 -0
  474. fin_primitives-3.2.0/src/signals/indicators/nvi.rs +155 -0
  475. fin_primitives-3.2.0/src/signals/indicators/obv.rs +140 -0
  476. fin_primitives-3.2.0/src/signals/indicators/obv_momentum.rs +178 -0
  477. fin_primitives-3.2.0/src/signals/indicators/ohlc_spread.rs +132 -0
  478. fin_primitives-3.2.0/src/signals/indicators/on_balance_volume_ma.rs +164 -0
  479. fin_primitives-3.2.0/src/signals/indicators/open_above_prev_close.rs +177 -0
  480. fin_primitives-3.2.0/src/signals/indicators/open_close_balance.rs +201 -0
  481. fin_primitives-3.2.0/src/signals/indicators/open_close_gap.rs +178 -0
  482. fin_primitives-3.2.0/src/signals/indicators/open_close_momentum.rs +163 -0
  483. fin_primitives-3.2.0/src/signals/indicators/open_close_pressure.rs +203 -0
  484. fin_primitives-3.2.0/src/signals/indicators/open_close_ratio.rs +88 -0
  485. fin_primitives-3.2.0/src/signals/indicators/open_close_spread.rs +153 -0
  486. fin_primitives-3.2.0/src/signals/indicators/open_close_symmetry.rs +90 -0
  487. fin_primitives-3.2.0/src/signals/indicators/open_close_velocity.rs +177 -0
  488. fin_primitives-3.2.0/src/signals/indicators/open_drive.rs +120 -0
  489. fin_primitives-3.2.0/src/signals/indicators/open_gap_direction.rs +123 -0
  490. fin_primitives-3.2.0/src/signals/indicators/open_gap_pct.rs +124 -0
  491. fin_primitives-3.2.0/src/signals/indicators/open_gap_size.rs +92 -0
  492. fin_primitives-3.2.0/src/signals/indicators/open_high_low_close_avg.rs +85 -0
  493. fin_primitives-3.2.0/src/signals/indicators/open_high_ratio.rs +124 -0
  494. fin_primitives-3.2.0/src/signals/indicators/open_interest_proxy.rs +184 -0
  495. fin_primitives-3.2.0/src/signals/indicators/open_low_range.rs +84 -0
  496. fin_primitives-3.2.0/src/signals/indicators/open_midpoint_bias.rs +174 -0
  497. fin_primitives-3.2.0/src/signals/indicators/open_midpoint_deviation.rs +119 -0
  498. fin_primitives-3.2.0/src/signals/indicators/open_range_position.rs +173 -0
  499. fin_primitives-3.2.0/src/signals/indicators/open_range_ratio.rs +160 -0
  500. fin_primitives-3.2.0/src/signals/indicators/open_range_strength.rs +192 -0
  501. fin_primitives-3.2.0/src/signals/indicators/open_to_close_ratio.rs +147 -0
  502. fin_primitives-3.2.0/src/signals/indicators/open_to_close_return.rs +85 -0
  503. fin_primitives-3.2.0/src/signals/indicators/open_to_high_ratio.rs +88 -0
  504. fin_primitives-3.2.0/src/signals/indicators/open_to_low_range.rs +166 -0
  505. fin_primitives-3.2.0/src/signals/indicators/open_vs_prev_close.rs +147 -0
  506. fin_primitives-3.2.0/src/signals/indicators/outside_bar_count.rs +161 -0
  507. fin_primitives-3.2.0/src/signals/indicators/overnight_return.rs +123 -0
  508. fin_primitives-3.2.0/src/signals/indicators/parkinson_volatility.rs +191 -0
  509. fin_primitives-3.2.0/src/signals/indicators/payoff_ratio.rs +193 -0
  510. fin_primitives-3.2.0/src/signals/indicators/percent_rank.rs +155 -0
  511. fin_primitives-3.2.0/src/signals/indicators/percent_rank_range.rs +176 -0
  512. fin_primitives-3.2.0/src/signals/indicators/pfe.rs +185 -0
  513. fin_primitives-3.2.0/src/signals/indicators/pgo.rs +148 -0
  514. fin_primitives-3.2.0/src/signals/indicators/piercing_line.rs +168 -0
  515. fin_primitives-3.2.0/src/signals/indicators/pivot_distance.rs +167 -0
  516. fin_primitives-3.2.0/src/signals/indicators/pivot_point.rs +138 -0
  517. fin_primitives-3.2.0/src/signals/indicators/pivot_range_width.rs +167 -0
  518. fin_primitives-3.2.0/src/signals/indicators/pivot_strength.rs +209 -0
  519. fin_primitives-3.2.0/src/signals/indicators/pivots.rs +172 -0
  520. fin_primitives-3.2.0/src/signals/indicators/pmo.rs +282 -0
  521. fin_primitives-3.2.0/src/signals/indicators/positive_volume_index.rs +150 -0
  522. fin_primitives-3.2.0/src/signals/indicators/ppo.rs +166 -0
  523. fin_primitives-3.2.0/src/signals/indicators/prev_high_breakout.rs +172 -0
  524. fin_primitives-3.2.0/src/signals/indicators/price_above_ma.rs +160 -0
  525. fin_primitives-3.2.0/src/signals/indicators/price_above_ma_pct.rs +158 -0
  526. fin_primitives-3.2.0/src/signals/indicators/price_above_rolling_high.rs +135 -0
  527. fin_primitives-3.2.0/src/signals/indicators/price_acceleration.rs +173 -0
  528. fin_primitives-3.2.0/src/signals/indicators/price_action_index.rs +173 -0
  529. fin_primitives-3.2.0/src/signals/indicators/price_bandwidth.rs +151 -0
  530. fin_primitives-3.2.0/src/signals/indicators/price_change_count.rs +92 -0
  531. fin_primitives-3.2.0/src/signals/indicators/price_change_mad.rs +201 -0
  532. fin_primitives-3.2.0/src/signals/indicators/price_change_pct.rs +118 -0
  533. fin_primitives-3.2.0/src/signals/indicators/price_channel.rs +176 -0
  534. fin_primitives-3.2.0/src/signals/indicators/price_channel_position.rs +88 -0
  535. fin_primitives-3.2.0/src/signals/indicators/price_channel_width.rs +187 -0
  536. fin_primitives-3.2.0/src/signals/indicators/price_compression.rs +151 -0
  537. fin_primitives-3.2.0/src/signals/indicators/price_compression_breakout.rs +192 -0
  538. fin_primitives-3.2.0/src/signals/indicators/price_compression_index.rs +190 -0
  539. fin_primitives-3.2.0/src/signals/indicators/price_compression_ratio.rs +98 -0
  540. fin_primitives-3.2.0/src/signals/indicators/price_compression_streak.rs +169 -0
  541. fin_primitives-3.2.0/src/signals/indicators/price_density.rs +201 -0
  542. fin_primitives-3.2.0/src/signals/indicators/price_distance_ma.rs +151 -0
  543. fin_primitives-3.2.0/src/signals/indicators/price_efficiency_ratio.rs +90 -0
  544. fin_primitives-3.2.0/src/signals/indicators/price_entropy.rs +155 -0
  545. fin_primitives-3.2.0/src/signals/indicators/price_entropy_score.rs +114 -0
  546. fin_primitives-3.2.0/src/signals/indicators/price_envelope.rs +148 -0
  547. fin_primitives-3.2.0/src/signals/indicators/price_excursion.rs +126 -0
  548. fin_primitives-3.2.0/src/signals/indicators/price_gap.rs +154 -0
  549. fin_primitives-3.2.0/src/signals/indicators/price_gap_frequency.rs +159 -0
  550. fin_primitives-3.2.0/src/signals/indicators/price_gap_momentum.rs +175 -0
  551. fin_primitives-3.2.0/src/signals/indicators/price_gravity.rs +174 -0
  552. fin_primitives-3.2.0/src/signals/indicators/price_impulse.rs +154 -0
  553. fin_primitives-3.2.0/src/signals/indicators/price_intensity.rs +167 -0
  554. fin_primitives-3.2.0/src/signals/indicators/price_level_oscillator.rs +186 -0
  555. fin_primitives-3.2.0/src/signals/indicators/price_level_pct.rs +155 -0
  556. fin_primitives-3.2.0/src/signals/indicators/price_mean_deviation.rs +93 -0
  557. fin_primitives-3.2.0/src/signals/indicators/price_momentum_oscillator.rs +98 -0
  558. fin_primitives-3.2.0/src/signals/indicators/price_momentum_rank.rs +194 -0
  559. fin_primitives-3.2.0/src/signals/indicators/price_oscillator.rs +162 -0
  560. fin_primitives-3.2.0/src/signals/indicators/price_oscillator2.rs +163 -0
  561. fin_primitives-3.2.0/src/signals/indicators/price_oscillator_pct.rs +103 -0
  562. fin_primitives-3.2.0/src/signals/indicators/price_oscillator_sign.rs +108 -0
  563. fin_primitives-3.2.0/src/signals/indicators/price_path_efficiency.rs +180 -0
  564. fin_primitives-3.2.0/src/signals/indicators/price_position.rs +168 -0
  565. fin_primitives-3.2.0/src/signals/indicators/price_position_rank.rs +100 -0
  566. fin_primitives-3.2.0/src/signals/indicators/price_range_expansion.rs +90 -0
  567. fin_primitives-3.2.0/src/signals/indicators/price_range_momentum.rs +188 -0
  568. fin_primitives-3.2.0/src/signals/indicators/price_range_oscillator.rs +200 -0
  569. fin_primitives-3.2.0/src/signals/indicators/price_range_pct.rs +122 -0
  570. fin_primitives-3.2.0/src/signals/indicators/price_range_rank.rs +159 -0
  571. fin_primitives-3.2.0/src/signals/indicators/price_relative_strength.rs +121 -0
  572. fin_primitives-3.2.0/src/signals/indicators/price_return_skew.rs +190 -0
  573. fin_primitives-3.2.0/src/signals/indicators/price_reversal.rs +167 -0
  574. fin_primitives-3.2.0/src/signals/indicators/price_reversal_index.rs +165 -0
  575. fin_primitives-3.2.0/src/signals/indicators/price_reversal_strength.rs +141 -0
  576. fin_primitives-3.2.0/src/signals/indicators/price_spread_ratio.rs +176 -0
  577. fin_primitives-3.2.0/src/signals/indicators/price_symmetry.rs +129 -0
  578. fin_primitives-3.2.0/src/signals/indicators/price_to_sma_ratio.rs +135 -0
  579. fin_primitives-3.2.0/src/signals/indicators/price_trend_quality.rs +167 -0
  580. fin_primitives-3.2.0/src/signals/indicators/price_velocity.rs +94 -0
  581. fin_primitives-3.2.0/src/signals/indicators/price_velocity_ratio.rs +186 -0
  582. fin_primitives-3.2.0/src/signals/indicators/price_velocity_score.rs +134 -0
  583. fin_primitives-3.2.0/src/signals/indicators/price_volatility_ratio.rs +195 -0
  584. fin_primitives-3.2.0/src/signals/indicators/price_volume_ratio.rs +169 -0
  585. fin_primitives-3.2.0/src/signals/indicators/price_zscore.rs +160 -0
  586. fin_primitives-3.2.0/src/signals/indicators/profit_factor.rs +179 -0
  587. fin_primitives-3.2.0/src/signals/indicators/psar.rs +223 -0
  588. fin_primitives-3.2.0/src/signals/indicators/psychological_line.rs +165 -0
  589. fin_primitives-3.2.0/src/signals/indicators/pvo.rs +184 -0
  590. fin_primitives-3.2.0/src/signals/indicators/qqe.rs +257 -0
  591. fin_primitives-3.2.0/src/signals/indicators/range_breakout_count.rs +160 -0
  592. fin_primitives-3.2.0/src/signals/indicators/range_compression_ratio.rs +158 -0
  593. fin_primitives-3.2.0/src/signals/indicators/range_contraction_count.rs +122 -0
  594. fin_primitives-3.2.0/src/signals/indicators/range_contraction_index.rs +171 -0
  595. fin_primitives-3.2.0/src/signals/indicators/range_efficiency.rs +178 -0
  596. fin_primitives-3.2.0/src/signals/indicators/range_expansion_count.rs +160 -0
  597. fin_primitives-3.2.0/src/signals/indicators/range_expansion_index.rs +99 -0
  598. fin_primitives-3.2.0/src/signals/indicators/range_expansion_rate.rs +191 -0
  599. fin_primitives-3.2.0/src/signals/indicators/range_filter.rs +179 -0
  600. fin_primitives-3.2.0/src/signals/indicators/range_midpoint_position.rs +183 -0
  601. fin_primitives-3.2.0/src/signals/indicators/range_momentum.rs +113 -0
  602. fin_primitives-3.2.0/src/signals/indicators/range_pct_of_close.rs +107 -0
  603. fin_primitives-3.2.0/src/signals/indicators/range_percentile.rs +152 -0
  604. fin_primitives-3.2.0/src/signals/indicators/range_persistence.rs +93 -0
  605. fin_primitives-3.2.0/src/signals/indicators/range_position_oscillator.rs +194 -0
  606. fin_primitives-3.2.0/src/signals/indicators/range_pressure_index.rs +210 -0
  607. fin_primitives-3.2.0/src/signals/indicators/range_ratio.rs +171 -0
  608. fin_primitives-3.2.0/src/signals/indicators/range_return_ratio.rs +103 -0
  609. fin_primitives-3.2.0/src/signals/indicators/range_to_atr_ratio.rs +166 -0
  610. fin_primitives-3.2.0/src/signals/indicators/range_trend_slope.rs +186 -0
  611. fin_primitives-3.2.0/src/signals/indicators/range_volatility_ratio.rs +195 -0
  612. fin_primitives-3.2.0/src/signals/indicators/range_z_score.rs +103 -0
  613. fin_primitives-3.2.0/src/signals/indicators/rate_of_change_pct.rs +160 -0
  614. fin_primitives-3.2.0/src/signals/indicators/regime_volatility.rs +191 -0
  615. fin_primitives-3.2.0/src/signals/indicators/relative_bar_range.rs +204 -0
  616. fin_primitives-3.2.0/src/signals/indicators/relative_close.rs +107 -0
  617. fin_primitives-3.2.0/src/signals/indicators/relative_range_rank.rs +154 -0
  618. fin_primitives-3.2.0/src/signals/indicators/relative_volatility.rs +131 -0
  619. fin_primitives-3.2.0/src/signals/indicators/relative_volume_rank.rs +150 -0
  620. fin_primitives-3.2.0/src/signals/indicators/relative_volume_score.rs +145 -0
  621. fin_primitives-3.2.0/src/signals/indicators/return_above_zero_pct.rs +141 -0
  622. fin_primitives-3.2.0/src/signals/indicators/return_autocorrelation.rs +126 -0
  623. fin_primitives-3.2.0/src/signals/indicators/return_concentration.rs +181 -0
  624. fin_primitives-3.2.0/src/signals/indicators/return_consistency.rs +186 -0
  625. fin_primitives-3.2.0/src/signals/indicators/return_dispersion.rs +112 -0
  626. fin_primitives-3.2.0/src/signals/indicators/return_iqr.rs +183 -0
  627. fin_primitives-3.2.0/src/signals/indicators/return_kurtosis.rs +179 -0
  628. fin_primitives-3.2.0/src/signals/indicators/return_mean_deviation.rs +168 -0
  629. fin_primitives-3.2.0/src/signals/indicators/return_over_volatility.rs +172 -0
  630. fin_primitives-3.2.0/src/signals/indicators/return_percent_rank.rs +205 -0
  631. fin_primitives-3.2.0/src/signals/indicators/return_persistence.rs +158 -0
  632. fin_primitives-3.2.0/src/signals/indicators/return_sign_changes.rs +153 -0
  633. fin_primitives-3.2.0/src/signals/indicators/return_sign_sum.rs +89 -0
  634. fin_primitives-3.2.0/src/signals/indicators/rmi.rs +229 -0
  635. fin_primitives-3.2.0/src/signals/indicators/roc.rs +147 -0
  636. fin_primitives-3.2.0/src/signals/indicators/roc_acceleration.rs +189 -0
  637. fin_primitives-3.2.0/src/signals/indicators/roc_ratio.rs +164 -0
  638. fin_primitives-3.2.0/src/signals/indicators/rogers_satchell_volatility.rs +190 -0
  639. fin_primitives-3.2.0/src/signals/indicators/rolling_beta.rs +196 -0
  640. fin_primitives-3.2.0/src/signals/indicators/rolling_correlation.rs +183 -0
  641. fin_primitives-3.2.0/src/signals/indicators/rolling_high_low_position.rs +200 -0
  642. fin_primitives-3.2.0/src/signals/indicators/rolling_high_low_ratio.rs +151 -0
  643. fin_primitives-3.2.0/src/signals/indicators/rolling_kurtosis.rs +178 -0
  644. fin_primitives-3.2.0/src/signals/indicators/rolling_low_break.rs +177 -0
  645. fin_primitives-3.2.0/src/signals/indicators/rolling_mad.rs +159 -0
  646. fin_primitives-3.2.0/src/signals/indicators/rolling_max_dd.rs +145 -0
  647. fin_primitives-3.2.0/src/signals/indicators/rolling_max_drawdown.rs +99 -0
  648. fin_primitives-3.2.0/src/signals/indicators/rolling_max_return.rs +138 -0
  649. fin_primitives-3.2.0/src/signals/indicators/rolling_min_return.rs +124 -0
  650. fin_primitives-3.2.0/src/signals/indicators/rolling_open_bias.rs +167 -0
  651. fin_primitives-3.2.0/src/signals/indicators/rolling_return_kurtosis.rs +105 -0
  652. fin_primitives-3.2.0/src/signals/indicators/rolling_shadow_balance.rs +174 -0
  653. fin_primitives-3.2.0/src/signals/indicators/rolling_skew_returns.rs +160 -0
  654. fin_primitives-3.2.0/src/signals/indicators/rolling_skewness.rs +102 -0
  655. fin_primitives-3.2.0/src/signals/indicators/rolling_volume_cv.rs +173 -0
  656. fin_primitives-3.2.0/src/signals/indicators/rolling_vwap.rs +109 -0
  657. fin_primitives-3.2.0/src/signals/indicators/rsi.rs +354 -0
  658. fin_primitives-3.2.0/src/signals/indicators/rsi_divergence.rs +191 -0
  659. fin_primitives-3.2.0/src/signals/indicators/rsi_ma.rs +197 -0
  660. fin_primitives-3.2.0/src/signals/indicators/rsi_slope.rs +236 -0
  661. fin_primitives-3.2.0/src/signals/indicators/rsi_stochastic.rs +216 -0
  662. fin_primitives-3.2.0/src/signals/indicators/rsx.rs +198 -0
  663. fin_primitives-3.2.0/src/signals/indicators/rvi.rs +184 -0
  664. fin_primitives-3.2.0/src/signals/indicators/rwi.rs +201 -0
  665. fin_primitives-3.2.0/src/signals/indicators/session_range_pct.rs +156 -0
  666. fin_primitives-3.2.0/src/signals/indicators/shadow_imbalance.rs +118 -0
  667. fin_primitives-3.2.0/src/signals/indicators/shadow_pressure.rs +162 -0
  668. fin_primitives-3.2.0/src/signals/indicators/shadow_ratio.rs +98 -0
  669. fin_primitives-3.2.0/src/signals/indicators/sharpe_ratio.rs +191 -0
  670. fin_primitives-3.2.0/src/signals/indicators/signed_body_ratio.rs +192 -0
  671. fin_primitives-3.2.0/src/signals/indicators/signed_gap_sum.rs +149 -0
  672. fin_primitives-3.2.0/src/signals/indicators/slope_oscillator.rs +197 -0
  673. fin_primitives-3.2.0/src/signals/indicators/sma.rs +225 -0
  674. fin_primitives-3.2.0/src/signals/indicators/sma_distance_pct.rs +194 -0
  675. fin_primitives-3.2.0/src/signals/indicators/smi.rs +218 -0
  676. fin_primitives-3.2.0/src/signals/indicators/smma.rs +164 -0
  677. fin_primitives-3.2.0/src/signals/indicators/smoothed_rsi.rs +233 -0
  678. fin_primitives-3.2.0/src/signals/indicators/sortino_ratio.rs +198 -0
  679. fin_primitives-3.2.0/src/signals/indicators/spinning_top.rs +199 -0
  680. fin_primitives-3.2.0/src/signals/indicators/stc.rs +235 -0
  681. fin_primitives-3.2.0/src/signals/indicators/std_dev_channel.rs +171 -0
  682. fin_primitives-3.2.0/src/signals/indicators/stddev.rs +160 -0
  683. fin_primitives-3.2.0/src/signals/indicators/stiffness.rs +168 -0
  684. fin_primitives-3.2.0/src/signals/indicators/stoch_rsi.rs +228 -0
  685. fin_primitives-3.2.0/src/signals/indicators/stoch_rsi_smoothed.rs +188 -0
  686. fin_primitives-3.2.0/src/signals/indicators/stochastic.rs +207 -0
  687. fin_primitives-3.2.0/src/signals/indicators/stochastic_d.rs +174 -0
  688. fin_primitives-3.2.0/src/signals/indicators/stochastic_position.rs +168 -0
  689. fin_primitives-3.2.0/src/signals/indicators/supertrend.rs +239 -0
  690. fin_primitives-3.2.0/src/signals/indicators/support_resistance_distance.rs +182 -0
  691. fin_primitives-3.2.0/src/signals/indicators/support_test_count.rs +86 -0
  692. fin_primitives-3.2.0/src/signals/indicators/swing_index.rs +201 -0
  693. fin_primitives-3.2.0/src/signals/indicators/swing_point_detector.rs +188 -0
  694. fin_primitives-3.2.0/src/signals/indicators/swma.rs +160 -0
  695. fin_primitives-3.2.0/src/signals/indicators/t3.rs +202 -0
  696. fin_primitives-3.2.0/src/signals/indicators/tail_asymmetry.rs +177 -0
  697. fin_primitives-3.2.0/src/signals/indicators/tail_ratio.rs +93 -0
  698. fin_primitives-3.2.0/src/signals/indicators/tail_ratio_pct.rs +131 -0
  699. fin_primitives-3.2.0/src/signals/indicators/td_sequential.rs +205 -0
  700. fin_primitives-3.2.0/src/signals/indicators/tema.rs +281 -0
  701. fin_primitives-3.2.0/src/signals/indicators/three_bar_pattern.rs +153 -0
  702. fin_primitives-3.2.0/src/signals/indicators/three_black_crows.rs +203 -0
  703. fin_primitives-3.2.0/src/signals/indicators/three_white_soldiers.rs +204 -0
  704. fin_primitives-3.2.0/src/signals/indicators/tick_move_ratio.rs +169 -0
  705. fin_primitives-3.2.0/src/signals/indicators/tii.rs +170 -0
  706. fin_primitives-3.2.0/src/signals/indicators/trend_acceleration.rs +189 -0
  707. fin_primitives-3.2.0/src/signals/indicators/trend_age.rs +152 -0
  708. fin_primitives-3.2.0/src/signals/indicators/trend_angle.rs +170 -0
  709. fin_primitives-3.2.0/src/signals/indicators/trend_bias_index.rs +187 -0
  710. fin_primitives-3.2.0/src/signals/indicators/trend_consistency.rs +193 -0
  711. fin_primitives-3.2.0/src/signals/indicators/trend_consistency_score.rs +95 -0
  712. fin_primitives-3.2.0/src/signals/indicators/trend_exhaustion.rs +162 -0
  713. fin_primitives-3.2.0/src/signals/indicators/trend_following_filter.rs +199 -0
  714. fin_primitives-3.2.0/src/signals/indicators/trend_magic.rs +256 -0
  715. fin_primitives-3.2.0/src/signals/indicators/trend_persistence.rs +200 -0
  716. fin_primitives-3.2.0/src/signals/indicators/trend_purity.rs +161 -0
  717. fin_primitives-3.2.0/src/signals/indicators/trend_score.rs +168 -0
  718. fin_primitives-3.2.0/src/signals/indicators/trend_slope_ratio.rs +180 -0
  719. fin_primitives-3.2.0/src/signals/indicators/trend_strength.rs +163 -0
  720. fin_primitives-3.2.0/src/signals/indicators/trend_strength_index.rs +184 -0
  721. fin_primitives-3.2.0/src/signals/indicators/trend_volatility_ratio.rs +161 -0
  722. fin_primitives-3.2.0/src/signals/indicators/trima.rs +154 -0
  723. fin_primitives-3.2.0/src/signals/indicators/trix.rs +191 -0
  724. fin_primitives-3.2.0/src/signals/indicators/true_range_ema.rs +155 -0
  725. fin_primitives-3.2.0/src/signals/indicators/true_range_expansion.rs +182 -0
  726. fin_primitives-3.2.0/src/signals/indicators/true_range_percentile.rs +91 -0
  727. fin_primitives-3.2.0/src/signals/indicators/true_range_ratio.rs +159 -0
  728. fin_primitives-3.2.0/src/signals/indicators/true_range_zscore.rs +197 -0
  729. fin_primitives-3.2.0/src/signals/indicators/true_strength_index.rs +138 -0
  730. fin_primitives-3.2.0/src/signals/indicators/tsi.rs +257 -0
  731. fin_primitives-3.2.0/src/signals/indicators/ttm_squeeze.rs +239 -0
  732. fin_primitives-3.2.0/src/signals/indicators/tweezer_bottom.rs +171 -0
  733. fin_primitives-3.2.0/src/signals/indicators/tweezer_top.rs +172 -0
  734. fin_primitives-3.2.0/src/signals/indicators/typical_price.rs +145 -0
  735. fin_primitives-3.2.0/src/signals/indicators/typical_price_deviation.rs +94 -0
  736. fin_primitives-3.2.0/src/signals/indicators/typical_price_roc.rs +168 -0
  737. fin_primitives-3.2.0/src/signals/indicators/ulcer_index.rs +154 -0
  738. fin_primitives-3.2.0/src/signals/indicators/ultimate.rs +214 -0
  739. fin_primitives-3.2.0/src/signals/indicators/up_bar_ratio.rs +139 -0
  740. fin_primitives-3.2.0/src/signals/indicators/up_close_streak.rs +180 -0
  741. fin_primitives-3.2.0/src/signals/indicators/up_down_volume_ratio.rs +144 -0
  742. fin_primitives-3.2.0/src/signals/indicators/up_momentum_pct.rs +167 -0
  743. fin_primitives-3.2.0/src/signals/indicators/up_volume_fraction.rs +107 -0
  744. fin_primitives-3.2.0/src/signals/indicators/up_volume_ratio.rs +93 -0
  745. fin_primitives-3.2.0/src/signals/indicators/upper_shadow_ratio.rs +114 -0
  746. fin_primitives-3.2.0/src/signals/indicators/upper_tail_ratio.rs +161 -0
  747. fin_primitives-3.2.0/src/signals/indicators/upper_to_lower_wick.rs +144 -0
  748. fin_primitives-3.2.0/src/signals/indicators/upper_wick_pct.rs +92 -0
  749. fin_primitives-3.2.0/src/signals/indicators/upper_wick_ratio.rs +165 -0
  750. fin_primitives-3.2.0/src/signals/indicators/upper_wick_streak.rs +174 -0
  751. fin_primitives-3.2.0/src/signals/indicators/usm.rs +215 -0
  752. fin_primitives-3.2.0/src/signals/indicators/value_at_risk5.rs +155 -0
  753. fin_primitives-3.2.0/src/signals/indicators/vam.rs +175 -0
  754. fin_primitives-3.2.0/src/signals/indicators/variance_ratio.rs +220 -0
  755. fin_primitives-3.2.0/src/signals/indicators/velocity_ratio.rs +172 -0
  756. fin_primitives-3.2.0/src/signals/indicators/vhf.rs +139 -0
  757. fin_primitives-3.2.0/src/signals/indicators/vidya.rs +162 -0
  758. fin_primitives-3.2.0/src/signals/indicators/vix_fix.rs +161 -0
  759. fin_primitives-3.2.0/src/signals/indicators/vol_normalized_return.rs +203 -0
  760. fin_primitives-3.2.0/src/signals/indicators/volatility_adjusted_momentum.rs +123 -0
  761. fin_primitives-3.2.0/src/signals/indicators/volatility_adjusted_range.rs +175 -0
  762. fin_primitives-3.2.0/src/signals/indicators/volatility_bands.rs +196 -0
  763. fin_primitives-3.2.0/src/signals/indicators/volatility_bias.rs +196 -0
  764. fin_primitives-3.2.0/src/signals/indicators/volatility_break.rs +212 -0
  765. fin_primitives-3.2.0/src/signals/indicators/volatility_compression.rs +172 -0
  766. fin_primitives-3.2.0/src/signals/indicators/volatility_momentum.rs +168 -0
  767. fin_primitives-3.2.0/src/signals/indicators/volatility_of_volatility.rs +207 -0
  768. fin_primitives-3.2.0/src/signals/indicators/volatility_percentile.rs +138 -0
  769. fin_primitives-3.2.0/src/signals/indicators/volatility_ratio.rs +174 -0
  770. fin_primitives-3.2.0/src/signals/indicators/volatility_regime_detector.rs +120 -0
  771. fin_primitives-3.2.0/src/signals/indicators/volatility_skew.rs +217 -0
  772. fin_primitives-3.2.0/src/signals/indicators/volatility_spike.rs +100 -0
  773. fin_primitives-3.2.0/src/signals/indicators/volatility_stop.rs +267 -0
  774. fin_primitives-3.2.0/src/signals/indicators/volume_acceleration.rs +138 -0
  775. fin_primitives-3.2.0/src/signals/indicators/volume_acceleration_index.rs +184 -0
  776. fin_primitives-3.2.0/src/signals/indicators/volume_accumulation.rs +97 -0
  777. fin_primitives-3.2.0/src/signals/indicators/volume_at_close.rs +180 -0
  778. fin_primitives-3.2.0/src/signals/indicators/volume_breadth.rs +162 -0
  779. fin_primitives-3.2.0/src/signals/indicators/volume_breakout_score.rs +172 -0
  780. fin_primitives-3.2.0/src/signals/indicators/volume_climax_ratio.rs +181 -0
  781. fin_primitives-3.2.0/src/signals/indicators/volume_consistency.rs +179 -0
  782. fin_primitives-3.2.0/src/signals/indicators/volume_cv.rs +165 -0
  783. fin_primitives-3.2.0/src/signals/indicators/volume_delta_ema.rs +193 -0
  784. fin_primitives-3.2.0/src/signals/indicators/volume_delta_oscillator.rs +98 -0
  785. fin_primitives-3.2.0/src/signals/indicators/volume_delta_ratio.rs +175 -0
  786. fin_primitives-3.2.0/src/signals/indicators/volume_density.rs +141 -0
  787. fin_primitives-3.2.0/src/signals/indicators/volume_deviation.rs +151 -0
  788. fin_primitives-3.2.0/src/signals/indicators/volume_direction_ratio.rs +109 -0
  789. fin_primitives-3.2.0/src/signals/indicators/volume_energy.rs +132 -0
  790. fin_primitives-3.2.0/src/signals/indicators/volume_exhaustion.rs +137 -0
  791. fin_primitives-3.2.0/src/signals/indicators/volume_flow_ratio.rs +207 -0
  792. fin_primitives-3.2.0/src/signals/indicators/volume_imbalance.rs +166 -0
  793. fin_primitives-3.2.0/src/signals/indicators/volume_momentum.rs +192 -0
  794. fin_primitives-3.2.0/src/signals/indicators/volume_momentum_divergence.rs +101 -0
  795. fin_primitives-3.2.0/src/signals/indicators/volume_momentum_index.rs +184 -0
  796. fin_primitives-3.2.0/src/signals/indicators/volume_momentum_oscillator.rs +192 -0
  797. fin_primitives-3.2.0/src/signals/indicators/volume_momentum_ratio.rs +180 -0
  798. fin_primitives-3.2.0/src/signals/indicators/volume_open_bias.rs +161 -0
  799. fin_primitives-3.2.0/src/signals/indicators/volume_oscillator.rs +107 -0
  800. fin_primitives-3.2.0/src/signals/indicators/volume_per_range.rs +108 -0
  801. fin_primitives-3.2.0/src/signals/indicators/volume_pressure_ratio.rs +187 -0
  802. fin_primitives-3.2.0/src/signals/indicators/volume_price_corr.rs +166 -0
  803. fin_primitives-3.2.0/src/signals/indicators/volume_price_correlation.rs +202 -0
  804. fin_primitives-3.2.0/src/signals/indicators/volume_price_efficiency.rs +180 -0
  805. fin_primitives-3.2.0/src/signals/indicators/volume_price_impact.rs +92 -0
  806. fin_primitives-3.2.0/src/signals/indicators/volume_price_rank.rs +168 -0
  807. fin_primitives-3.2.0/src/signals/indicators/volume_price_trend.rs +152 -0
  808. fin_primitives-3.2.0/src/signals/indicators/volume_rate_of_change.rs +84 -0
  809. fin_primitives-3.2.0/src/signals/indicators/volume_ratio_signal.rs +143 -0
  810. fin_primitives-3.2.0/src/signals/indicators/volume_ratio_trend.rs +165 -0
  811. fin_primitives-3.2.0/src/signals/indicators/volume_return_corr.rs +211 -0
  812. fin_primitives-3.2.0/src/signals/indicators/volume_return_correlation.rs +202 -0
  813. fin_primitives-3.2.0/src/signals/indicators/volume_rsi.rs +194 -0
  814. fin_primitives-3.2.0/src/signals/indicators/volume_spike.rs +163 -0
  815. fin_primitives-3.2.0/src/signals/indicators/volume_spike_ratio.rs +93 -0
  816. fin_primitives-3.2.0/src/signals/indicators/volume_spike_score.rs +88 -0
  817. fin_primitives-3.2.0/src/signals/indicators/volume_streak_count.rs +92 -0
  818. fin_primitives-3.2.0/src/signals/indicators/volume_surge.rs +144 -0
  819. fin_primitives-3.2.0/src/signals/indicators/volume_surge2.rs +144 -0
  820. fin_primitives-3.2.0/src/signals/indicators/volume_surge_detector.rs +165 -0
  821. fin_primitives-3.2.0/src/signals/indicators/volume_swing.rs +187 -0
  822. fin_primitives-3.2.0/src/signals/indicators/volume_to_range_ratio.rs +88 -0
  823. fin_primitives-3.2.0/src/signals/indicators/volume_trend.rs +153 -0
  824. fin_primitives-3.2.0/src/signals/indicators/volume_trend_index.rs +154 -0
  825. fin_primitives-3.2.0/src/signals/indicators/volume_trend_slope.rs +105 -0
  826. fin_primitives-3.2.0/src/signals/indicators/volume_trend_strength.rs +181 -0
  827. fin_primitives-3.2.0/src/signals/indicators/volume_up_down_ratio.rs +152 -0
  828. fin_primitives-3.2.0/src/signals/indicators/volume_weighted_atr.rs +196 -0
  829. fin_primitives-3.2.0/src/signals/indicators/volume_weighted_close.rs +95 -0
  830. fin_primitives-3.2.0/src/signals/indicators/volume_weighted_hl.rs +196 -0
  831. fin_primitives-3.2.0/src/signals/indicators/volume_weighted_momentum.rs +90 -0
  832. fin_primitives-3.2.0/src/signals/indicators/volume_weighted_range.rs +161 -0
  833. fin_primitives-3.2.0/src/signals/indicators/volume_weighted_return.rs +201 -0
  834. fin_primitives-3.2.0/src/signals/indicators/volume_weighted_rsi.rs +187 -0
  835. fin_primitives-3.2.0/src/signals/indicators/volume_weighted_std_dev.rs +166 -0
  836. fin_primitives-3.2.0/src/signals/indicators/volume_weighted_volatility.rs +192 -0
  837. fin_primitives-3.2.0/src/signals/indicators/volume_zscore.rs +214 -0
  838. fin_primitives-3.2.0/src/signals/indicators/vortex.rs +196 -0
  839. fin_primitives-3.2.0/src/signals/indicators/vpt.rs +159 -0
  840. fin_primitives-3.2.0/src/signals/indicators/vroc.rs +172 -0
  841. fin_primitives-3.2.0/src/signals/indicators/vw_momentum.rs +169 -0
  842. fin_primitives-3.2.0/src/signals/indicators/vwap.rs +155 -0
  843. fin_primitives-3.2.0/src/signals/indicators/vwma.rs +173 -0
  844. fin_primitives-3.2.0/src/signals/indicators/vzo.rs +184 -0
  845. fin_primitives-3.2.0/src/signals/indicators/weighted_close.rs +145 -0
  846. fin_primitives-3.2.0/src/signals/indicators/weighted_close_roc.rs +168 -0
  847. fin_primitives-3.2.0/src/signals/indicators/weighted_close_volatility.rs +93 -0
  848. fin_primitives-3.2.0/src/signals/indicators/weighted_momentum.rs +155 -0
  849. fin_primitives-3.2.0/src/signals/indicators/wick_asymmetry_streak.rs +170 -0
  850. fin_primitives-3.2.0/src/signals/indicators/wick_imbalance.rs +196 -0
  851. fin_primitives-3.2.0/src/signals/indicators/wick_ratio.rs +166 -0
  852. fin_primitives-3.2.0/src/signals/indicators/wick_rejection_score.rs +92 -0
  853. fin_primitives-3.2.0/src/signals/indicators/wick_to_atr_ratio.rs +220 -0
  854. fin_primitives-3.2.0/src/signals/indicators/wick_to_body_ratio.rs +172 -0
  855. fin_primitives-3.2.0/src/signals/indicators/wicks_vs_body_ratio.rs +170 -0
  856. fin_primitives-3.2.0/src/signals/indicators/wilder_smoothed_range.rs +119 -0
  857. fin_primitives-3.2.0/src/signals/indicators/williams_ad.rs +158 -0
  858. fin_primitives-3.2.0/src/signals/indicators/williams_fractal.rs +211 -0
  859. fin_primitives-3.2.0/src/signals/indicators/williams_r.rs +149 -0
  860. fin_primitives-3.2.0/src/signals/indicators/wma.rs +183 -0
  861. fin_primitives-3.2.0/src/signals/indicators/yang_zhang_volatility.rs +247 -0
  862. fin_primitives-3.2.0/src/signals/indicators/zigzag.rs +225 -0
  863. fin_primitives-3.2.0/src/signals/indicators/zlema.rs +163 -0
  864. fin_primitives-3.2.0/src/signals/indicators/zscore.rs +193 -0
  865. fin_primitives-3.2.0/src/signals/mod.rs +1253 -0
  866. fin_primitives-3.2.0/src/signals/multi_tf.rs +386 -0
  867. fin_primitives-3.2.0/src/signals/pipeline.rs +1352 -0
  868. fin_primitives-3.2.0/src/signals/warmup.rs +769 -0
  869. fin_primitives-3.2.0/src/ta_compat/indicators.rs +1460 -0
  870. fin_primitives-3.2.0/src/ta_compat/mod.rs +411 -0
  871. fin_primitives-3.2.0/src/tax/mod.rs +486 -0
  872. fin_primitives-3.2.0/src/technical/mod.rs +569 -0
  873. fin_primitives-3.2.0/src/tick/mod.rs +1567 -0
  874. fin_primitives-3.2.0/src/types/mod.rs +2100 -0
  875. fin_primitives-3.2.0/src/volatility/garch.rs +493 -0
  876. fin_primitives-3.2.0/src/volatility/mod.rs +447 -0
  877. fin_primitives-3.2.0/src/yield_curve/mod.rs +615 -0
  878. fin_primitives-3.2.0/tests/api_coverage.rs +231 -0
  879. fin_primitives-3.2.0/tests/book_reconstruction.rs +69 -0
  880. fin_primitives-3.2.0/tests/core_only.rs +178 -0
  881. fin_primitives-3.2.0/tests/edge_cases.rs +512 -0
  882. fin_primitives-3.2.0/tests/float_fast_path.rs +359 -0
  883. fin_primitives-3.2.0/tests/indicator_accuracy.rs +729 -0
  884. fin_primitives-3.2.0/tests/ohlcv_scenarios.rs +356 -0
  885. fin_primitives-3.2.0/tests/orderbook_advanced.rs +612 -0
  886. fin_primitives-3.2.0/tests/orderbook_stress.rs +268 -0
  887. fin_primitives-3.2.0/tests/position_lifecycle.rs +233 -0
  888. fin_primitives-3.2.0/tests/position_risk_integration.rs +395 -0
  889. fin_primitives-3.2.0/tests/property_math_book.rs +134 -0
  890. fin_primitives-3.2.0/tests/property_tests.rs +226 -0
  891. fin_primitives-3.2.0/tests/risk_monitor.rs +123 -0
  892. fin_primitives-3.2.0/tests/serde_roundtrip.rs +214 -0
  893. fin_primitives-3.2.0/tests/signal_pipeline.rs +60 -0
  894. fin_primitives-3.2.0/tests/ta_compat.rs +528 -0
  895. fin_primitives-3.2.0/tests/talib_reference/gen.py +102 -0
  896. fin_primitives-3.2.0/tests/talib_reference/mod.rs +42 -0
  897. 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