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,112 @@
1
+ #!/usr/bin/env python
2
+ """DMA Indicator Module - Dickson Moving Average.
3
+
4
+ This module provides the Dickson Moving Average (DMA) developed
5
+ by Nathan Dickson, combining ZeroLag and Hull moving averages.
6
+
7
+ Classes:
8
+ DicksonMovingAverage: DMA indicator (aliases: DMA, DicksonMA).
9
+
10
+ Example:
11
+ class MyStrategy(bt.Strategy):
12
+ def __init__(self):
13
+ self.dma = bt.indicators.DMA(self.data.close, period=20, gainlimit=50, hperiod=7)
14
+
15
+ def next(self):
16
+ if self.data.close[0] > self.dma[0]:
17
+ self.buy()
18
+ elif self.data.close[0] < self.dma[0]:
19
+ self.sell()
20
+ """
21
+
22
+ import math
23
+
24
+ from . import MovingAverageBase, ZeroLagIndicator
25
+ from .ema import EMA
26
+ from .hma import HMA
27
+
28
+
29
+ class DicksonMovingAverage(MovingAverageBase):
30
+ """By Nathan Dickson
31
+
32
+ The *Dickson Moving Average* combines the ``ZeroLagIndicator`` (aka
33
+ *ErrorCorrecting* or *EC*) by *Ehlers*, and the ``HullMovingAverage`` to
34
+ try to deliver a result close to that of the *Jurik* Moving Averages
35
+
36
+ Formula:
37
+ - ec = ZeroLagIndicator(period, gainlimit)
38
+ - hma = HullMovingAverage(hperiod)
39
+
40
+ - dma = (ec + hma) / 2
41
+
42
+ - The default moving average for the *ZeroLagIndicator* is EMA, but can
43
+ be changed with the parameter ``_movav``
44
+
45
+ ::note:: the passed moving average must calculate alpha (and 1 - alpha)
46
+ and make them available as attributes ``alpha`` and ``alpha1``
47
+
48
+ - The second moving average can be changed from *Hull* to anything else with
49
+ the param *_hma*
50
+
51
+ See also:
52
+ - https://www.reddit.com/r/algotrading/comments/4xj3vh/dickson_moving_average
53
+ """
54
+
55
+ alias = (
56
+ "DMA",
57
+ "DicksonMA",
58
+ )
59
+ lines = ("dma",)
60
+ params = (
61
+ ("gainlimit", 50),
62
+ ("hperiod", 7),
63
+ ("_movav", EMA),
64
+ ("_hma", HMA),
65
+ )
66
+
67
+ def _plotlabel(self):
68
+ plabels = [self.p.period, self.p.gainlimit, self.p.hperiod]
69
+ plabels += [self.p._movav] * self.p.notdefault("_movav")
70
+ plabels += [self.p._hma] * self.p.notdefault("_hma")
71
+ return plabels
72
+
73
+ def __init__(self):
74
+ """Initialize the Dickson Moving Average.
75
+
76
+ Creates ZeroLag and Hull MA sub-indicators.
77
+ """
78
+ super().__init__()
79
+ self.ec = ZeroLagIndicator(
80
+ period=self.p.period, gainlimit=self.p.gainlimit, _movav=self.p._movav
81
+ )
82
+ self.hull = self.p._hma(period=self.p.hperiod)
83
+
84
+ def next(self):
85
+ """Calculate DMA for the current bar.
86
+
87
+ Formula: DMA = (ZeroLag + HMA) / 2
88
+ """
89
+ self.lines.dma[0] = (self.ec[0] + self.hull[0]) / 2.0
90
+
91
+ def once(self, start, end):
92
+ """Calculate DMA in runonce mode."""
93
+ ec_array = self.ec.lines[0].array
94
+ hull_array = self.hull.lines[0].array
95
+ larray = self.lines.dma.array
96
+
97
+ while len(larray) < end:
98
+ larray.append(float("nan"))
99
+
100
+ for i in range(start, min(end, len(ec_array), len(hull_array))):
101
+ ec_val = ec_array[i] if i < len(ec_array) else float("nan")
102
+ hull_val = hull_array[i] if i < len(hull_array) else float("nan")
103
+
104
+ if (
105
+ isinstance(ec_val, float)
106
+ and math.isnan(ec_val)
107
+ or isinstance(hull_val, float)
108
+ and math.isnan(hull_val)
109
+ ):
110
+ larray[i] = float("nan")
111
+ else:
112
+ larray[i] = (ec_val + hull_val) / 2.0
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/env python
2
+ """DPO Indicator Module - Detrended Price Oscillator.
3
+
4
+ This module provides the DPO (Detrended Price Oscillator) indicator
5
+ developed by Joe DiNapoli to identify cycles by removing trend effects.
6
+
7
+ Classes:
8
+ DetrendedPriceOscillator: DPO indicator (alias: DPO).
9
+
10
+ Example:
11
+ class MyStrategy(bt.Strategy):
12
+ def __init__(self):
13
+ self.dpo = bt.indicators.DPO(self.data, period=20)
14
+
15
+ def next(self):
16
+ if self.dpo[0] > 0:
17
+ self.buy()
18
+ """
19
+
20
+ import math
21
+
22
+ from . import Indicator, MovAv
23
+
24
+
25
+ class DetrendedPriceOscillator(Indicator):
26
+ """
27
+ Defined by Joe DiNapoli in his book *"Trading with DiNapoli levels"*
28
+
29
+ It measures the price variations against a Moving Average (the trend)
30
+ and therefore removes the "trend" factor from the price.
31
+
32
+ Formula:
33
+ - movav = MovingAverage(close, period)
34
+ - dpo = close - movav(shifted period / 2 + 1)
35
+
36
+ See:
37
+ - http://en.wikipedia.org/wiki/Detrended_price_oscillator
38
+ """
39
+
40
+ # Named alias for invocation
41
+ alias = ("DPO",)
42
+
43
+ # Named output lines
44
+ lines = ("dpo",)
45
+
46
+ # Accepted parameters (and defaults) -
47
+ # MovAvg also parameter to allow experimentation
48
+ params = (("period", 20), ("movav", MovAv.Simple))
49
+
50
+ # Emphasize central 0.0 line in plot
51
+ plotinfo = {"plothlines": [0.0]}
52
+
53
+ # Indicator information after the name (in brackets)
54
+ def _plotlabel(self):
55
+ plabels = [self.p.period]
56
+ plabels += [self.p.movav] * self.p.notdefault("movav")
57
+ return plabels
58
+
59
+ def __init__(self):
60
+ """Initialize the DPO indicator.
61
+
62
+ Creates a moving average and calculates lookback period.
63
+ """
64
+ super().__init__()
65
+ self.ma = self.p.movav(self.data, period=self.p.period)
66
+ self.lookback = self.p.period // 2 - 1
67
+
68
+ def next(self):
69
+ """Calculate DPO for the current bar.
70
+
71
+ Formula: DPO = price - MA(lookback bars ago)
72
+ """
73
+ self.lines.dpo[0] = self.data[0] - self.ma[-self.lookback]
74
+
75
+ def once(self, start, end):
76
+ """Calculate DPO in runonce mode."""
77
+ darray = self.data.array
78
+ ma_array = self.ma.lines[0].array
79
+ larray = self.lines.dpo.array
80
+ lookback = self.lookback
81
+
82
+ while len(larray) < end:
83
+ larray.append(float("nan"))
84
+
85
+ for i in range(start, min(end, len(darray), len(ma_array))):
86
+ data_val = darray[i] if i < len(darray) else 0.0
87
+ ma_idx = i - lookback
88
+ if ma_idx >= 0 and ma_idx < len(ma_array):
89
+ ma_val = ma_array[ma_idx]
90
+ else:
91
+ ma_val = float("nan")
92
+
93
+ if isinstance(ma_val, float) and math.isnan(ma_val):
94
+ larray[i] = float("nan")
95
+ else:
96
+ larray[i] = data_val - ma_val
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env python
2
+ """DV2 Indicator Module - RSI(2) alternative.
3
+
4
+ This module provides the DV2 indicator developed by David Varadi
5
+ as an alternative to RSI(2).
6
+
7
+ Classes:
8
+ DV2: DV2 indicator (RSI(2) alternative).
9
+
10
+ Example:
11
+ class MyStrategy(bt.Strategy):
12
+ def __init__(self):
13
+ self.dv2 = bt.indicators.DV2(self.data)
14
+
15
+ def next(self):
16
+ if self.dv2[0] > 50:
17
+ self.buy()
18
+ """
19
+
20
+ from . import SMA, Indicator, PercentRank
21
+
22
+ __all__ = ["DV2"]
23
+
24
+
25
+ class DV2(Indicator):
26
+ """
27
+ RSI(2) alternative
28
+ Developed by David Varadi of http://cssanalytics.wordpress.com/
29
+
30
+ This seems to be the *Bounded* version.
31
+
32
+ See also:
33
+
34
+ - http://web.archive.org/web/20131216100741/http://quantingdutchman.wordpress.com/2010/08/06/dv2-indicator-for-amibroker/
35
+
36
+ """
37
+
38
+ params = (
39
+ ("period", 252),
40
+ ("maperiod", 2),
41
+ ("_movav", SMA),
42
+ )
43
+ lines = ("dv2",)
44
+
45
+ def __init__(self):
46
+ """Initialize the DV2 indicator calculation.
47
+
48
+ Calculates:
49
+ 1. CHL = close / ((high + low) / 2)
50
+ 2. DVU = moving average of CHL
51
+ 3. DV2 = PercentRank(DVU) * 100
52
+ """
53
+ chl = self.data.close / ((self.data.high + self.data.low) / 2.0)
54
+ dvu = self.p._movav(chl, period=self.p.maperiod)
55
+ self.lines.dv2 = PercentRank(dvu, period=self.p.period) * 100
56
+ super().__init__()
@@ -0,0 +1,145 @@
1
+ #!/usr/bin/env python
2
+ """EMA Indicator Module - Exponential Moving Average.
3
+
4
+ This module provides the EMA (Exponential Moving Average) indicator
5
+ which applies weighting factors that decrease exponentially.
6
+
7
+ Classes:
8
+ ExponentialMovingAverage: EMA indicator (alias: EMA).
9
+
10
+ Example:
11
+ class MyStrategy(bt.Strategy):
12
+ def __init__(self):
13
+ self.ema = bt.indicators.EMA(self.data.close, period=20)
14
+
15
+ def next(self):
16
+ if self.data.close[0] > self.ema[0]:
17
+ self.buy()
18
+ """
19
+
20
+ import math
21
+
22
+ from ..utils.log_message import get_logger
23
+ from . import MovingAverageBase
24
+
25
+ logger = get_logger(__name__)
26
+
27
+
28
+ class ExponentialMovingAverage(MovingAverageBase):
29
+ """
30
+ A Moving Average that smoothes data exponentially over time.
31
+
32
+ It is a subclass of SmoothingMovingAverage.
33
+
34
+ - self.smfactor -> 2 / (1 + period)
35
+ - self.smfactor1 -> `1 - self.smfactor`
36
+
37
+ Formula:
38
+ - movav = prev * (1.0 - smoothfactor) + newdata * smoothfactor
39
+
40
+ See also:
41
+ - http://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average
42
+ """
43
+
44
+ alias = (
45
+ "EMA",
46
+ "MovingAverageExponential",
47
+ )
48
+ lines = ("ema",)
49
+
50
+ def __init__(self):
51
+ """Initialize the EMA indicator.
52
+
53
+ Calculates alpha and alpha1 smoothing factors:
54
+ - alpha = 2 / (1 + period)
55
+ - alpha1 = 1 - alpha
56
+ """
57
+ super().__init__()
58
+ self.alpha = 2.0 / (1.0 + self.p.period)
59
+ self.alpha1 = 1.0 - self.alpha
60
+
61
+ def nextstart(self):
62
+ """Seed the EMA with SMA of first period values."""
63
+ # Seed value: SMA of first period values
64
+ period = self.p.period
65
+ data_sum = 0.0
66
+ for i in range(period):
67
+ data_sum += self.data[-i]
68
+ self.lines[0][0] = data_sum / period
69
+
70
+ def next(self):
71
+ """Calculate EMA for the current bar.
72
+
73
+ Formula: EMA = previous_ema * alpha1 + current_price * alpha
74
+ """
75
+ # EMA formula: prev * alpha1 + current * alpha
76
+ self.lines[0][0] = self.lines[0][-1] * self.alpha1 + self.data[0] * self.alpha
77
+
78
+ def once(self, start, end):
79
+ """Calculate EMA in runonce mode"""
80
+ larray = self.lines[0].array
81
+ alpha = self.alpha
82
+ alpha1 = self.alpha1
83
+ period = self.p.period
84
+
85
+ # Ensure output array is properly sized
86
+ while len(larray) < end:
87
+ larray.append(float("nan"))
88
+
89
+ # CRITICAL FIX: For line-operation data sources, calculate the full
90
+ # input history needed to seed the EMA. Using this EMA's ``start``
91
+ # would skip the operation's warmup window and delay the seed.
92
+ if hasattr(self.data, "once") and hasattr(self.data, "operation"):
93
+ try:
94
+ self.data.once(0, end)
95
+ except Exception as e:
96
+ logger.debug("data.once() failed in EMA: %s", e)
97
+
98
+ darray = self.data.array
99
+ data_len = len(darray)
100
+ if data_len == 0:
101
+ return
102
+
103
+ # Find first valid (non-NaN) index for seed calculation
104
+ first_valid = 0
105
+ for i in range(data_len):
106
+ val = darray[i]
107
+ if not (isinstance(val, float) and math.isnan(val)):
108
+ first_valid = i
109
+ break
110
+
111
+ # Calculate seed index
112
+ seed_idx = first_valid + period - 1
113
+
114
+ # CRITICAL FIX: Pre-fill warmup period with NaN up to seed_idx
115
+ # This ensures indices before the seed are NaN, not 0.0
116
+ for i in range(min(seed_idx, data_len)):
117
+ larray[i] = float("nan")
118
+
119
+ if seed_idx < data_len:
120
+ seed_sum = 0.0
121
+ valid_count = 0
122
+ for i in range(first_valid, seed_idx + 1):
123
+ val = darray[i]
124
+ if not (isinstance(val, float) and math.isnan(val)):
125
+ seed_sum += val
126
+ valid_count += 1
127
+ if valid_count > 0:
128
+ prev = seed_sum / valid_count
129
+ larray[seed_idx] = prev
130
+ else:
131
+ return # No valid data
132
+ else:
133
+ return # Not enough data
134
+
135
+ # EMA is recursive - must calculate ALL values from seed onwards
136
+ for i in range(seed_idx + 1, min(end, data_len)):
137
+ current_val = darray[i]
138
+ if isinstance(current_val, float) and math.isnan(current_val):
139
+ larray[i] = float("nan")
140
+ continue
141
+ prev = prev * alpha1 + float(current_val) * alpha
142
+ larray[i] = prev
143
+
144
+
145
+ EMA = ExponentialMovingAverage