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,144 @@
1
+ #!/usr/bin/env python
2
+ """BuySell Observer Module - Buy/sell signal visualization.
3
+
4
+ This module provides the BuySell observer for visualizing buy and sell
5
+ orders on the chart.
6
+
7
+ Classes:
8
+ BuySell: Observer that plots buy/sell markers on the chart.
9
+
10
+ Example:
11
+ >>> cerebro = bt.Cerebro()
12
+ >>> cerebro.addobserver(bt.observers.BuySell)
13
+ """
14
+
15
+ import math
16
+
17
+ from ..observer import Observer
18
+
19
+
20
+ # Buy and sell point markers
21
+ class BuySell(Observer):
22
+ """
23
+ This observer keeps track of the individual buy/sell orders (individual
24
+ executions) and will plot them on the chart along the data around the
25
+ execution price level
26
+
27
+ Params:
28
+ - ``barplot`` (default: ``False``) Plot buy signals below the minimum and
29
+ sell signals above the maximum.
30
+
31
+ If `False`, it will plot on the average price of executions during a
32
+ bar
33
+
34
+ - ``bardist`` (default: ``0.015`` 1.5%) Distance to max/min when
35
+ ``barplot`` is ``True``
36
+ """
37
+
38
+ lines = (
39
+ "buy",
40
+ "sell",
41
+ )
42
+
43
+ plotinfo = {"plot": True, "subplot": False, "plotlinelabels": True}
44
+ plotlines = {
45
+ "buy": {"marker": "^", "markersize": 8.0, "color": "lime", "fillstyle": "full", "ls": ""},
46
+ "sell": {"marker": "v", "markersize": 8.0, "color": "red", "fillstyle": "full", "ls": ""},
47
+ }
48
+
49
+ params = (
50
+ ("barplot", False), # plot above/below max/min for clarity in bar plot
51
+ ("bardist", 0.015), # distance to max/min in absolute perc
52
+ )
53
+
54
+ def __init__(self):
55
+ """Initialize the BuySell observer.
56
+
57
+ Sets up tracking for buy/sell order lengths.
58
+ """
59
+ self.curbuylen = 0
60
+ self.curselllen = 0
61
+ self._lastbar = None
62
+
63
+ def next(self):
64
+ """Update buy/sell markers based on executed orders.
65
+
66
+ Calculates average prices for buy and sell orders during the bar.
67
+ """
68
+ try:
69
+ barref = self.data.datetime[0]
70
+ except (IndexError, AttributeError, TypeError):
71
+ barref = None
72
+
73
+ sentinel = object()
74
+ if getattr(self, "_lastbar", sentinel) != barref:
75
+ self.lines.buy[0] = float("nan")
76
+ self.lines.sell[0] = float("nan")
77
+ self.curbuylen = 0
78
+ self.curselllen = 0
79
+ self._lastbar = barref
80
+
81
+ buy = []
82
+ sell = []
83
+ # If there are pending orders
84
+ for order in self._owner._orderspending:
85
+ # If no data or size is 0, skip
86
+ if order.data is not self.data or not order.executed.size:
87
+ continue
88
+ # If it's a buy order, add price to buy, if it's a sell order, add price to sell
89
+ if order.isbuy():
90
+ buy.append(order.executed.price)
91
+ else:
92
+ sell.append(order.executed.price)
93
+
94
+ # Take into account replay ... something could already be in there
95
+ # Write down the average buy/sell price
96
+
97
+ # BUY
98
+ # Get buy price
99
+ curbuy = self.lines.buy[0]
100
+ # If NaN, curbuy equals 0, curbuylen=0, otherwise, curbuylen = self.curbuylen
101
+ if curbuy != curbuy: # NaN
102
+ curbuy = 0.0
103
+ self.curbuylen = curbuylen = 0
104
+ else:
105
+ curbuylen = self.curbuylen
106
+ # Current total price
107
+ buyops = curbuy + math.fsum(buy)
108
+ # Current total order count
109
+ buylen = curbuylen + len(buy)
110
+ # Calculate average price
111
+ value = buyops / float(buylen or "NaN")
112
+ # If not plotting, get average price, if plotting, get a percentage of lowest price for better display
113
+ if not self.p.barplot:
114
+ self.lines.buy[0] = value
115
+ elif value == value: # Not NaN
116
+ pbuy = self.data.low[0] * (1 - self.p.bardist)
117
+ self.lines.buy[0] = pbuy
118
+
119
+ # Update buylen values
120
+ curbuy = buyops
121
+ self.curbuylen = buylen
122
+
123
+ # For sell orders, similar logic
124
+ # SELL
125
+ cursell = self.lines.sell[0]
126
+ if cursell != cursell: # NaN
127
+ cursell = 0.0
128
+ self.curselllen = curselllen = 0
129
+ else:
130
+ curselllen = self.curselllen
131
+
132
+ sellops = cursell + math.fsum(sell)
133
+ selllen = curselllen + len(sell)
134
+
135
+ value = sellops / float(selllen or "NaN")
136
+ if not self.p.barplot:
137
+ self.lines.sell[0] = value
138
+ elif value == value: # Not NaN
139
+ psell = self.data.high[0] * (1 + self.p.bardist)
140
+ self.lines.sell[0] = psell
141
+
142
+ # Update selllen values
143
+ cursell = sellops
144
+ self.curselllen = selllen
@@ -0,0 +1,161 @@
1
+ #!/usr/bin/env python
2
+ """DrawDown Observer Module - Drawdown tracking observer.
3
+
4
+ This module provides the DrawDown observer for tracking current and maximum
5
+ drawdown levels during backtesting.
6
+
7
+ Classes:
8
+ DrawDown: Observer that tracks drawdown and max drawdown levels.
9
+
10
+ Example:
11
+ >>> cerebro = bt.Cerebro()
12
+ >>> cerebro.addobserver(bt.observers.DrawDown)
13
+ """
14
+
15
+ from ..analyzers import DrawDown as DrawDownAnalyzer
16
+ from ..observer import Observer
17
+
18
+
19
+ # Drawdown
20
+ class DrawDown(Observer):
21
+ """This observer keeps track of the current drawdown level (plotted) and
22
+ the maxdrawdown (not plotted) levels
23
+
24
+ Params:
25
+
26
+ - ``fund`` (default: ``None``)
27
+
28
+ If `None`, the actual mode of the broker (fundmode - True/False) will
29
+ be autodetected to decide if the returns are based on the total net
30
+ asset value or on the fund value. See ``set_fundmode`` in the broker
31
+ documentation
32
+
33
+ Set it to ``True`` or ``False`` for a specific behavior
34
+
35
+ """
36
+
37
+ _stclock = True
38
+
39
+ params = (("fund", None),)
40
+
41
+ lines = (
42
+ "drawdown",
43
+ "maxdrawdown",
44
+ )
45
+
46
+ plotinfo = {"plot": True, "subplot": True}
47
+
48
+ plotlines = {
49
+ "maxdrawdown": {
50
+ "_plotskip": True,
51
+ }
52
+ }
53
+
54
+ def __init__(self):
55
+ """Initialize the DrawDown observer.
56
+
57
+ Adds DrawDown analyzer to track drawdown levels.
58
+ """
59
+ kwargs = self.p._getkwargs()
60
+ self._dd = self._owner._addanalyzer_slave(DrawDownAnalyzer, **kwargs)
61
+
62
+ def next(self):
63
+ """Update drawdown values for the current period.
64
+
65
+ Gets current and maximum drawdown from the analyzer.
66
+ """
67
+ self.lines.drawdown[0] = self._dd.rets.drawdown # update drawdown
68
+ self.lines.maxdrawdown[0] = self._dd.rets.max.drawdown # update max
69
+
70
+
71
+ # Drawdown length
72
+ class DrawDownLength(Observer):
73
+ """This observer keeps track of the current drawdown length (plotted) and
74
+ the drawdown max length (not plotted)
75
+
76
+ Params: None
77
+ """
78
+
79
+ _stclock = True
80
+
81
+ lines = (
82
+ "len",
83
+ "maxlen",
84
+ )
85
+
86
+ plotinfo = {"plot": True, "subplot": True}
87
+
88
+ plotlines = {
89
+ "maxlen": {
90
+ "_plotskip": True,
91
+ }
92
+ }
93
+
94
+ def __init__(self):
95
+ """Initialize the DrawDownLength observer.
96
+
97
+ Adds DrawDown analyzer to track drawdown length.
98
+ """
99
+ self._dd = self._owner._addanalyzer_slave(DrawDownAnalyzer)
100
+
101
+ def next(self):
102
+ """Update drawdown length values.
103
+
104
+ Gets current and maximum drawdown length from the analyzer.
105
+ """
106
+ self.lines.len[0] = self._dd.rets.len # update drawdown length
107
+ self.lines.maxlen[0] = self._dd.rets.max.len # update max length
108
+
109
+
110
+ # Old method for max drawdown, calculated within this class instead of calling DrawDown from analyzers
111
+ class DrawDownOld(Observer):
112
+ """This observer keeps track of the current drawdown level (plotted) and
113
+ the maxdrawdown (not plotted) levels
114
+
115
+ Params: None
116
+ """
117
+
118
+ _stclock = True
119
+
120
+ lines = (
121
+ "drawdown",
122
+ "maxdrawdown",
123
+ )
124
+
125
+ plotinfo = {"plot": True, "subplot": True}
126
+
127
+ plotlines = {
128
+ "maxdrawdown": {
129
+ "_plotskip": True,
130
+ }
131
+ }
132
+
133
+ def __init__(self):
134
+ """Initialize the DrawDownOld observer.
135
+
136
+ Sets up peak and max drawdown tracking variables.
137
+ """
138
+ super().__init__()
139
+
140
+ self.maxdd = 0.0
141
+ self.peak = float("-inf")
142
+
143
+ def next(self):
144
+ """Calculate and update drawdown values.
145
+
146
+ Computes drawdown from peak value and updates maximum.
147
+ """
148
+ value = self._owner.broker.getvalue()
149
+
150
+ # update the maximum seen peak
151
+ if value > self.peak:
152
+ self.peak = value
153
+
154
+ # calculate the current drawdown
155
+ if self.peak:
156
+ self.lines.drawdown[0] = dd = 100.0 * (self.peak - value) / self.peak
157
+ else:
158
+ self.lines.drawdown[0] = dd = 0.0
159
+
160
+ # update the maxdrawdown if needed
161
+ self.lines.maxdrawdown[0] = self.maxdd = max(self.maxdd, dd)
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env python
2
+ """LogReturns Observer Module - Log returns tracking.
3
+
4
+ This module provides observers for tracking log returns of the strategy
5
+ or a data feed.
6
+
7
+ Classes:
8
+ LogReturns: Observer that tracks log returns.
9
+ LogReturns2: Alternative log returns observer.
10
+
11
+ Example:
12
+ >>> cerebro = bt.Cerebro()
13
+ >>> cerebro.addobserver(bt.observers.LogReturns)
14
+ """
15
+
16
+ from ..analyzers import LogReturnsRolling
17
+ from ..dataseries import TimeFrame
18
+ from ..observer import Observer
19
+
20
+ __all__ = ["LogReturns", "LogReturns2"]
21
+
22
+
23
+ # Get log returns
24
+ class LogReturns(Observer):
25
+ """This observer stores the *log returns* of the strategy or a
26
+
27
+ Params:
28
+
29
+ - ``timeframe`` (default: ``None``)
30
+ If ``None`` then the complete return over the entire backtested period
31
+ will be reported
32
+
33
+ Pass ``TimeFrame.NoTimeFrame`` to consider the entire dataset with no
34
+ time constraints
35
+
36
+ - ``compression`` (default: ``None``)
37
+
38
+ Only used for sub-day timeframes to, for example, work on an hourly
39
+ timeframe by specifying "TimeFrame.Minutes" and 60 as compression
40
+
41
+ - ``fund`` (default: ``None``)
42
+
43
+ If `None`, the actual mode of the broker (fundmode - True/False) will
44
+ be autodetected to decide if the returns are based on the total net
45
+ asset value or on the fund value. See ``set_fundmode`` in the broker
46
+ documentation
47
+
48
+ Set it to ``True`` or ``False`` for a specific behavior
49
+
50
+ Remember that at any moment of a `run` the current values can be checked
51
+ by looking at the *lines* by name at index ``0``.
52
+
53
+ """
54
+
55
+ _stclock = True
56
+
57
+ lines = ("logret1",)
58
+ plotinfo = {"plot": True, "subplot": True}
59
+
60
+ params = (
61
+ ("timeframe", None),
62
+ ("compression", None),
63
+ ("fund", None),
64
+ )
65
+
66
+ # Plot labels
67
+ def _plotlabel(self):
68
+ return [
69
+ TimeFrame.getname(self.p.timeframe, self.p.compression),
70
+ str(self.p.compression or 1),
71
+ ]
72
+
73
+ def __init__(self):
74
+ """Initialize the LogReturns observer.
75
+
76
+ Adds LogReturnsRolling analyzer to track log returns.
77
+ """
78
+ self.logret1 = self._owner._addanalyzer_slave(
79
+ LogReturnsRolling, data=self.data0, **self.p._getkwargs()
80
+ )
81
+
82
+ def next(self):
83
+ """Update log return value for the current period.
84
+
85
+ Gets the log return from the analyzer.
86
+ """
87
+ self.lines.logret1[0] = self.logret1.rets.get(self.logret1.dtkey, float("NaN"))
88
+
89
+
90
+ # Show log returns for the second instrument
91
+ class LogReturns2(LogReturns):
92
+ """Extends the observer LogReturns to show two instruments"""
93
+
94
+ lines = ("logret2",)
95
+
96
+ def __init__(self):
97
+ """Initialize the LogReturns2 observer.
98
+
99
+ Adds analyzer for second data feed's log returns.
100
+ """
101
+ super().__init__()
102
+
103
+ self.logret2 = self._owner._addanalyzer_slave(
104
+ LogReturnsRolling, data=self.data1, **self.p._getkwargs()
105
+ )
106
+
107
+ def next(self):
108
+ """Update log return values for both data feeds.
109
+
110
+ Updates logret1 from parent and logret2 for second feed.
111
+ """
112
+ super().next()
113
+ self.lines.logret2[0] = self.logret2.rets.get(self.logret2.dtkey, float("NaN"))
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env python
2
+ """TimeReturn Observer Module - Time-based returns tracking.
3
+
4
+ This module provides the TimeReturn observer for tracking strategy
5
+ returns over different time periods.
6
+
7
+ Classes:
8
+ TimeReturn: Observer that tracks returns over time periods.
9
+
10
+ Example:
11
+ >>> cerebro = bt.Cerebro()
12
+ >>> cerebro.addobserver(bt.observers.TimeReturn, timeframe=bt.TimeFrame.Days)
13
+ """
14
+
15
+ from ..analyzers.timereturn import TimeReturn as TimeReturnAnalyzer
16
+ from ..dataseries import TimeFrame
17
+ from ..observer import Observer
18
+
19
+
20
+ # Time return class
21
+ class TimeReturn(Observer):
22
+ """This observer stores the *returns* of the strategy.
23
+
24
+ Params:
25
+
26
+ - ``timeframe`` (default: ``None``)
27
+ If ``None`` then the complete return over the entire backtested period
28
+ will be reported
29
+
30
+ Pass ``TimeFrame.NoTimeFrame`` to consider the entire dataset with no
31
+ time constraints
32
+
33
+ - ``compression`` (default: ``None``)
34
+
35
+ Only used for sub-day timeframes to, for example, work on an hourly
36
+ timeframe by specifying "TimeFrame.Minutes" and 60 as compression
37
+
38
+ - ``fund`` (default: ``None``)
39
+
40
+ If `None`, the actual mode of the broker (fundmode - True/False) will
41
+ be autodetected to decide if the returns are based on the total net
42
+ asset value or on the fund value. See ``set_fundmode`` in the broker
43
+ documentation
44
+
45
+ Set it to ``True`` or ``False`` for a specific behavior
46
+
47
+ Remember that at any moment of a `run` the current values can be checked
48
+ by looking at the *lines* by name at index ``0``.
49
+
50
+ """
51
+
52
+ _stclock = True
53
+ # Set lines
54
+ lines = ("timereturn",)
55
+ # Plot info
56
+ plotinfo = {"plot": True, "subplot": True}
57
+ # Set plotlines
58
+ plotlines = {"timereturn": {"_name": "Return"}}
59
+ # Parameters
60
+ params = (
61
+ ("timeframe", None),
62
+ ("compression", None),
63
+ ("fund", None),
64
+ )
65
+
66
+ # Plot labels
67
+ def _plotlabel(self):
68
+ return [
69
+ # Use the final tf/comp values calculated by the return analyzer
70
+ TimeFrame.getname(self.treturn.timeframe, self.treturn.compression),
71
+ str(self.treturn.compression),
72
+ ]
73
+
74
+ def __init__(self):
75
+ """Initialize the TimeReturn observer.
76
+
77
+ Adds TimeReturn analyzer to track returns over time.
78
+ """
79
+ self.treturn = self._owner._addanalyzer_slave(TimeReturnAnalyzer, **self.p._getkwargs())
80
+
81
+ def next(self):
82
+ """Update the time return value for the current period.
83
+
84
+ Gets the return value from the analyzer for the current time key.
85
+ """
86
+ self.lines.timereturn[0] = self.treturn.rets.get(self.treturn.dtkey, float("NaN"))