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,8 @@
1
+ okx:
2
+ public_key: "xxxx"
3
+ private_key: "xxxx"
4
+ passphrase: "xxxx"
5
+
6
+ binance:
7
+ public_key: 'xxxx'
8
+ private_key: 'xxxx'
@@ -0,0 +1,379 @@
1
+ #!/usr/bin/env python
2
+ """DataSeries Module - Time-series data structures for financial data.
3
+
4
+ This module provides the DataSeries class and related utilities for
5
+ handling time-series financial data. It defines common data line types
6
+ (OHLCV) and timeframe specifications.
7
+
8
+ Key Classes:
9
+ TimeFrame: Enumeration of time periods (Minutes, Days, Weeks, etc.).
10
+ DataSeries: Base class for financial data feeds with OHLCV lines.
11
+ OHLC: DataSeries with Open, High, Low, Close lines.
12
+ OHLCDateTime: OHLC with datetime line.
13
+
14
+ Example:
15
+ Getting timeframe name:
16
+ >>> TimeFrame.getname(TimeFrame.Days) # Returns 'Day'
17
+ >>> TimeFrame.getname(TimeFrame.Days, 5) # Returns 'Days'
18
+ """
19
+
20
+ import datetime as _datetime
21
+ import inspect
22
+
23
+ from .lineseries import LineSeries
24
+ from .utils import AutoOrderedDict, OrderedDict, date2num
25
+ from .utils.py3 import range
26
+
27
+
28
+ class TimeFrame:
29
+ """Enumeration of time periods for financial data.
30
+
31
+ Defines constants for different time periods used in financial
32
+ data: Ticks, MicroSeconds, Seconds, Minutes, Days, Weeks, Months,
33
+ Years, and NoTimeFrame.
34
+
35
+ Class Methods:
36
+ getname(tframe, compression): Get name for timeframe.
37
+ TFrame(name): Get timeframe constant from name.
38
+ TName(tframe): Get name string from timeframe constant.
39
+
40
+ Attributes:
41
+ Ticks, MicroSeconds, Seconds, Minutes, Days, Weeks, Months, Years, NoTimeFrame: Timeframe constants.
42
+ """
43
+
44
+ # Add 9 attributes to TimeFrame class for distinguishing trading periods
45
+ Ticks, MicroSeconds, Seconds, Minutes, Days, Weeks, Months, Years, NoTimeFrame = range(1, 10)
46
+ # Add a names attribute
47
+ Names = [
48
+ "",
49
+ "Ticks",
50
+ "MicroSeconds",
51
+ "Seconds",
52
+ "Minutes",
53
+ "Days",
54
+ "Weeks",
55
+ "Months",
56
+ "Years",
57
+ "NoTimeFrame",
58
+ ]
59
+
60
+ names = Names # support old naming convention
61
+
62
+ # Class method to get Timeframe period type
63
+ @classmethod
64
+ def getname(cls, tframe, compression=None): # backtrader built-in
65
+ """Get the name for a timeframe.
66
+
67
+ Args:
68
+ tframe: TimeFrame constant (e.g., TimeFrame.Days).
69
+ compression: Compression factor. If None, uses 1.
70
+
71
+ Returns:
72
+ str: Name of the timeframe (singular or plural).
73
+ """
74
+ # The default parameter setting for compression is not actually reasonable here,
75
+ # if the default parameter is passed directly, an error will occur in the comparison below
76
+ # Modify the default parameter to 1 or add judgment for compression,
77
+ # I feel changing it to 1 might be more appropriate
78
+ # @classmethod
79
+ # def getname(cls, tframe, compression=1):
80
+ tname = cls.Names[tframe]
81
+ if compression > 1 or tname == cls.Names[-1]:
82
+ return tname # for plural or 'NoTimeFrame' return plain entry
83
+
84
+ # return singular if compression is 1
85
+ # If compression is 1, return a singular trading period
86
+ return cls.Names[tframe][:-1]
87
+
88
+ # Class method to get trading period name value
89
+ @classmethod
90
+ def TFrame(cls, name):
91
+ """Get TimeFrame constant from name.
92
+
93
+ Args:
94
+ name: String name like 'Days', 'Minutes'.
95
+
96
+ Returns:
97
+ TimeFrame constant.
98
+ """
99
+ return getattr(cls, name)
100
+
101
+ # Class method to return trading period name based on trading period value
102
+ @classmethod
103
+ def TName(cls, tframe):
104
+ """Get name string from timeframe constant.
105
+
106
+ Args:
107
+ tframe: TimeFrame constant.
108
+
109
+ Returns:
110
+ str: Name of the timeframe.
111
+ """
112
+ return cls.Names[tframe]
113
+
114
+
115
+ class DataSeries(LineSeries):
116
+ """Base class for financial time-series data feeds.
117
+
118
+ DataSeries extends LineSeries to provide the standard OHLCV (Open,
119
+ High, Low, Close, Volume, OpenInterest) data lines plus DateTime.
120
+
121
+ Attributes:
122
+ _name: Name identifier for the data series.
123
+ _compression: Compression factor for the timeframe.
124
+ _timeframe: TimeFrame period (Days, Minutes, etc.).
125
+
126
+ Lines:
127
+ DateTime: Timestamp of the bar.
128
+ Open: Opening price.
129
+ High: Highest price.
130
+ Low: Lowest price.
131
+ Close: Closing price.
132
+ Volume: Trading volume.
133
+ OpenInterest: Open interest (for derivatives).
134
+
135
+ Example:
136
+ >>> data = DataSeries()
137
+ >>> print(data.close[0]) # Current close price
138
+ """
139
+
140
+ # Set plotinfo related values
141
+ plotinfo = {"plot": True, "plotind": True, "plotylimited": True}
142
+
143
+ # Set dataseries _name attribute, usually can use data._name directly in strategy to get specific data value
144
+ _name = ""
145
+ name = _name
146
+ # Set _compression attribute, default is 1, meaning trading period is singular, such as 1 second, 1 minute, 1 day, 1 week, etc.
147
+ _compression = 1
148
+ # Set _timeframe attribute, default is Days
149
+ _timeframe = TimeFrame.Days
150
+
151
+ # Set 7 common attributes for dataseries and their values
152
+ Close, Low, High, Open, Volume, OpenInterest, DateTime = range(7)
153
+ # Line order in dataseries
154
+ LineOrder = [DateTime, Open, High, Low, Close, Volume, OpenInterest]
155
+
156
+ # Get header variable names of dataseries
157
+ def getwriterheaders(self):
158
+ """Get header names for writing data.
159
+
160
+ Returns:
161
+ list: List of header names including data name and line names.
162
+ """
163
+ headers = [self._name, "len"]
164
+
165
+ for lo in self.LineOrder:
166
+ headers.append(self._getlinealias(lo))
167
+
168
+ morelines = self.getlinealiases()[len(self.LineOrder) :]
169
+ headers.extend(morelines)
170
+
171
+ return headers
172
+
173
+ # Get values
174
+ def getwritervalues(self):
175
+ """Get current values for writing.
176
+
177
+ Returns:
178
+ list: List of current values including data name, length, and line values.
179
+ """
180
+ length = len(self)
181
+ values = [self._name, length]
182
+
183
+ if length:
184
+ values.append(self.datetime.datetime(0))
185
+ for line in self.LineOrder[1:]:
186
+ values.append(self.lines[line][0])
187
+ for i in range(len(self.LineOrder), self.lines.size()):
188
+ values.append(self.lines[i][0])
189
+ else:
190
+ values.extend([""] * self.lines.size()) # no values yet
191
+
192
+ return values
193
+
194
+ # Get written information
195
+ def getwriterinfo(self):
196
+ """Get information about the data series.
197
+
198
+ Returns:
199
+ OrderedDict: Dictionary with name, timeframe, and compression info.
200
+ """
201
+ # returns dictionary with information
202
+ info = OrderedDict()
203
+ info["Name"] = self._name
204
+ info["Timeframe"] = TimeFrame.TName(self._timeframe)
205
+ info["Compression"] = self._compression
206
+
207
+ return info
208
+
209
+ def get_name(self):
210
+ """Get the name of this data series.
211
+
212
+ Returns:
213
+ str: Data series name.
214
+ """
215
+ return self._name
216
+
217
+
218
+ class OHLC(DataSeries):
219
+ """DataSeries with OHLCV lines but no datetime line.
220
+
221
+ Lines:
222
+ close, low, high, open, volume, openinterest
223
+ """
224
+
225
+ # Inherit from DataSeries, lines exclude datetime leaving only 6
226
+ lines = (
227
+ "close",
228
+ "low",
229
+ "high",
230
+ "open",
231
+ "volume",
232
+ "openinterest",
233
+ )
234
+
235
+
236
+ class OHLCDateTime(OHLC):
237
+ """DataSeries with datetime line plus OHLCV lines.
238
+
239
+ This is the full-featured data series for financial data.
240
+ """
241
+
242
+ # Inherit from DataSeries, lines only keep datetime
243
+ lines = (("datetime"),)
244
+
245
+
246
+ class SimpleFilterWrapper:
247
+ """Wrapper for filters added via .addfilter to turn them
248
+ into processors.
249
+
250
+ Filters are callables which
251
+
252
+ - Take `data` as an argument
253
+ - Return False if the current bar has not triggered the filter
254
+ - Return True if the current bar must be filtered
255
+
256
+ The wrapper takes the return value and executes the bar removal
257
+ if needed to be
258
+ """
259
+
260
+ # This is a class for adding filters, which can perform certain operations on data according to filter needs, such as removal
261
+ # This filter is usually a class or a function
262
+ def __init__(self, data, ffilter, *args, **kwargs):
263
+ """Initialize the filter wrapper.
264
+
265
+ Args:
266
+ data: Data source to filter.
267
+ ffilter: Filter class or callable.
268
+ *args: Positional arguments for the filter.
269
+ **kwargs: Keyword arguments for the filter.
270
+ """
271
+ if inspect.isclass(ffilter):
272
+ ffilter = ffilter(data, *args, **kwargs)
273
+ args = []
274
+ kwargs = {}
275
+
276
+ self.ffilter = ffilter
277
+ self.args = args
278
+ self.kwargs = kwargs
279
+
280
+ def __call__(self, data):
281
+ """Apply the filter to the data.
282
+
283
+ Args:
284
+ data: Data source to filter.
285
+
286
+ Returns:
287
+ bool: True if bar was filtered (removed), False otherwise.
288
+ """
289
+ if self.ffilter(data, *self.args, **self.kwargs):
290
+ data.backwards()
291
+ return True
292
+
293
+ return False
294
+
295
+
296
+ class _Bar(AutoOrderedDict):
297
+ """
298
+ This class is a placeholder for the values of the standard lines in a
299
+ DataBase class (from OHLCDateTime)
300
+
301
+ It inherits from AutoOrderedDict to be able to easily return the values as
302
+ an iterable and address the keys as attributes
303
+
304
+ Order of definition is important and must match that of the lines
305
+ definition in DataBase (which directly inherits from OHLCDateTime)
306
+ """
307
+
308
+ # This bar is a placeholder for DataBase with standard lines, commonly used to combine small period candlesticks into large period candlesticks
309
+ replaying = False
310
+
311
+ # Without - 1 ... converting back to time will not work
312
+ # Need another -1 to support timezones which may move the time forward
313
+ MAXDATE = date2num(_datetime.datetime.max) - 2
314
+
315
+ def __init__(self, maxdate=False):
316
+ """Initialize a bar container.
317
+
318
+ Args:
319
+ maxdate: If True, set datetime to maximum date.
320
+ """
321
+ super().__init__()
322
+ # Note: These cannot be set here as they conflict with line definitions
323
+ # self.datetime = None
324
+ # self.openinterest = None
325
+ # self.volume = None
326
+ # self.open = None
327
+ # self.high = None
328
+ # self.low = None
329
+ # self.close = None
330
+ self.bstart(maxdate=maxdate)
331
+
332
+ def bstart(self, maxdate=False):
333
+ """Initializes a bar to the default not-updated vaues"""
334
+ # Initialize before starting
335
+ # Order is important: defined in DataSeries/OHLC/OHLCDateTime
336
+ self.close = float("NaN")
337
+ self.low = float("inf")
338
+ self.high = float("-inf")
339
+ self.open = float("NaN")
340
+ self.volume = 0.0
341
+ self.openinterest = 0.0
342
+ self.datetime = self.MAXDATE if maxdate else None
343
+
344
+ def isopen(self):
345
+ # Check if already updated
346
+ """Returns if a bar has already been updated
347
+
348
+ Uses the fact that NaN is the value which is not equal to itself
349
+ and ``open`` is initialized to NaN
350
+ """
351
+ o = self.open
352
+ return o == o # False if NaN, True in other cases
353
+
354
+ def bupdate(self, data, reopen=False):
355
+ # Update specific bar
356
+ """Updates a bar with the values from data
357
+
358
+ Returns True if the update was the 1st on a bar (just opened)
359
+
360
+ Returns False otherwise
361
+ """
362
+ if reopen:
363
+ self.bstart()
364
+
365
+ self.datetime = data.datetime[0]
366
+
367
+ self.high = max(self.high, data.high[0])
368
+ self.low = min(self.low, data.low[0])
369
+ self.close = data.close[0]
370
+
371
+ self.volume += data.volume[0]
372
+ self.openinterest = data.openinterest[0]
373
+
374
+ o = self.open
375
+ if reopen or o != o: # noqa: PLR0124 # o != o is a NaN check (NaN != NaN)
376
+ self.open = data.open[0]
377
+ return True # just opened the bar
378
+
379
+ return False
backtrader/errors.py ADDED
@@ -0,0 +1,106 @@
1
+ #!/usr/bin/env python
2
+ """Exception Classes Module - Custom exceptions for backtrader.
3
+
4
+ This module defines the exception hierarchy used throughout the
5
+ backtrader framework.
6
+
7
+ Classes:
8
+ BacktraderError: Base exception for all backtrader exceptions.
9
+ StrategySkipError: Raised to skip a strategy during optimization.
10
+ ModuleImportError: Raised when a required module cannot be imported.
11
+ FromModuleImportError: Raised when a from-style import fails.
12
+ DataError: Raised for data-feed/parsing problems.
13
+ BrokerError: Raised for broker/execution problems.
14
+ OrderError: Raised for order-related problems (subclass of BrokerError).
15
+ ConfigError: Raised for invalid configuration/parameters.
16
+
17
+ Example:
18
+ Raising StrategySkipError during optimization:
19
+ >>> class MyStrategy(bt.Strategy):
20
+ ... params = (('period', 20),)
21
+ ...
22
+ ... def __init__(self):
23
+ ... if self.p.period < 5:
24
+ ... raise bt.errors.StrategySkipError()
25
+ """
26
+
27
+ # 'from errors import *' exports the base and the most commonly raised classes.
28
+ # The category classes are additive (new parents only); existing classes and
29
+ # their inheritance are unchanged so isinstance() checks stay compatible.
30
+ __all__ = [
31
+ "BacktraderError",
32
+ "StrategySkipError",
33
+ "DataError",
34
+ "BrokerError",
35
+ "OrderError",
36
+ "ConfigError",
37
+ ]
38
+
39
+
40
+ # BacktraderError class
41
+ class BacktraderError(Exception):
42
+ """Base exception for all backtrader exceptions."""
43
+
44
+
45
+ # StrategySkipError, only this class is used in cerebro
46
+ class StrategySkipError(BacktraderError):
47
+ """Requests the platform to skip this strategy for backtesting. To be
48
+ raised during the initialization (``__init__``) phase of the instance"""
49
+
50
+
51
+ # ModuleImportError class
52
+ class ModuleImportError(BacktraderError):
53
+ """Raised if a class requests a module to be present to work and it cannot
54
+ be imported"""
55
+
56
+ def __init__(self, message, *args):
57
+ """Initialize the ModuleImportError.
58
+
59
+ Args:
60
+ message: Error message.
61
+ *args: Additional arguments.
62
+ """
63
+ super().__init__(message, *args)
64
+
65
+
66
+ # FromModuleImportError class
67
+ class FromModuleImportError(ModuleImportError):
68
+ """Raised if a class requests a module to be present to work and it cannot
69
+ be imported"""
70
+
71
+ def __init__(self, message, *args):
72
+ """Initialize the FromModuleImportError.
73
+
74
+ Args:
75
+ message: Error message.
76
+ *args: Additional arguments.
77
+ """
78
+ super().__init__(message, *args)
79
+
80
+
81
+ # ---------------------------------------------------------------------------
82
+ # Business exception categories (additive, Sprint 3).
83
+ #
84
+ # These give callers a meaningful hierarchy to catch
85
+ # (e.g. ``except bt.errors.DataError``) without having to enumerate stdlib
86
+ # exceptions. They all derive from BacktraderError, so existing
87
+ # ``except BacktraderError`` handlers keep working. Nothing here changes the
88
+ # parent of a previously existing class, so isinstance() behavior is
89
+ # backward compatible.
90
+ # ---------------------------------------------------------------------------
91
+
92
+
93
+ class DataError(BacktraderError):
94
+ """Raised for data-feed problems: loading, parsing, or alignment failures."""
95
+
96
+
97
+ class BrokerError(BacktraderError):
98
+ """Raised for broker/execution problems: cash, margin, or matching failures."""
99
+
100
+
101
+ class OrderError(BrokerError):
102
+ """Raised for order-related problems: invalid size/price or rejected orders."""
103
+
104
+
105
+ class ConfigError(BacktraderError):
106
+ """Raised for invalid configuration or parameter values."""