이중 이동 평균 스토카스틱 전략은 이동 평균 지표와 스토카스틱 오시레이터의 조합을 사용하여 거래 기회를 식별하려고 시도합니다. 빠른 EMA가 느린 SMA 이상 또는 아래에 넘을 때 거래 신호를 생성하며 시장이 과도하게 확장되었을 때 신호를 필터링하기 위해 스토카스틱 %K 값을 사용합니다.
이 전략은 주로 두 가지 기술적 지표에 기반합니다.
이동 평균: 다른 매개 변수를 사용하여 빠른 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)