일반적인 이동 평균 교차 전략


생성 날짜: 2023-11-03 17:23:54 마지막으로 수정됨: 2023-11-03 17:23:54
복사: 0 클릭수: 707
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

일반적인 이동 평균 교차 전략

개요

이동 평균 가로 전략은 매우 고전적이고 일반적으로 사용되는 기술 분석 전략이다. 이 전략의 핵심 아이디어는 서로 다른 기간의 이동 평균 사이의 가로를 구매 신호로 이용하는 것이다. 단기 이동 평균이 아래에서 장기 이동 평균을 가로질러 구매 신호를 생성하고, 단기 이동 평균이 위에서 아래에서 장기 이동 평균을 가로질러 판매 신호를 생성한다.

전략 원칙

이 전략은 입력 설정을 통해 입력 이동 평균의 종류 (SMA, EMA, WMA, RMA) 와 주기의 길이를, 그리고 재측정되는 시간 범위를 설정한다.

변수 함수에서 다양한 유형의 이동 평균을 계산한다. 계산된 이동 평균은 ma 변수로 보존된다.

클로즈 가격이 마를 넘으면 구매 신호가 발생하고, 클로즈 가격이 마를 넘으면 판매 신호가 발생한다.

스톱로드를 설정하기 위해,atr을 통해 14주기의 평균 실제 진동폭을 계산한다. 횡단점을 기준으로 하고, 상향 또는 하향으로 2배 더하기atr을 스톱 범위로 한다.

구체적인 입단 및 출전 논리는 다음과 같습니다.

다중 입점: close 위에 ma를 착용하고, 재검토 시간 동안, 정지점은 입점 close 다수 출전:close 아래의 ma를 2배atr으로 빼면 출전 손실이 발생하거나, 또는 최고 가격이 출전 지점을 초과할 때 close을 2배atr으로 더하면 출전 중단 공백 입구: close 아래로 ma를 뚫고 재검토 시간 동안, 정지점은 입구점 close 공허출장:close 상에 마를 입는 것 더하기 2배atr을 입었을 때 상쇄출장, 또는 최저값이 입점점보다 낮은 close 빼기 2배atr을 입었을 때 상쇄출장

전략적 이점

  1. 전략은 간단하고 명확하며 이해하기 쉽고 실행이 가능합니다.
  2. 다양한 시장과 품종에 적합한 광범위한 응용
  3. 변수 설정이 유연하며 이동 평균의 종류와 주기가 조정할 수 있습니다.
  4. ATR의 사용은 위험을 통제하는데 도움이 됩니다.

전략적 위험

  1. 이동 평균 전략은 빈번한 거래와 손실을 초래하고 수익을 줄일 수 있습니다.
  2. 큰 변동이 있을 때, 이동 평균은 잘못된 신호를 일으킬 가능성이 높습니다.
  3. ATR 중지 범위가 너무 크거나 너무 작아서 막대한 손실을 방지할 수 없습니다.

위험 요소에 대해 최적화할 수 있는 방법은 다음과 같습니다:

  1. 이동 평균의 주기를 조정하여 더 긴 주기 평균을 사용합니다.
  2. 필터링 조건을 추가하여 불안정 상황에서 거래하는 것을 피하십시오.
  3. ATR의 매개 변수를 최적화하거나 다른 손실을 방지하는 방법을 사용합니다.
  4. 트렌드 지표와 결합하여 큰 트렌드를 판단하고 역동적인 조작을 피하십시오.

전략 최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 거래량, 변동성 등과 같은 필터 조건을 추가하여 비이성적 인 돌파구를 피하십시오.
  2. 시장의 변동에 따라 변동하는 상쇄 범위로 ATR 상쇄를 적용합니다.
  3. Stoch, RSI 등의 지표와 결합하여 다중 인자 검증을 통해 신호 품질을 향상시킵니다.
  4. 트렌드 판단을 높이고 역동적인 행동을 피하십시오.
  5. 시간 EXIT을 사용해서 장기적인 손실을 회수하는 것을 피하세요.
  6. 이동 평균 주기 변수를 최적화하여 최적의 변수 조합을 찾습니다.

요약하다

이동 평균 가로 전략은 매우 전형적이고 일반적으로 사용되는 기술 분석 전략이다. 이 전략의 핵심 아이디어는 간단하고 쉽게 구현할 수 있으며, 각 시장에 적용되며, 양자 거래의 입문 전략 중 하나이다. 그러나 이 전략에는 빈번한 신호를 생성하고, 손해가 쉬운 등과 같은 몇 가지 문제도 있다. 적절한 최적화를 통해 이 전략의 실장 성능을 크게 향상시킬 수 있다.

전략 소스 코드
/*backtest
start: 2023-10-03 00:00:00
end: 2023-11-02 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("MA Cross Strategy", overlay=true,commission_value = 0.1)

type = input(defval = "WMA", title = "MA Type: ", options=["RMA", "SMA", "EMA", "WMA"])

length = input(28)
source = close



// === INPUT BACKTEST RANGE ===
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2000, title = "From Year", minval = 2000)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(9999, 1, 1, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"



variant(type, src, len) =>
    v1 = sma(src, len)                                                  // Simple
    v2 = ema(src, len)                                                  // Exponential
    v5 = wma(src, len)                                                  // Weighted
    v7 = rma(src, len)                                                  // Smoothed
    type=="EMA"?v2 : type=="WMA"?v5 : type=="RMA"?v7 : v1
ma = variant(type,source, length)


atr = security(syminfo.tickerid, "D", atr(14))

range = valuewhen(cross(close,ma), (atr*2), na)

ep = valuewhen(cross(close,ma), close, na)

plot(ma,color=ma>ma[1]?color.blue:color.red,transp=0,linewidth=1)
plot(ep,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep+range,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep-range,color=#2196f3,transp=100,trackprice=true, offset=-9999)

strategy.entry("Long Entry", true, when = crossover(close,ma)  and window() , stop  = ep ) 
strategy.exit("Long Exit", "Long Entry", stop  = ep-range) 
strategy.exit("Long Exit", "Long Entry", when = high > ep+range ,stop = ep[1] ) 

strategy.entry("Short Entry", false, when = crossunder(close,ma)  and window() , stop  = ep ) 
strategy.exit("Short Exit", "Short Entry", stop  = ep+range) 
strategy.exit("Short Exit", "Short Entry", when = low < ep-range ,stop = ep[1] )