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,158 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""InfluxDB Data Feed Module - InfluxDB time series data.
|
|
3
|
+
|
|
4
|
+
This module provides the InfluxDB data feed for reading market data
|
|
5
|
+
from InfluxDB time series database.
|
|
6
|
+
|
|
7
|
+
Classes:
|
|
8
|
+
InfluxDB: InfluxDB data feed.
|
|
9
|
+
|
|
10
|
+
Example:
|
|
11
|
+
>>> data = bt.feeds.InfluxDB(
|
|
12
|
+
... host='localhost',
|
|
13
|
+
... port=8086,
|
|
14
|
+
... database='market_data'
|
|
15
|
+
... )
|
|
16
|
+
>>> cerebro.adddata(data)
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
import datetime as dt
|
|
20
|
+
from typing import Any, Iterator, Optional
|
|
21
|
+
|
|
22
|
+
from ..dataseries import TimeFrame
|
|
23
|
+
from ..feed import DataBase
|
|
24
|
+
from ..utils import date2num
|
|
25
|
+
from ..utils.log_message import get_logger
|
|
26
|
+
|
|
27
|
+
logger = get_logger(__name__)
|
|
28
|
+
|
|
29
|
+
try:
|
|
30
|
+
from influxdb import InfluxDBClient as idbclient
|
|
31
|
+
from influxdb.exceptions import InfluxDBClientError
|
|
32
|
+
except Exception: # pragma: no cover - optional dependency, handled at runtime
|
|
33
|
+
logger.warning("influxfeed:32 fallback on Exception")
|
|
34
|
+
idbclient = None
|
|
35
|
+
|
|
36
|
+
class InfluxDBClientError(Exception): # type: ignore[no-redef]
|
|
37
|
+
"""Exception raised for InfluxDB client errors."""
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# Time period mapping
|
|
41
|
+
TIMEFRAMES = {
|
|
42
|
+
TimeFrame.Seconds: "s",
|
|
43
|
+
TimeFrame.Minutes: "m",
|
|
44
|
+
TimeFrame.Days: "d",
|
|
45
|
+
TimeFrame.Weeks: "w",
|
|
46
|
+
TimeFrame.Months: "m",
|
|
47
|
+
TimeFrame.Years: "y",
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
# backtrader fetches data from InfluxDB
|
|
52
|
+
class InfluxDB(DataBase):
|
|
53
|
+
"""InfluxDB data feed for time series market data.
|
|
54
|
+
|
|
55
|
+
Fetches OHLCV data from an InfluxDB time series database.
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
# Import packages
|
|
59
|
+
frompackages = (
|
|
60
|
+
("influxdb", [("InfluxDBClient", "idbclient")]),
|
|
61
|
+
("influxdb.exceptions", "InfluxDBClientError"),
|
|
62
|
+
)
|
|
63
|
+
# Parameters
|
|
64
|
+
params = (
|
|
65
|
+
("host", "127.0.0.1"),
|
|
66
|
+
("port", "8086"),
|
|
67
|
+
("username", None),
|
|
68
|
+
("password", None),
|
|
69
|
+
("database", None),
|
|
70
|
+
("timeframe", TimeFrame.Days),
|
|
71
|
+
("startdate", None),
|
|
72
|
+
("high", "high_p"),
|
|
73
|
+
("low", "low_p"),
|
|
74
|
+
("open", "open_p"),
|
|
75
|
+
("close", "close_p"),
|
|
76
|
+
("volume", "volume"),
|
|
77
|
+
("ointerest", "oi"),
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
def __init__(self):
|
|
81
|
+
"""Initialize the InfluxDB data feed."""
|
|
82
|
+
self.biter: Optional[Iterator[Any]] = None
|
|
83
|
+
self.ndb = None
|
|
84
|
+
|
|
85
|
+
def start(self):
|
|
86
|
+
"""Start the InfluxDB data feed.
|
|
87
|
+
|
|
88
|
+
Connects to InfluxDB and executes query to fetch data.
|
|
89
|
+
"""
|
|
90
|
+
super().start()
|
|
91
|
+
# Try to connect to database
|
|
92
|
+
try:
|
|
93
|
+
self.ndb = idbclient(
|
|
94
|
+
self.p.host, self.p.port, self.p.username, self.p.password, self.p.database
|
|
95
|
+
)
|
|
96
|
+
except InfluxDBClientError as err:
|
|
97
|
+
logger.error("Failed to establish connection to InfluxDB: %s", err)
|
|
98
|
+
# Specific time period
|
|
99
|
+
tf = "{multiple}{timeframe}".format(
|
|
100
|
+
multiple=(self.p.compression if self.p.compression else 1),
|
|
101
|
+
timeframe=TIMEFRAMES.get(self.p.timeframe, "d"),
|
|
102
|
+
)
|
|
103
|
+
# Start time
|
|
104
|
+
if not self.p.startdate:
|
|
105
|
+
st = "<= now()"
|
|
106
|
+
else:
|
|
107
|
+
st = ">= '%s'" % self.p.startdate
|
|
108
|
+
|
|
109
|
+
# The query could already consider parameters like fromdate and todate
|
|
110
|
+
# to have the database skip them and not the internal code
|
|
111
|
+
# Specific commands needed for database data retrieval
|
|
112
|
+
# Note: identifiers (field/measurement names) come from this feed's own
|
|
113
|
+
# configuration params, not external input; InfluxQL has no parameter
|
|
114
|
+
# binding for identifiers, so .format() is the only option here.
|
|
115
|
+
qstr = (
|
|
116
|
+
'SELECT mean("{open_f}") AS "open", mean("{high_f}") AS "high", '
|
|
117
|
+
'mean("{low_f}") AS "low", mean("{close_f}") AS "close", '
|
|
118
|
+
'mean("{vol_f}") AS "volume", mean("{oi_f}") AS "openinterest" '
|
|
119
|
+
'FROM "{dataname}" '
|
|
120
|
+
"WHERE time {begin} "
|
|
121
|
+
"GROUP BY time({timeframe}) fill(none)"
|
|
122
|
+
).format( # nosec B608
|
|
123
|
+
open_f=self.p.open,
|
|
124
|
+
high_f=self.p.high,
|
|
125
|
+
low_f=self.p.low,
|
|
126
|
+
close_f=self.p.close,
|
|
127
|
+
vol_f=self.p.volume,
|
|
128
|
+
oi_f=self.p.ointerest,
|
|
129
|
+
timeframe=tf,
|
|
130
|
+
begin=st,
|
|
131
|
+
dataname=self.p.dataname,
|
|
132
|
+
)
|
|
133
|
+
# Get data
|
|
134
|
+
try:
|
|
135
|
+
dbars = list(self.ndb.query(qstr).get_points())
|
|
136
|
+
except InfluxDBClientError as err:
|
|
137
|
+
logger.error("InfluxDB query failed: %s", err)
|
|
138
|
+
# Iterate data
|
|
139
|
+
self.biter = iter(dbars)
|
|
140
|
+
|
|
141
|
+
def _load(self):
|
|
142
|
+
# Try to get next bar data, then add to line
|
|
143
|
+
if self.biter is None:
|
|
144
|
+
return False
|
|
145
|
+
try:
|
|
146
|
+
bar = next(self.biter)
|
|
147
|
+
except StopIteration:
|
|
148
|
+
return False
|
|
149
|
+
|
|
150
|
+
self.l.datetime[0] = date2num(dt.datetime.strptime(bar["time"], "%Y-%m-%dT%H:%M:%SZ"))
|
|
151
|
+
|
|
152
|
+
self.l.open[0] = bar["open"]
|
|
153
|
+
self.l.high[0] = bar["high"]
|
|
154
|
+
self.l.low[0] = bar["low"]
|
|
155
|
+
self.l.close[0] = bar["close"]
|
|
156
|
+
self.l.volume[0] = bar["volume"]
|
|
157
|
+
|
|
158
|
+
return True
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""Live Feed Abstract Base Class.
|
|
3
|
+
|
|
4
|
+
Defines the common interface for live trading data feed implementations.
|
|
5
|
+
The current project direction uses ``BtApiFeed`` as the unified adapter
|
|
6
|
+
and keeps this base class as the reference contract for future providers.
|
|
7
|
+
|
|
8
|
+
Classes:
|
|
9
|
+
LiveFeedBase: Abstract base for live-trading data feeds.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from abc import ABC, abstractmethod
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class LiveFeedBase(ABC):
|
|
16
|
+
"""Abstract base class for live-trading data feeds.
|
|
17
|
+
|
|
18
|
+
A *live feed* streams real-time market data (ticks or bars) from a
|
|
19
|
+
trading venue into backtrader's Line system. It is responsible for:
|
|
20
|
+
|
|
21
|
+
- Connecting to the store's market data channel.
|
|
22
|
+
- Aggregating ticks into OHLCV bars (if tick-based).
|
|
23
|
+
- Optionally back-filling historical data on startup.
|
|
24
|
+
- Signalling when live data begins (``LIVE`` status).
|
|
25
|
+
|
|
26
|
+
Subclasses **must** implement every ``@abstractmethod``.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
# ------------------------------------------------------------------
|
|
30
|
+
# Lifecycle
|
|
31
|
+
# ------------------------------------------------------------------
|
|
32
|
+
|
|
33
|
+
@abstractmethod
|
|
34
|
+
def start(self):
|
|
35
|
+
"""Connect to the store and begin receiving data."""
|
|
36
|
+
|
|
37
|
+
@abstractmethod
|
|
38
|
+
def stop(self):
|
|
39
|
+
"""Disconnect and release resources."""
|
|
40
|
+
|
|
41
|
+
@abstractmethod
|
|
42
|
+
def islive(self) -> bool:
|
|
43
|
+
"""Return ``True`` to indicate this is a live (not historical) feed."""
|
|
44
|
+
|
|
45
|
+
# ------------------------------------------------------------------
|
|
46
|
+
# Data loading
|
|
47
|
+
# ------------------------------------------------------------------
|
|
48
|
+
|
|
49
|
+
@abstractmethod
|
|
50
|
+
def _load(self) -> bool:
|
|
51
|
+
"""Load the next bar/tick into the Line buffers.
|
|
52
|
+
|
|
53
|
+
Returns:
|
|
54
|
+
True if a new bar was loaded, False if no more data.
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
# ------------------------------------------------------------------
|
|
58
|
+
# Optional: historical backfill
|
|
59
|
+
# ------------------------------------------------------------------
|
|
60
|
+
|
|
61
|
+
def haslivedata(self) -> bool:
|
|
62
|
+
"""Return True if live data is currently available in the queue."""
|
|
63
|
+
return False
|
|
64
|
+
|
|
65
|
+
def _load_history(self) -> bool:
|
|
66
|
+
"""Load historical bars for backfill (optional).
|
|
67
|
+
|
|
68
|
+
Returns:
|
|
69
|
+
True if a historical bar was loaded, False when done.
|
|
70
|
+
"""
|
|
71
|
+
return False
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"""Mixed multi-source streaming channel.
|
|
2
|
+
|
|
3
|
+
Defines :class:`MixedChannel`, a :class:`~backtrader.channel.StreamingEventQueue`
|
|
4
|
+
that merges several event channels (generic, tick, order book, funding) into a
|
|
5
|
+
single time-ordered stream for tick-level backtesting, plus the
|
|
6
|
+
:func:`build_mixed_channel` convenience constructor.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from backtrader.channel import StreamingEventQueue
|
|
10
|
+
|
|
11
|
+
__all__ = ["MixedChannel", "build_mixed_channel"]
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class MixedChannel(StreamingEventQueue):
|
|
15
|
+
"""Streaming event queue that merges multiple channel groups into one stream.
|
|
16
|
+
|
|
17
|
+
The constructor flattens the per-group channel lists
|
|
18
|
+
(``channels``, ``tick_channels``, ``orderbook_channels``,
|
|
19
|
+
``funding_channels``) into a single ``merged_channels`` list and
|
|
20
|
+
delegates to :class:`StreamingEventQueue`. The remaining keyword
|
|
21
|
+
arguments (``preload_window``, ``max_memory_mb``, ``adaptive``,
|
|
22
|
+
``batch_size``) are forwarded unchanged.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
def __init__(
|
|
26
|
+
self,
|
|
27
|
+
channels=None,
|
|
28
|
+
bars=None,
|
|
29
|
+
tick_channels=None,
|
|
30
|
+
orderbook_channels=None,
|
|
31
|
+
funding_channels=None,
|
|
32
|
+
preload_window=300.0,
|
|
33
|
+
max_memory_mb=200,
|
|
34
|
+
adaptive=True,
|
|
35
|
+
batch_size=10000,
|
|
36
|
+
):
|
|
37
|
+
"""Build a merged-channel streaming queue.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
channels: Optional iterable of generic event channels.
|
|
41
|
+
bars: Optional iterable of pre-built bar objects. Copied
|
|
42
|
+
into a list before being forwarded to the base class.
|
|
43
|
+
tick_channels: Optional iterable of tick event channels.
|
|
44
|
+
orderbook_channels: Optional iterable of order-book event
|
|
45
|
+
channels.
|
|
46
|
+
funding_channels: Optional iterable of funding-rate event
|
|
47
|
+
channels.
|
|
48
|
+
preload_window: Preload window size in seconds, forwarded
|
|
49
|
+
to :class:`StreamingEventQueue`.
|
|
50
|
+
max_memory_mb: Soft memory cap (in MB) for the queue,
|
|
51
|
+
forwarded to the base class.
|
|
52
|
+
adaptive: Whether the queue should adapt its batching
|
|
53
|
+
strategy, forwarded to the base class.
|
|
54
|
+
batch_size: Default batch size, forwarded to the base
|
|
55
|
+
class.
|
|
56
|
+
"""
|
|
57
|
+
merged_channels: list = []
|
|
58
|
+
for group in (
|
|
59
|
+
channels or [],
|
|
60
|
+
tick_channels or [],
|
|
61
|
+
orderbook_channels or [],
|
|
62
|
+
funding_channels or [],
|
|
63
|
+
):
|
|
64
|
+
merged_channels.extend(group)
|
|
65
|
+
|
|
66
|
+
super().__init__(
|
|
67
|
+
channels=merged_channels,
|
|
68
|
+
bars=list(bars or []),
|
|
69
|
+
preload_window=preload_window,
|
|
70
|
+
max_memory_mb=max_memory_mb,
|
|
71
|
+
adaptive=adaptive,
|
|
72
|
+
batch_size=batch_size,
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def build_mixed_channel(
|
|
77
|
+
channels=None,
|
|
78
|
+
bars=None,
|
|
79
|
+
tick_channels=None,
|
|
80
|
+
orderbook_channels=None,
|
|
81
|
+
funding_channels=None,
|
|
82
|
+
**kwargs,
|
|
83
|
+
):
|
|
84
|
+
"""Construct a :class:`MixedChannel` with the standard per-group arguments.
|
|
85
|
+
|
|
86
|
+
All extra keyword arguments are forwarded to :class:`MixedChannel`
|
|
87
|
+
so callers can pass ``preload_window``, ``max_memory_mb``,
|
|
88
|
+
``adaptive`` and ``batch_size`` without listing them explicitly.
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
channels: Optional iterable of generic event channels.
|
|
92
|
+
bars: Optional iterable of pre-built bar objects.
|
|
93
|
+
tick_channels: Optional iterable of tick event channels.
|
|
94
|
+
orderbook_channels: Optional iterable of order-book channels.
|
|
95
|
+
funding_channels: Optional iterable of funding-rate channels.
|
|
96
|
+
**kwargs: Forwarded to :class:`MixedChannel`.
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
MixedChannel: A new :class:`MixedChannel` instance.
|
|
100
|
+
"""
|
|
101
|
+
return MixedChannel(
|
|
102
|
+
channels=channels,
|
|
103
|
+
bars=bars,
|
|
104
|
+
tick_channels=tick_channels,
|
|
105
|
+
orderbook_channels=orderbook_channels,
|
|
106
|
+
funding_channels=funding_channels,
|
|
107
|
+
**kwargs,
|
|
108
|
+
)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""MetaTrader 4 CSV Data Feed Module - MT4 CSV parsing.
|
|
3
|
+
|
|
4
|
+
This module provides the MT4CSVData feed for parsing MetaTrader 4
|
|
5
|
+
History Center exported CSV files.
|
|
6
|
+
|
|
7
|
+
Classes:
|
|
8
|
+
MT4CSVData: Parses MT4 CSV format files.
|
|
9
|
+
|
|
10
|
+
Example:
|
|
11
|
+
>>> data = bt.feeds.MT4CSVData(dataname='mt4_data.csv')
|
|
12
|
+
>>> cerebro.adddata(data)
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from . import GenericCSVData
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class MT4CSVData(GenericCSVData):
|
|
19
|
+
"""
|
|
20
|
+
Parses a `Metatrader4 <https://www.metaquotes.net/en/metatrader4>`_ History
|
|
21
|
+
center CSV exported file.
|
|
22
|
+
|
|
23
|
+
Specific parameters (or specific meaning):
|
|
24
|
+
|
|
25
|
+
- ``dataname``: The filename to parse or a file-like object
|
|
26
|
+
|
|
27
|
+
- Uses GenericCSVData and simply modifies the params
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
# MT4 data class inheriting from CSV, only modifies parameters
|
|
31
|
+
params = (
|
|
32
|
+
("dtformat", "%Y.%m.%d"),
|
|
33
|
+
("tmformat", "%H:%M"),
|
|
34
|
+
("datetime", 0),
|
|
35
|
+
("time", 1),
|
|
36
|
+
("open", 2),
|
|
37
|
+
("high", 3),
|
|
38
|
+
("low", 4),
|
|
39
|
+
("close", 5),
|
|
40
|
+
("volume", 6),
|
|
41
|
+
("openinterest", -1),
|
|
42
|
+
)
|