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/signal.py ADDED
@@ -0,0 +1,118 @@
1
+ #!/usr/bin/env python
2
+ """Signal Module - Signal indicator for trading strategies.
3
+
4
+ This module provides the Signal indicator which wraps a data line
5
+ to provide trading signal values for strategy execution.
6
+
7
+ Constants:
8
+ SIGNAL_NONE: No signal.
9
+ SIGNAL_LONGSHORT: Both long and short signals.
10
+ SIGNAL_LONG: Long entry signal.
11
+ SIGNAL_LONG_INV: Inverted long signal.
12
+ SIGNAL_LONG_ANY: Any long signal variant.
13
+ SIGNAL_SHORT: Short entry signal.
14
+ SIGNAL_SHORT_INV: Inverted short signal.
15
+ SIGNAL_SHORT_ANY: Any short signal variant.
16
+ SIGNAL_LONGEXIT: Long exit signal.
17
+ SIGNAL_LONGEXIT_INV: Inverted long exit signal.
18
+ SIGNAL_LONGEXIT_ANY: Any long exit variant.
19
+ SIGNAL_SHORTEXIT: Short exit signal.
20
+ SIGNAL_SHORTEXIT_INV: Inverted short exit signal.
21
+ SIGNAL_SHORTEXIT_ANY: Any short exit variant.
22
+
23
+ Classes:
24
+ Signal: Indicator that wraps a data line as a trading signal.
25
+
26
+ Example:
27
+ >>> class MyStrategy(bt.Strategy):
28
+ ... def __init__(self):
29
+ ... # Create a signal indicator from a data line
30
+ ... self.signal = bt.Signal(self.data.close)
31
+ ... self.sma = bt.indicators.SMA(self.data.close, period=20)
32
+ ...
33
+ ... def next(self):
34
+ ... if self.signal[0] > 0:
35
+ ... self.buy()
36
+ ... elif self.signal[0] < 0:
37
+ ... self.sell()
38
+ """
39
+
40
+ from .indicator import Indicator
41
+
42
+ # Create different SIGNAL types
43
+ (
44
+ SIGNAL_NONE,
45
+ SIGNAL_LONGSHORT,
46
+ SIGNAL_LONG,
47
+ SIGNAL_LONG_INV,
48
+ SIGNAL_LONG_ANY,
49
+ SIGNAL_SHORT,
50
+ SIGNAL_SHORT_INV,
51
+ SIGNAL_SHORT_ANY,
52
+ SIGNAL_LONGEXIT,
53
+ SIGNAL_LONGEXIT_INV,
54
+ SIGNAL_LONGEXIT_ANY,
55
+ SIGNAL_SHORTEXIT,
56
+ SIGNAL_SHORTEXIT_INV,
57
+ SIGNAL_SHORTEXIT_ANY,
58
+ ) = range(14)
59
+
60
+ # Different signal types
61
+ SignalTypes = [
62
+ SIGNAL_NONE,
63
+ SIGNAL_LONGSHORT,
64
+ SIGNAL_LONG,
65
+ SIGNAL_LONG_INV,
66
+ SIGNAL_LONG_ANY,
67
+ SIGNAL_SHORT,
68
+ SIGNAL_SHORT_INV,
69
+ SIGNAL_SHORT_ANY,
70
+ SIGNAL_LONGEXIT,
71
+ SIGNAL_LONGEXIT_INV,
72
+ SIGNAL_LONGEXIT_ANY,
73
+ SIGNAL_SHORTEXIT,
74
+ SIGNAL_SHORTEXIT_INV,
75
+ SIGNAL_SHORTEXIT_ANY,
76
+ ]
77
+
78
+
79
+ # Inherit from Indicator, create a signal indicator
80
+ class Signal(Indicator):
81
+ """Signal indicator for trading strategies.
82
+
83
+ The Signal class wraps a data line to provide trading signal values
84
+ for strategy execution. It inherits from Indicator and exposes a
85
+ single signal line that can be used to generate long/short signals.
86
+
87
+ Attributes:
88
+ SignalTypes: List of available signal type constants.
89
+ lines: Tuple containing the signal line name.
90
+
91
+ Example:
92
+ >>> class MyStrategy(bt.Strategy):
93
+ ... def __init__(self):
94
+ ... # Create a signal indicator from a data line
95
+ ... self.signal = bt.Signal(self.data.close)
96
+ ... self.sma = bt.indicators.SMA(self.data.close, period=20)
97
+ ...
98
+ ... def next(self):
99
+ ... if self.signal[0] > 0:
100
+ ... self.buy()
101
+ ... elif self.signal[0] < 0:
102
+ ... self.sell()
103
+ """
104
+
105
+ # Signal type
106
+ SignalTypes = SignalTypes
107
+ # Create a signal line
108
+ lines = ("signal",)
109
+
110
+ # Initialize
111
+ def __init__(self):
112
+ """Initialize the Signal indicator.
113
+
114
+ Wraps the first data line from data0 as the signal line and sets
115
+ up plotting information to use data0's clock as the plot master.
116
+ """
117
+ self.lines.signal = self.data0.lines[0]
118
+ self.plotinfo.plotmaster = getattr(self.data0, "_clock", self.data0)
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env python
2
+ """Signal Strategy Module - Trading signal based strategies.
3
+
4
+ This module provides signal-based strategy implementations where trading
5
+ decisions are driven by external signal sources rather than internal
6
+ logic. Signals can be generated from indicators, machine learning models,
7
+ or external data sources.
8
+
9
+ Key Classes:
10
+ SignalStrategy: Base class for signal-based strategies.
11
+
12
+ Example:
13
+ Creating a signal-based strategy:
14
+ >>> class MySignalStrategy(bt.SignalStrategy):
15
+ ... def __init__(self):
16
+ ... self.signal_add(bt.SIGNAL_LONG, self.data.close)
17
+ """
backtrader/sizer.py ADDED
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env python
2
+ """Position Sizer Module - Position size calculation.
3
+
4
+ This module provides the base class for position sizers, which determine
5
+ the size of orders to place based on available cash, risk parameters,
6
+ and other factors.
7
+
8
+ Classes:
9
+ Sizer: Base class for position sizers.
10
+ FixedSize: Sizer that uses a fixed size.
11
+ FixedReverser: Sizer that reverses positions with fixed size.
12
+ PercentSizer: Sizer that uses a percentage of available cash.
13
+ AllInSizer: Sizer that uses all available cash.
14
+ RiskReturnSizer: Sizer that sizes based on risk/reward ratio.
15
+
16
+ Example:
17
+ Creating a custom sizer:
18
+ >>> class MySizer(bt.Sizer):
19
+ ... params = (('perc', 0.1),)
20
+ ...
21
+ ... def _getsizing(self, comminfo, cash, data, isbuy):
22
+ ... return int(cash * self.p.perc / data.close[0])
23
+ """
24
+
25
+ from .parameters import ParameterizedBase
26
+
27
+
28
+ # Sizer class - Refactored to use new parameter system
29
+ class Sizer(ParameterizedBase):
30
+ """Base class for position sizers.
31
+
32
+ This is the base class for sizers. Any sizer should subclass this
33
+ and override the ``_getsizing`` method to provide custom position
34
+ sizing logic.
35
+
36
+ Attributes:
37
+ strategy: The strategy using this sizer.
38
+ broker: The broker instance for portfolio information.
39
+
40
+ Methods:
41
+ getsizing(data, isbuy): Get the position size for an order.
42
+ _getsizing(comminfo, cash, data, isbuy): Override to implement sizing logic.
43
+ set(strategy, broker): Set the strategy and broker references.
44
+
45
+ Example:
46
+ >>> cerebro.addsizer(bt.sizers.FixedSize, stake=100)
47
+ """
48
+
49
+ strategy = None
50
+ broker = None
51
+
52
+ def __init__(self, **kwargs):
53
+ """Initialize the Sizer with any provided parameters."""
54
+ super().__init__(**kwargs)
55
+
56
+ # Get the specific position size for order placement
57
+ def getsizing(self, data, isbuy):
58
+ """Get the position size for an order.
59
+
60
+ Args:
61
+ data: The target data for the order.
62
+ isbuy: True for buy operations, False for sell operations.
63
+
64
+ Returns:
65
+ int: The position size to use for the order, as determined
66
+ by the _getsizing method.
67
+ """
68
+ comminfo = self.broker.getcommissioninfo(data)
69
+ return self._getsizing(comminfo, self.broker.getcash(), data, isbuy)
70
+
71
+ def _getsizing(self, comminfo, cash, data, isbuy):
72
+ """This method has to be overriden by subclasses of Sizer to provide
73
+ the sizing functionality
74
+
75
+ Params:
76
+ - ``comminfo``: The CommissionInfo instance that contains
77
+ information about the commission for the data and allows
78
+ calculation of position value, operation cost, commission for the
79
+ operation
80
+
81
+ - ``cash``: current available cash in the *broker*
82
+
83
+ - ``data``: target of the operation
84
+
85
+ - ``isbuy``: will be ``True`` for *buy* operations and ``False``
86
+ for *sell* operations
87
+
88
+ The method has to return the actual size (an int) to be executed. If
89
+ `0` is returned, nothing will be executed.
90
+
91
+ The absolute value of the returned value will be used
92
+ # This method needs to be overridden when in use, takes four parameters:
93
+ # comminfo represents the commission instance, can be used to get commission etc.
94
+ # cash represents currently available cash
95
+ # data represents which data to trade on
96
+ # isbuy represents True for buy operations, False for sell operations
97
+
98
+ """
99
+ raise NotImplementedError
100
+
101
+ # Set strategy and broker
102
+ def set(self, strategy, broker):
103
+ """Set the strategy and broker references for this sizer.
104
+
105
+ Args:
106
+ strategy: The strategy instance using this sizer.
107
+ broker: The broker instance for portfolio information.
108
+ """
109
+ self.strategy = strategy
110
+ self.broker = broker
111
+
112
+
113
+ # SizerBase class
114
+ SizerBase = Sizer
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env python
2
+ """Position Sizers Module - Order size calculation strategies.
3
+
4
+ This module provides position sizer implementations that determine
5
+ the size of orders based on various strategies like fixed size,
6
+ percentage of capital, risk/reward ratios, etc.
7
+
8
+ Available Sizers:
9
+ - FixedSize: Always uses a fixed size for orders.
10
+ - FixedReverser: Reverses positions with fixed size.
11
+ - PercentSizer: Uses a percentage of available cash.
12
+ - AllInSizer: Uses all available cash for each order.
13
+ - RiskReturnSizer: Sizes based on risk/reward ratio.
14
+
15
+ Example:
16
+ Using a sizer with cerebro:
17
+ >>> cerebro = bt.Cerebro()
18
+ >>> cerebro.addsizer(bt.sizers.FixedSize, stake=100)
19
+ >>> cerebro.addsizer(bt.sizers.PercentSizer, percents=10)
20
+ """
21
+
22
+ # The modules below should/must define __all__ with the objects wishes
23
+ # or prepend an "_" (underscore) to private classes/variables
24
+
25
+ from .fixedsize import *
26
+ from .percents_sizer import *
@@ -0,0 +1,161 @@
1
+ #!/usr/bin/env python
2
+ """Fixed Size Sizer Module - Fixed stake position sizing.
3
+
4
+ This module provides the FixedSize sizer for using a fixed stake
5
+ size in trading operations.
6
+
7
+ Classes:
8
+ FixedSize: Returns a fixed stake size for orders.
9
+
10
+ Example:
11
+ >>> cerebro.addsizer(bt.sizers.FixedSize, stake=10)
12
+ """
13
+
14
+ from ..parameters import Int, ParameterDescriptor
15
+ from ..sizer import Sizer
16
+
17
+
18
+ class FixedSize(Sizer):
19
+ """
20
+ This sizer simply returns a fixed size for any operation.
21
+ Size can be controlled by the number of tranches that a system
22
+ wishes to use to scale into trades by specifying the ``tranches``
23
+ parameter.
24
+
25
+ This class has been refactored from legacy params tuple to the new
26
+ ParameterDescriptor system for Day 36-38 of the metaprogramming removal project.
27
+
28
+ Params:
29
+ - ``stake`` (default: ``1``)
30
+ - ``tranches`` (default: ``1``)
31
+ """
32
+
33
+ # Use new parameter descriptor system to define parameters
34
+ stake = ParameterDescriptor(
35
+ default=1, type_=int, validator=Int(min_val=1), doc="Fixed stake size for operations"
36
+ )
37
+ tranches = ParameterDescriptor(
38
+ default=1,
39
+ type_=int,
40
+ validator=Int(min_val=1),
41
+ doc="Number of tranches to divide stake into",
42
+ )
43
+
44
+ def __init__(self, **kwargs):
45
+ """Initialize the FixedSize sizer.
46
+
47
+ Args:
48
+ **kwargs: Keyword arguments for sizer configuration including
49
+ stake and tranches parameters.
50
+ """
51
+ super().__init__(**kwargs)
52
+
53
+ # Return specific stake size, if tranches > 1, will divide stake into tranches parts, otherwise return stake directly
54
+ def _getsizing(self, comminfo, cash, data, isbuy):
55
+ if self.get_param("tranches") > 1:
56
+ return abs(int(self.get_param("stake") / self.get_param("tranches")))
57
+ return self.get_param("stake")
58
+
59
+ # Set stake size
60
+ def setsizing(self, stake):
61
+ """Set the fixed stake size for operations.
62
+
63
+ Args:
64
+ stake (int): The stake size to set. If tranches > 1, this value
65
+ will be divided by tranches and stored as the internal stake.
66
+ """
67
+ if self.get_param("tranches") > 1:
68
+ self.set_param("stake", abs(int(stake / self.get_param("tranches"))))
69
+ else:
70
+ self.set_param("stake", stake) # OLD METHOD FOR SAMPLE COMPATIBILITY
71
+
72
+
73
+ # Another name for FixedSize
74
+ SizerFix = FixedSize
75
+
76
+
77
+ # If opening position, use stake, if reversing position, use double stake
78
+ class FixedReverser(Sizer):
79
+ """This sizer returns the needes fixed size to reverse an open position or
80
+ the fixed size to open one
81
+
82
+ - To open a position: return the param ``stake``
83
+
84
+ - To reverse a position: return 2 * `stake`
85
+
86
+ Params:
87
+ - ``stake`` (default: ``1``)
88
+ """
89
+
90
+ stake = ParameterDescriptor(
91
+ default=1, type_=int, validator=Int(min_val=1), doc="Fixed stake size for operations"
92
+ )
93
+
94
+ def __init__(self, **kwargs):
95
+ """Initialize the FixedReverser sizer.
96
+
97
+ Args:
98
+ **kwargs: Keyword arguments for sizer configuration including
99
+ stake parameter.
100
+ """
101
+ super().__init__(**kwargs)
102
+
103
+ def _getsizing(self, comminfo, cash, data, isbuy):
104
+ position = self.strategy.getposition(data)
105
+ size = self.get_param("stake") * (1 + (position.size != 0))
106
+ return size
107
+
108
+
109
+ # Fixed target stake size, if tranches > 1, first divide stake into tranches parts, then calculate current position and each part vs stake, choose smaller as order size
110
+ # If tranches <= 1, directly use stake size
111
+ class FixedSizeTarget(Sizer):
112
+ """
113
+ This sizer simply returns a fixed target size, useful when coupled
114
+ with Target Orders and specifically ``cerebro.target_order_size()``.
115
+ Size can be controlled by the number of tranches that a system
116
+ wishes to use to scale into trades by specifying the ``tranches``
117
+ parameter.
118
+
119
+ Params:
120
+ - ``stake`` (default: ``1``)
121
+ - ``tranches`` (default: ``1``)
122
+ """
123
+
124
+ stake = ParameterDescriptor(
125
+ default=1, type_=int, validator=Int(min_val=1), doc="Fixed target stake size"
126
+ )
127
+ tranches = ParameterDescriptor(
128
+ default=1,
129
+ type_=int,
130
+ validator=Int(min_val=1),
131
+ doc="Number of tranches to divide stake into",
132
+ )
133
+
134
+ def __init__(self, **kwargs):
135
+ """Initialize the FixedSizeTarget sizer.
136
+
137
+ Args:
138
+ **kwargs: Keyword arguments for sizer configuration including
139
+ stake and tranches parameters.
140
+ """
141
+ super().__init__(**kwargs)
142
+
143
+ def _getsizing(self, comminfo, cash, data, isbuy):
144
+ if self.get_param("tranches") > 1:
145
+ size = abs(int(self.get_param("stake") / self.get_param("tranches")))
146
+ return min((self.strategy.position.size + size), self.get_param("stake"))
147
+ return self.get_param("stake")
148
+
149
+ def setsizing(self, stake):
150
+ """Set the fixed target stake size for operations.
151
+
152
+ Args:
153
+ stake (int): The target stake size to set. If tranches > 1, this value
154
+ will be divided by tranches and adjusted based on current
155
+ position size to reach the target.
156
+ """
157
+ if self.get_param("tranches") > 1:
158
+ size = abs(int(stake / self.get_param("tranches")))
159
+ self.set_param("stake", min((self.strategy.position.size + size), stake))
160
+ else:
161
+ self.set_param("stake", stake) # OLD METHOD FOR SAMPLE COMPATIBILITY
@@ -0,0 +1,119 @@
1
+ #!/usr/bin/env python
2
+ """Percent Sizer Module - Percentage-based position sizing.
3
+
4
+ This module provides sizers that calculate position size based on
5
+ a percentage of available cash.
6
+
7
+ Classes:
8
+ PercentSizer: Uses percentage of cash for sizing.
9
+ AllInSizer: Uses 100% of available cash.
10
+ PercentSizerInt: PercentSizer returning int values.
11
+ AllInSizerInt: AllInSizer returning int values.
12
+
13
+ Example:
14
+ >>> cerebro.addsizer(bt.sizers.PercentSizer, percents=20)
15
+ """
16
+
17
+ from ..parameters import Float, ParameterDescriptor
18
+ from ..sizer import Sizer
19
+
20
+ __all__ = ["PercentSizer", "AllInSizer", "PercentSizerInt", "AllInSizerInt"]
21
+
22
+
23
+ class PercentSizer(Sizer):
24
+ """This sizer return percentages of available cash
25
+
26
+ This class has been refactored from legacy params tuple to the new
27
+ ParameterDescriptor system for Day 36-38 of the metaprogramming removal project.
28
+
29
+ Params:
30
+ - ``percents`` (default: ``20``)
31
+ - ``retint`` (default: ``False``) return an int size or rather the float value
32
+ """
33
+
34
+ # Use new parameter descriptor system to define parameters
35
+ percents = ParameterDescriptor(
36
+ default=20,
37
+ type_=float,
38
+ validator=Float(min_val=0.0, max_val=100.0),
39
+ doc="Percentage of available cash to use",
40
+ )
41
+ retint = ParameterDescriptor(
42
+ default=False, type_=bool, doc="Return an int size or rather the float value"
43
+ )
44
+
45
+ def __init__(self, **kwargs):
46
+ """Initialize the PercentSizer sizer.
47
+
48
+ Args:
49
+ **kwargs: Keyword arguments for sizer configuration.
50
+ """
51
+ super().__init__(**kwargs)
52
+
53
+ # If no current position, calculate orderable quantity based on cash percentage
54
+ # If current position exists, directly use position size as order stake
55
+ # If need to convert to int, then convert to int
56
+ def _getsizing(self, comminfo, cash, data, isbuy):
57
+ position = self.broker.getposition(data)
58
+ if not position:
59
+ close_price = data.close[0]
60
+ if not close_price or close_price != close_price:
61
+ return 0
62
+ size = cash / close_price * (self.get_param("percents") / 100)
63
+ else:
64
+ size = position.size
65
+
66
+ if self.get_param("retint"):
67
+ size = int(size)
68
+
69
+ return size
70
+
71
+
72
+ # Use all available cash to place order
73
+ class AllInSizer(PercentSizer):
74
+ """This sizer return all available cash of broker
75
+
76
+ Params:
77
+ - ``percents`` (default: ``100``)
78
+ """
79
+
80
+ # Redefine default value of percents parameter
81
+ percents = ParameterDescriptor(
82
+ default=100,
83
+ type_=float,
84
+ validator=Float(min_val=0.0, max_val=100.0),
85
+ doc="Percentage of available cash to use (100% for all-in)",
86
+ )
87
+
88
+
89
+ # Calculate order stake by percentage, then round to integer
90
+ class PercentSizerInt(PercentSizer):
91
+ """This sizer return percentages of available cash in the form of size truncated
92
+ to an int
93
+
94
+ Params:
95
+ - ``percents`` (default: ``20``)
96
+ """
97
+
98
+ # Redefine default value of retint parameter
99
+ retint = ParameterDescriptor(
100
+ default=True, type_=bool, doc="Return an int size or rather the float value (True for int)"
101
+ )
102
+
103
+
104
+ # Place order based on all available cash, stake must be rounded
105
+ class AllInSizerInt(PercentSizerInt):
106
+ """This sizer returns all available cash of broker with the
107
+ size truncated to an int
108
+
109
+ Params:
110
+ - ``percents`` (default: ``100``)
111
+ """
112
+
113
+ # Redefine default value of percents parameter
114
+ percents = ParameterDescriptor(
115
+ default=100,
116
+ type_=float,
117
+ validator=Float(min_val=0.0, max_val=100.0),
118
+ doc="Percentage of available cash to use (100% for all-in)",
119
+ )