이중 이동 평균 스토카스틱 전략

저자:차오장, 날짜: 2024-01-29 11:54:10
태그:

img

전반적인 설명

이중 이동 평균 스토카스틱 전략은 이동 평균 지표와 스토카스틱 오시레이터의 조합을 사용하여 거래 기회를 식별하려고 시도합니다. 빠른 EMA가 느린 SMA 이상 또는 아래에 넘을 때 거래 신호를 생성하며 시장이 과도하게 확장되었을 때 신호를 필터링하기 위해 스토카스틱 %K 값을 사용합니다.

전략 논리

이 전략은 주로 두 가지 기술적 지표에 기반합니다.

  1. 이동 평균: 다른 매개 변수를 사용하여 빠른 EMA, 느린 SMA 및 느린 VWMA를 계산하고 빠른 EMA가 느린 SMA를 넘을 때 거래 신호를 생성합니다.

  2. 스토카스틱 오시레이터: %K 값을 계산하고 %K가 미리 설정된 상부 또는 하부 임계 수준을 넘을 때 시장이 과소매 또는 과소매로 간주하여 이동 평균 신호의 일부를 필터링합니다.

특히 신호 생성 논리는 다음과 같습니다.

  1. 빠른 EMA가 느린 SMA를 넘어서고 %K가 과잉 판매 수준 이하일 때, 장가가 됩니다. 빠른 EMA가 느린 SMA를 넘어서고 %K가 과잉 구매 수준을 넘어서면, 단가가 됩니다.

  2. 현존하는 긴 포지션의 경우, %K가 과잉 매수 구역에 다시 들어가거나 가격이 스톱 로스를 위반할 때 닫습니다. 짧은 포지션의 경우, %K가 과잉 매매 구역에 다시 들어가거나 가격이 스톱 로스를 위반할 때 닫습니다.

이동 평균과 스토카스틱 오시레이터를 결합함으로써 전략은 트레이드에 진입하기 위해 높은 확률의 이동 평균 신호 포인트를 식별하려고 시도하며, 일부 잘못된 신호를 필터링하기 위해 스토카스틱을 사용합니다.

이점 분석

이 전략의 주요 장점은 다음과 같습니다.

  1. 여러 가지 기술 지표를 결합하면 하나의 지표를 사용하는 것보다 더 포괄적인 판단이 가능합니다.
  2. 스토카스틱 오시일레이터로 필터링하면 잘못된 신호를 피할 수 있습니다.
  3. 혼합 매개 변수와 함께 여러 이동 평균을 사용하면 더 강력한 신호를 얻을 수 있습니다.
  4. 단일 거래 손실을 통제하기 위한 스톱 로스 메커니즘을 포함합니다.

위험 분석

또한 몇 가지 위험이 있습니다.

  1. 이동 평균은 많은 불확실한 신호를 생성하여 더 많은 잘못된 엔트리를 초래할 수 있습니다. 제한된 스톱 손실 능력.
  2. 스토카스틱 오시레이터는 스스로 잘못된 신호를 생성할 수도 있습니다.
  3. 매개 변수 설정은 최적화 (예를 들어, 과잉 구매/ 과잉 판매 수준, 이동 평균 기간) 를 요구합니다. 그렇지 않으면 성과에 영향을 미칩니다.
  4. 근본적인 분석의 부족

완화:

  1. 매개 변수를 최적화하여 지표 설정의 최적의 조합을 찾습니다.
  2. 더 작은 위치 크기를 사용하세요, 확장하세요.
  3. 근본적인 분석을 포함해서 사건을 피할 수 있습니다.

더 나은 기회

주요 최적화 기회는 다음과 같습니다.

  1. 이동 평균 매개 변수를 테스트하고 최적화하여 최적을 찾습니다.
  2. 최적의 설정을 위해 과잉 구매/ 과잉 판매 구역과 같은 스토카스틱 매개 변수를 테스트합니다.
  3. 더 풍부한 입시 논리를 위해 볼륨이나 변동성 같은 추가 지표를 포함합니다.
  4. 스톱 로스 방법의 개선, 예를 들어 트레일링 스톱을 사용하여 위험을 줄이십시오.
  5. ATR에 기반한 역동적인 위치 사이즈링과 같은 자금 관리 개선.
  6. VIX 등을 이용해서 리스크-오프 이벤트를 피하세요.

결론

이중 이동 평균 스토카스틱 전략은 이동 평균과 스토카스틱 오시레이터의 혼합을 사용하여 강력한 트렌드 다음 시스템을 설계하지만 매개 변수, 정지 등에 대한 일부 향상 기회를 가지고 있습니다. 추가 지표 및 최적화와 같은 추가 정교화는 잠재적으로 더 일관된 알파를 제공할 수 있습니다.


/*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) 
    
  
        





더 많은