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,315 @@
1
+ #!/usr/bin/env python
2
+ """ATR Indicator Module - Average True Range.
3
+
4
+ This module provides the ATR (Average True Range) indicator developed by
5
+ J. Welles Wilder, Jr. for measuring market volatility.
6
+
7
+ Classes:
8
+ TrueHigh: Records the true high for ATR calculation.
9
+ TrueLow: Records the true low for ATR calculation.
10
+ TrueRange: Calculates the True Range.
11
+ AverageTrueRange: Calculates the Average True Range (alias: ATR).
12
+
13
+ Example:
14
+ class MyStrategy(bt.Strategy):
15
+ def __init__(self):
16
+ self.atr = bt.indicators.ATR(self.data, period=14)
17
+
18
+ def next(self):
19
+ if self.atr[0] > self.atr[-1] * 1.5:
20
+ self.buy()
21
+ """
22
+
23
+ import math
24
+
25
+ from . import Indicator, MovAv
26
+
27
+
28
+ class TrueHigh(Indicator):
29
+ """
30
+ Defined by J. Welles Wilder, Jr. in 1978 in his book *"New Concepts in
31
+ Technical Trading Systems"* for the ATR
32
+
33
+ Records the "true high" which is the maximum of today's high and
34
+ yesterday's close
35
+
36
+ Formula:
37
+ - truehigh = max (high, close_prev)
38
+
39
+ See:
40
+ - http://en.wikipedia.org/wiki/Average_true_range
41
+ """
42
+
43
+ lines = ("truehigh",)
44
+
45
+ def __init__(self):
46
+ """Initialize the TrueHigh indicator.
47
+
48
+ Adds a minimum period of 2 to access previous close.
49
+ """
50
+ super().__init__()
51
+ self.addminperiod(2)
52
+
53
+ def next(self):
54
+ """Calculate true high: max(high, previous_close)."""
55
+ self.lines.truehigh[0] = max(self.data.high[0], self.data.close[-1])
56
+
57
+ def once(self, start, end):
58
+ """Calculate true high in runonce mode."""
59
+ high_array = self.data.high.array
60
+ close_array = self.data.close.array
61
+ larray = self.lines.truehigh.array
62
+
63
+ while len(larray) < end:
64
+ larray.append(float("nan"))
65
+
66
+ if len(high_array) > 0 and len(larray) > 0:
67
+ larray[0] = high_array[0] if len(high_array) > 0 else 0.0
68
+
69
+ for i in range(1, min(end, len(high_array), len(close_array))):
70
+ high_val = high_array[i] if i < len(high_array) else 0.0
71
+ prev_close = close_array[i - 1] if i > 0 and i - 1 < len(close_array) else 0.0
72
+ if i < len(larray):
73
+ larray[i] = max(high_val, prev_close)
74
+
75
+
76
+ class TrueLow(Indicator):
77
+ """
78
+ Defined by J. Welles Wilder, Jr. in 1978 in his book *"New Concepts in
79
+ Technical Trading Systems"* for the ATR
80
+
81
+ Records the "true low" which is the minimum of today's low and
82
+ yesterday's close
83
+
84
+ Formula:
85
+ - truelow = min (low, close_prev)
86
+
87
+ See:
88
+ - http://en.wikipedia.org/wiki/Average_true_range
89
+ """
90
+
91
+ lines = ("truelow",)
92
+
93
+ def __init__(self):
94
+ """Initialize the TrueLow indicator.
95
+
96
+ Adds a minimum period of 2 to access previous close.
97
+ """
98
+ super().__init__()
99
+ self.addminperiod(2)
100
+
101
+ def next(self):
102
+ """Calculate true low: min(low, previous_close)."""
103
+ self.lines.truelow[0] = min(self.data.low[0], self.data.close[-1])
104
+
105
+ def once(self, start, end):
106
+ """Calculate true low in runonce mode."""
107
+ low_array = self.data.low.array
108
+ close_array = self.data.close.array
109
+ larray = self.lines.truelow.array
110
+
111
+ while len(larray) < end:
112
+ larray.append(float("nan"))
113
+
114
+ if len(low_array) > 0 and len(larray) > 0:
115
+ larray[0] = low_array[0] if len(low_array) > 0 else 0.0
116
+
117
+ for i in range(1, min(end, len(low_array), len(close_array))):
118
+ low_val = low_array[i] if i < len(low_array) else 0.0
119
+ prev_close = close_array[i - 1] if i > 0 and i - 1 < len(close_array) else 0.0
120
+ if i < len(larray):
121
+ larray[i] = min(low_val, prev_close)
122
+
123
+
124
+ class TrueRange(Indicator):
125
+ """
126
+ Defined by J. Welles Wilder, Jr. in 1978 in his book New Concepts in
127
+ Technical Trading Systems.
128
+
129
+ Formula:
130
+ - max(high - low, abs (high - prev_close), abs(prev_close - low)
131
+
132
+ Which can be simplified to
133
+
134
+ - Max(high, prev_close) - min(low, prev_close)
135
+
136
+ See:
137
+ - http://en.wikipedia.org/wiki/Average_true_range
138
+
139
+ The idea is to take the previous close into account to calculate the range
140
+ if it yields a larger range than the daily range (High - Low)
141
+ """
142
+
143
+ alias = ("TR",)
144
+
145
+ lines = ("tr",)
146
+
147
+ def __init__(self):
148
+ """Initialize the TrueRange indicator.
149
+
150
+ Adds a minimum period of 2 to access previous close.
151
+ """
152
+ super().__init__()
153
+ self.addminperiod(2)
154
+
155
+ def next(self):
156
+ """Calculate true range: truehigh - truelow."""
157
+ truehigh = max(self.data.high[0], self.data.close[-1])
158
+ truelow = min(self.data.low[0], self.data.close[-1])
159
+ self.lines.tr[0] = truehigh - truelow
160
+
161
+ def once(self, start, end):
162
+ """Calculate true range in runonce mode."""
163
+ high_array = self.data.high.array
164
+ low_array = self.data.low.array
165
+ close_array = self.data.close.array
166
+ larray = self.lines.tr.array
167
+
168
+ while len(larray) < end:
169
+ larray.append(float("nan"))
170
+
171
+ if len(high_array) > 0 and len(low_array) > 0 and len(larray) > 0:
172
+ larray[0] = (
173
+ high_array[0] - low_array[0] if len(high_array) > 0 and len(low_array) > 0 else 0.0
174
+ )
175
+
176
+ for i in range(1, min(end, len(high_array), len(low_array), len(close_array))):
177
+ high_val = high_array[i] if i < len(high_array) else 0.0
178
+ low_val = low_array[i] if i < len(low_array) else 0.0
179
+ prev_close = close_array[i - 1] if i > 0 and i - 1 < len(close_array) else 0.0
180
+
181
+ truehigh = max(high_val, prev_close)
182
+ truelow = min(low_val, prev_close)
183
+
184
+ if i < len(larray):
185
+ larray[i] = truehigh - truelow
186
+
187
+
188
+ class AverageTrueRange(Indicator):
189
+ """
190
+ Defined by J. Welles Wilder, Jr. in 1978 in his book *"New Concepts in
191
+ Technical Trading Systems"*.
192
+
193
+ The idea is to take the close into account to calculate the range if it
194
+ yields a larger range than the daily range (High - Low)
195
+
196
+ Formula:
197
+ - SmoothedMovingAverage(TrueRange, period)
198
+
199
+ See:
200
+ - http://en.wikipedia.org/wiki/Average_true_range
201
+ """
202
+
203
+ alias = ("ATR",)
204
+
205
+ lines = ("atr",)
206
+ params = (("period", 14), ("movav", MovAv.Smoothed))
207
+
208
+ def _plotlabel(self):
209
+ plabels = [self.p.period]
210
+ plabels += [self.p.movav] * self.p.notdefault("movav")
211
+ return plabels
212
+
213
+ def __init__(self):
214
+ """Initialize the ATR indicator.
215
+
216
+ Sets up Wilder's smoothing factors.
217
+ """
218
+ super().__init__()
219
+ self.addminperiod(self.p.period + 1)
220
+ # SMMA alpha for Wilder's smoothing
221
+ self.alpha = 1.0 / self.p.period
222
+ self.alpha1 = 1.0 - self.alpha
223
+
224
+ def _calc_tr(self, high, low, prev_close):
225
+ """Calculate True Range
226
+
227
+ Args:
228
+ high: Current high price.
229
+ low: Current low price.
230
+ prev_close: Previous close price.
231
+
232
+ Returns:
233
+ float: True range value.
234
+ """
235
+ truehigh = max(high, prev_close)
236
+ truelow = min(low, prev_close)
237
+ return truehigh - truelow
238
+
239
+ def nextstart(self):
240
+ """Seed ATR with SMA of first period TR values."""
241
+ # Seed with SMA of first period TR values
242
+ period = self.p.period
243
+ tr_sum = 0.0
244
+ for i in range(period):
245
+ if i == 0:
246
+ tr = self.data.high[-i] - self.data.low[-i]
247
+ else:
248
+ tr = self._calc_tr(self.data.high[-i], self.data.low[-i], self.data.close[-i - 1])
249
+ tr_sum += tr
250
+ self.lines.atr[0] = tr_sum / period
251
+
252
+ def next(self):
253
+ """Calculate ATR for the current bar.
254
+
255
+ Uses smoothed moving average: ATR = prev_ATR * alpha1 + TR * alpha
256
+ """
257
+ tr = self._calc_tr(self.data.high[0], self.data.low[0], self.data.close[-1])
258
+ self.lines.atr[0] = self.lines.atr[-1] * self.alpha1 + tr * self.alpha
259
+
260
+ def once(self, start, end):
261
+ """Calculate ATR in runonce mode."""
262
+ high_array = self.data.high.array
263
+ low_array = self.data.low.array
264
+ close_array = self.data.close.array
265
+ larray = self.lines.atr.array
266
+ period = self.p.period
267
+ alpha = self.alpha
268
+ alpha1 = self.alpha1
269
+
270
+ while len(larray) < end:
271
+ larray.append(float("nan"))
272
+
273
+ # Pre-fill warmup with NaN (indices 0 to period-1)
274
+ for i in range(min(period, len(high_array))):
275
+ if i < len(larray):
276
+ larray[i] = float("nan")
277
+
278
+ # CRITICAL FIX: Always seed at index `period` (first valid ATR position)
279
+ # regardless of the `start` parameter. The ATR needs `period` TR values,
280
+ # and TR starts from index 1 (needs close[-1]), so first valid ATR is at index `period`.
281
+ seed_idx = period
282
+ if seed_idx < len(high_array) and seed_idx < len(low_array) and seed_idx < len(close_array):
283
+ tr_sum = 0.0
284
+ for j in range(period):
285
+ # Use TR values from indices 1 to period (inclusive)
286
+ idx = j + 1 # Start from index 1 (first valid TR)
287
+ if idx < len(high_array) and idx < len(low_array) and idx - 1 < len(close_array):
288
+ truehigh = max(high_array[idx], close_array[idx - 1])
289
+ truelow = min(low_array[idx], close_array[idx - 1])
290
+ tr = truehigh - truelow
291
+ tr_sum += tr
292
+ prev_atr = tr_sum / period
293
+ if seed_idx < len(larray):
294
+ larray[seed_idx] = prev_atr
295
+ else:
296
+ prev_atr = 0.0
297
+
298
+ # Calculate ATR using SMMA for all subsequent bars
299
+ for i in range(seed_idx + 1, min(end, len(high_array), len(low_array), len(close_array))):
300
+ truehigh = max(high_array[i], close_array[i - 1])
301
+ truelow = min(low_array[i], close_array[i - 1])
302
+ tr = truehigh - truelow
303
+
304
+ if i > 0 and i - 1 < len(larray):
305
+ prev_val = larray[i - 1]
306
+ if not (isinstance(prev_val, float) and math.isnan(prev_val)):
307
+ prev_atr = prev_val
308
+
309
+ prev_atr = prev_atr * alpha1 + tr * alpha
310
+ if i < len(larray):
311
+ larray[i] = prev_atr
312
+
313
+
314
+ TR = TrueRange
315
+ ATR = AverageTrueRange
@@ -0,0 +1,122 @@
1
+ #!/usr/bin/env python
2
+ """Awesome Oscillator Module - AO momentum indicator.
3
+
4
+ This module provides the Awesome Oscillator (AO) developed by
5
+ Bill Williams to measure market momentum.
6
+
7
+ Classes:
8
+ AwesomeOscillator: Awesome Oscillator indicator (aliases: AwesomeOsc, AO).
9
+
10
+ Example:
11
+ class MyStrategy(bt.Strategy):
12
+ def __init__(self):
13
+ self.ao = bt.indicators.AO(self.data)
14
+
15
+ def next(self):
16
+ if self.ao.ao[0] > 0 and self.ao.ao[-1] < 0:
17
+ self.buy()
18
+ """
19
+
20
+ from . import Indicator
21
+ from .sma import SMA
22
+
23
+ __all__ = ["AwesomeOscillator", "AwesomeOsc", "AO"]
24
+
25
+
26
+ class AwesomeOscillator(Indicator):
27
+ """
28
+ Awesome Oscillator (AO) is a momentum indicator reflecting the precise
29
+ changes in the market driving force, which helps to identify the trend's
30
+ strength up to the points of formation and reversal.
31
+
32
+
33
+ Formula:
34
+ - median price = (high + low) / 2
35
+ - AO = SMA (median price, 5)- SMA (median price, 34)
36
+
37
+ See:
38
+ - https://www.metatrader5.com/en/terminal/help/indicators/bw_indicators/awesome
39
+ - https://www.ifcmarkets.com/en/ntx-indicators/awesome-oscillator
40
+
41
+ """
42
+
43
+ # Alias
44
+ alias = ("AwesomeOsc", "AO")
45
+ # Line to generate
46
+ lines = ("ao",)
47
+ # Parameters
48
+ params = (
49
+ ("fast", 5),
50
+ ("slow", 34),
51
+ ("movav", SMA),
52
+ )
53
+ # Plot parameters
54
+ plotlines = {"ao": {"_method": "bar", "alpha": 0.50, "width": 1.0}}
55
+
56
+ # Create indicators during initialization
57
+ def __init__(self):
58
+ """Initialize the Awesome Oscillator.
59
+
60
+ Sets minimum period to the slow period.
61
+ """
62
+ super().__init__()
63
+ self.addminperiod(self.p.slow)
64
+
65
+ def next(self):
66
+ """Calculate AO for the current bar.
67
+
68
+ Formula: AO = SMA(median_price, fast) - SMA(median_price, slow)
69
+ """
70
+ fast = self.p.fast
71
+ slow = self.p.slow
72
+
73
+ # Calculate median price SMA for fast period
74
+ fast_sum = 0.0
75
+ for i in range(fast):
76
+ fast_sum += (self.data.high[-i] + self.data.low[-i]) / 2.0
77
+ sma_fast = fast_sum / fast
78
+
79
+ # Calculate median price SMA for slow period
80
+ slow_sum = 0.0
81
+ for i in range(slow):
82
+ slow_sum += (self.data.high[-i] + self.data.low[-i]) / 2.0
83
+ sma_slow = slow_sum / slow
84
+
85
+ self.lines.ao[0] = sma_fast - sma_slow
86
+
87
+ def once(self, start, end):
88
+ """Calculate AO in runonce mode."""
89
+ high_array = self.data.high.array
90
+ low_array = self.data.low.array
91
+ larray = self.lines.ao.array
92
+ fast = self.p.fast
93
+ slow = self.p.slow
94
+
95
+ while len(larray) < end:
96
+ larray.append(float("nan"))
97
+
98
+ for i in range(min(slow - 1, len(high_array))):
99
+ if i < len(larray):
100
+ larray[i] = float("nan")
101
+
102
+ for i in range(slow - 1, min(end, len(high_array), len(low_array))):
103
+ # Calculate fast SMA
104
+ fast_sum = 0.0
105
+ for j in range(fast):
106
+ idx = i - j
107
+ if idx >= 0:
108
+ fast_sum += (high_array[idx] + low_array[idx]) / 2.0
109
+ sma_fast = fast_sum / fast
110
+
111
+ # Calculate slow SMA
112
+ slow_sum = 0.0
113
+ for j in range(slow):
114
+ idx = i - j
115
+ if idx >= 0:
116
+ slow_sum += (high_array[idx] + low_array[idx]) / 2.0
117
+ sma_slow = slow_sum / slow
118
+
119
+ larray[i] = sma_fast - sma_slow
120
+
121
+
122
+ AwesomeOsc = AO = AwesomeOscillator