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,31 @@
1
+ """
2
+ Backtrader 实盘交易模块
3
+ """
4
+
5
+ from .interface import (
6
+ LiveAccount,
7
+ LiveBroker,
8
+ LiveBrokerFactory,
9
+ LiveOrder,
10
+ LiveOrderSide,
11
+ LiveOrderStatus,
12
+ LiveOrderType,
13
+ LivePosition,
14
+ LivePositionSide,
15
+ LiveTick,
16
+ LiveTrade,
17
+ )
18
+
19
+ __all__ = [
20
+ "LiveOrder",
21
+ "LivePosition",
22
+ "LiveTrade",
23
+ "LiveAccount",
24
+ "LiveTick",
25
+ "LiveOrderType",
26
+ "LiveOrderSide",
27
+ "LiveOrderStatus",
28
+ "LivePositionSide",
29
+ "LiveBroker",
30
+ "LiveBrokerFactory",
31
+ ]
@@ -0,0 +1,404 @@
1
+ """
2
+ Backtrader 实盘交易模块
3
+
4
+ 提供实盘交易的抽象接口和基础实现
5
+ """
6
+
7
+ import logging
8
+ from abc import ABC, abstractmethod
9
+ from datetime import datetime
10
+ from enum import Enum
11
+ from typing import Any, Callable, Dict, List, Optional, cast
12
+
13
+ logger = logging.getLogger(__name__)
14
+
15
+
16
+ class LiveOrderType(str, Enum):
17
+ """订单类型"""
18
+
19
+ MARKET = "market"
20
+ LIMIT = "limit"
21
+ STOP = "stop"
22
+ STOP_LIMIT = "stop_limit"
23
+
24
+
25
+ class LiveOrderSide(str, Enum):
26
+ """订单方向"""
27
+
28
+ BUY = "buy"
29
+ SELL = "sell"
30
+
31
+
32
+ class LiveOrderStatus(str, Enum):
33
+ """订单状态"""
34
+
35
+ PENDING = "pending"
36
+ PARTIAL_FILLED = "partial_filled"
37
+ FILLED = "filled"
38
+ CANCELLED = "cancelled"
39
+ REJECTED = "rejected"
40
+ EXPIRED = "expired"
41
+
42
+
43
+ class LivePositionSide(str, Enum):
44
+ """持仓方向"""
45
+
46
+ LONG = "long"
47
+ SHORT = "short"
48
+ FLAT = "flat"
49
+
50
+
51
+ class LiveOrder:
52
+ """实盘订单"""
53
+
54
+ def __init__(
55
+ self,
56
+ order_id: str,
57
+ symbol: str,
58
+ order_type: LiveOrderType,
59
+ side: LiveOrderSide,
60
+ size: float,
61
+ price: Optional[float] = None,
62
+ stop_price: Optional[float] = None,
63
+ limit_price: Optional[float] = None,
64
+ filled_size: float = 0.0,
65
+ avg_fill_price: float = 0.0,
66
+ status: LiveOrderStatus = LiveOrderStatus.PENDING,
67
+ commission: float = 0.0,
68
+ created_at: Optional[datetime] = None,
69
+ updated_at: Optional[datetime] = None,
70
+ filled_at: Optional[datetime] = None,
71
+ rejected_reason: Optional[str] = None,
72
+ ):
73
+ self.order_id = order_id
74
+ self.symbol = symbol
75
+ self.order_type = order_type
76
+ self.side = side
77
+ self.size = size
78
+ self.price = price
79
+ self.stop_price = stop_price
80
+ self.limit_price = limit_price
81
+ self.filled_size = filled_size
82
+ self.avg_fill_price = avg_fill_price
83
+ self.status = status
84
+ self.commission = commission
85
+ self.created_at = created_at or datetime.utcnow()
86
+ self.updated_at = updated_at or datetime.utcnow()
87
+ self.filled_at = filled_at
88
+ self.rejected_reason = rejected_reason
89
+
90
+
91
+ class LivePosition:
92
+ """实盘持仓"""
93
+
94
+ def __init__(
95
+ self,
96
+ symbol: str,
97
+ size: float,
98
+ avg_price: float,
99
+ side: LivePositionSide,
100
+ market_value: float,
101
+ unrealized_pnl: float,
102
+ unrealized_pnl_pct: float,
103
+ ):
104
+ self.symbol = symbol
105
+ self.size = size
106
+ self.avg_price = avg_price
107
+ self.side = side
108
+ self.market_value = market_value
109
+ self.unrealized_pnl = unrealized_pnl
110
+ self.unrealized_pnl_pct = unrealized_pnl_pct
111
+
112
+
113
+ class LiveTrade:
114
+ """实盘成交"""
115
+
116
+ def __init__(
117
+ self,
118
+ trade_id: str,
119
+ order_id: str,
120
+ symbol: str,
121
+ side: LiveOrderSide,
122
+ size: float,
123
+ price: float,
124
+ commission: float,
125
+ pnl: float = 0.0,
126
+ pnl_pct: float = 0.0,
127
+ created_at: Optional[datetime] = None,
128
+ ):
129
+ self.trade_id = trade_id
130
+ self.order_id = order_id
131
+ self.symbol = symbol
132
+ self.side = side
133
+ self.size = size
134
+ self.price = price
135
+ self.commission = commission
136
+ self.pnl = pnl
137
+ self.pnl_pct = pnl_pct
138
+ self.created_at = created_at or datetime.utcnow()
139
+
140
+
141
+ class LiveAccount:
142
+ """实盘账户"""
143
+
144
+ def __init__(
145
+ self,
146
+ cash: float,
147
+ total_equity: float,
148
+ available_cash: float,
149
+ buying_power: float,
150
+ margin: float = 0.0,
151
+ maintenance_margin: float = 0.0,
152
+ ):
153
+ self.cash = cash
154
+ self.total_equity = total_equity
155
+ self.available_cash = available_cash
156
+ self.buying_power = buying_power
157
+ self.margin = margin
158
+ self.maintenance_margin = maintenance_margin
159
+
160
+
161
+ class LiveTick:
162
+ """实盘行情"""
163
+
164
+ def __init__(
165
+ self,
166
+ symbol: str,
167
+ timestamp: datetime,
168
+ open: float,
169
+ high: float,
170
+ low: float,
171
+ close: float,
172
+ volume: float,
173
+ bid: Optional[float] = None,
174
+ ask: Optional[float] = None,
175
+ bid_size: Optional[float] = None,
176
+ ask_size: Optional[float] = None,
177
+ ):
178
+ self.symbol = symbol
179
+ self.timestamp = timestamp
180
+ self.open = open
181
+ self.high = high
182
+ self.low = low
183
+ self.close = close
184
+ self.volume = volume
185
+ self.bid = bid
186
+ self.ask = ask
187
+ self.bid_size = bid_size
188
+ self.ask_size = ask_size
189
+
190
+
191
+ class LiveBroker(ABC):
192
+ """实盘券商抽象接口"""
193
+
194
+ @abstractmethod
195
+ def connect(self, config: Dict[str, Any]) -> bool:
196
+ """
197
+ 连接券商
198
+
199
+ Args:
200
+ config: 连接配置
201
+
202
+ Returns:
203
+ bool: 是否连接成功
204
+ """
205
+
206
+ @abstractmethod
207
+ def disconnect(self) -> None:
208
+ """
209
+ 断开连接
210
+ """
211
+
212
+ @abstractmethod
213
+ def get_account(self) -> LiveAccount:
214
+ """
215
+ 获取账户信息
216
+
217
+ Returns:
218
+ LiveAccount: 账户信息
219
+ """
220
+
221
+ @abstractmethod
222
+ def get_position(self, symbol: str) -> Optional[LivePosition]:
223
+ """
224
+ 获取持仓
225
+
226
+ Args:
227
+ symbol: 标的代码
228
+
229
+ Returns:
230
+ LivePosition or None: 持仓信息
231
+ """
232
+
233
+ @abstractmethod
234
+ def get_positions(self) -> List[LivePosition]:
235
+ """
236
+ 获取所有持仓
237
+
238
+ Returns:
239
+ List[LivePosition]: 持仓列表
240
+ """
241
+
242
+ @abstractmethod
243
+ def place_order(self, order: LiveOrder) -> LiveOrder:
244
+ """
245
+ 下单
246
+
247
+ Args:
248
+ order: 订单对象
249
+
250
+ Returns:
251
+ LiveOrder: 订单对象
252
+ """
253
+
254
+ @abstractmethod
255
+ def cancel_order(self, order_id: str) -> bool:
256
+ """
257
+ 撤单
258
+
259
+ Args:
260
+ order_id: 订单 ID
261
+
262
+ Returns:
263
+ bool: 是否撤销成功
264
+ """
265
+
266
+ @abstractmethod
267
+ def get_order(self, order_id: str) -> Optional[LiveOrder]:
268
+ """
269
+ 查询订单
270
+
271
+ Args:
272
+ order_id: 订单 ID
273
+
274
+ Returns:
275
+ LiveOrder or None: 订单信息
276
+ """
277
+
278
+ @abstractmethod
279
+ def get_orders(self, status: Optional[LiveOrderStatus] = None) -> List[LiveOrder]:
280
+ """
281
+ 查询所有订单
282
+
283
+ Args:
284
+ status: 订单状态(可选)
285
+
286
+ Returns:
287
+ List[LiveOrder]: 订单列表
288
+ """
289
+
290
+ @abstractmethod
291
+ def get_trades(
292
+ self,
293
+ symbol: Optional[str] = None,
294
+ start_date: Optional[datetime] = None,
295
+ end_date: Optional[datetime] = None,
296
+ ) -> List[LiveTrade]:
297
+ """
298
+ 查询成交
299
+
300
+ Args:
301
+ symbol: 标的代码(可选)
302
+ start_date: 开始日期(可选)
303
+ end_date: 结束日期(可选)
304
+
305
+ Returns:
306
+ List[LiveTrade]: 成交列表
307
+ """
308
+
309
+ @abstractmethod
310
+ def subscribe_tick(self, symbols: List[str], callback: Callable[[LiveTick], None]) -> None:
311
+ """
312
+ 订阅行情
313
+
314
+ Args:
315
+ symbols: 标的代码列表
316
+ callback: 行情回调函数
317
+ """
318
+
319
+ @abstractmethod
320
+ def unsubscribe_tick(self, symbols: List[str]) -> None:
321
+ """
322
+ 取消订阅行情
323
+
324
+ Args:
325
+ symbols: 标的代码列表
326
+ """
327
+
328
+ @abstractmethod
329
+ def get_historical_data(
330
+ self,
331
+ symbol: str,
332
+ start_date: datetime,
333
+ end_date: datetime,
334
+ frequency: str = "1d",
335
+ ) -> List[LiveTick]:
336
+ """
337
+ 获取历史行情
338
+
339
+ Args:
340
+ symbol: 标的代码
341
+ start_date: 开始日期
342
+ end_date: 结束日期
343
+ frequency: 频率(1m, 5m, 15m, 30m, 1h, 1d, 1w, 1M)
344
+
345
+ Returns:
346
+ List[LiveTick]: 历史行情列表
347
+ """
348
+
349
+ @abstractmethod
350
+ def is_connected(self) -> bool:
351
+ """
352
+ 检查是否已连接
353
+
354
+ Returns:
355
+ bool: 是否连接
356
+ """
357
+
358
+
359
+ class LiveBrokerFactory:
360
+ """实盘券商工厂"""
361
+
362
+ _brokers = {
363
+ "ccxt": "backtrader.live_trading.ccxt_broker.CCXTBroker",
364
+ "ctp": "backtrader.live_trading.ctp_broker.CTPBroker",
365
+ # 可以添加更多券商
366
+ }
367
+
368
+ @classmethod
369
+ def create_broker(cls, broker_type: str, config: Dict[str, Any]) -> LiveBroker:
370
+ """
371
+ 创建券商实例
372
+
373
+ Args:
374
+ broker_type: 券商类型
375
+ config: 券商配置
376
+
377
+ Returns:
378
+ LiveBroker: 券商实例
379
+ """
380
+ broker_class_path = cls._brokers.get(broker_type.lower())
381
+ if not broker_class_path:
382
+ raise ValueError(f"不支持的券商类型: {broker_type}")
383
+
384
+ # 动态导入券商类
385
+ parts = broker_class_path.split(".")
386
+ module_path = ".".join(parts[:-1])
387
+ class_name = parts[-1]
388
+
389
+ module = __import__(module_path, fromlist=[class_name])
390
+ broker_class = getattr(module, class_name)
391
+
392
+ # 创建实例
393
+ return cast(LiveBroker, broker_class(config))
394
+
395
+ @classmethod
396
+ def register_broker(cls, broker_type: str, broker_class_path: str):
397
+ """
398
+ 注册券商类型
399
+
400
+ Args:
401
+ broker_type: 券商类型
402
+ broker_class_path: 券商类路径
403
+ """
404
+ cls._brokers[broker_type.lower()] = broker_class_path
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env python
2
+ """Math Support Module - Mathematical functions for indicator calculations.
3
+
4
+ This module provides mathematical utility functions for calculating
5
+ statistics used in technical indicators, such as average, variance,
6
+ and standard deviation.
7
+
8
+ Functions:
9
+ average: Calculate arithmetic mean with optional Bessel's correction.
10
+ variance: Calculate variance from a sequence.
11
+ standarddev: Calculate standard deviation with Bessel's correction option.
12
+
13
+ Note:
14
+ These functions are primarily used for indicator calculations.
15
+ For large datasets, numpy-based implementations would provide
16
+ better performance.
17
+ """
18
+
19
+ import math
20
+
21
+
22
+ def is_finite_real(value):
23
+ """Check if a value is a finite real number (not complex, not NaN, not inf).
24
+
25
+ Args:
26
+ value: The value to check.
27
+
28
+ Returns:
29
+ bool: True if value is a finite real number, False otherwise.
30
+ """
31
+ try:
32
+ return not isinstance(value, complex) and math.isfinite(value)
33
+ except TypeError:
34
+ return False
35
+
36
+
37
+ # These functions are mainly used for calculating indicators, not used in main code. Commented for now, will review later whether Cython optimization is needed, no immediate need.
38
+ # However, these functions could potentially be optimized using numpy, which provides specific functions for calculating mean and standard deviation
39
+
40
+
41
+ # This calculates the average, with a parameter bessel to determine whether to subtract one from the denominator. The numerator uses math.fsum for calculating sum
42
+ def average(x, bessel=False):
43
+ """
44
+ Args:
45
+ :param x: iterable with len
46
+ :param bessel: default False, reduces the length of the array for the
47
+ division.
48
+
49
+ Returns:
50
+ A float with the average of the elements of x
51
+ """
52
+ # CRITICAL FIX: Prevent division by zero and negative denominator
53
+ denominator = len(x) - bessel
54
+ if denominator <= 0:
55
+ return 0.0
56
+ return math.fsum(x) / denominator
57
+
58
+
59
+ # Used to calculate variance. Obviously, converting this function to Cython or numpy would greatly improve efficiency. But this is an edge function, temporarily ignoring optimization.
60
+ # This function first checks if avgx is None, if None it calculates the average of an iterable, then calculates variance.
61
+ def variance(x, avgx=None):
62
+ """
63
+ Args:
64
+ x: iterable with len
65
+ avgx: average of x
66
+
67
+ Returns:
68
+ A list with the variance for each element of x
69
+ """
70
+ if not x:
71
+ return []
72
+ if avgx is None:
73
+ avgx = average(x)
74
+ return [pow(y - avgx, 2.0) for y in x]
75
+
76
+
77
+ # This function calculates the standard deviation of an iterable object x.
78
+ def standarddev(x, avgx=None, bessel=False):
79
+ """
80
+ Args:
81
+ x: iterable with len
82
+ avgx: average of x
83
+ bessel: (default ``False``) to be passed to the average to divide by
84
+ ``N - 1`` (Bessel's correction)
85
+
86
+ Returns:
87
+ A float with the standard deviation of the elements of x
88
+ """
89
+ if not x:
90
+ return 0.0
91
+ avg_var = average(variance(x, avgx), bessel=bessel)
92
+ if avg_var < 0.0:
93
+ return 0.0
94
+ return math.sqrt(avg_var)