この戦略は,ボリンジャーバンド指標に基づいた短期的な逆転取引戦略である.価格が異常な分散状態にある場合,逆転取引の機会を探すために移動平均値,標準偏差,ボリンジャーバンドを組み合わせます.
移動平均と標準偏差を計算する. 移動平均を計算する為 sma (sma) と標準偏差を計算する為 stdev (stdev) を使う.
移動平均値と標準偏差に応じてボリンガー帯の上下列を計算する.上下列は価格+標準偏差である.1と下列は価格標準偏差です1.
価格が上下線を突破すると,価格が異常であることを示します.この時点で,逆取引を行うことを決定します.
価格が上線線より高くなったらショートします 価格が上線より高くなったらショートします
異常価格を判断するためにボリンガー帯のチャネルを使用します. これは逆取引の基盤を提供します.
移動平均因数と組み合わせると,騒々しい取引は効果的にフィルタリングできます.
標準偏差因子の導入により,ボリンジャー帯のチャネルは異常価格を判断するのに よりダイナミックになります.
この戦略は,比較的少額で,一定の安定性があります.
ボリンジャー・バンド指標は,価格の異常状況を完全に決定することはできません.偽のブレイクが発生する可能性があります.
取引頻度は高すぎる可能性があります.取引頻度を制御するために,パラメータを適切に調整することが推奨されます.
上位および下位ボリンジャー帯のブレイクシグナルは長時間持続する可能性があります.より良い逆転効果を得るには,パラメータの適切な調整が必要です.
リスクを制御するために適切なストップロスを導入する.
移動平均周期と標準偏差のパラメータを最適化して,より合理的なボリンジャー帯チャネルを得ます.
EMAやMACDなどの補助要因を増加させ,いくつかの信号をフィルターします.
ストップ・ロストと位置制御のメカニズムを導入する
ポジションサイズとポジション制御を最適化する
この戦略はボリンジャーバンド指標を通じて異常価格を判断し,移動平均値と標準偏差パラメータで逆転取引を行います.一定の安定性があります.パラメータ最適化,補助要因の導入,ストップ損失管理,ポジション制御などの手段で戦略の最大引き下げをさらに削減し,安定性を向上する必要があります.
/*backtest start: 2022-12-12 00:00:00 end: 2023-12-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("BCE Version of EMA, SMA Mean Reversion", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Inputs st_yr_inp = input(defval=2017, title='Backtest Start Year') st_mn_inp = input(defval=01, title='Backtest Start Month') st_dy_inp = input(defval=01, title='Backtest Start Day') en_yr_inp = input(defval=2025, title='Backtest End Year') en_mn_inp = input(defval=01, title='Backtest End Month') en_dy_inp = input(defval=01, title='Backtest End Day') sma_lookback = input(defval=100, title="Lookback Period For SMA") ema_lookback = input(defval=10, title="Lookback Period For EMA") long_diff_perc = input(defval=6, title="Percentage Deviation From SMA to go Long")/100 short_diff_perc = input(defval=20, title="Percentage Deviation From SMA to go Short")/100 ema_filter_bars = input(defval=4, title="The number of bars the EMA must rise/fall") lng_allwd = input(defval=true, title="Allow Longs?") srt_allwd = input(defval=true, title="Allow Shorts?") use_stop = input(defval=true, title="Use Stoploss?") stop_perc = input(defval=30, title="Stop Loss Percentage")/100 // Dates start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00) end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00) can_trade = time >= start and time <= end // Indicators Setup sma = sma(close, sma_lookback) ema = ema(close, ema_lookback) // Strategy Calcuations close_stdev = stdev(close, sma_lookback) sd1_upper = close + (close_stdev * 1) sd1_lower = close - (close_stdev * 1) close_diff = (close - sma) / sma // Entries and Exits longCondition = close > sma and open > sma if (time >= start and time <= end) if (longCondition) strategy.entry("Long", strategy.long) if use_stop stop_price = close * (1 - stop_perc) strategy.order("Long Stoploss", false, stop=stop_price) shortCondition = close < sma and open < sma if (shortCondition) // strategy.entry("Short", strategy.short) // if use_stop // stop_price = close * (1 + stop_perc) // strategy.order("Short Stoploss", true, stop=stop_price) //if (time >= start) strategy.close("Long", when=close < sma and open < sma) //strategy.cancel("Long Stoploss", when=sma < sma[1]) // strategy.close("Short", when=close > sma and open > sma) //strategy.cancel("Short Stoploss", when=close_diff<=0) // Plotting sma_col = sma > sma[1] ? green : red ema_fill = close_diff <= -long_diff_perc ? lime : close_diff >= short_diff_perc ? maroon : aqua p_sma = plot(sma, color=sma_col, linewidth=3) p_ema = plot(ema, color=black, linewidth=2) p_sd1 = plot(sd1_upper, color=black, linewidth=1, transp=85) p_sd2 = plot(sd1_lower, color=black, linewidth=1, transp=85) fill(p_sd1, p_sd2, title='STDEV Fill', color=silver, transp=80) fill(p_sma, p_ema, title='EMA > Mean Percentage', color=ema_fill, transp=80)