ダブルムービング・アベアストキャスティック戦略は,ムービング・アベア指標とストキャスティック・オシレーターの組み合わせを使用して取引機会を特定しようとします.高速EMAが遅いSMA以上または以下を横切ったときに取引信号を生成し,市場が過剰に拡張されたときの信号をフィルタリングするためにストキャスティック%K値を使用します.
この戦略は主に2つの技術指標に基づいています.
移動平均値: 異なるパラメータを使用して高速EMA,遅いSMA,遅いVWMAを計算し,高速EMAが遅いSMAを横断すると取引信号を生成します.
ストカスティックオシレーター: %K値を計算し,%Kが既定の上位または下位しきい値を超えると市場が過買いまたは過売りされていると考え,移動平均信号の一部をフィルターするためにこれを使用します.
信号生成の論理は
速い EMA が遅い SMA を越え,%K が過売り値以下になると,ロング.速い EMA が遅い SMA を越え,%K が過買い値以上になると,ショート.
既存のロングポジションでは,%Kがオーバー買いゾーンに再入る時,または価格がストップロスを破ると閉じる.ショートポジションでは,%Kがオーバーセールゾーンに再入る時,または価格がストップロスを破ると閉じる.
移動平均値とストカストティックオシレータを組み合わせることで,ストカストックは誤った信号の一部をフィルタリングするために使用しながら,取引に入る可能性の高い移動平均信号ポイントを特定しようとします.
この戦略の主な利点は以下の通りです.
リスクもあります:
緩和策
主な最適化の機会は以下の通りです.
ダブル・ムービング・アベアストコスタスティック・ストラテジーは,移動平均値とストコスタスティック・オシレーターの組み合わせを使用して,強力なトレンドフォローシステムを作成しますが,パラメータ,ストップなどについていくつかの改善機会があります.追加の指標や最適化などのさらなる改良により,より一貫したアルファが提供される可能性があります.
/*backtest start: 2023-01-22 00:00:00 end: 2024-01-28 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("TVIX MEAN REV V2 TREND", overlay=true) length = input(16, minval=1) OverBought = input(80) OverSold = input(20) TradeLong = input (true) TradeShort = input (true) OverBoughtClose = input(80) OverSoldClose = input(20) smoothK = 3 smoothD = 3 trail_points = input(50) k = sma(stoch(close, high, low, length), smoothK) d = sma(k, smoothD) k2 = sma(stoch(close, high, low, length), smoothK) d2 = sma(k, smoothD) // === GENERAL INPUTS === // short Ema maFastSource = input(defval=close, title="Fast EMA Source") maFastLength = input(defval=1, title="Fast EMA Period", minval=1) // long Sma maSlowSource = input(defval=close, title="Slow SMA Source") maSlowLength = input(defval=100, title="Slow SMA Period", minval=1) // longer Sma maSlowerSource = input(defval=close, title="Slower SMA Source") maSlowerLength = input(defval=30, title="Slower SMA Period", minval=1) //ATR Stop Loss Indicator by Keith Larson atrDays = input(7, "ATR Days Lookback") theAtr = atr(atrDays) atrModifier = input(5.0, "ATR Modifier") //plot(atr * atrModifier, title="ATR") LstopLoss = close - (theAtr * atrModifier) SstopLoss = close + (theAtr * atrModifier) // === SERIES SETUP === /// a couple of ma's.. maFast = ema(maFastSource, maFastLength) maSlow = sma(maSlowSource, maSlowLength) maSlower = vwma(maSlowerSource, maSlowerLength) rsi = rsi(maSlowerSource, maSlowerLength) // === PLOTTING === fast = plot(maFast, title="Fast MA", color=color.red, linewidth=2, style=plot.style_line, transp=30) slow = plot(maSlow, title="Slow MA", color=color.green, linewidth=2, style=plot.style_line, transp=30) slower = plot(maSlower, title="Slower MA", color=color.teal, linewidth=2, style=plot.style_line, transp=30) // === LOGIC === Basic - simply switches from long to short and vice-versa with each fast-slow MA cross LongFilter = maFast > maSlow ShortFilter = maSlow > maFast BUY=crossover(k, d) and k < OverSold SELL=crossunder(k, d) and k > OverBought SELLCLOSE=crossover(k, d) and k < OverSoldClose BUYCLOSE=crossunder(k, d) and k > OverBoughtClose Open = open if not na(k) and not na(d) if crossover(k, d) and k < OverSold and LongFilter and TradeLong strategy.entry("$", strategy.long, limit = Open, comment="Long") strategy.close("$",when = crossunder(k, d) and k > OverBoughtClose or open < LstopLoss ) ///strategy.close("$",when = open < LstopLoss ) if not na(k) and not na(d) if crossunder(k, d) and k > OverBought and ShortFilter and TradeShort strategy.entry("$1", strategy.short, limit = Open, comment="S") strategy.close ("$1", when = crossover(k, d) and k < OverSoldClose or open > SstopLoss ) ///strategy.close ("$1", when = open < SstopLoss)