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
backtrader/broker.py ADDED
@@ -0,0 +1,478 @@
1
+ #!/usr/bin/env python
2
+ """Backtrader Broker Module.
3
+
4
+ This module provides the broker system for order execution and portfolio
5
+ management. It handles order creation, position tracking, cash management,
6
+ and commission calculation.
7
+
8
+ Key Classes:
9
+ BrokerBase: Base class for broker implementations.
10
+ BrokerAliasMixin: Mixin providing method aliases.
11
+
12
+ The broker system supports:
13
+ - Order execution (buy, sell, cancel)
14
+ - Position management
15
+ - Cash and value tracking
16
+ - Commission schemes
17
+ - Order history
18
+ """
19
+
20
+ from .comminfo import CommInfoBase
21
+ from .parameters import ParameterDescriptor, ParameterizedBase
22
+ from .utils.log_message import get_logger
23
+
24
+ logger = get_logger(__name__)
25
+
26
+ # from . import fillers as fillers
27
+ # from . import fillers as filler
28
+
29
+
30
+ # Create a mixin to handle aliases without using metaclasses
31
+ class BrokerAliasMixin:
32
+ """Mixin to provide method aliases without using metaclasses.
33
+
34
+ This mixin creates method aliases for compatibility with different
35
+ naming conventions (e.g., get_cash/getcash, get_value/getvalue).
36
+ """
37
+
38
+ def __init__(self, *args, **kwargs):
39
+ """Initialize the broker alias mixin.
40
+
41
+ Creates method aliases for compatibility:
42
+ - get_cash -> getcash
43
+ - get_value -> getvalue
44
+
45
+ Args:
46
+ *args: Positional arguments passed to parent.
47
+ **kwargs: Keyword arguments passed to parent.
48
+ """
49
+ super().__init__(*args, **kwargs)
50
+ # Create aliases if they don't exist
51
+ if not hasattr(self, "get_cash"):
52
+ self.get_cash = self.getcash
53
+ if not hasattr(self, "get_value"):
54
+ self.get_value = self.getvalue
55
+
56
+
57
+ # broker base class - using new parameter system
58
+ class BrokerBase(BrokerAliasMixin, ParameterizedBase):
59
+ """Base class for broker implementations.
60
+
61
+ The broker handles order execution, position tracking, and cash management.
62
+ It supports commission schemes, margin requirements, and order history.
63
+
64
+ Attributes:
65
+ commission: Default commission scheme for all assets.
66
+ comminfo: Dictionary mapping asset names to commission info objects.
67
+
68
+ Params:
69
+ commission: Default commission scheme (CommInfoBase instance).
70
+ """
71
+
72
+ # Use new parameter descriptor
73
+ commission = ParameterDescriptor(
74
+ default=CommInfoBase(percabs=True), doc="Default commission scheme for all assets"
75
+ )
76
+
77
+ # Initialize
78
+ def __init__(self, **kwargs):
79
+ """Initialize the broker instance.
80
+
81
+ Args:
82
+ **kwargs: Keyword arguments passed to parent class.
83
+ """
84
+ super().__init__(**kwargs)
85
+ self.comminfo = {}
86
+ self.init()
87
+
88
+ # This init uses None as key, commission as value
89
+ def init(self):
90
+ """Initialize the commission info dictionary.
91
+
92
+ Sets up the default commission scheme if not already present.
93
+ Called from both __init__ and start methods.
94
+ """
95
+ # called from init and from start
96
+ if None not in self.comminfo:
97
+ self.comminfo = {None: self.get_param("commission")}
98
+
99
+ # Start
100
+ def start(self):
101
+ """Start the broker. Re-initializes commission info."""
102
+ self.init()
103
+
104
+ # Stop
105
+ def stop(self):
106
+ """Stop the broker.
107
+
108
+ Override this method in subclasses for cleanup operations.
109
+ """
110
+
111
+ # Add order history
112
+ def add_order_history(self, orders, notify=False):
113
+ """Add order history to the broker.
114
+
115
+ Args:
116
+ orders: Orders to add to history.
117
+ notify: Whether to notify about these orders.
118
+
119
+ Raises:
120
+ NotImplementedError: Must be implemented by subclasses.
121
+ """
122
+ # Add order history. See cerebro for details
123
+ raise NotImplementedError
124
+
125
+ # Set fund history
126
+ def set_fund_history(self, fund):
127
+ """Set fund history for the broker.
128
+
129
+ Args:
130
+ fund: Fund history data.
131
+
132
+ Raises:
133
+ NotImplementedError: Must be implemented by subclasses.
134
+ """
135
+ # Add fund history. See cerebro for details
136
+ raise NotImplementedError
137
+
138
+ @staticmethod
139
+ def _commission_lookup_keys(data):
140
+ """Return stable symbol/name candidates for commission lookup."""
141
+ keys = []
142
+ seen = set()
143
+ for attr in ("name", "_name", "_dataname", "symbol"):
144
+ value = getattr(data, attr, None)
145
+ if value is None:
146
+ continue
147
+ if isinstance(value, str) and value == "":
148
+ continue
149
+ try:
150
+ hash(value)
151
+ except TypeError:
152
+ logger.debug("broker:151 ignored TypeError")
153
+ continue
154
+ text = str(value)
155
+ for key in (value, text, text.upper(), text.lower()):
156
+ try:
157
+ marker = ("hashable", key)
158
+ if marker in seen:
159
+ continue
160
+ seen.add(marker)
161
+ except TypeError:
162
+ marker = ("repr", repr(key))
163
+ if marker in seen:
164
+ continue
165
+ seen.add(marker)
166
+ keys.append(key)
167
+ return keys
168
+
169
+ # Get commission info, if data name is in commission info dict, get corresponding value, otherwise use default self.p.commission
170
+ def getcommissioninfo(self, data):
171
+ """Get the commission info for a given data.
172
+
173
+ Args:
174
+ data: Data feed to get commission info for.
175
+
176
+ Returns:
177
+ CommInfoBase: The commission info for the data, or the default.
178
+ """
179
+ # PERFORMANCE OPTIMIZATION: Use getattr instead of hasattr+access
180
+ # Called 2.1M+ times, avoid double attribute lookup
181
+ comminfo = self.comminfo
182
+ for name in self._commission_lookup_keys(data):
183
+ if name in comminfo:
184
+ return comminfo[name]
185
+
186
+ return comminfo[None]
187
+
188
+ # Set commission
189
+ def setcommission(
190
+ self,
191
+ commission=0.0,
192
+ maker_commission=None,
193
+ taker_commission=None,
194
+ open_commission=None,
195
+ close_commission=None,
196
+ close_today_commission=None,
197
+ close_yesterday_commission=None,
198
+ margin=None,
199
+ mult=1.0,
200
+ commtype=None,
201
+ percabs=True,
202
+ stocklike=False,
203
+ interest=0.0,
204
+ interest_long=False,
205
+ leverage=1.0,
206
+ automargin=False,
207
+ name=None,
208
+ ):
209
+ """This method sets a `` CommissionInfo`` object for assets managed in
210
+ the broker with the parameters. Consult the reference for
211
+ ``CommInfoBase``
212
+
213
+ If name is `None`, this will be the default for assets for which no
214
+ other ``CommissionInfo`` scheme can be found
215
+ """
216
+
217
+ comm = CommInfoBase(
218
+ commission=commission,
219
+ maker_commission=maker_commission,
220
+ taker_commission=taker_commission,
221
+ open_commission=open_commission,
222
+ close_commission=close_commission,
223
+ close_today_commission=close_today_commission,
224
+ close_yesterday_commission=close_yesterday_commission,
225
+ margin=margin,
226
+ mult=mult,
227
+ commtype=commtype,
228
+ stocklike=stocklike,
229
+ percabs=percabs,
230
+ interest=interest,
231
+ interest_long=interest_long,
232
+ leverage=leverage,
233
+ automargin=automargin,
234
+ )
235
+ self.comminfo[name] = comm
236
+
237
+ # Add commission info
238
+ def addcommissioninfo(self, comminfo, name=None):
239
+ """Add a CommissionInfo object for an asset.
240
+
241
+ Args:
242
+ comminfo: The CommissionInfo object to add.
243
+ name: Asset name. If None, sets as default for all assets.
244
+ """
245
+ # Adds a ``CommissionInfo`` object that will be the default for all assets if ``name`` is ``None``
246
+ self.comminfo[name] = comminfo
247
+
248
+ # Get cash
249
+ def getcash(self):
250
+ """Get the current available cash.
251
+
252
+ Returns:
253
+ float: Current cash amount.
254
+
255
+ Raises:
256
+ NotImplementedError: Must be implemented by subclasses.
257
+ """
258
+ raise NotImplementedError
259
+
260
+ # Get value
261
+ def getvalue(self, datas=None):
262
+ """Get the current portfolio value.
263
+
264
+ Args:
265
+ datas: Data feeds to calculate value for (optional).
266
+
267
+ Returns:
268
+ float: Current portfolio value.
269
+
270
+ Raises:
271
+ NotImplementedError: Must be implemented by subclasses.
272
+ """
273
+ raise NotImplementedError
274
+
275
+ def get_cached_report_state(self):
276
+ """Return a local-only state view for runtime observers.
277
+
278
+ Implementations must not perform network, disk, or provider queries in
279
+ this method. It is deliberately separate from :meth:`getcash`,
280
+ :meth:`getvalue`, and :meth:`getposition`, because live brokers may
281
+ refresh those values synchronously. A caller may receive ``None``
282
+ when a broker does not expose a local report cache.
283
+
284
+ Returns:
285
+ dict | None: A mapping with optional ``cash``, ``value``, and
286
+ ``positions`` entries, plus an optional ``position_legs`` mapping
287
+ for dual-side brokers, or ``None`` if no read-only cache exists.
288
+ """
289
+
290
+ def get_cached_mark_price(self, data):
291
+ """Return a local-only mark for ``data`` when the broker has one.
292
+
293
+ Runtime reports may use this optional hook only when the data object
294
+ has no current close line, such as channel-only strategies. An
295
+ implementation must read an already-held tick/order-book/cache value;
296
+ it must not make a network, disk, or provider request. ``None``
297
+ means that no cached mark is available.
298
+ """
299
+
300
+ # Get fund shares
301
+ def get_fundshares(self):
302
+ """Get the current number of shares in fund-like mode.
303
+
304
+ Returns:
305
+ float: Number of shares (1.0 for abstract mode).
306
+ """
307
+ # Returns the current number of shares in the fund-like mode
308
+ return 1.0 # the abstract mode has only 1 share
309
+
310
+ fundshares = property(get_fundshares)
311
+
312
+ # Get fund value
313
+ def get_fundvalue(self):
314
+ """Get the current fund value.
315
+
316
+ Returns:
317
+ float: Current fund value.
318
+ """
319
+ return self.getvalue()
320
+
321
+ fundvalue = property(get_fundvalue)
322
+
323
+ # Set fund mode
324
+ def set_fundmode(self, fundmode, fundstartval=None):
325
+ """Set the fund mode for the broker.
326
+
327
+ Args:
328
+ fundmode: True to enable fund mode, False otherwise.
329
+ fundstartval: Initial fund value (optional).
330
+
331
+ Note:
332
+ Not all brokers support fund mode.
333
+ """
334
+ # do nothing, not all brokers can support this
335
+
336
+ # Get fund mode
337
+ def get_fundmode(self):
338
+ """Get the current fund mode status.
339
+
340
+ Returns:
341
+ bool: True if fund mode is enabled, False otherwise.
342
+ """
343
+ # Returns the actual fundmode (True or False)
344
+ return False
345
+
346
+ fundmode = property(get_fundmode, set_fundmode)
347
+
348
+ # Get position
349
+ def getposition(self, data, side=None):
350
+ """Get the current position for a data feed.
351
+
352
+ Args:
353
+ data: Data feed to get position for.
354
+ side: Optional side selector used by brokers that support
355
+ dual-side position books.
356
+
357
+ Returns:
358
+ Position: Current position for the data feed.
359
+
360
+ Raises:
361
+ NotImplementedError: Must be implemented by subclasses.
362
+ """
363
+ raise NotImplementedError
364
+
365
+ # Submit
366
+ def submit(self, order):
367
+ """Submit an order to the broker.
368
+
369
+ Args:
370
+ order: Order object to submit.
371
+
372
+ Raises:
373
+ NotImplementedError: Must be implemented by subclasses.
374
+ """
375
+ raise NotImplementedError
376
+
377
+ # Cancel
378
+ def cancel(self, order):
379
+ """Cancel a pending order.
380
+
381
+ Args:
382
+ order: Order object to cancel.
383
+
384
+ Raises:
385
+ NotImplementedError: Must be implemented by subclasses.
386
+ """
387
+ raise NotImplementedError
388
+
389
+ # Buy order
390
+ def buy(
391
+ self,
392
+ owner,
393
+ data,
394
+ size,
395
+ price=None,
396
+ plimit=None,
397
+ exectype=None,
398
+ valid=None,
399
+ tradeid=0,
400
+ oco=None,
401
+ trailamount=None,
402
+ trailpercent=None,
403
+ **kwargs,
404
+ ):
405
+ """Create a buy order.
406
+
407
+ Args:
408
+ owner: Strategy/owner creating the order.
409
+ data: Data feed for the order.
410
+ size: Size of the order (positive for buy).
411
+ price: Limit price (optional).
412
+ plimit: Profit limit price (optional).
413
+ exectype: Execution type (Market, Limit, Stop, etc.).
414
+ valid: Validity period for the order.
415
+ tradeid: Trade identifier.
416
+ oco: One-cancels-other order reference.
417
+ trailamount: Trailing amount for stop orders.
418
+ trailpercent: Trailing percent for stop orders.
419
+ **kwargs: Additional keyword arguments.
420
+
421
+ Returns:
422
+ Order: The created order object.
423
+
424
+ Raises:
425
+ NotImplementedError: Must be implemented by subclasses.
426
+ """
427
+ raise NotImplementedError
428
+
429
+ # Sell order
430
+ def sell(
431
+ self,
432
+ owner,
433
+ data,
434
+ size,
435
+ price=None,
436
+ plimit=None,
437
+ exectype=None,
438
+ valid=None,
439
+ tradeid=0,
440
+ oco=None,
441
+ trailamount=None,
442
+ trailpercent=None,
443
+ **kwargs,
444
+ ):
445
+ """Create a sell order.
446
+
447
+ Args:
448
+ owner: Strategy/owner creating the order.
449
+ data: Data feed for the order.
450
+ size: Size of the order (positive for sell).
451
+ price: Limit price (optional).
452
+ plimit: Profit limit price (optional).
453
+ exectype: Execution type (Market, Limit, Stop, etc.).
454
+ valid: Validity period for the order.
455
+ tradeid: Trade identifier.
456
+ oco: One-cancels-other order reference.
457
+ trailamount: Trailing amount for stop orders.
458
+ trailpercent: Trailing percent for stop orders.
459
+ **kwargs: Additional keyword arguments.
460
+
461
+ Returns:
462
+ Order: The created order object.
463
+
464
+ Raises:
465
+ NotImplementedError: Must be implemented by subclasses.
466
+ """
467
+ raise NotImplementedError
468
+
469
+ # Next bar
470
+ def next(self):
471
+ """Process the next bar in the backtest.
472
+
473
+ Called by the cerebro engine for each iteration.
474
+ Override in subclasses to perform per-bar operations.
475
+ """
476
+
477
+
478
+ # __all__ = ['BrokerBase', 'fillers', 'filler']
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env python
2
+ """Brokers Module - Order execution and portfolio management.
3
+
4
+ This module provides broker implementations for order execution and
5
+ portfolio management. Brokers handle order routing, position tracking,
6
+ cash management, and trade history.
7
+
8
+ Available Brokers:
9
+ - BackBroker: Built-in backtesting broker.
10
+ - TickBroker: Tick and order book matching backtesting broker.
11
+ - BtApiBroker: Unified bt_api_py live trading broker.
12
+
13
+ Example:
14
+ Setting the broker in cerebro:
15
+ >>> cerebro = bt.Cerebro()
16
+ >>> cerebro.setbroker(bt.brokers.BackBroker())
17
+ """
18
+
19
+ import os as _os
20
+
21
+ from backtrader.brokers.bbroker import BackBroker as BackBroker
22
+ from backtrader.brokers.bbroker import BrokerBack as BrokerBack
23
+
24
+ # The modules below should/must define __all__ with the objects wishes
25
+ # or prepend an "_" (underscore) to private classes/variables
26
+
27
+
28
+ if _os.environ.get("BACKTRADER_LIGHT_IMPORT", "").strip().lower() not in {
29
+ "1",
30
+ "true",
31
+ "yes",
32
+ "on",
33
+ }:
34
+ from backtrader.brokers.btapibroker import BtApiBroker as BtApiBroker
35
+ from backtrader.brokers.mixbroker import MixBroker as MixBroker
36
+ from backtrader.brokers.tickbroker import TickBroker as TickBroker