back-trader-python 1.4.0__py3-none-any.whl

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 (465) hide show
  1. back_trader_python-1.4.0.dist-info/METADATA +1491 -0
  2. back_trader_python-1.4.0.dist-info/RECORD +465 -0
  3. back_trader_python-1.4.0.dist-info/WHEEL +5 -0
  4. back_trader_python-1.4.0.dist-info/licenses/LICENSE +674 -0
  5. back_trader_python-1.4.0.dist-info/top_level.txt +1 -0
  6. backtrader/__init__.py +148 -0
  7. backtrader/_cerebro/__init__.py +5 -0
  8. backtrader/_cerebro/channel.py +382 -0
  9. backtrader/_cerebro/execution.py +377 -0
  10. backtrader/_cerebro/lifecycle.py +143 -0
  11. backtrader/_cerebro/notifications.py +150 -0
  12. backtrader/_cerebro/presentation.py +230 -0
  13. backtrader/_cerebro/registry.py +593 -0
  14. backtrader/_cerebro/runnext.py +551 -0
  15. backtrader/_cerebro/runonce.py +142 -0
  16. backtrader/analyzer.py +594 -0
  17. backtrader/analyzers/__init__.py +50 -0
  18. backtrader/analyzers/annualreturn.py +226 -0
  19. backtrader/analyzers/calmar.py +165 -0
  20. backtrader/analyzers/drawdown.py +287 -0
  21. backtrader/analyzers/leverage.py +112 -0
  22. backtrader/analyzers/logreturnsrolling.py +190 -0
  23. backtrader/analyzers/periodstats.py +153 -0
  24. backtrader/analyzers/positions.py +119 -0
  25. backtrader/analyzers/pyfolio.py +470 -0
  26. backtrader/analyzers/returns.py +192 -0
  27. backtrader/analyzers/sharpe.py +307 -0
  28. backtrader/analyzers/sharpe_ratio_stats.py +534 -0
  29. backtrader/analyzers/sqn.py +112 -0
  30. backtrader/analyzers/timereturn.py +192 -0
  31. backtrader/analyzers/total_value.py +75 -0
  32. backtrader/analyzers/tradeanalyzer.py +278 -0
  33. backtrader/analyzers/transactions.py +141 -0
  34. backtrader/analyzers/vwr.py +245 -0
  35. backtrader/bokeh/__init__.py +155 -0
  36. backtrader/bokeh/analyzers/__init__.py +13 -0
  37. backtrader/bokeh/analyzers/plot.py +192 -0
  38. backtrader/bokeh/analyzers/recorder.py +181 -0
  39. backtrader/bokeh/app.py +1094 -0
  40. backtrader/bokeh/live/__init__.py +11 -0
  41. backtrader/bokeh/live/client.py +352 -0
  42. backtrader/bokeh/live/datahandler.py +346 -0
  43. backtrader/bokeh/plot_adapter.py +200 -0
  44. backtrader/bokeh/schemes/__init__.py +14 -0
  45. backtrader/bokeh/schemes/blackly.py +76 -0
  46. backtrader/bokeh/schemes/scheme.py +150 -0
  47. backtrader/bokeh/schemes/tradimo.py +82 -0
  48. backtrader/bokeh/tab.py +125 -0
  49. backtrader/bokeh/tabs/__init__.py +30 -0
  50. backtrader/bokeh/tabs/analyzer.py +120 -0
  51. backtrader/bokeh/tabs/config.py +154 -0
  52. backtrader/bokeh/tabs/live.py +109 -0
  53. backtrader/bokeh/tabs/log.py +185 -0
  54. backtrader/bokeh/tabs/metadata.py +182 -0
  55. backtrader/bokeh/tabs/performance.py +359 -0
  56. backtrader/bokeh/tabs/source.py +70 -0
  57. backtrader/bokeh/utils/__init__.py +8 -0
  58. backtrader/bokeh/utils/helpers.py +167 -0
  59. backtrader/bokeh/webapp.py +164 -0
  60. backtrader/broker.py +478 -0
  61. backtrader/brokers/__init__.py +36 -0
  62. backtrader/brokers/bbroker.py +2576 -0
  63. backtrader/brokers/btapibroker.py +8227 -0
  64. backtrader/brokers/hft/__init__.py +89 -0
  65. backtrader/brokers/hft/binance_bbo.py +625 -0
  66. backtrader/brokers/hft/binance_bbo_compare.py +1398 -0
  67. backtrader/brokers/hft/examples.py +1228 -0
  68. backtrader/brokers/hft/exchange.py +380 -0
  69. backtrader/brokers/hft/latency.py +309 -0
  70. backtrader/brokers/hft/matching_core.py +572 -0
  71. backtrader/brokers/hft/queue.py +238 -0
  72. backtrader/brokers/hft/recorder.py +88 -0
  73. backtrader/brokers/hft/state.py +138 -0
  74. backtrader/brokers/impact_models.py +118 -0
  75. backtrader/brokers/mixbroker.py +895 -0
  76. backtrader/brokers/tickbroker.py +1991 -0
  77. backtrader/btrun/__init__.py +12 -0
  78. backtrader/btrun/btrun.py +1218 -0
  79. backtrader/cerebro.py +828 -0
  80. backtrader/channel.py +682 -0
  81. backtrader/channels/__init__.py +23 -0
  82. backtrader/channels/bridge.py +186 -0
  83. backtrader/channels/funding.py +248 -0
  84. backtrader/channels/live_queue.py +216 -0
  85. backtrader/channels/live_validator.py +294 -0
  86. backtrader/channels/orderbook.py +257 -0
  87. backtrader/channels/tick.py +202 -0
  88. backtrader/comminfo.py +665 -0
  89. backtrader/commissions/__init__.py +106 -0
  90. backtrader/commissions/ctpoption.py +993 -0
  91. backtrader/configs/account_config_example.yaml +8 -0
  92. backtrader/dataseries.py +379 -0
  93. backtrader/errors.py +106 -0
  94. backtrader/events.py +980 -0
  95. backtrader/feed.py +1523 -0
  96. backtrader/feeds/__init__.py +75 -0
  97. backtrader/feeds/barrier.py +2006 -0
  98. backtrader/feeds/blaze.py +118 -0
  99. backtrader/feeds/btapifeed.py +1538 -0
  100. backtrader/feeds/btcsv.py +203 -0
  101. backtrader/feeds/chainer.py +114 -0
  102. backtrader/feeds/cryptohftdata.py +164 -0
  103. backtrader/feeds/csvgeneric.py +1205 -0
  104. backtrader/feeds/ctpcohort.py +1051 -0
  105. backtrader/feeds/influxfeed.py +158 -0
  106. backtrader/feeds/livefeed.py +71 -0
  107. backtrader/feeds/mixed_channel.py +108 -0
  108. backtrader/feeds/mt4csv.py +42 -0
  109. backtrader/feeds/pandafeed.py +381 -0
  110. backtrader/feeds/quandl.py +256 -0
  111. backtrader/feeds/rollover.py +229 -0
  112. backtrader/feeds/sierrachart.py +30 -0
  113. backtrader/feeds/vchart.py +162 -0
  114. backtrader/feeds/vchartcsv.py +84 -0
  115. backtrader/feeds/vchartfile.py +153 -0
  116. backtrader/feeds/yahoo.py +399 -0
  117. backtrader/fillers.py +148 -0
  118. backtrader/filters/__init__.py +34 -0
  119. backtrader/filters/bsplitter.py +127 -0
  120. backtrader/filters/calendardays.py +121 -0
  121. backtrader/filters/datafiller.py +192 -0
  122. backtrader/filters/datafilter.py +74 -0
  123. backtrader/filters/daysteps.py +96 -0
  124. backtrader/filters/heikinashi.py +63 -0
  125. backtrader/filters/renko.py +164 -0
  126. backtrader/filters/session.py +289 -0
  127. backtrader/flt.py +80 -0
  128. backtrader/functions.py +960 -0
  129. backtrader/indicator.py +449 -0
  130. backtrader/indicators/__init__.py +148 -0
  131. backtrader/indicators/accdecoscillator.py +110 -0
  132. backtrader/indicators/aroon.py +300 -0
  133. backtrader/indicators/atr.py +315 -0
  134. backtrader/indicators/awesomeoscillator.py +122 -0
  135. backtrader/indicators/basicops.py +834 -0
  136. backtrader/indicators/bollinger.py +223 -0
  137. backtrader/indicators/cci.py +89 -0
  138. backtrader/indicators/channels_ext.py +83 -0
  139. backtrader/indicators/contrib/__init__.py +228 -0
  140. backtrader/indicators/contrib/absolutely_no_lag_lwma.py +28 -0
  141. backtrader/indicators/contrib/absolutely_no_lag_lwma_color.py +44 -0
  142. backtrader/indicators/contrib/accumulation_distribution_line.py +92 -0
  143. backtrader/indicators/contrib/adx_cross_hull_style_indicator.py +249 -0
  144. backtrader/indicators/contrib/adxdmi.py +34 -0
  145. backtrader/indicators/contrib/ai_acceleration_deceleration_oscillator.py +34 -0
  146. backtrader/indicators/contrib/altr_trend_signal_v22.py +85 -0
  147. backtrader/indicators/contrib/anchored_momentum_line.py +115 -0
  148. backtrader/indicators/contrib/any_range_cld_tail_indicator.py +82 -0
  149. backtrader/indicators/contrib/aroon_horn_sign_indicator.py +96 -0
  150. backtrader/indicators/contrib/aroon_oscillator_sign_alert.py +50 -0
  151. backtrader/indicators/contrib/arrows_curves_indicator.py +112 -0
  152. backtrader/indicators/contrib/as_ctrend_indicator.py +143 -0
  153. backtrader/indicators/contrib/asimmetric_stoch_nr_indicator.py +187 -0
  154. backtrader/indicators/contrib/atr_normalize_histogram.py +118 -0
  155. backtrader/indicators/contrib/average_change_candle.py +165 -0
  156. backtrader/indicators/contrib/bb_squeeze_indicator.py +60 -0
  157. backtrader/indicators/contrib/bezier_st_dev_indicator.py +135 -0
  158. backtrader/indicators/contrib/binary_wave_indicator.py +233 -0
  159. backtrader/indicators/contrib/blau_c_momentum_indicator.py +123 -0
  160. backtrader/indicators/contrib/blau_cmi_indicator.py +141 -0
  161. backtrader/indicators/contrib/blau_csi.py +76 -0
  162. backtrader/indicators/contrib/blau_ergodic.py +53 -0
  163. backtrader/indicators/contrib/blau_t_stoch_i.py +72 -0
  164. backtrader/indicators/contrib/blau_ts_stochastic.py +85 -0
  165. backtrader/indicators/contrib/blau_tvi.py +55 -0
  166. backtrader/indicators/contrib/brain_trend2_indicator.py +128 -0
  167. backtrader/indicators/contrib/brain_trend_signal_proxy.py +47 -0
  168. backtrader/indicators/contrib/brake_parb_indicator.py +85 -0
  169. backtrader/indicators/contrib/breakout_bars_trend_v2.py +121 -0
  170. backtrader/indicators/contrib/bsi_indicator.py +87 -0
  171. backtrader/indicators/contrib/bulls_bears_eyes.py +67 -0
  172. backtrader/indicators/contrib/bulls_power.py +56 -0
  173. backtrader/indicators/contrib/bw_wise_man1_signal.py +102 -0
  174. backtrader/indicators/contrib/bykov_trend_indicator.py +85 -0
  175. backtrader/indicators/contrib/candle_stop_color.py +46 -0
  176. backtrader/indicators/contrib/candles_x_smoothed_indicator.py +69 -0
  177. backtrader/indicators/contrib/candlesticks_bw.py +45 -0
  178. backtrader/indicators/contrib/caudate_x_period_candle_color.py +56 -0
  179. backtrader/indicators/contrib/cci_histogram_indicator.py +53 -0
  180. backtrader/indicators/contrib/cci_woodies_indicator.py +80 -0
  181. backtrader/indicators/contrib/center_of_gravity_candle_indicator.py +83 -0
  182. backtrader/indicators/contrib/center_of_gravity_indicator.py +70 -0
  183. backtrader/indicators/contrib/cg_oscillator.py +40 -0
  184. backtrader/indicators/contrib/close_line_cci.py +38 -0
  185. backtrader/indicators/contrib/close_price_fractals.py +47 -0
  186. backtrader/indicators/contrib/color3rd_gen_xma_indicator.py +122 -0
  187. backtrader/indicators/contrib/color_bb_candles_indicator.py +108 -0
  188. backtrader/indicators/contrib/color_coppock_indicator.py +157 -0
  189. backtrader/indicators/contrib/color_hma.py +71 -0
  190. backtrader/indicators/contrib/color_j_variation_indicator.py +53 -0
  191. backtrader/indicators/contrib/color_metro_de_marker_indicator.py +78 -0
  192. backtrader/indicators/contrib/color_metro_stochastic_indicator.py +93 -0
  193. backtrader/indicators/contrib/color_metro_wpr_indicator.py +85 -0
  194. backtrader/indicators/contrib/color_schaff_de_marker_trend_cycle.py +92 -0
  195. backtrader/indicators/contrib/color_schaff_trend_cycle_indicator.py +203 -0
  196. backtrader/indicators/contrib/color_step_xccx_indicator.py +193 -0
  197. backtrader/indicators/contrib/color_x2_ma.py +49 -0
  198. backtrader/indicators/contrib/color_x_derivative.py +63 -0
  199. backtrader/indicators/contrib/color_zerolag_de_marker.py +84 -0
  200. backtrader/indicators/contrib/corrected_average_indicator.py +127 -0
  201. backtrader/indicators/contrib/darvas_boxes_system.py +73 -0
  202. backtrader/indicators/contrib/dema_range_channel_color.py +42 -0
  203. backtrader/indicators/contrib/derivative_indicator.py +95 -0
  204. backtrader/indicators/contrib/digital_ft01_indicator.py +112 -0
  205. backtrader/indicators/contrib/digital_macd.py +200 -0
  206. backtrader/indicators/contrib/donchian_channels_system.py +45 -0
  207. backtrader/indicators/contrib/dots_indicator.py +93 -0
  208. backtrader/indicators/contrib/ef_distance_indicator.py +82 -0
  209. backtrader/indicators/contrib/ema_rsi_va.py +80 -0
  210. backtrader/indicators/contrib/envelopes_jp_alonso.py +32 -0
  211. backtrader/indicators/contrib/f2a_ao_indicator.py +120 -0
  212. backtrader/indicators/contrib/fatl_filter.py +179 -0
  213. backtrader/indicators/contrib/fibo_candles_indicator.py +78 -0
  214. backtrader/indicators/contrib/fine_tuning_ma.py +100 -0
  215. backtrader/indicators/contrib/fisher_org_v1.py +102 -0
  216. backtrader/indicators/contrib/fisher_org_v1_sign.py +118 -0
  217. backtrader/indicators/contrib/force_index_ema.py +96 -0
  218. backtrader/indicators/contrib/force_index_ema_2.py +27 -0
  219. backtrader/indicators/contrib/forecast_oscilator.py +145 -0
  220. backtrader/indicators/contrib/fractal_amambk.py +81 -0
  221. backtrader/indicators/contrib/frama_series.py +84 -0
  222. backtrader/indicators/contrib/frasm_av2_indicator.py +104 -0
  223. backtrader/indicators/contrib/go_indicator.py +93 -0
  224. backtrader/indicators/contrib/hlr_indicator.py +95 -0
  225. backtrader/indicators/contrib/hma.py +50 -0
  226. backtrader/indicators/contrib/i4_drfv2.py +34 -0
  227. backtrader/indicators/contrib/i4_drfv3.py +38 -0
  228. backtrader/indicators/contrib/i_anch_mom_indicator.py +72 -0
  229. backtrader/indicators/contrib/i_de_marker_sign_indicator.py +64 -0
  230. backtrader/indicators/contrib/i_gap_indicator.py +45 -0
  231. backtrader/indicators/contrib/i_stoch_komposter_indicator.py +77 -0
  232. backtrader/indicators/contrib/i_trend_indicator.py +125 -0
  233. backtrader/indicators/contrib/iamma_indicator.py +39 -0
  234. backtrader/indicators/contrib/indexed_moving_average.py +33 -0
  235. backtrader/indicators/contrib/instantaneous_trend_filter_indicator.py +51 -0
  236. backtrader/indicators/contrib/inverse_reaction_indicator.py +41 -0
  237. backtrader/indicators/contrib/irsi_sign_indicator.py +95 -0
  238. backtrader/indicators/contrib/iwpr_sign_indicator.py +59 -0
  239. backtrader/indicators/contrib/j_brain_trend1_sig_indicator.py +233 -0
  240. backtrader/indicators/contrib/j_tpo_proxy.py +32 -0
  241. backtrader/indicators/contrib/jma_slope_indicator.py +73 -0
  242. backtrader/indicators/contrib/kalman_filter_indicator.py +119 -0
  243. backtrader/indicators/contrib/kalman_filter_line.py +127 -0
  244. backtrader/indicators/contrib/kama_indicator.py +150 -0
  245. backtrader/indicators/contrib/karacatica_indicator.py +99 -0
  246. backtrader/indicators/contrib/kdj_indicator.py +59 -0
  247. backtrader/indicators/contrib/kwan_ccc_indicator.py +195 -0
  248. backtrader/indicators/contrib/kwan_nrp_indicator.py +113 -0
  249. backtrader/indicators/contrib/kwan_rdp_indicator.py +192 -0
  250. backtrader/indicators/contrib/laguerre_adx_indicator.py +85 -0
  251. backtrader/indicators/contrib/laguerre_filter_indicator.py +66 -0
  252. backtrader/indicators/contrib/laguerre_plus_di_proxy.py +57 -0
  253. backtrader/indicators/contrib/laguerre_roc_indicator.py +81 -0
  254. backtrader/indicators/contrib/le_man_signal_indicator.py +63 -0
  255. backtrader/indicators/contrib/linear_reg_slope_v2_indicator.py +136 -0
  256. backtrader/indicators/contrib/loco_indicator.py +88 -0
  257. backtrader/indicators/contrib/lrma_indicator.py +185 -0
  258. backtrader/indicators/contrib/lsma_angle_indicator.py +106 -0
  259. backtrader/indicators/contrib/ma_rounding_channel_indicator.py +149 -0
  260. backtrader/indicators/contrib/macd2_indicator.py +61 -0
  261. backtrader/indicators/contrib/macd_candle_indicator.py +80 -0
  262. backtrader/indicators/contrib/malr_indicator.py +77 -0
  263. backtrader/indicators/contrib/momentum_candle_sign_indicator.py +51 -0
  264. backtrader/indicators/contrib/moving_average_fn_indicator.py +139 -0
  265. backtrader/indicators/contrib/mt5_stochastic_close_close.py +57 -0
  266. backtrader/indicators/contrib/muv_nor_diff_cloud_indicator.py +107 -0
  267. backtrader/indicators/contrib/non_lag_dot_indicator.py +124 -0
  268. backtrader/indicators/contrib/nrtr_extr_indicator.py +95 -0
  269. backtrader/indicators/contrib/nrtr_indicator.py +95 -0
  270. backtrader/indicators/contrib/p_channel_system.py +40 -0
  271. backtrader/indicators/contrib/percent_envelope.py +37 -0
  272. backtrader/indicators/contrib/percentage_crossover_channel.py +47 -0
  273. backtrader/indicators/contrib/pivot_zig_zag_proxy.py +47 -0
  274. backtrader/indicators/contrib/price_channel_stop_indicator.py +104 -0
  275. backtrader/indicators/contrib/price_extreme_channel.py +35 -0
  276. backtrader/indicators/contrib/qqe_cloud_indicator.py +129 -0
  277. backtrader/indicators/contrib/ravi_indicator.py +40 -0
  278. backtrader/indicators/contrib/raw_close_close_stochastic.py +74 -0
  279. backtrader/indicators/contrib/rd_trend_trigger_indicator.py +51 -0
  280. backtrader/indicators/contrib/renko_level.py +85 -0
  281. backtrader/indicators/contrib/renko_line_break.py +91 -0
  282. backtrader/indicators/contrib/rftl_indicator.py +41 -0
  283. backtrader/indicators/contrib/rkd_indicator.py +53 -0
  284. backtrader/indicators/contrib/roc2_vg_indicator.py +68 -0
  285. backtrader/indicators/contrib/rsi_histogram_indicator.py +43 -0
  286. backtrader/indicators/contrib/rsi_slowdown.py +57 -0
  287. backtrader/indicators/contrib/rsioma_v2.py +41 -0
  288. backtrader/indicators/contrib/rvi_histogram_indicator.py +107 -0
  289. backtrader/indicators/contrib/safe_adx.py +89 -0
  290. backtrader/indicators/contrib/shared_strategy_indicators.py +1651 -0
  291. backtrader/indicators/contrib/sidus_indicator.py +105 -0
  292. backtrader/indicators/contrib/silver_trend_indicator.py +79 -0
  293. backtrader/indicators/contrib/sliding_range_color.py +56 -0
  294. backtrader/indicators/contrib/slow_stoch.py +42 -0
  295. backtrader/indicators/contrib/smoothed_adx_indicator.py +86 -0
  296. backtrader/indicators/contrib/smoothed_rsi.py +31 -0
  297. backtrader/indicators/contrib/spearman_rank_correlation_histogram.py +60 -0
  298. backtrader/indicators/contrib/stalin_indicator.py +152 -0
  299. backtrader/indicators/contrib/starter_laguerre_filter.py +62 -0
  300. backtrader/indicators/contrib/step_manrtr_indicator.py +137 -0
  301. backtrader/indicators/contrib/stochastic_histogram_indicator.py +143 -0
  302. backtrader/indicators/contrib/t3_alarm_indicator.py +125 -0
  303. backtrader/indicators/contrib/t3_average.py +76 -0
  304. backtrader/indicators/contrib/t3_indicator.py +40 -0
  305. backtrader/indicators/contrib/the20s_v020_signal.py +93 -0
  306. backtrader/indicators/contrib/three_candles_indicator.py +70 -0
  307. backtrader/indicators/contrib/three_line_break_indicator.py +64 -0
  308. backtrader/indicators/contrib/time_line.py +57 -0
  309. backtrader/indicators/contrib/trading_channel_index_proxy.py +48 -0
  310. backtrader/indicators/contrib/trend_arrows_indicator.py +109 -0
  311. backtrader/indicators/contrib/trend_continuation_indicator.py +127 -0
  312. backtrader/indicators/contrib/trend_intensity_index_proxy.py +51 -0
  313. backtrader/indicators/contrib/trend_manager_indicator.py +39 -0
  314. backtrader/indicators/contrib/tri_x_candle_indicator.py +51 -0
  315. backtrader/indicators/contrib/trigger_line.py +66 -0
  316. backtrader/indicators/contrib/triple_ema_rate.py +34 -0
  317. backtrader/indicators/contrib/trvi_indicator.py +194 -0
  318. backtrader/indicators/contrib/two_pb_ideal_xosma_indicator.py +127 -0
  319. backtrader/indicators/contrib/ultra_absolutely_no_lag_lwma_color.py +92 -0
  320. backtrader/indicators/contrib/ultra_wpr_indicator.py +173 -0
  321. backtrader/indicators/contrib/up_down_candle_strength.py +68 -0
  322. backtrader/indicators/contrib/vinin_i_trend_indicator.py +139 -0
  323. backtrader/indicators/contrib/volume_weighted_ma_indicator.py +78 -0
  324. backtrader/indicators/contrib/volume_weighted_ma_st_dev_indicator.py +111 -0
  325. backtrader/indicators/contrib/vwap_close_indicator.py +65 -0
  326. backtrader/indicators/contrib/vwma_candle.py +57 -0
  327. backtrader/indicators/contrib/vwma_digit_system.py +70 -0
  328. backtrader/indicators/contrib/wami.py +43 -0
  329. backtrader/indicators/contrib/wprsi_signal_indicator.py +105 -0
  330. backtrader/indicators/contrib/x_de_marker_histogram_vol_direct_indicator.py +145 -0
  331. backtrader/indicators/contrib/x_fisher_indicator.py +64 -0
  332. backtrader/indicators/contrib/xcci_histogram_vol_direct_indicator.py +56 -0
  333. backtrader/indicators/contrib/xcci_histogram_vol_indicator.py +85 -0
  334. backtrader/indicators/contrib/xma_ichimoku.py +163 -0
  335. backtrader/indicators/contrib/xma_ishimoku_channel_indicator.py +65 -0
  336. backtrader/indicators/contrib/xma_ishimoku_line.py +68 -0
  337. backtrader/indicators/contrib/xma_range_bands_indicator.py +107 -0
  338. backtrader/indicators/contrib/xmacd_indicator.py +70 -0
  339. backtrader/indicators/contrib/xrsi_de_marker_histogram.py +67 -0
  340. backtrader/indicators/contrib/xrsi_histogram_vol_direct_indicator.py +52 -0
  341. backtrader/indicators/contrib/xrsi_histogram_vol_indicator.py +81 -0
  342. backtrader/indicators/contrib/xrvi_indicator.py +130 -0
  343. backtrader/indicators/contrib/zero_lag_macd.py +36 -0
  344. backtrader/indicators/contrib/zig_zag_recent_pivot_signal.py +90 -0
  345. backtrader/indicators/contrib/zpf_indicator.py +115 -0
  346. backtrader/indicators/crossover.py +337 -0
  347. backtrader/indicators/dema.py +175 -0
  348. backtrader/indicators/demarker.py +270 -0
  349. backtrader/indicators/deviation.py +284 -0
  350. backtrader/indicators/directionalmove.py +1071 -0
  351. backtrader/indicators/dma.py +112 -0
  352. backtrader/indicators/dpo.py +96 -0
  353. backtrader/indicators/dv2.py +56 -0
  354. backtrader/indicators/ema.py +145 -0
  355. backtrader/indicators/envelope.py +475 -0
  356. backtrader/indicators/hadelta.py +198 -0
  357. backtrader/indicators/heikinashi.py +153 -0
  358. backtrader/indicators/hma.py +153 -0
  359. backtrader/indicators/hurst.py +151 -0
  360. backtrader/indicators/ichimoku.py +267 -0
  361. backtrader/indicators/kama.py +181 -0
  362. backtrader/indicators/kst.py +159 -0
  363. backtrader/indicators/lrsi.py +125 -0
  364. backtrader/indicators/mabase.py +147 -0
  365. backtrader/indicators/macd.py +322 -0
  366. backtrader/indicators/momentum.py +267 -0
  367. backtrader/indicators/moneyflow.py +237 -0
  368. backtrader/indicators/mt5atr.py +124 -0
  369. backtrader/indicators/myind.py +179 -0
  370. backtrader/indicators/obv.py +94 -0
  371. backtrader/indicators/ols.py +265 -0
  372. backtrader/indicators/oscillator.py +161 -0
  373. backtrader/indicators/percentchange.py +83 -0
  374. backtrader/indicators/percentrank.py +46 -0
  375. backtrader/indicators/pivotpoint.py +469 -0
  376. backtrader/indicators/prettygoodoscillator.py +113 -0
  377. backtrader/indicators/priceops_ext.py +123 -0
  378. backtrader/indicators/priceoscillator.py +262 -0
  379. backtrader/indicators/psar.py +212 -0
  380. backtrader/indicators/rmi.py +69 -0
  381. backtrader/indicators/rsi.py +440 -0
  382. backtrader/indicators/sma.py +141 -0
  383. backtrader/indicators/smma.py +116 -0
  384. backtrader/indicators/spread.py +54 -0
  385. backtrader/indicators/stochastic.py +263 -0
  386. backtrader/indicators/supertrend.py +436 -0
  387. backtrader/indicators/trend_ext.py +105 -0
  388. backtrader/indicators/trix.py +202 -0
  389. backtrader/indicators/tsi.py +155 -0
  390. backtrader/indicators/ultimateoscillator.py +158 -0
  391. backtrader/indicators/vortex.py +62 -0
  392. backtrader/indicators/williams.py +194 -0
  393. backtrader/indicators/wma.py +103 -0
  394. backtrader/indicators/zlema.py +135 -0
  395. backtrader/indicators/zlind.py +104 -0
  396. backtrader/linebuffer.py +3155 -0
  397. backtrader/lineiterator.py +2911 -0
  398. backtrader/lineroot.py +1106 -0
  399. backtrader/lineseries.py +2559 -0
  400. backtrader/live_trading/__init__.py +31 -0
  401. backtrader/live_trading/interface.py +404 -0
  402. backtrader/mathsupport.py +94 -0
  403. backtrader/metabase.py +1804 -0
  404. backtrader/mixins/__init__.py +21 -0
  405. backtrader/mixins/singleton.py +118 -0
  406. backtrader/observer.py +106 -0
  407. backtrader/observers/__init__.py +45 -0
  408. backtrader/observers/benchmark.py +126 -0
  409. backtrader/observers/broker.py +184 -0
  410. backtrader/observers/buysell.py +144 -0
  411. backtrader/observers/drawdown.py +161 -0
  412. backtrader/observers/logreturns.py +113 -0
  413. backtrader/observers/timereturn.py +86 -0
  414. backtrader/observers/trade_logger.py +2972 -0
  415. backtrader/observers/tradelogger.py +6 -0
  416. backtrader/observers/trades.py +258 -0
  417. backtrader/order.py +1114 -0
  418. backtrader/parameters.py +2345 -0
  419. backtrader/plot/__init__.py +54 -0
  420. backtrader/plot/finance.py +1022 -0
  421. backtrader/plot/formatters.py +200 -0
  422. backtrader/plot/locator.py +353 -0
  423. backtrader/plot/multicursor.py +495 -0
  424. backtrader/plot/plot.py +2500 -0
  425. backtrader/plot/plot_plotly.py +1351 -0
  426. backtrader/plot/scheme.py +253 -0
  427. backtrader/plot/utils.py +104 -0
  428. backtrader/position.py +290 -0
  429. backtrader/position_modes.py +132 -0
  430. backtrader/profiles.py +254 -0
  431. backtrader/reports/__init__.py +39 -0
  432. backtrader/reports/charts.py +371 -0
  433. backtrader/reports/performance.py +620 -0
  434. backtrader/reports/reporter.py +660 -0
  435. backtrader/resamplerfilter.py +1001 -0
  436. backtrader/signal.py +118 -0
  437. backtrader/signals/__init__.py +17 -0
  438. backtrader/sizer.py +114 -0
  439. backtrader/sizers/__init__.py +26 -0
  440. backtrader/sizers/fixedsize.py +161 -0
  441. backtrader/sizers/percents_sizer.py +119 -0
  442. backtrader/store.py +221 -0
  443. backtrader/stores/__init__.py +33 -0
  444. backtrader/stores/btapistore.py +15506 -0
  445. backtrader/stores/livestore.py +137 -0
  446. backtrader/stores/vchartfile.py +96 -0
  447. backtrader/strategy.py +3655 -0
  448. backtrader/talib.py +280 -0
  449. backtrader/test_helpers.py +96 -0
  450. backtrader/timer.py +358 -0
  451. backtrader/trade.py +442 -0
  452. backtrader/tradingcal.py +361 -0
  453. backtrader/utils/__init__.py +68 -0
  454. backtrader/utils/autodict.py +251 -0
  455. backtrader/utils/date.py +71 -0
  456. backtrader/utils/dateintern.py +509 -0
  457. backtrader/utils/flushfile.py +94 -0
  458. backtrader/utils/fractal.py +101 -0
  459. backtrader/utils/get_metrics.py +101 -0
  460. backtrader/utils/load_data.py +209 -0
  461. backtrader/utils/log_message.py +998 -0
  462. backtrader/utils/ordereddefaultdict.py +75 -0
  463. backtrader/utils/py3.py +296 -0
  464. backtrader/version.py +21 -0
  465. backtrader/writer.py +372 -0
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env python
2
+ """Functional-test indicators migrated to contrib.
3
+
4
+ Generated from a single functional strategy module to preserve file-local
5
+ helper functions and constants without cross-test name collisions.
6
+ """
7
+
8
+ from .. import Indicator
9
+
10
+ __all__ = [
11
+ "ThreeLineBreakIndicator",
12
+ ]
13
+
14
+
15
+ class ThreeLineBreakIndicator(Indicator):
16
+ """Three Line Break indicator used as a higher-timeframe trend signal source.
17
+
18
+ The indicator tracks a directional swing state based on the last
19
+ ``lines_break`` bars. A bearish-to-bullish and bullish-to-bearish shift
20
+ is confirmed by breakouts above the recent highs or below the recent lows.
21
+
22
+ Output lines:
23
+ - ``trend``: ``1.0`` for bullish trend, ``0.0`` for bearish trend.
24
+ - ``line_high``: current bar high value.
25
+ - ``line_low``: current bar low value.
26
+ """
27
+
28
+ lines = ("trend", "line_high", "line_low")
29
+ params = (("lines_break", 3),)
30
+
31
+ def __init__(self):
32
+ """Initialize internal swing state and minimum period.
33
+
34
+ Args:
35
+ lines_break: Number of bars used for the breakout envelope.
36
+ """
37
+ self._swing = True
38
+ self._initialized = False
39
+ self.addminperiod(int(self.p.lines_break) + 2)
40
+
41
+ def next(self):
42
+ """Advance the Three Line Break trend and output the current trend lines.
43
+
44
+ Returns:
45
+ None.
46
+ """
47
+ lines_break = int(self.p.lines_break)
48
+ if len(self.data) <= lines_break:
49
+ self.lines.trend[0] = 0.0 if self._swing else 1.0
50
+ self.lines.line_high[0] = float(self.data.high[0])
51
+ self.lines.line_low[0] = float(self.data.low[0])
52
+ return
53
+
54
+ hh = max(float(self.data.high[-i]) for i in range(1, lines_break + 1))
55
+ ll = min(float(self.data.low[-i]) for i in range(1, lines_break + 1))
56
+
57
+ if self._swing and float(self.data.low[0]) < ll:
58
+ self._swing = False
59
+ if (not self._swing) and float(self.data.high[0]) > hh:
60
+ self._swing = True
61
+
62
+ self.lines.line_high[0] = float(self.data.high[0])
63
+ self.lines.line_low[0] = float(self.data.low[0])
64
+ self.lines.trend[0] = 0.0 if self._swing else 1.0
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env python
2
+ """Functional-test indicators migrated to contrib.
3
+
4
+ Generated from a single functional strategy module to preserve file-local
5
+ helper functions and constants without cross-test name collisions.
6
+ """
7
+
8
+ from backtrader.utils.dateintern import num2date
9
+
10
+ from .. import Indicator
11
+
12
+ __all__ = [
13
+ "TimeLine",
14
+ ]
15
+
16
+
17
+ class TimeLine(Indicator):
18
+ """Time average price line indicator
19
+
20
+ Calculate the cumulative average of the day's closing prices as the time average price line
21
+ """
22
+
23
+ lines = ("day_avg_price",)
24
+ params = (("day_end_time", (15, 0, 0)),)
25
+
26
+ def __init__(self):
27
+ """Initialize the TimeLine indicator.
28
+
29
+ Creates an empty list to store closing prices for the current day.
30
+ The cumulative average of these prices will be calculated as the
31
+ time average price line.
32
+ """
33
+ self.day_close_price_list = []
34
+
35
+ def next(self):
36
+ """Calculate the time average price for the current bar.
37
+
38
+ This method is called for each bar in the data series. It:
39
+ 1. Appends the current bar's close price to the day's price list
40
+ 2. Calculates the cumulative average of all prices in the list
41
+ 3. Resets the price list at the end of the trading day
42
+
43
+ The time average price line is useful for intraday strategies as it
44
+ represents the average entry price of all market participants throughout
45
+ the day.
46
+ """
47
+ self.day_close_price_list.append(self.data.close[0])
48
+ self.lines.day_avg_price[0] = sum(self.day_close_price_list) / len(
49
+ self.day_close_price_list
50
+ )
51
+
52
+ self.current_datetime = num2date(self.data.datetime[0])
53
+ self.current_hour = self.current_datetime.hour
54
+ self.current_minute = self.current_datetime.minute
55
+ day_end_hour, day_end_minute, _ = self.p.day_end_time
56
+ if self.current_hour == day_end_hour and self.current_minute == day_end_minute:
57
+ self.day_close_price_list = []
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env python
2
+ """Functional-test indicators migrated to contrib.
3
+
4
+ Generated from a single functional strategy module to preserve file-local
5
+ helper functions and constants without cross-test name collisions.
6
+ """
7
+
8
+ from .. import (
9
+ Indicator,
10
+ SimpleMovingAverage,
11
+ StandardDeviation,
12
+ )
13
+
14
+ __all__ = [
15
+ "TradingChannelIndexProxy",
16
+ ]
17
+
18
+
19
+ class TradingChannelIndexProxy(Indicator):
20
+ """Indicator computing Trading Channel Index (TCI) and quantized state."""
21
+
22
+ lines = ("tci", "color_index")
23
+ params = (
24
+ ("length1", 60),
25
+ ("length2", 30),
26
+ ("coeff", 0.015),
27
+ ("high_level", 50),
28
+ ("low_level", -50),
29
+ )
30
+
31
+ def __init__(self):
32
+ """Initialize indicator inputs used by the TCI computation."""
33
+ self.sma1 = SimpleMovingAverage(self.data.close, period=self.p.length1)
34
+ self.dev = StandardDeviation(self.data.close, period=self.p.length1)
35
+ self.addminperiod(max(self.p.length1, self.p.length2) + 5)
36
+
37
+ def next(self):
38
+ """Compute raw TCI and discretized color state for the current bar."""
39
+ base = float(self.sma1[0])
40
+ dev = max(float(self.dev[0]), 1e-8)
41
+ raw = (float(self.data.close[0]) - base) / (dev * self.p.coeff)
42
+ self.lines.tci[0] = raw
43
+ if raw <= self.p.low_level:
44
+ self.lines.color_index[0] = 0.0
45
+ elif raw >= self.p.high_level:
46
+ self.lines.color_index[0] = 4.0
47
+ else:
48
+ self.lines.color_index[0] = 2.0
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/env python
2
+ """Functional-test indicators migrated to contrib.
3
+
4
+ Generated from a single functional strategy module to preserve file-local
5
+ helper functions and constants without cross-test name collisions.
6
+ """
7
+
8
+ import math
9
+
10
+ from .. import Indicator
11
+
12
+ __all__ = [
13
+ "TrendArrowsIndicator",
14
+ ]
15
+
16
+
17
+ class TrendArrowsIndicator(Indicator):
18
+ """Reconstructs trend_arrows indicator.
19
+
20
+ Computes AverageHigh (avg of highest highs over iPeriod sub-windows)
21
+ and AverageLow (avg of lowest lows over iPeriod sub-windows).
22
+ TrendUp = LL when close > HH; TrendDown = HH when close < LL;
23
+ else continues previous trend.
24
+ SignUp when TrendUp appears fresh; SignDown when TrendDown appears fresh.
25
+ Buffers: 0=TrendUp, 1=TrendDown, 2=SignUp(buy), 3=SignDown(sell).
26
+ """
27
+
28
+ lines = ("trend_up", "trend_down", "sign_up", "sign_down")
29
+ params = (
30
+ ("iperiod", 15),
31
+ ("ifullperiods", 1),
32
+ )
33
+
34
+ def __init__(self):
35
+ """Initialize cached period lengths for trend arrow reconstruction."""
36
+ self._ip = int(self.p.iperiod)
37
+ self._ifp = int(self.p.ifullperiods)
38
+ self._window = self._ip + self._ifp
39
+ self.addminperiod(self._window + 2)
40
+
41
+ def next(self):
42
+ """Compute trend and signal buffers for the current bar.
43
+
44
+ The method:
45
+ 1. Splits the lookback window into `iperiod` sub-windows and averages highs/lows.
46
+ 2. Generates TrendUp/TrendDown buffers based on close relative to aggregated levels.
47
+ 3. Emits SignUp/SignDown only on fresh transitions from inactive to active.
48
+ """
49
+ ip = self._ip
50
+ window = self._window
51
+
52
+ # Compute AverageHigh: average of highest highs over ip sub-windows
53
+ segment_size = max(window // ip, 1)
54
+ hh_sum = 0.0
55
+ ll_sum = 0.0
56
+ count = 0
57
+ for seg in range(ip):
58
+ start = seg * segment_size
59
+ end = min(start + segment_size, window)
60
+ if start >= len(self.data):
61
+ break
62
+ seg_high = -1e30
63
+ seg_low = 1e30
64
+ for k in range(start, min(end, len(self.data))):
65
+ h = float(self.data.high[-k]) if k > 0 else float(self.data.high[0])
66
+ low_price = float(self.data.low[-k]) if k > 0 else float(self.data.low[0])
67
+ if h > seg_high:
68
+ seg_high = h
69
+ if low_price < seg_low:
70
+ seg_low = low_price
71
+ hh_sum += seg_high
72
+ ll_sum += seg_low
73
+ count += 1
74
+
75
+ hh = hh_sum / count if count else float(self.data.high[0])
76
+ ll = ll_sum / count if count else float(self.data.low[0])
77
+
78
+ close_val = float(self.data.close[0])
79
+ prev_tu = float(self.lines.trend_up[-1]) if len(self.lines.trend_up) > 1 else 0.0
80
+ prev_td = float(self.lines.trend_down[-1]) if len(self.lines.trend_down) > 1 else 0.0
81
+ if math.isnan(prev_tu):
82
+ prev_tu = 0.0
83
+ if math.isnan(prev_td):
84
+ prev_td = 0.0
85
+
86
+ tu = 0.0
87
+ td = 0.0
88
+
89
+ if close_val > hh:
90
+ tu = ll
91
+ elif close_val < ll:
92
+ td = hh
93
+ else:
94
+ if prev_td != 0.0:
95
+ td = hh
96
+ if prev_tu != 0.0:
97
+ tu = ll
98
+
99
+ su = 0.0
100
+ sd = 0.0
101
+ if prev_tu == 0.0 and tu != 0.0:
102
+ su = tu
103
+ if prev_td == 0.0 and td != 0.0:
104
+ sd = td
105
+
106
+ self.lines.trend_up[0] = tu
107
+ self.lines.trend_down[0] = td
108
+ self.lines.sign_up[0] = su
109
+ self.lines.sign_down[0] = sd
@@ -0,0 +1,127 @@
1
+ #!/usr/bin/env python
2
+ """Functional-test indicators migrated to contrib.
3
+
4
+ Generated from a single functional strategy module to preserve file-local
5
+ helper functions and constants without cross-test name collisions.
6
+ """
7
+
8
+ from .. import (
9
+ ExponentialMovingAverage,
10
+ Indicator,
11
+ SimpleMovingAverage,
12
+ SmoothedMovingAverage,
13
+ WeightedMovingAverage,
14
+ )
15
+
16
+ __all__ = [
17
+ "TrendContinuationIndicator",
18
+ ]
19
+
20
+
21
+ def resolve_ma_class(name):
22
+ """Resolve a strategy MA mode string to a Backtrader MA indicator class."""
23
+ mode = str(name).lower()
24
+ if mode in {"mode_sma", "sma"}:
25
+ return SimpleMovingAverage
26
+ if mode in {
27
+ "mode_ema",
28
+ "ema",
29
+ "mode_jjma",
30
+ "jjma",
31
+ "mode_jurx",
32
+ "jurx",
33
+ "mode_parma",
34
+ "parma",
35
+ "mode_t3",
36
+ "t3",
37
+ "mode_vidya",
38
+ "vidya",
39
+ "mode_ama",
40
+ "ama",
41
+ }:
42
+ return ExponentialMovingAverage
43
+ if mode in {"mode_smma", "smma"}:
44
+ return SmoothedMovingAverage
45
+ return WeightedMovingAverage
46
+
47
+
48
+ def resolve_price_line(data, mode):
49
+ """Resolve requested price source string to the corresponding line in data.
50
+
51
+ Args:
52
+ data: Backtrader data feed.
53
+ mode: Configured price selector such as ``price_close`` or ``price_open``.
54
+
55
+ Returns:
56
+ A line object for the selected price representation.
57
+ """
58
+ price_mode = str(mode).lower()
59
+ if price_mode in {"price_open", "open"}:
60
+ return data.open
61
+ if price_mode in {"price_high", "high"}:
62
+ return data.high
63
+ if price_mode in {"price_low", "low"}:
64
+ return data.low
65
+ if price_mode in {"price_median", "median"}:
66
+ return (data.high + data.low) / 2.0
67
+ if price_mode in {"price_typical", "typical"}:
68
+ return (data.high + data.low + data.close) / 3.0
69
+ if price_mode in {"price_weighted", "weighted"}:
70
+ return (2.0 * data.close + data.high + data.low) / 4.0
71
+ if price_mode in {"price_simpl", "simpl"}:
72
+ return (data.open + data.close) / 2.0
73
+ if price_mode in {"price_quarter", "quarter"}:
74
+ return (data.high + data.low + data.open + data.close) / 4.0
75
+ return data.close
76
+
77
+
78
+ class TrendContinuationIndicator(Indicator):
79
+ """Momentum continuation indicator using smoothed up/down directional components."""
80
+
81
+ lines = ("up", "down")
82
+ params = (
83
+ ("nperiod", 20),
84
+ ("xmethod", "t3"),
85
+ ("xperiod", 5),
86
+ ("xphase", 61),
87
+ ("ipc", "price_close"),
88
+ )
89
+
90
+ def __init__(self):
91
+ """Resolve price source and moving-average class then enforce warm-up period."""
92
+ self._price = resolve_price_line(self.data, self.p.ipc)
93
+ self._ma_cls = resolve_ma_class(self.p.xmethod)
94
+ self.addminperiod(int(self.p.nperiod) + int(self.p.xperiod) + 5)
95
+
96
+ def next(self):
97
+ """Compute smoothed up/down continuation values from directional price differences."""
98
+ nperiod = max(2, int(self.p.nperiod))
99
+ float(self._price[0]) - float(self._price[-1])
100
+ positives = []
101
+ negatives = []
102
+ cf_p = []
103
+ cf_n = []
104
+ running_p = 0.0
105
+ running_n = 0.0
106
+ for i in range(nperiod):
107
+ diff = float(self._price[-i]) - float(self._price[-i - 1])
108
+ pos = -diff if diff > 0 else 0.0
109
+ neg = diff if diff < 0 else 0.0
110
+ running_p += pos
111
+ running_n += neg
112
+ positives.append(pos)
113
+ negatives.append(neg)
114
+ cf_p.append(running_p)
115
+ cf_n.append(running_n)
116
+ ch_p = sum(positives)
117
+ ch_n = sum(negatives)
118
+ cff_p = sum(cf_p)
119
+ cff_n = sum(cf_n)
120
+ k_p = ch_p - cff_n
121
+ k_n = ch_n - cff_p
122
+ period = max(1, int(self.p.xperiod))
123
+ alpha = 2.0 / (period + 1.0)
124
+ prev_up = float(self.lines.up[-1]) if len(self) > 0 else k_p
125
+ prev_dn = float(self.lines.down[-1]) if len(self) > 0 else k_n
126
+ self.lines.up[0] = alpha * k_p + (1.0 - alpha) * prev_up if len(self) > 0 else k_p
127
+ self.lines.down[0] = alpha * k_n + (1.0 - alpha) * prev_dn if len(self) > 0 else k_n
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env python
2
+ """Functional-test indicators migrated to contrib.
3
+
4
+ Generated from a single functional strategy module to preserve file-local
5
+ helper functions and constants without cross-test name collisions.
6
+ """
7
+
8
+ from .. import (
9
+ ExponentialMovingAverage,
10
+ Indicator,
11
+ SimpleMovingAverage,
12
+ StandardDeviation,
13
+ )
14
+
15
+ __all__ = [
16
+ "TrendIntensityIndexProxy",
17
+ ]
18
+
19
+
20
+ class TrendIntensityIndexProxy(Indicator):
21
+ """Indicator computing Trend Intensity Index (TII) and quantized state."""
22
+
23
+ lines = ("tii", "color_index")
24
+ params = (
25
+ ("length1", 60),
26
+ ("length2", 30),
27
+ ("high_level", 80),
28
+ ("low_level", 20),
29
+ )
30
+
31
+ def __init__(self):
32
+ """Initialize SMA/EMA/dev components for TII calculation."""
33
+ self.sma = SimpleMovingAverage(self.data.close, period=self.p.length1)
34
+ self.smooth = ExponentialMovingAverage(self.data.close, period=self.p.length2)
35
+ self.dev = StandardDeviation(self.data.close, period=self.p.length1)
36
+ self.addminperiod(max(self.p.length1, self.p.length2) + 5)
37
+
38
+ def next(self):
39
+ """Compute normalized TII value and discretized color state."""
40
+ baseline = float(self.sma[0])
41
+ smoothed = float(self.smooth[0])
42
+ dev = max(float(self.dev[0]), 1e-8)
43
+ value = 50.0 + (smoothed - baseline) / dev * 10.0
44
+ value = max(0.0, min(100.0, value))
45
+ self.lines.tii[0] = value
46
+ if value <= self.p.low_level:
47
+ self.lines.color_index[0] = 0.0
48
+ elif value >= self.p.high_level:
49
+ self.lines.color_index[0] = 4.0
50
+ else:
51
+ self.lines.color_index[0] = 2.0
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env python
2
+ """Functional-test indicators migrated to contrib.
3
+
4
+ Generated from a single functional strategy module to preserve file-local
5
+ helper functions and constants without cross-test name collisions.
6
+ """
7
+
8
+ from .. import (
9
+ Indicator,
10
+ SimpleMovingAverage,
11
+ )
12
+
13
+ __all__ = [
14
+ "TrendManagerIndicator",
15
+ ]
16
+
17
+
18
+ class TrendManagerIndicator(Indicator):
19
+ """Simple MA-based trend indicator generating color state."""
20
+
21
+ lines = ("color_state", "fast_line", "slow_line")
22
+ params = (
23
+ ("length1", 23),
24
+ ("length2", 84),
25
+ )
26
+
27
+ def __init__(self):
28
+ """Initialize fast and slow SMAs for crossover detection."""
29
+ self.fast = SimpleMovingAverage(self.data.close, period=self.p.length1)
30
+ self.slow = SimpleMovingAverage(self.data.close, period=self.p.length2)
31
+ self.addminperiod(max(self.p.length1, self.p.length2) + 3)
32
+
33
+ def next(self):
34
+ """Update trend lines and color state on each bar."""
35
+ fast = float(self.fast[0])
36
+ slow = float(self.slow[0])
37
+ self.lines.fast_line[0] = fast
38
+ self.lines.slow_line[0] = slow
39
+ self.lines.color_state[0] = 0.0 if fast >= slow else 1.0
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env python
2
+ """Functional-test indicators migrated to contrib.
3
+
4
+ Generated from a single functional strategy module to preserve file-local
5
+ helper functions and constants without cross-test name collisions.
6
+ """
7
+
8
+ from .. import (
9
+ TRIX,
10
+ Indicator,
11
+ )
12
+
13
+ __all__ = [
14
+ "TriXCandleIndicator",
15
+ ]
16
+
17
+
18
+ class TriXCandleIndicator(Indicator):
19
+ """Indicator that transforms TRIX values into a candle-style representation."""
20
+
21
+ lines = ("o", "h", "l", "c", "color")
22
+ params = (("period", 14),)
23
+
24
+ def __init__(self):
25
+ """Initialize TRIX line calculators and minimum data warmup."""
26
+ self.addminperiod(int(self.p.period) + 2)
27
+ self.trix_open = TRIX(self.data.open, period=int(self.p.period))
28
+ self.trix_high = TRIX(self.data.high, period=int(self.p.period))
29
+ self.trix_low = TRIX(self.data.low, period=int(self.p.period))
30
+ self.trix_close = TRIX(self.data.close, period=int(self.p.period))
31
+
32
+ def next(self):
33
+ """Compute per-bar TRIX O/H/L/C proxy values and color state."""
34
+ o = float(self.trix_open[0])
35
+ h = float(self.trix_high[0])
36
+ low_price = float(self.trix_low[0])
37
+ c = float(self.trix_close[0])
38
+ mx = max(o, c)
39
+ mn = min(o, c)
40
+ h = max(mx, h)
41
+ low_price = min(mn, low_price)
42
+ color = 1
43
+ if o < c:
44
+ color = 2
45
+ elif o > c:
46
+ color = 0
47
+ self.lines.o[0] = o
48
+ self.lines.h[0] = h
49
+ self.lines.l[0] = low_price
50
+ self.lines.c[0] = c
51
+ self.lines.color[0] = color
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env python
2
+ """Functional-test indicators migrated to contrib.
3
+
4
+ Generated from a single functional strategy module to preserve file-local
5
+ helper functions and constants without cross-test name collisions.
6
+ """
7
+
8
+ from .. import Indicator
9
+
10
+ __all__ = [
11
+ "TriggerLine",
12
+ ]
13
+
14
+
15
+ class TriggerLine(Indicator):
16
+ """Trigger-line indicator tracking momentum-driven main and signal lines."""
17
+
18
+ lines = ("main", "signal")
19
+ params = (
20
+ ("rperiod", 24),
21
+ ("lsma_period", 6),
22
+ ("price", "close"),
23
+ )
24
+
25
+ def __init__(self):
26
+ """Initialize indicator coefficients and warmup."""
27
+ self.addminperiod(int(self.p.rperiod) + 3)
28
+ self.lengthvar = (int(self.p.rperiod) + 1) / 3.0
29
+ self.kr = 6.0 / (float(self.p.rperiod) * (float(self.p.rperiod) + 1.0))
30
+ self.klsma = 2.0 / (float(self.p.lsma_period) + 1.0)
31
+
32
+ def _price(self, index=0):
33
+ p = str(self.p.price).lower()
34
+ if p == "open":
35
+ return float(self.data.open[index])
36
+ if p == "high":
37
+ return float(self.data.high[index])
38
+ if p == "low":
39
+ return float(self.data.low[index])
40
+ if p == "median":
41
+ return (float(self.data.high[index]) + float(self.data.low[index])) / 2.0
42
+ if p == "typical":
43
+ return (
44
+ float(self.data.high[index])
45
+ + float(self.data.low[index])
46
+ + float(self.data.close[index])
47
+ ) / 3.0
48
+ if p == "weighted":
49
+ return (
50
+ float(self.data.high[index])
51
+ + float(self.data.low[index])
52
+ + 2.0 * float(self.data.close[index])
53
+ ) / 4.0
54
+ return float(self.data.close[index])
55
+
56
+ def next(self):
57
+ """Compute main and signal values for current bar."""
58
+ total = 0.0
59
+ rp = int(self.p.rperiod)
60
+ for iii in range(rp, 0, -1):
61
+ idx = -(rp - iii)
62
+ total += (iii - self.lengthvar) * self._price(idx)
63
+ main = total * self.kr
64
+ prev_main = float(self.lines.main[-1]) if len(self) > 1 else main
65
+ self.lines.main[0] = main
66
+ self.lines.signal[0] = prev_main + (main - prev_main) * self.klsma
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env python
2
+ """Functional-test indicators migrated to contrib.
3
+
4
+ Generated from a single functional strategy module to preserve file-local
5
+ helper functions and constants without cross-test name collisions.
6
+ """
7
+
8
+ from .. import (
9
+ EMA,
10
+ Indicator,
11
+ )
12
+
13
+ __all__ = [
14
+ "TripleEmaRate",
15
+ ]
16
+
17
+
18
+ class TripleEmaRate(Indicator):
19
+ """TRIX: the bar-over-bar rate of change of a triple-smoothed EMA."""
20
+
21
+ lines = ("value",)
22
+ params = (("period", 14),)
23
+
24
+ def __init__(self):
25
+ """Build the three chained EMAs and set the minimum warm-up period."""
26
+ self.ema1 = EMA(self.data, period=self.p.period)
27
+ self.ema2 = EMA(self.ema1, period=self.p.period)
28
+ self.ema3 = EMA(self.ema2, period=self.p.period)
29
+ self.addminperiod(self.p.period * 3 + 2)
30
+
31
+ def next(self):
32
+ """Emit the fractional change of the triple EMA versus the prior bar."""
33
+ prev = float(self.ema3[-1])
34
+ self.lines.value[0] = (float(self.ema3[0]) - prev) / prev if prev else 0.0