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,223 @@
1
+ #!/usr/bin/env python
2
+ """Bollinger Bands Indicator Module - Volatility bands.
3
+
4
+ This module provides the Bollinger Bands indicator developed by
5
+ John Bollinger in the 1980s for measuring market volatility.
6
+
7
+ Classes:
8
+ BollingerBands: Bollinger Bands indicator (alias: BBands).
9
+ BollingerBandsPct: Bollinger Bands with %B line.
10
+
11
+ Example:
12
+ class MyStrategy(bt.Strategy):
13
+ def __init__(self):
14
+ self.bbands = bt.indicators.BBands(self.data, period=20, devfactor=2.0)
15
+
16
+ def next(self):
17
+ if self.data.close[0] < self.bbands.bot[0]:
18
+ self.buy()
19
+ elif self.data.close[0] > self.bbands.top[0]:
20
+ self.sell()
21
+ """
22
+
23
+ import math
24
+
25
+ from . import Indicator, MovAv
26
+
27
+
28
+ class BollingerBands(Indicator):
29
+ """
30
+ Defined by John Bollinger in the 80s. It measures volatility by defining
31
+ upper and lower bands at distance x standard deviations
32
+
33
+ Formula:
34
+ - midband = SimpleMovingAverage(close, period)
35
+ - topband = midband + devfactor * StandardDeviation(data, period)
36
+ - botband = midband - devfactor * StandardDeviation(data, period)
37
+
38
+ See:
39
+ - http://en.wikipedia.org/wiki/Bollinger_Bands
40
+ """
41
+
42
+ alias = ("BBands",)
43
+
44
+ lines = (
45
+ "mid",
46
+ "top",
47
+ "bot",
48
+ )
49
+ params = (
50
+ ("period", 20),
51
+ ("devfactor", 2.0),
52
+ ("movav", MovAv.Simple),
53
+ )
54
+
55
+ plotinfo = {"subplot": False}
56
+ plotlines = {
57
+ "mid": {"ls": "--"},
58
+ "top": {"_samecolor": True},
59
+ "bot": {"_samecolor": True},
60
+ }
61
+
62
+ def _plotlabel(self):
63
+ plabels = [self.p.period, self.p.devfactor]
64
+ plabels += [self.p.movav] * self.p.notdefault("movav")
65
+ return plabels
66
+
67
+ def __init__(self):
68
+ """Initialize the Bollinger Bands indicator.
69
+
70
+ Sets minimum period to the configured period.
71
+ """
72
+ super().__init__()
73
+ self.addminperiod(self.p.period)
74
+
75
+ def next(self):
76
+ """Calculate Bollinger Bands for the current bar.
77
+
78
+ Calculates mid (SMA), top (mid + devfactor*stddev), and
79
+ bot (mid - devfactor*stddev) bands.
80
+ """
81
+ period = self.p.period
82
+ devfactor = self.p.devfactor
83
+
84
+ # Calculate SMA (mid)
85
+ data_sum = 0.0
86
+ data_sq_sum = 0.0
87
+ for i in range(period):
88
+ val = self.data[-i]
89
+ data_sum += val
90
+ data_sq_sum += val * val
91
+
92
+ mid = data_sum / period
93
+
94
+ # Calculate StdDev
95
+ meansq = data_sq_sum / period
96
+ sqmean = mid * mid
97
+ diff = abs(meansq - sqmean)
98
+ stddev = math.sqrt(max(0, diff))
99
+
100
+ # Set lines
101
+ self.lines.mid[0] = mid
102
+ self.lines.top[0] = mid + devfactor * stddev
103
+ self.lines.bot[0] = mid - devfactor * stddev
104
+
105
+ def once(self, start, end):
106
+ """Calculate Bollinger Bands in runonce mode."""
107
+ darray = self.data.array
108
+ mid_array = self.lines.mid.array
109
+ top_array = self.lines.top.array
110
+ bot_array = self.lines.bot.array
111
+ period = self.p.period
112
+ devfactor = self.p.devfactor
113
+ actual_end = min(end, len(darray))
114
+ darray_len = len(darray)
115
+
116
+ # Ensure arrays are sized
117
+ for arr in [mid_array, top_array, bot_array]:
118
+ while len(arr) < end:
119
+ arr.append(float("nan"))
120
+
121
+ # PERFORMANCE: Cache constants and functions
122
+ nan_val = float("nan")
123
+ sqrt = math.sqrt
124
+
125
+ # Pre-fill warmup with NaN
126
+ for i in range(min(period - 1, darray_len)):
127
+ mid_array[i] = nan_val
128
+ top_array[i] = nan_val
129
+ bot_array[i] = nan_val
130
+
131
+ for i in range(period - 1, actual_end):
132
+ data_sum = 0.0
133
+ data_sq_sum = 0.0
134
+ has_nan = False
135
+
136
+ # PERFORMANCE: Simplified loop with faster NaN check
137
+ for j in range(period):
138
+ idx = i - j
139
+ if 0 <= idx < darray_len:
140
+ val = darray[idx]
141
+ # PERFORMANCE: Use val != val for NaN check (faster)
142
+ if val != val:
143
+ has_nan = True
144
+ break
145
+ data_sum += val
146
+ data_sq_sum += val * val
147
+
148
+ if has_nan:
149
+ mid_array[i] = nan_val
150
+ top_array[i] = nan_val
151
+ bot_array[i] = nan_val
152
+ continue
153
+
154
+ mid = data_sum / period
155
+ meansq = data_sq_sum / period
156
+ sqmean = mid * mid
157
+ diff = abs(meansq - sqmean)
158
+ stddev = sqrt(max(0, diff))
159
+
160
+ mid_array[i] = mid
161
+ top_array[i] = mid + devfactor * stddev
162
+ bot_array[i] = mid - devfactor * stddev
163
+
164
+
165
+ # Bollinger Bands Percentage indicator
166
+ class BollingerBandsPct(BollingerBands):
167
+ """
168
+ Extends the Bollinger Bands with a Percentage line
169
+ """
170
+
171
+ lines = ("pctb",)
172
+ plotlines = {"pctb": {"_name": "%B"}} # display the line as %B on chart
173
+
174
+ def __init__(self):
175
+ """Initialize the Bollinger Bands %B indicator.
176
+
177
+ Extends Bollinger Bands with percentage calculation.
178
+ """
179
+ super().__init__()
180
+
181
+ def next(self):
182
+ """Calculate %B line for the current bar.
183
+
184
+ Formula: %B = (price - bot) / (top - bot)
185
+ """
186
+ super().next()
187
+ top = self.lines.top[0]
188
+ bot = self.lines.bot[0]
189
+ diff = top - bot
190
+ if diff != 0:
191
+ self.lines.pctb[0] = (self.data[0] - bot) / diff
192
+ else:
193
+ self.lines.pctb[0] = 0.0
194
+
195
+ def once(self, start, end):
196
+ """Calculate %B line in runonce mode."""
197
+ super().once(start, end)
198
+ darray = self.data.array
199
+ top_array = self.lines.top.array
200
+ bot_array = self.lines.bot.array
201
+ pctb_array = self.lines.pctb.array
202
+
203
+ while len(pctb_array) < end:
204
+ pctb_array.append(float("nan"))
205
+
206
+ for i in range(start, min(end, len(darray), len(top_array), len(bot_array))):
207
+ top = top_array[i] if i < len(top_array) else 0.0
208
+ bot = bot_array[i] if i < len(bot_array) else 0.0
209
+ data_val = darray[i] if i < len(darray) else 0.0
210
+
211
+ if (
212
+ isinstance(top, float)
213
+ and math.isnan(top)
214
+ or isinstance(bot, float)
215
+ and math.isnan(bot)
216
+ ):
217
+ pctb_array[i] = float("nan")
218
+ else:
219
+ diff = top - bot
220
+ if diff != 0:
221
+ pctb_array[i] = (data_val - bot) / diff
222
+ else:
223
+ pctb_array[i] = 0.0
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env python
2
+ """CCI Indicator Module - Commodity Channel Index.
3
+
4
+ This module provides the CCI (Commodity Channel Index) indicator
5
+ introduced by Donald Lambert in 1980 for identifying cyclical trends.
6
+
7
+ Classes:
8
+ CommodityChannelIndex: CCI indicator (alias: CCI).
9
+
10
+ Example:
11
+ class MyStrategy(bt.Strategy):
12
+ def __init__(self):
13
+ self.cci = bt.indicators.CCI(self.data, period=20)
14
+
15
+ def next(self):
16
+ if self.cci[0] > 100:
17
+ self.sell()
18
+ elif self.cci[0] < -100:
19
+ self.buy()
20
+ """
21
+
22
+ from . import DivByZero, Indicator, MeanDev, MovAv
23
+
24
+
25
+ class CommodityChannelIndex(Indicator):
26
+ """
27
+ Introduced by Donald Lambert in 1980 to measure variations of the
28
+ "typical price" (see below) from its mean to identify extremes and
29
+ reversals
30
+
31
+ Formula:
32
+ - tp = typical_price = (high + low + close) / 3
33
+ - tpmean = MovingAverage(tp, period)
34
+ - deviation = tp - tpmean
35
+ - meandev = MeanDeviation(tp)
36
+ - cci = deviation / (meandeviation * factor)
37
+
38
+ See:
39
+ - https://en.wikipedia.org/wiki/Commodity_channel_index
40
+ """
41
+
42
+ alias = ("CCI",)
43
+
44
+ lines = ("cci",)
45
+
46
+ params = (
47
+ ("period", 20),
48
+ ("factor", 0.015),
49
+ ("movav", MovAv.Simple),
50
+ ("upperband", 100.0),
51
+ ("lowerband", -100.0),
52
+ )
53
+
54
+ def _plotlabel(self):
55
+ plabels = [self.p.period, self.p.factor]
56
+ plabels += [self.p.movav] * self.p.notdefault("movav")
57
+ return plabels
58
+
59
+ def _plotinit(self):
60
+ self.plotinfo.plotyhlines = [0.0, self.p.upperband, self.p.lowerband]
61
+
62
+ def __init__(self):
63
+ """Initialize the CCI indicator calculation.
64
+
65
+ Calculates:
66
+ 1. Typical price: (high + low + close) / 3
67
+ 2. Moving average of typical price
68
+ 3. Deviation from the mean
69
+ 4. Mean deviation
70
+ 5. CCI = deviation / (factor * mean deviation)
71
+ """
72
+ # CRITICAL: Use line objects to match master branch behavior
73
+ # tp = typical price
74
+ tp = (self.data.high + self.data.low + self.data.close) / 3.0
75
+
76
+ # tpmean = SMA of tp
77
+ tpmean = self.p.movav(tp, period=self.p.period)
78
+
79
+ # dev = tp - tpmean
80
+ dev = tp - tpmean
81
+
82
+ # meandev = MeanDev using tp and tpmean as two data sources
83
+ # This matches master branch's behavior: SMA(|tp - tpmean|) where tpmean varies
84
+ meandev = MeanDev(tp, tpmean, period=self.p.period)
85
+
86
+ # A zero mean deviation makes CCI mathematically undefined. Preserve that
87
+ # state while avoiding a division-by-zero exception, rather than treating
88
+ # it as the neutral (and signal-bearing) value 0.0.
89
+ self.lines.cci = DivByZero(dev, self.p.factor * meandev, zero=float("nan"))
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env python
2
+ """Channel and volatility-band indicators migrated from functional tests."""
3
+
4
+ from . import Indicator
5
+ from .atr import ATR
6
+ from .basicops import Highest, Lowest
7
+ from .ema import EMA
8
+
9
+ __all__ = [
10
+ "ChandelierExitIndicator",
11
+ "DonchianChannel",
12
+ "DonchianChannelWarmup",
13
+ "DonchianChannelIndicator",
14
+ "KeltnerChannelIndicator",
15
+ ]
16
+
17
+
18
+ class DonchianChannel(Indicator):
19
+ """Donchian channel exposing both upper/lower and dch/dcl/dcm aliases."""
20
+
21
+ lines = ("upper", "lower", "dch", "dcl", "dcm")
22
+ params = {"period": 20}
23
+
24
+ def __init__(self):
25
+ """Compute the highest/lowest/median series and bind them to the five output lines."""
26
+ period = max(2, int(self.p.period))
27
+ upper = Highest(self.data.high, period=period)
28
+ lower = Lowest(self.data.low, period=period)
29
+ mid = (upper + lower) / 2
30
+ self.lines.upper = upper
31
+ self.lines.lower = lower
32
+ self.lines.dch = upper
33
+ self.lines.dcl = lower
34
+ self.lines.dcm = mid
35
+
36
+
37
+ class DonchianChannelIndicator(DonchianChannel):
38
+ """Compatibility alias for Donchian channel tests."""
39
+
40
+
41
+ class DonchianChannelWarmup(DonchianChannel):
42
+ """Donchian channel variant preserving historical extra warm-up behavior."""
43
+
44
+ def __init__(self):
45
+ """Inherit the parent's lines and re-declare the minimum period explicitly."""
46
+ super().__init__()
47
+ self.addminperiod(max(2, int(self.p.period)))
48
+
49
+
50
+ class KeltnerChannelIndicator(Indicator):
51
+ """Keltner Channel using EMA middle line and ATR width."""
52
+
53
+ lines = ("mid", "top", "bot")
54
+ params = {"period": 20, "atr_mult": 2.0, "atr_period": 14}
55
+
56
+ def __init__(self):
57
+ """Compute the EMA midline and the ATR-scaled top/bot envelopes."""
58
+ self.l.mid = EMA(self.data.close, period=self.p.period)
59
+ atr = ATR(self.data, period=self.p.atr_period)
60
+ self.l.top = self.l.mid + self.p.atr_mult * atr
61
+ self.l.bot = self.l.mid - self.p.atr_mult * atr
62
+
63
+
64
+ class ChandelierExitIndicator(Indicator):
65
+ """Chandelier Exit volatility-based trailing stop levels."""
66
+
67
+ lines = ("long", "short")
68
+ params = {"period": 22, "multip": 3}
69
+ plotinfo = {"subplot": False}
70
+
71
+ def __init__(self):
72
+ """Build the long/short Chandelier Exit stop levels.
73
+
74
+ The long stop is the highest high over the configured
75
+ ``period`` minus ``multip * ATR`` (a long trailing stop
76
+ that sits below recent highs by a volatility buffer). The
77
+ short stop mirrors that, sitting above the recent low.
78
+ """
79
+ highest = Highest(self.data.high, period=self.p.period)
80
+ lowest = Lowest(self.data.low, period=self.p.period)
81
+ atr = self.p.multip * ATR(self.data, period=self.p.period)
82
+ self.lines.long = highest - atr
83
+ self.lines.short = lowest + atr
@@ -0,0 +1,228 @@
1
+ #!/usr/bin/env python
2
+ """Contributed indicators migrated from functional strategy tests.
3
+
4
+ These indicators are lower-commonality or strategy-specific indicators. They are
5
+ re-exported from ``backtrader.indicators`` so users can access them as
6
+ ``bt.indicators.Xxx``.
7
+ """
8
+
9
+ from importlib import import_module as _import_module
10
+
11
+ _MODULES = (
12
+ "absolutely_no_lag_lwma",
13
+ "absolutely_no_lag_lwma_color",
14
+ "accumulation_distribution_line",
15
+ "adx_cross_hull_style_indicator",
16
+ "adxdmi",
17
+ "ai_acceleration_deceleration_oscillator",
18
+ "altr_trend_signal_v22",
19
+ "anchored_momentum_line",
20
+ "any_range_cld_tail_indicator",
21
+ "aroon_horn_sign_indicator",
22
+ "aroon_oscillator_sign_alert",
23
+ "arrows_curves_indicator",
24
+ "as_ctrend_indicator",
25
+ "asimmetric_stoch_nr_indicator",
26
+ "atr_normalize_histogram",
27
+ "average_change_candle",
28
+ "bb_squeeze_indicator",
29
+ "bezier_st_dev_indicator",
30
+ "binary_wave_indicator",
31
+ "blau_c_momentum_indicator",
32
+ "blau_cmi_indicator",
33
+ "blau_csi",
34
+ "blau_ergodic",
35
+ "blau_t_stoch_i",
36
+ "blau_ts_stochastic",
37
+ "blau_tvi",
38
+ "brain_trend2_indicator",
39
+ "brain_trend_signal_proxy",
40
+ "brake_parb_indicator",
41
+ "breakout_bars_trend_v2",
42
+ "bsi_indicator",
43
+ "bulls_bears_eyes",
44
+ "bulls_power",
45
+ "bw_wise_man1_signal",
46
+ "bykov_trend_indicator",
47
+ "candle_stop_color",
48
+ "candles_x_smoothed_indicator",
49
+ "candlesticks_bw",
50
+ "caudate_x_period_candle_color",
51
+ "cci_histogram_indicator",
52
+ "cci_woodies_indicator",
53
+ "center_of_gravity_candle_indicator",
54
+ "center_of_gravity_indicator",
55
+ "cg_oscillator",
56
+ "close_line_cci",
57
+ "close_price_fractals",
58
+ "color3rd_gen_xma_indicator",
59
+ "color_bb_candles_indicator",
60
+ "color_coppock_indicator",
61
+ "color_hma",
62
+ "color_j_variation_indicator",
63
+ "color_metro_de_marker_indicator",
64
+ "color_metro_stochastic_indicator",
65
+ "color_metro_wpr_indicator",
66
+ "color_schaff_de_marker_trend_cycle",
67
+ "color_schaff_trend_cycle_indicator",
68
+ "color_step_xccx_indicator",
69
+ "color_x2_ma",
70
+ "color_x_derivative",
71
+ "color_zerolag_de_marker",
72
+ "corrected_average_indicator",
73
+ "darvas_boxes_system",
74
+ "dema_range_channel_color",
75
+ "derivative_indicator",
76
+ "digital_ft01_indicator",
77
+ "digital_macd",
78
+ "donchian_channels_system",
79
+ "dots_indicator",
80
+ "ef_distance_indicator",
81
+ "ema_rsi_va",
82
+ "envelopes_jp_alonso",
83
+ "f2a_ao_indicator",
84
+ "fatl_filter",
85
+ "fibo_candles_indicator",
86
+ "fine_tuning_ma",
87
+ "fisher_org_v1",
88
+ "fisher_org_v1_sign",
89
+ "force_index_ema",
90
+ "force_index_ema_2",
91
+ "forecast_oscilator",
92
+ "fractal_amambk",
93
+ "frama_series",
94
+ "frasm_av2_indicator",
95
+ "go_indicator",
96
+ "hlr_indicator",
97
+ "hma",
98
+ "i4_drfv2",
99
+ "i4_drfv3",
100
+ "i_anch_mom_indicator",
101
+ "i_de_marker_sign_indicator",
102
+ "i_gap_indicator",
103
+ "i_stoch_komposter_indicator",
104
+ "i_trend_indicator",
105
+ "iamma_indicator",
106
+ "indexed_moving_average",
107
+ "instantaneous_trend_filter_indicator",
108
+ "inverse_reaction_indicator",
109
+ "irsi_sign_indicator",
110
+ "iwpr_sign_indicator",
111
+ "j_brain_trend1_sig_indicator",
112
+ "j_tpo_proxy",
113
+ "jma_slope_indicator",
114
+ "kalman_filter_indicator",
115
+ "kalman_filter_line",
116
+ "kama_indicator",
117
+ "karacatica_indicator",
118
+ "kdj_indicator",
119
+ "kwan_ccc_indicator",
120
+ "kwan_nrp_indicator",
121
+ "kwan_rdp_indicator",
122
+ "laguerre_adx_indicator",
123
+ "laguerre_filter_indicator",
124
+ "laguerre_plus_di_proxy",
125
+ "laguerre_roc_indicator",
126
+ "le_man_signal_indicator",
127
+ "linear_reg_slope_v2_indicator",
128
+ "loco_indicator",
129
+ "lrma_indicator",
130
+ "lsma_angle_indicator",
131
+ "ma_rounding_channel_indicator",
132
+ "macd2_indicator",
133
+ "macd_candle_indicator",
134
+ "malr_indicator",
135
+ "momentum_candle_sign_indicator",
136
+ "moving_average_fn_indicator",
137
+ "mt5_stochastic_close_close",
138
+ "muv_nor_diff_cloud_indicator",
139
+ "non_lag_dot_indicator",
140
+ "nrtr_extr_indicator",
141
+ "nrtr_indicator",
142
+ "p_channel_system",
143
+ "percent_envelope",
144
+ "percentage_crossover_channel",
145
+ "pivot_zig_zag_proxy",
146
+ "price_channel_stop_indicator",
147
+ "price_extreme_channel",
148
+ "qqe_cloud_indicator",
149
+ "ravi_indicator",
150
+ "raw_close_close_stochastic",
151
+ "rd_trend_trigger_indicator",
152
+ "renko_level",
153
+ "renko_line_break",
154
+ "rftl_indicator",
155
+ "rkd_indicator",
156
+ "roc2_vg_indicator",
157
+ "rsi_histogram_indicator",
158
+ "rsi_slowdown",
159
+ "rsioma_v2",
160
+ "rvi_histogram_indicator",
161
+ "safe_adx",
162
+ "shared_strategy_indicators",
163
+ "sidus_indicator",
164
+ "silver_trend_indicator",
165
+ "sliding_range_color",
166
+ "slow_stoch",
167
+ "smoothed_adx_indicator",
168
+ "smoothed_rsi",
169
+ "spearman_rank_correlation_histogram",
170
+ "stalin_indicator",
171
+ "starter_laguerre_filter",
172
+ "step_manrtr_indicator",
173
+ "stochastic_histogram_indicator",
174
+ "t3_alarm_indicator",
175
+ "t3_average",
176
+ "t3_indicator",
177
+ "the20s_v020_signal",
178
+ "three_candles_indicator",
179
+ "three_line_break_indicator",
180
+ "time_line",
181
+ "trading_channel_index_proxy",
182
+ "trend_arrows_indicator",
183
+ "trend_continuation_indicator",
184
+ "trend_intensity_index_proxy",
185
+ "trend_manager_indicator",
186
+ "tri_x_candle_indicator",
187
+ "trigger_line",
188
+ "triple_ema_rate",
189
+ "trvi_indicator",
190
+ "two_pb_ideal_xosma_indicator",
191
+ "ultra_absolutely_no_lag_lwma_color",
192
+ "ultra_wpr_indicator",
193
+ "up_down_candle_strength",
194
+ "vinin_i_trend_indicator",
195
+ "volume_weighted_ma_indicator",
196
+ "volume_weighted_ma_st_dev_indicator",
197
+ "vwap_close_indicator",
198
+ "vwma_candle",
199
+ "vwma_digit_system",
200
+ "wami",
201
+ "wprsi_signal_indicator",
202
+ "x_de_marker_histogram_vol_direct_indicator",
203
+ "x_fisher_indicator",
204
+ "xcci_histogram_vol_direct_indicator",
205
+ "xcci_histogram_vol_indicator",
206
+ "xma_ichimoku",
207
+ "xma_ishimoku_channel_indicator",
208
+ "xma_ishimoku_line",
209
+ "xma_range_bands_indicator",
210
+ "xmacd_indicator",
211
+ "xrsi_de_marker_histogram",
212
+ "xrsi_histogram_vol_direct_indicator",
213
+ "xrsi_histogram_vol_indicator",
214
+ "xrvi_indicator",
215
+ "zero_lag_macd",
216
+ "zig_zag_recent_pivot_signal",
217
+ "zpf_indicator",
218
+ )
219
+
220
+ __all__ = []
221
+
222
+ for _module_name in _MODULES:
223
+ _module = _import_module(f"{__name__}.{_module_name}")
224
+ for _name in getattr(_module, "__all__", ()): # pragma: no branch
225
+ globals()[_name] = getattr(_module, _name)
226
+ __all__.append(_name)
227
+
228
+ del _import_module, _module_name, _module, _name
@@ -0,0 +1,28 @@
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
+ WeightedMovingAverage,
11
+ )
12
+
13
+ __all__ = [
14
+ "AbsolutelyNoLagLwma",
15
+ ]
16
+
17
+
18
+ class AbsolutelyNoLagLwma(Indicator):
19
+ """Compute a low-lag LWMA proxy based on nested weighted moving averages."""
20
+
21
+ lines = ("value",)
22
+ params = (("length", 7),)
23
+
24
+ def __init__(self):
25
+ """Create line value from weighted moving average and set minimum period."""
26
+ period = max(2, int(self.p.length))
27
+ self.lines.value = WeightedMovingAverage(self.data.close, period=period)
28
+ self.addminperiod(period + 2)
@@ -0,0 +1,44 @@
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
+ WeightedMovingAverage,
11
+ )
12
+
13
+ __all__ = [
14
+ "AbsolutelyNoLagLwmaColor",
15
+ ]
16
+
17
+
18
+ class AbsolutelyNoLagLwmaColor(Indicator):
19
+ """Indicator computing WMA-of-WMA (no-lag) upper/lower channels with color breakout signal."""
20
+
21
+ lines = ("color_idx", "upper", "lower")
22
+ params = (("length", 7),)
23
+
24
+ def __init__(self):
25
+ """Initialize double-WMA smoothing for high and low inputs."""
26
+ self.up_lwma_1 = WeightedMovingAverage(self.data.high, period=self.p.length)
27
+ self.up_lwma_2 = WeightedMovingAverage(self.up_lwma_1, period=self.p.length)
28
+ self.dn_lwma_1 = WeightedMovingAverage(self.data.low, period=self.p.length)
29
+ self.dn_lwma_2 = WeightedMovingAverage(self.dn_lwma_1, period=self.p.length)
30
+
31
+ def next(self):
32
+ """Set the color index based on close position relative to the no-lag WMA channel."""
33
+ upper = float(self.up_lwma_2[0])
34
+ lower = float(self.dn_lwma_2[0])
35
+ close = float(self.data.close[0])
36
+ open_ = float(self.data.open[0])
37
+ self.lines.upper[0] = upper
38
+ self.lines.lower[0] = lower
39
+ color = 4.0
40
+ if close > upper:
41
+ color = 3.0 if close >= open_ else 2.0
42
+ elif close < lower:
43
+ color = 0.0 if close <= open_ else 1.0
44
+ self.lines.color_idx[0] = color