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.
- back_trader_python-1.4.0.dist-info/METADATA +1491 -0
- back_trader_python-1.4.0.dist-info/RECORD +465 -0
- back_trader_python-1.4.0.dist-info/WHEEL +5 -0
- back_trader_python-1.4.0.dist-info/licenses/LICENSE +674 -0
- back_trader_python-1.4.0.dist-info/top_level.txt +1 -0
- backtrader/__init__.py +148 -0
- backtrader/_cerebro/__init__.py +5 -0
- backtrader/_cerebro/channel.py +382 -0
- backtrader/_cerebro/execution.py +377 -0
- backtrader/_cerebro/lifecycle.py +143 -0
- backtrader/_cerebro/notifications.py +150 -0
- backtrader/_cerebro/presentation.py +230 -0
- backtrader/_cerebro/registry.py +593 -0
- backtrader/_cerebro/runnext.py +551 -0
- backtrader/_cerebro/runonce.py +142 -0
- backtrader/analyzer.py +594 -0
- backtrader/analyzers/__init__.py +50 -0
- backtrader/analyzers/annualreturn.py +226 -0
- backtrader/analyzers/calmar.py +165 -0
- backtrader/analyzers/drawdown.py +287 -0
- backtrader/analyzers/leverage.py +112 -0
- backtrader/analyzers/logreturnsrolling.py +190 -0
- backtrader/analyzers/periodstats.py +153 -0
- backtrader/analyzers/positions.py +119 -0
- backtrader/analyzers/pyfolio.py +470 -0
- backtrader/analyzers/returns.py +192 -0
- backtrader/analyzers/sharpe.py +307 -0
- backtrader/analyzers/sharpe_ratio_stats.py +534 -0
- backtrader/analyzers/sqn.py +112 -0
- backtrader/analyzers/timereturn.py +192 -0
- backtrader/analyzers/total_value.py +75 -0
- backtrader/analyzers/tradeanalyzer.py +278 -0
- backtrader/analyzers/transactions.py +141 -0
- backtrader/analyzers/vwr.py +245 -0
- backtrader/bokeh/__init__.py +155 -0
- backtrader/bokeh/analyzers/__init__.py +13 -0
- backtrader/bokeh/analyzers/plot.py +192 -0
- backtrader/bokeh/analyzers/recorder.py +181 -0
- backtrader/bokeh/app.py +1094 -0
- backtrader/bokeh/live/__init__.py +11 -0
- backtrader/bokeh/live/client.py +352 -0
- backtrader/bokeh/live/datahandler.py +346 -0
- backtrader/bokeh/plot_adapter.py +200 -0
- backtrader/bokeh/schemes/__init__.py +14 -0
- backtrader/bokeh/schemes/blackly.py +76 -0
- backtrader/bokeh/schemes/scheme.py +150 -0
- backtrader/bokeh/schemes/tradimo.py +82 -0
- backtrader/bokeh/tab.py +125 -0
- backtrader/bokeh/tabs/__init__.py +30 -0
- backtrader/bokeh/tabs/analyzer.py +120 -0
- backtrader/bokeh/tabs/config.py +154 -0
- backtrader/bokeh/tabs/live.py +109 -0
- backtrader/bokeh/tabs/log.py +185 -0
- backtrader/bokeh/tabs/metadata.py +182 -0
- backtrader/bokeh/tabs/performance.py +359 -0
- backtrader/bokeh/tabs/source.py +70 -0
- backtrader/bokeh/utils/__init__.py +8 -0
- backtrader/bokeh/utils/helpers.py +167 -0
- backtrader/bokeh/webapp.py +164 -0
- backtrader/broker.py +478 -0
- backtrader/brokers/__init__.py +36 -0
- backtrader/brokers/bbroker.py +2576 -0
- backtrader/brokers/btapibroker.py +8227 -0
- backtrader/brokers/hft/__init__.py +89 -0
- backtrader/brokers/hft/binance_bbo.py +625 -0
- backtrader/brokers/hft/binance_bbo_compare.py +1398 -0
- backtrader/brokers/hft/examples.py +1228 -0
- backtrader/brokers/hft/exchange.py +380 -0
- backtrader/brokers/hft/latency.py +309 -0
- backtrader/brokers/hft/matching_core.py +572 -0
- backtrader/brokers/hft/queue.py +238 -0
- backtrader/brokers/hft/recorder.py +88 -0
- backtrader/brokers/hft/state.py +138 -0
- backtrader/brokers/impact_models.py +118 -0
- backtrader/brokers/mixbroker.py +895 -0
- backtrader/brokers/tickbroker.py +1991 -0
- backtrader/btrun/__init__.py +12 -0
- backtrader/btrun/btrun.py +1218 -0
- backtrader/cerebro.py +828 -0
- backtrader/channel.py +682 -0
- backtrader/channels/__init__.py +23 -0
- backtrader/channels/bridge.py +186 -0
- backtrader/channels/funding.py +248 -0
- backtrader/channels/live_queue.py +216 -0
- backtrader/channels/live_validator.py +294 -0
- backtrader/channels/orderbook.py +257 -0
- backtrader/channels/tick.py +202 -0
- backtrader/comminfo.py +665 -0
- backtrader/commissions/__init__.py +106 -0
- backtrader/commissions/ctpoption.py +993 -0
- backtrader/configs/account_config_example.yaml +8 -0
- backtrader/dataseries.py +379 -0
- backtrader/errors.py +106 -0
- backtrader/events.py +980 -0
- backtrader/feed.py +1523 -0
- backtrader/feeds/__init__.py +75 -0
- backtrader/feeds/barrier.py +2006 -0
- backtrader/feeds/blaze.py +118 -0
- backtrader/feeds/btapifeed.py +1538 -0
- backtrader/feeds/btcsv.py +203 -0
- backtrader/feeds/chainer.py +114 -0
- backtrader/feeds/cryptohftdata.py +164 -0
- backtrader/feeds/csvgeneric.py +1205 -0
- backtrader/feeds/ctpcohort.py +1051 -0
- backtrader/feeds/influxfeed.py +158 -0
- backtrader/feeds/livefeed.py +71 -0
- backtrader/feeds/mixed_channel.py +108 -0
- backtrader/feeds/mt4csv.py +42 -0
- backtrader/feeds/pandafeed.py +381 -0
- backtrader/feeds/quandl.py +256 -0
- backtrader/feeds/rollover.py +229 -0
- backtrader/feeds/sierrachart.py +30 -0
- backtrader/feeds/vchart.py +162 -0
- backtrader/feeds/vchartcsv.py +84 -0
- backtrader/feeds/vchartfile.py +153 -0
- backtrader/feeds/yahoo.py +399 -0
- backtrader/fillers.py +148 -0
- backtrader/filters/__init__.py +34 -0
- backtrader/filters/bsplitter.py +127 -0
- backtrader/filters/calendardays.py +121 -0
- backtrader/filters/datafiller.py +192 -0
- backtrader/filters/datafilter.py +74 -0
- backtrader/filters/daysteps.py +96 -0
- backtrader/filters/heikinashi.py +63 -0
- backtrader/filters/renko.py +164 -0
- backtrader/filters/session.py +289 -0
- backtrader/flt.py +80 -0
- backtrader/functions.py +960 -0
- backtrader/indicator.py +449 -0
- backtrader/indicators/__init__.py +148 -0
- backtrader/indicators/accdecoscillator.py +110 -0
- backtrader/indicators/aroon.py +300 -0
- backtrader/indicators/atr.py +315 -0
- backtrader/indicators/awesomeoscillator.py +122 -0
- backtrader/indicators/basicops.py +834 -0
- backtrader/indicators/bollinger.py +223 -0
- backtrader/indicators/cci.py +89 -0
- backtrader/indicators/channels_ext.py +83 -0
- backtrader/indicators/contrib/__init__.py +228 -0
- backtrader/indicators/contrib/absolutely_no_lag_lwma.py +28 -0
- backtrader/indicators/contrib/absolutely_no_lag_lwma_color.py +44 -0
- backtrader/indicators/contrib/accumulation_distribution_line.py +92 -0
- backtrader/indicators/contrib/adx_cross_hull_style_indicator.py +249 -0
- backtrader/indicators/contrib/adxdmi.py +34 -0
- backtrader/indicators/contrib/ai_acceleration_deceleration_oscillator.py +34 -0
- backtrader/indicators/contrib/altr_trend_signal_v22.py +85 -0
- backtrader/indicators/contrib/anchored_momentum_line.py +115 -0
- backtrader/indicators/contrib/any_range_cld_tail_indicator.py +82 -0
- backtrader/indicators/contrib/aroon_horn_sign_indicator.py +96 -0
- backtrader/indicators/contrib/aroon_oscillator_sign_alert.py +50 -0
- backtrader/indicators/contrib/arrows_curves_indicator.py +112 -0
- backtrader/indicators/contrib/as_ctrend_indicator.py +143 -0
- backtrader/indicators/contrib/asimmetric_stoch_nr_indicator.py +187 -0
- backtrader/indicators/contrib/atr_normalize_histogram.py +118 -0
- backtrader/indicators/contrib/average_change_candle.py +165 -0
- backtrader/indicators/contrib/bb_squeeze_indicator.py +60 -0
- backtrader/indicators/contrib/bezier_st_dev_indicator.py +135 -0
- backtrader/indicators/contrib/binary_wave_indicator.py +233 -0
- backtrader/indicators/contrib/blau_c_momentum_indicator.py +123 -0
- backtrader/indicators/contrib/blau_cmi_indicator.py +141 -0
- backtrader/indicators/contrib/blau_csi.py +76 -0
- backtrader/indicators/contrib/blau_ergodic.py +53 -0
- backtrader/indicators/contrib/blau_t_stoch_i.py +72 -0
- backtrader/indicators/contrib/blau_ts_stochastic.py +85 -0
- backtrader/indicators/contrib/blau_tvi.py +55 -0
- backtrader/indicators/contrib/brain_trend2_indicator.py +128 -0
- backtrader/indicators/contrib/brain_trend_signal_proxy.py +47 -0
- backtrader/indicators/contrib/brake_parb_indicator.py +85 -0
- backtrader/indicators/contrib/breakout_bars_trend_v2.py +121 -0
- backtrader/indicators/contrib/bsi_indicator.py +87 -0
- backtrader/indicators/contrib/bulls_bears_eyes.py +67 -0
- backtrader/indicators/contrib/bulls_power.py +56 -0
- backtrader/indicators/contrib/bw_wise_man1_signal.py +102 -0
- backtrader/indicators/contrib/bykov_trend_indicator.py +85 -0
- backtrader/indicators/contrib/candle_stop_color.py +46 -0
- backtrader/indicators/contrib/candles_x_smoothed_indicator.py +69 -0
- backtrader/indicators/contrib/candlesticks_bw.py +45 -0
- backtrader/indicators/contrib/caudate_x_period_candle_color.py +56 -0
- backtrader/indicators/contrib/cci_histogram_indicator.py +53 -0
- backtrader/indicators/contrib/cci_woodies_indicator.py +80 -0
- backtrader/indicators/contrib/center_of_gravity_candle_indicator.py +83 -0
- backtrader/indicators/contrib/center_of_gravity_indicator.py +70 -0
- backtrader/indicators/contrib/cg_oscillator.py +40 -0
- backtrader/indicators/contrib/close_line_cci.py +38 -0
- backtrader/indicators/contrib/close_price_fractals.py +47 -0
- backtrader/indicators/contrib/color3rd_gen_xma_indicator.py +122 -0
- backtrader/indicators/contrib/color_bb_candles_indicator.py +108 -0
- backtrader/indicators/contrib/color_coppock_indicator.py +157 -0
- backtrader/indicators/contrib/color_hma.py +71 -0
- backtrader/indicators/contrib/color_j_variation_indicator.py +53 -0
- backtrader/indicators/contrib/color_metro_de_marker_indicator.py +78 -0
- backtrader/indicators/contrib/color_metro_stochastic_indicator.py +93 -0
- backtrader/indicators/contrib/color_metro_wpr_indicator.py +85 -0
- backtrader/indicators/contrib/color_schaff_de_marker_trend_cycle.py +92 -0
- backtrader/indicators/contrib/color_schaff_trend_cycle_indicator.py +203 -0
- backtrader/indicators/contrib/color_step_xccx_indicator.py +193 -0
- backtrader/indicators/contrib/color_x2_ma.py +49 -0
- backtrader/indicators/contrib/color_x_derivative.py +63 -0
- backtrader/indicators/contrib/color_zerolag_de_marker.py +84 -0
- backtrader/indicators/contrib/corrected_average_indicator.py +127 -0
- backtrader/indicators/contrib/darvas_boxes_system.py +73 -0
- backtrader/indicators/contrib/dema_range_channel_color.py +42 -0
- backtrader/indicators/contrib/derivative_indicator.py +95 -0
- backtrader/indicators/contrib/digital_ft01_indicator.py +112 -0
- backtrader/indicators/contrib/digital_macd.py +200 -0
- backtrader/indicators/contrib/donchian_channels_system.py +45 -0
- backtrader/indicators/contrib/dots_indicator.py +93 -0
- backtrader/indicators/contrib/ef_distance_indicator.py +82 -0
- backtrader/indicators/contrib/ema_rsi_va.py +80 -0
- backtrader/indicators/contrib/envelopes_jp_alonso.py +32 -0
- backtrader/indicators/contrib/f2a_ao_indicator.py +120 -0
- backtrader/indicators/contrib/fatl_filter.py +179 -0
- backtrader/indicators/contrib/fibo_candles_indicator.py +78 -0
- backtrader/indicators/contrib/fine_tuning_ma.py +100 -0
- backtrader/indicators/contrib/fisher_org_v1.py +102 -0
- backtrader/indicators/contrib/fisher_org_v1_sign.py +118 -0
- backtrader/indicators/contrib/force_index_ema.py +96 -0
- backtrader/indicators/contrib/force_index_ema_2.py +27 -0
- backtrader/indicators/contrib/forecast_oscilator.py +145 -0
- backtrader/indicators/contrib/fractal_amambk.py +81 -0
- backtrader/indicators/contrib/frama_series.py +84 -0
- backtrader/indicators/contrib/frasm_av2_indicator.py +104 -0
- backtrader/indicators/contrib/go_indicator.py +93 -0
- backtrader/indicators/contrib/hlr_indicator.py +95 -0
- backtrader/indicators/contrib/hma.py +50 -0
- backtrader/indicators/contrib/i4_drfv2.py +34 -0
- backtrader/indicators/contrib/i4_drfv3.py +38 -0
- backtrader/indicators/contrib/i_anch_mom_indicator.py +72 -0
- backtrader/indicators/contrib/i_de_marker_sign_indicator.py +64 -0
- backtrader/indicators/contrib/i_gap_indicator.py +45 -0
- backtrader/indicators/contrib/i_stoch_komposter_indicator.py +77 -0
- backtrader/indicators/contrib/i_trend_indicator.py +125 -0
- backtrader/indicators/contrib/iamma_indicator.py +39 -0
- backtrader/indicators/contrib/indexed_moving_average.py +33 -0
- backtrader/indicators/contrib/instantaneous_trend_filter_indicator.py +51 -0
- backtrader/indicators/contrib/inverse_reaction_indicator.py +41 -0
- backtrader/indicators/contrib/irsi_sign_indicator.py +95 -0
- backtrader/indicators/contrib/iwpr_sign_indicator.py +59 -0
- backtrader/indicators/contrib/j_brain_trend1_sig_indicator.py +233 -0
- backtrader/indicators/contrib/j_tpo_proxy.py +32 -0
- backtrader/indicators/contrib/jma_slope_indicator.py +73 -0
- backtrader/indicators/contrib/kalman_filter_indicator.py +119 -0
- backtrader/indicators/contrib/kalman_filter_line.py +127 -0
- backtrader/indicators/contrib/kama_indicator.py +150 -0
- backtrader/indicators/contrib/karacatica_indicator.py +99 -0
- backtrader/indicators/contrib/kdj_indicator.py +59 -0
- backtrader/indicators/contrib/kwan_ccc_indicator.py +195 -0
- backtrader/indicators/contrib/kwan_nrp_indicator.py +113 -0
- backtrader/indicators/contrib/kwan_rdp_indicator.py +192 -0
- backtrader/indicators/contrib/laguerre_adx_indicator.py +85 -0
- backtrader/indicators/contrib/laguerre_filter_indicator.py +66 -0
- backtrader/indicators/contrib/laguerre_plus_di_proxy.py +57 -0
- backtrader/indicators/contrib/laguerre_roc_indicator.py +81 -0
- backtrader/indicators/contrib/le_man_signal_indicator.py +63 -0
- backtrader/indicators/contrib/linear_reg_slope_v2_indicator.py +136 -0
- backtrader/indicators/contrib/loco_indicator.py +88 -0
- backtrader/indicators/contrib/lrma_indicator.py +185 -0
- backtrader/indicators/contrib/lsma_angle_indicator.py +106 -0
- backtrader/indicators/contrib/ma_rounding_channel_indicator.py +149 -0
- backtrader/indicators/contrib/macd2_indicator.py +61 -0
- backtrader/indicators/contrib/macd_candle_indicator.py +80 -0
- backtrader/indicators/contrib/malr_indicator.py +77 -0
- backtrader/indicators/contrib/momentum_candle_sign_indicator.py +51 -0
- backtrader/indicators/contrib/moving_average_fn_indicator.py +139 -0
- backtrader/indicators/contrib/mt5_stochastic_close_close.py +57 -0
- backtrader/indicators/contrib/muv_nor_diff_cloud_indicator.py +107 -0
- backtrader/indicators/contrib/non_lag_dot_indicator.py +124 -0
- backtrader/indicators/contrib/nrtr_extr_indicator.py +95 -0
- backtrader/indicators/contrib/nrtr_indicator.py +95 -0
- backtrader/indicators/contrib/p_channel_system.py +40 -0
- backtrader/indicators/contrib/percent_envelope.py +37 -0
- backtrader/indicators/contrib/percentage_crossover_channel.py +47 -0
- backtrader/indicators/contrib/pivot_zig_zag_proxy.py +47 -0
- backtrader/indicators/contrib/price_channel_stop_indicator.py +104 -0
- backtrader/indicators/contrib/price_extreme_channel.py +35 -0
- backtrader/indicators/contrib/qqe_cloud_indicator.py +129 -0
- backtrader/indicators/contrib/ravi_indicator.py +40 -0
- backtrader/indicators/contrib/raw_close_close_stochastic.py +74 -0
- backtrader/indicators/contrib/rd_trend_trigger_indicator.py +51 -0
- backtrader/indicators/contrib/renko_level.py +85 -0
- backtrader/indicators/contrib/renko_line_break.py +91 -0
- backtrader/indicators/contrib/rftl_indicator.py +41 -0
- backtrader/indicators/contrib/rkd_indicator.py +53 -0
- backtrader/indicators/contrib/roc2_vg_indicator.py +68 -0
- backtrader/indicators/contrib/rsi_histogram_indicator.py +43 -0
- backtrader/indicators/contrib/rsi_slowdown.py +57 -0
- backtrader/indicators/contrib/rsioma_v2.py +41 -0
- backtrader/indicators/contrib/rvi_histogram_indicator.py +107 -0
- backtrader/indicators/contrib/safe_adx.py +89 -0
- backtrader/indicators/contrib/shared_strategy_indicators.py +1651 -0
- backtrader/indicators/contrib/sidus_indicator.py +105 -0
- backtrader/indicators/contrib/silver_trend_indicator.py +79 -0
- backtrader/indicators/contrib/sliding_range_color.py +56 -0
- backtrader/indicators/contrib/slow_stoch.py +42 -0
- backtrader/indicators/contrib/smoothed_adx_indicator.py +86 -0
- backtrader/indicators/contrib/smoothed_rsi.py +31 -0
- backtrader/indicators/contrib/spearman_rank_correlation_histogram.py +60 -0
- backtrader/indicators/contrib/stalin_indicator.py +152 -0
- backtrader/indicators/contrib/starter_laguerre_filter.py +62 -0
- backtrader/indicators/contrib/step_manrtr_indicator.py +137 -0
- backtrader/indicators/contrib/stochastic_histogram_indicator.py +143 -0
- backtrader/indicators/contrib/t3_alarm_indicator.py +125 -0
- backtrader/indicators/contrib/t3_average.py +76 -0
- backtrader/indicators/contrib/t3_indicator.py +40 -0
- backtrader/indicators/contrib/the20s_v020_signal.py +93 -0
- backtrader/indicators/contrib/three_candles_indicator.py +70 -0
- backtrader/indicators/contrib/three_line_break_indicator.py +64 -0
- backtrader/indicators/contrib/time_line.py +57 -0
- backtrader/indicators/contrib/trading_channel_index_proxy.py +48 -0
- backtrader/indicators/contrib/trend_arrows_indicator.py +109 -0
- backtrader/indicators/contrib/trend_continuation_indicator.py +127 -0
- backtrader/indicators/contrib/trend_intensity_index_proxy.py +51 -0
- backtrader/indicators/contrib/trend_manager_indicator.py +39 -0
- backtrader/indicators/contrib/tri_x_candle_indicator.py +51 -0
- backtrader/indicators/contrib/trigger_line.py +66 -0
- backtrader/indicators/contrib/triple_ema_rate.py +34 -0
- backtrader/indicators/contrib/trvi_indicator.py +194 -0
- backtrader/indicators/contrib/two_pb_ideal_xosma_indicator.py +127 -0
- backtrader/indicators/contrib/ultra_absolutely_no_lag_lwma_color.py +92 -0
- backtrader/indicators/contrib/ultra_wpr_indicator.py +173 -0
- backtrader/indicators/contrib/up_down_candle_strength.py +68 -0
- backtrader/indicators/contrib/vinin_i_trend_indicator.py +139 -0
- backtrader/indicators/contrib/volume_weighted_ma_indicator.py +78 -0
- backtrader/indicators/contrib/volume_weighted_ma_st_dev_indicator.py +111 -0
- backtrader/indicators/contrib/vwap_close_indicator.py +65 -0
- backtrader/indicators/contrib/vwma_candle.py +57 -0
- backtrader/indicators/contrib/vwma_digit_system.py +70 -0
- backtrader/indicators/contrib/wami.py +43 -0
- backtrader/indicators/contrib/wprsi_signal_indicator.py +105 -0
- backtrader/indicators/contrib/x_de_marker_histogram_vol_direct_indicator.py +145 -0
- backtrader/indicators/contrib/x_fisher_indicator.py +64 -0
- backtrader/indicators/contrib/xcci_histogram_vol_direct_indicator.py +56 -0
- backtrader/indicators/contrib/xcci_histogram_vol_indicator.py +85 -0
- backtrader/indicators/contrib/xma_ichimoku.py +163 -0
- backtrader/indicators/contrib/xma_ishimoku_channel_indicator.py +65 -0
- backtrader/indicators/contrib/xma_ishimoku_line.py +68 -0
- backtrader/indicators/contrib/xma_range_bands_indicator.py +107 -0
- backtrader/indicators/contrib/xmacd_indicator.py +70 -0
- backtrader/indicators/contrib/xrsi_de_marker_histogram.py +67 -0
- backtrader/indicators/contrib/xrsi_histogram_vol_direct_indicator.py +52 -0
- backtrader/indicators/contrib/xrsi_histogram_vol_indicator.py +81 -0
- backtrader/indicators/contrib/xrvi_indicator.py +130 -0
- backtrader/indicators/contrib/zero_lag_macd.py +36 -0
- backtrader/indicators/contrib/zig_zag_recent_pivot_signal.py +90 -0
- backtrader/indicators/contrib/zpf_indicator.py +115 -0
- backtrader/indicators/crossover.py +337 -0
- backtrader/indicators/dema.py +175 -0
- backtrader/indicators/demarker.py +270 -0
- backtrader/indicators/deviation.py +284 -0
- backtrader/indicators/directionalmove.py +1071 -0
- backtrader/indicators/dma.py +112 -0
- backtrader/indicators/dpo.py +96 -0
- backtrader/indicators/dv2.py +56 -0
- backtrader/indicators/ema.py +145 -0
- backtrader/indicators/envelope.py +475 -0
- backtrader/indicators/hadelta.py +198 -0
- backtrader/indicators/heikinashi.py +153 -0
- backtrader/indicators/hma.py +153 -0
- backtrader/indicators/hurst.py +151 -0
- backtrader/indicators/ichimoku.py +267 -0
- backtrader/indicators/kama.py +181 -0
- backtrader/indicators/kst.py +159 -0
- backtrader/indicators/lrsi.py +125 -0
- backtrader/indicators/mabase.py +147 -0
- backtrader/indicators/macd.py +322 -0
- backtrader/indicators/momentum.py +267 -0
- backtrader/indicators/moneyflow.py +237 -0
- backtrader/indicators/mt5atr.py +124 -0
- backtrader/indicators/myind.py +179 -0
- backtrader/indicators/obv.py +94 -0
- backtrader/indicators/ols.py +265 -0
- backtrader/indicators/oscillator.py +161 -0
- backtrader/indicators/percentchange.py +83 -0
- backtrader/indicators/percentrank.py +46 -0
- backtrader/indicators/pivotpoint.py +469 -0
- backtrader/indicators/prettygoodoscillator.py +113 -0
- backtrader/indicators/priceops_ext.py +123 -0
- backtrader/indicators/priceoscillator.py +262 -0
- backtrader/indicators/psar.py +212 -0
- backtrader/indicators/rmi.py +69 -0
- backtrader/indicators/rsi.py +440 -0
- backtrader/indicators/sma.py +141 -0
- backtrader/indicators/smma.py +116 -0
- backtrader/indicators/spread.py +54 -0
- backtrader/indicators/stochastic.py +263 -0
- backtrader/indicators/supertrend.py +436 -0
- backtrader/indicators/trend_ext.py +105 -0
- backtrader/indicators/trix.py +202 -0
- backtrader/indicators/tsi.py +155 -0
- backtrader/indicators/ultimateoscillator.py +158 -0
- backtrader/indicators/vortex.py +62 -0
- backtrader/indicators/williams.py +194 -0
- backtrader/indicators/wma.py +103 -0
- backtrader/indicators/zlema.py +135 -0
- backtrader/indicators/zlind.py +104 -0
- backtrader/linebuffer.py +3155 -0
- backtrader/lineiterator.py +2911 -0
- backtrader/lineroot.py +1106 -0
- backtrader/lineseries.py +2559 -0
- backtrader/live_trading/__init__.py +31 -0
- backtrader/live_trading/interface.py +404 -0
- backtrader/mathsupport.py +94 -0
- backtrader/metabase.py +1804 -0
- backtrader/mixins/__init__.py +21 -0
- backtrader/mixins/singleton.py +118 -0
- backtrader/observer.py +106 -0
- backtrader/observers/__init__.py +45 -0
- backtrader/observers/benchmark.py +126 -0
- backtrader/observers/broker.py +184 -0
- backtrader/observers/buysell.py +144 -0
- backtrader/observers/drawdown.py +161 -0
- backtrader/observers/logreturns.py +113 -0
- backtrader/observers/timereturn.py +86 -0
- backtrader/observers/trade_logger.py +2972 -0
- backtrader/observers/tradelogger.py +6 -0
- backtrader/observers/trades.py +258 -0
- backtrader/order.py +1114 -0
- backtrader/parameters.py +2345 -0
- backtrader/plot/__init__.py +54 -0
- backtrader/plot/finance.py +1022 -0
- backtrader/plot/formatters.py +200 -0
- backtrader/plot/locator.py +353 -0
- backtrader/plot/multicursor.py +495 -0
- backtrader/plot/plot.py +2500 -0
- backtrader/plot/plot_plotly.py +1351 -0
- backtrader/plot/scheme.py +253 -0
- backtrader/plot/utils.py +104 -0
- backtrader/position.py +290 -0
- backtrader/position_modes.py +132 -0
- backtrader/profiles.py +254 -0
- backtrader/reports/__init__.py +39 -0
- backtrader/reports/charts.py +371 -0
- backtrader/reports/performance.py +620 -0
- backtrader/reports/reporter.py +660 -0
- backtrader/resamplerfilter.py +1001 -0
- backtrader/signal.py +118 -0
- backtrader/signals/__init__.py +17 -0
- backtrader/sizer.py +114 -0
- backtrader/sizers/__init__.py +26 -0
- backtrader/sizers/fixedsize.py +161 -0
- backtrader/sizers/percents_sizer.py +119 -0
- backtrader/store.py +221 -0
- backtrader/stores/__init__.py +33 -0
- backtrader/stores/btapistore.py +15506 -0
- backtrader/stores/livestore.py +137 -0
- backtrader/stores/vchartfile.py +96 -0
- backtrader/strategy.py +3655 -0
- backtrader/talib.py +280 -0
- backtrader/test_helpers.py +96 -0
- backtrader/timer.py +358 -0
- backtrader/trade.py +442 -0
- backtrader/tradingcal.py +361 -0
- backtrader/utils/__init__.py +68 -0
- backtrader/utils/autodict.py +251 -0
- backtrader/utils/date.py +71 -0
- backtrader/utils/dateintern.py +509 -0
- backtrader/utils/flushfile.py +94 -0
- backtrader/utils/fractal.py +101 -0
- backtrader/utils/get_metrics.py +101 -0
- backtrader/utils/load_data.py +209 -0
- backtrader/utils/log_message.py +998 -0
- backtrader/utils/ordereddefaultdict.py +75 -0
- backtrader/utils/py3.py +296 -0
- backtrader/version.py +21 -0
- backtrader/writer.py +372 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""Ordered Default Dict Module - OrderedDict with default values.
|
|
3
|
+
|
|
4
|
+
This module provides OrderedDefaultdict, which combines the insertion
|
|
5
|
+
ordering of OrderedDict with the default value functionality of defaultdict.
|
|
6
|
+
|
|
7
|
+
Classes:
|
|
8
|
+
OrderedDefaultdict: OrderedDict that creates default values for missing keys.
|
|
9
|
+
|
|
10
|
+
Example:
|
|
11
|
+
>>> from backtrader.utils import OrderedDefaultdict
|
|
12
|
+
>>> d = OrderedDefaultdict(list)
|
|
13
|
+
>>> d['key'].append('value')
|
|
14
|
+
>>> print(d['key'])
|
|
15
|
+
['value']
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from collections import OrderedDict
|
|
19
|
+
|
|
20
|
+
from .py3 import iteritems
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# This is an unused class. The intention of creating it should be to maintain DefaultDict characteristics when adding to OrderedDict
|
|
24
|
+
# This class is not found anywhere in backtrader, everyone can ignore it, it can even be deleted without affecting usage.
|
|
25
|
+
class OrderedDefaultdict(OrderedDict):
|
|
26
|
+
"""OrderedDict that creates default values for missing keys.
|
|
27
|
+
|
|
28
|
+
Combines the insertion ordering of OrderedDict with the automatic
|
|
29
|
+
default value creation of defaultdict.
|
|
30
|
+
|
|
31
|
+
Attributes:
|
|
32
|
+
default_factory: Callable that creates default values for missing keys.
|
|
33
|
+
|
|
34
|
+
Example:
|
|
35
|
+
>>> d = OrderedDefaultdict(list)
|
|
36
|
+
>>> d['items'].append(1)
|
|
37
|
+
>>> print(d['items'])
|
|
38
|
+
[1]
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
# Class initialization, passing *args parameters and **kwargs parameters
|
|
42
|
+
def __init__(self, *args, **kwargs):
|
|
43
|
+
"""Initialize the OrderedDefaultdict.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
*args: If provided, first argument must be a callable that
|
|
47
|
+
creates default values for missing keys (like list, dict, int).
|
|
48
|
+
Remaining args are passed to OrderedDict.
|
|
49
|
+
**kwargs: Keyword arguments passed to OrderedDict.
|
|
50
|
+
|
|
51
|
+
Raises:
|
|
52
|
+
TypeError: If first argument is not None or callable.
|
|
53
|
+
"""
|
|
54
|
+
# If no *args passed, default self.default_factory is None
|
|
55
|
+
if not args:
|
|
56
|
+
self.default_factory = None
|
|
57
|
+
# If *args passed, if args[0] doesn't satisfy being None or callable, will raise error, if satisfied, default will be args[0], remaining parameters will be args[1:]
|
|
58
|
+
else:
|
|
59
|
+
if not (args[0] is None or callable(args[0])):
|
|
60
|
+
raise TypeError("first argument must be callable or None")
|
|
61
|
+
self.default_factory = args[0]
|
|
62
|
+
args = args[1:]
|
|
63
|
+
super().__init__(*args, **kwargs)
|
|
64
|
+
|
|
65
|
+
# When key value doesn't exist, if self.default_factory is None, will return key error; if not None, will return self.default_factory()
|
|
66
|
+
def __missing__(self, key):
|
|
67
|
+
if self.default_factory is None:
|
|
68
|
+
raise KeyError(key)
|
|
69
|
+
self[key] = default = self.default_factory()
|
|
70
|
+
return default
|
|
71
|
+
|
|
72
|
+
# Optional method, for supporting pickle
|
|
73
|
+
def __reduce__(self): # optional, for pickle support
|
|
74
|
+
args = (self.default_factory,) if self.default_factory else ()
|
|
75
|
+
return self.__class__, args, None, None, iteritems(self)
|
backtrader/utils/py3.py
ADDED
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""Python 3 Compatibility Module.
|
|
3
|
+
|
|
4
|
+
This module provides common type aliases and utility functions used
|
|
5
|
+
throughout the backtrader framework. Originally a Python 2/3 shim,
|
|
6
|
+
now simplified to Python 3 only.
|
|
7
|
+
|
|
8
|
+
Exports:
|
|
9
|
+
string_types: Tuple of string types — ``(str,)``.
|
|
10
|
+
integer_types: Tuple of integer types — ``(int,)``.
|
|
11
|
+
MAXINT / MININT / MAXFLOAT / MINFLOAT: Numeric limits.
|
|
12
|
+
range, zip, map, filter: Built-in references (kept for import compat).
|
|
13
|
+
queue: ``import queue``.
|
|
14
|
+
cmp, bytes, bstr: Helper functions.
|
|
15
|
+
iterkeys, itervalues, iteritems, keys, values, items: Dict helpers.
|
|
16
|
+
urlquote, urlopen, ProxyHandler, build_opener, install_opener: URL helpers.
|
|
17
|
+
winreg: Windows registry module (None on non-Windows).
|
|
18
|
+
with_metaclass: Metaclass helper.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
import queue # noqa: F401 — re-exported
|
|
22
|
+
import sys
|
|
23
|
+
import urllib.request as _urllib_request
|
|
24
|
+
from urllib.parse import quote as _urlquote
|
|
25
|
+
|
|
26
|
+
# Kept for backward compat — always False
|
|
27
|
+
PY2 = False
|
|
28
|
+
|
|
29
|
+
# --- Windows registry ---
|
|
30
|
+
try:
|
|
31
|
+
import winreg # noqa: F401
|
|
32
|
+
except ImportError:
|
|
33
|
+
winreg = None
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# --- URL helpers (used by feeds like Quandl, Yahoo) ---
|
|
37
|
+
def urlquote(s, *args, **kwargs):
|
|
38
|
+
"""Quote a string for use in a URL.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
s: The string to quote.
|
|
42
|
+
*args: Additional positional arguments passed to urllib.parse.quote.
|
|
43
|
+
**kwargs: Additional keyword arguments passed to urllib.parse.quote.
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
The quoted string safe for use in URLs.
|
|
47
|
+
"""
|
|
48
|
+
return _urlquote(s, *args, **kwargs)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
# Default network timeout (seconds) applied when a caller does not supply one.
|
|
52
|
+
# Without it, urllib blocks indefinitely if the remote endpoint never responds,
|
|
53
|
+
# which can hang the data-loading thread. Callers may override via timeout=...
|
|
54
|
+
_DEFAULT_URLOPEN_TIMEOUT = 30.0
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def urlopen(*args, **kwargs):
|
|
58
|
+
"""Open a URL.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
*args: Positional arguments passed to urllib.request.urlopen.
|
|
62
|
+
**kwargs: Keyword arguments passed to urllib.request.urlopen. If
|
|
63
|
+
``timeout`` is not provided, a default of
|
|
64
|
+
``_DEFAULT_URLOPEN_TIMEOUT`` seconds is applied to avoid
|
|
65
|
+
indefinite blocking on unresponsive endpoints.
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
A file-like object representing the URL response.
|
|
69
|
+
"""
|
|
70
|
+
# Thin py2/3 compat shim; callers supply trusted URLs.
|
|
71
|
+
kwargs.setdefault("timeout", _DEFAULT_URLOPEN_TIMEOUT)
|
|
72
|
+
return _urllib_request.urlopen(*args, **kwargs) # nosec B310
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def ProxyHandler(*args, **kwargs): # noqa: N802 — keep legacy name
|
|
76
|
+
"""Create a proxy handler for opening URLs.
|
|
77
|
+
|
|
78
|
+
Args:
|
|
79
|
+
*args: Positional arguments passed to urllib.request.ProxyHandler.
|
|
80
|
+
**kwargs: Keyword arguments passed to urllib.request.ProxyHandler.
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
A ProxyHandler instance for configuring URL proxies.
|
|
84
|
+
"""
|
|
85
|
+
return _urllib_request.ProxyHandler(*args, **kwargs)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def build_opener(*args, **kwargs):
|
|
89
|
+
"""Build a URL opener with a chain of handlers.
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
*args: Positional arguments passed to urllib.request.build_opener.
|
|
93
|
+
**kwargs: Keyword arguments passed to urllib.request.build_opener.
|
|
94
|
+
|
|
95
|
+
Returns:
|
|
96
|
+
An OpenerDirector instance configured with the specified handlers.
|
|
97
|
+
"""
|
|
98
|
+
return _urllib_request.build_opener(*args, **kwargs)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def install_opener(*args, **kwargs):
|
|
102
|
+
"""Install an opener as the default global opener.
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
*args: Positional arguments passed to urllib.request.install_opener.
|
|
106
|
+
**kwargs: Keyword arguments passed to urllib.request.install_opener.
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
None.
|
|
110
|
+
"""
|
|
111
|
+
return _urllib_request.install_opener(*args, **kwargs)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
# --- Numeric limits ---
|
|
115
|
+
MAXINT = sys.maxsize
|
|
116
|
+
MININT = -sys.maxsize - 1
|
|
117
|
+
MAXFLOAT = sys.float_info.max
|
|
118
|
+
MINFLOAT = sys.float_info.min
|
|
119
|
+
|
|
120
|
+
# --- Type aliases ---
|
|
121
|
+
string_types = (str,)
|
|
122
|
+
integer_types = (int,)
|
|
123
|
+
long = int
|
|
124
|
+
|
|
125
|
+
# --- Built-in re-exports (kept so ``from .py3 import range`` still works) ---
|
|
126
|
+
filter = filter
|
|
127
|
+
map = map
|
|
128
|
+
range = range
|
|
129
|
+
zip = zip
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
# --- Utility functions ---
|
|
133
|
+
def cmp(a, b):
|
|
134
|
+
"""Compare two values.
|
|
135
|
+
|
|
136
|
+
Args:
|
|
137
|
+
a: First value to compare.
|
|
138
|
+
b: Second value to compare.
|
|
139
|
+
|
|
140
|
+
Returns:
|
|
141
|
+
int: 1 if a > b, 0 if a == b, -1 if a < b.
|
|
142
|
+
"""
|
|
143
|
+
return (a > b) - (a < b)
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def bytes(x):
|
|
147
|
+
"""Encode a string to bytes using UTF-8 encoding.
|
|
148
|
+
|
|
149
|
+
Args:
|
|
150
|
+
x: String to encode.
|
|
151
|
+
|
|
152
|
+
Returns:
|
|
153
|
+
Bytes representation of the input string.
|
|
154
|
+
"""
|
|
155
|
+
return x.encode("utf-8")
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def bstr(x):
|
|
159
|
+
"""Convert a value to a byte string.
|
|
160
|
+
|
|
161
|
+
Args:
|
|
162
|
+
x: Value to convert.
|
|
163
|
+
|
|
164
|
+
Returns:
|
|
165
|
+
String representation of the input value.
|
|
166
|
+
"""
|
|
167
|
+
return str(x)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
# --- Dict iteration helpers ---
|
|
171
|
+
def iterkeys(d):
|
|
172
|
+
"""Return an iterator over the dictionary's keys.
|
|
173
|
+
|
|
174
|
+
Args:
|
|
175
|
+
d: Dictionary to iterate over.
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
An iterator over the dictionary's keys.
|
|
179
|
+
"""
|
|
180
|
+
return iter(d.keys())
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def itervalues(d):
|
|
184
|
+
"""Return an iterator over the dictionary's values.
|
|
185
|
+
|
|
186
|
+
Args:
|
|
187
|
+
d: Dictionary to iterate over.
|
|
188
|
+
|
|
189
|
+
Returns:
|
|
190
|
+
An iterator over the dictionary's values.
|
|
191
|
+
"""
|
|
192
|
+
return iter(d.values())
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def iteritems(d):
|
|
196
|
+
"""Return an iterator over the dictionary's items.
|
|
197
|
+
|
|
198
|
+
Args:
|
|
199
|
+
d: Dictionary to iterate over.
|
|
200
|
+
|
|
201
|
+
Returns:
|
|
202
|
+
An iterator over (key, value) tuples.
|
|
203
|
+
"""
|
|
204
|
+
return iter(d.items())
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
def keys(d):
|
|
208
|
+
"""Return a list of the dictionary's keys.
|
|
209
|
+
|
|
210
|
+
Args:
|
|
211
|
+
d: Dictionary to extract keys from.
|
|
212
|
+
|
|
213
|
+
Returns:
|
|
214
|
+
A list containing the dictionary's keys.
|
|
215
|
+
"""
|
|
216
|
+
return list(d.keys())
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def values(d):
|
|
220
|
+
"""Return a list of the dictionary's values.
|
|
221
|
+
|
|
222
|
+
Args:
|
|
223
|
+
d: Dictionary to extract values from.
|
|
224
|
+
|
|
225
|
+
Returns:
|
|
226
|
+
A list containing the dictionary's values.
|
|
227
|
+
"""
|
|
228
|
+
return list(d.values())
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
def items(d):
|
|
232
|
+
"""Return a list of the dictionary's items.
|
|
233
|
+
|
|
234
|
+
Args:
|
|
235
|
+
d: Dictionary to extract items from.
|
|
236
|
+
|
|
237
|
+
Returns:
|
|
238
|
+
A list of (key, value) tuples.
|
|
239
|
+
"""
|
|
240
|
+
return list(d.items())
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
# This is from Armin Ronacher from Flash simplified later by six
|
|
244
|
+
def with_metaclass(meta, *bases):
|
|
245
|
+
"""Create a base class with a metaclass.
|
|
246
|
+
|
|
247
|
+
This function provides a compatibility layer for creating classes with
|
|
248
|
+
metaclasses in a way that works across Python versions. Originally designed
|
|
249
|
+
for Python 2/3 compatibility, now simplified for Python 3 only.
|
|
250
|
+
|
|
251
|
+
Args:
|
|
252
|
+
meta: The metaclass to use for the created class.
|
|
253
|
+
*bases: Base classes to inherit from.
|
|
254
|
+
|
|
255
|
+
Returns:
|
|
256
|
+
A temporary base class that, when inherited from, creates a class
|
|
257
|
+
with the specified metaclass and base classes.
|
|
258
|
+
|
|
259
|
+
Note:
|
|
260
|
+
Modern Python 3 code can use metaclass directly in class definition:
|
|
261
|
+
``class MyClass(metaclass=Meta):``. This function is kept for
|
|
262
|
+
backward compatibility with existing code.
|
|
263
|
+
"""
|
|
264
|
+
|
|
265
|
+
# This requires a bit of explanation: the basic idea is to make a dummy
|
|
266
|
+
# metaclass for one level of class instantiation that replaces itself with
|
|
267
|
+
# the actual metaclass.
|
|
268
|
+
# This function creates a base class with a metaclass, main purpose is to be compatible with python2 and python3 syntax, now there's a newer solution is to use decorator @six.add_metaclass(Meta)
|
|
269
|
+
# References: https://qa.1r1g.com/sf/ask/1295967501/
|
|
270
|
+
# https://zhuanlan.zhihu.com/p/354828950
|
|
271
|
+
# https://www.jianshu.com/p/224ffcb8e73e
|
|
272
|
+
class metaclass(meta):
|
|
273
|
+
"""Dummy metaclass for creating a temporary base class.
|
|
274
|
+
|
|
275
|
+
This metaclass is used internally by with_metaclass to create a
|
|
276
|
+
temporary class that will be replaced with the actual metaclass.
|
|
277
|
+
|
|
278
|
+
Attributes:
|
|
279
|
+
meta: The target metaclass to use for the final class.
|
|
280
|
+
"""
|
|
281
|
+
|
|
282
|
+
def __new__(cls, name, this_bases, d):
|
|
283
|
+
"""Create a new class with the target metaclass.
|
|
284
|
+
|
|
285
|
+
Args:
|
|
286
|
+
cls: The metaclass class (metaclass itself).
|
|
287
|
+
name: Name of the class being created.
|
|
288
|
+
this_bases: Base classes for the temporary class.
|
|
289
|
+
d: Class dictionary.
|
|
290
|
+
|
|
291
|
+
Returns:
|
|
292
|
+
A new class created with the target metaclass and specified bases.
|
|
293
|
+
"""
|
|
294
|
+
return meta(name, bases, d)
|
|
295
|
+
|
|
296
|
+
return type.__new__(metaclass, "temporary_class", (), {})
|
backtrader/version.py
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""Version Module - Backtrader version information.
|
|
3
|
+
|
|
4
|
+
This module contains version information for the backtrader package.
|
|
5
|
+
|
|
6
|
+
Attributes:
|
|
7
|
+
__version__: Version string (e.g., "1.9.76.123").
|
|
8
|
+
__btversion__: Version tuple for comparisons (e.g., (1, 9, 76, 123)).
|
|
9
|
+
|
|
10
|
+
Example:
|
|
11
|
+
Checking version:
|
|
12
|
+
>>> import backtrader
|
|
13
|
+
>>> print(backtrader.__version__)
|
|
14
|
+
1.9.76.123
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
# backtrader version number
|
|
18
|
+
__version__ = "1.4.0"
|
|
19
|
+
|
|
20
|
+
# backtrader version number, tuple format
|
|
21
|
+
__btversion__ = tuple(int(x) for x in __version__.split("."))
|