이동평균 교차 전략


생성 날짜: 2023-09-21 10:28:27 마지막으로 수정됨: 2023-09-21 10:28:27
복사: 0 클릭수: 667
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

개요

이 전략은 전형적인 이동 평균 교차 거래 전략이다. 그것은 빠른 이동 평균과 느린 이동 평균의 교차점을 매매 신호로 이용한다. 빠른 이동 평균이 아래에서 느린 이동 평균을 통과하면 구매 신호로 간주되며, 빠른 이동 평균이 위에서 아래에서 느린 이동 평균을 통과하면 판매 신호로 간주된다. 이 전략은 두 개의 이동 평균을 결합하여 시장 소음을 효과적으로 필터링하여 트렌드를 식별한다.

전략 원칙

이 전략은 다음과 같은 몇 가지 단계를 통해 이루어집니다.

  1. 빠른 이동 평균 주기를 fastMA와 느린 이동 평균 주기를 slowMA로 설정한다.

  2. 입력 타입에 따라 빠른 이동 평균 (fast) 과 느린 이동 평균 (slow) 을 계산한다. 타입=1은 간단한 이동 평균이고, 타입=2은 지수 이동 평균이다.

  3. “start”과 “finish”을 설정합니다.

  4. 크로스 함수를 정의한다: fast가 아래에서 슬로우를 통과하면 구매 신호가 발생한다. fast가 위에서 아래로 슬로우를 통과하면 판매 신호가 발생한다.

  5. 크로스 함수가 트리거될 때, 만약 재측정 시간 범위 안에 있다면, 포지션을 열거나 매는 명령을 내린다.

  6. 회수 창의 끝이나 크로스 함수 아래에서 穿時, 賣出關閉指示を発出.

  7. 빠른 이동 평균 (FAST) 과 느린 이동 평균 (SLOW) 의 트렌드 그래프를 그리십시오.

이 전략은 빠른 느린 이동 평균의 교차를 통해 보유 기간의 추세를 판단하고 이에 따라 거래 신호를 생성한다. 동시에 실제 거래를 모방하기 위해 재검토 시간 창을 설정한다.

우위 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 이동 평균을 사용하여 트렌드를 판단하는 것이 효과적이며, 무작위적 변동을 효과적으로 필터링 할 수 있습니다.

  2. 빠른 속도로 움직이는 평균을 조합하면 트렌드 변화를 식별할 수 있다.

  3. 이동 평균 변수를 조정하여 다른 주기적 추세에 적응 할 수 있습니다.

  4. 간단한 이동 평균 또는 지수 이동 평균을 선택할 수 있습니다.

  5. 피드백 기능을 통해 테스트 및 최적화 정책 매개 변수를 사용할 수 있습니다.

  6. 전략의 논리는 간단하고 명확하며, 구현을 이해하기 쉽습니다.

  7. 이동 평균 그래픽을 그리는 것은 추세와 효과를 직관적으로 판단할 수 있습니다.

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. 이 경우, 음 범위 내에서 잘못된 신호가 발생할 수 있습니다.

  2. 이동 평균은 지연성이 있어 전환점을 놓칠 수 있다.

  3. 평선 교차에만 의존하고, 다른 지표나 조건 필터링을 결합하지 않는다.

  4. 거래 비용의 영향을 고려하지 않고

  5. “지난 몇 년 동안,

  6. 불합리한 파라미터 설정은 정책의 효과에 영향을 미칠 수 있다.

  7. 응답 시간 범위 선택이 잘못되어 과합이 발생할 수 있습니다.

최적화 방향

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

  1. MACD, RSI 등의 다른 지표와 결합하여 신호를 검증하여 정확도를 향상시킵니다.

  2. 단편적 손실을 통제하기 위한 스톱로스 전략을 추가합니다.

  3. 이동 평균 변수를 최적화하여 다른 주기들에 적응한다.

  4. 오픈 포지션 관리, 시장 상황에 따라 다른 포지션을 사용한다.

  5. 거래비용을 고려하여 입점과 퇴출 지점을 수정하십시오.

  6. 더 긴 시간 범위의 데이터를 테스트하여 과도한 일치를 피하십시오.

  7. 워크스 포워드 분석을 사용하여 계속 최적화하십시오.

요약하다

이동 평균 경로 전략은 간단하고 실용적인 트렌드 추적 전략이다. 그것은 무작위적인 변동을 필터링하여 트렌드 방향을 식별할 수 있다. 그러나 또한, 다른 지표와 결합하여 사용되어야 하는 지연성과 같은 문제가 있다. 지속적인 최적화 테스트를 통해 전략의 효과를 더 좋게 만들 수 있으며, 실물에서의 적용도 더 안전하고 신뢰할 수 있다.

전략 소스 코드
/*backtest
start: 2023-09-13 00:00:00
end: 2023-09-20 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// strategy("MavCrossover v2", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

// Revision:        1
// Author:          @ToS_MavericK

// === INPUT SMA ===
fastMA  = input(defval = 13,  title = "FastMA", minval = 1, step = 1)
slowMA  = input(defval = 144,  title = "SlowMA", minval = 1, step = 1)
Type    = input(defval = 1,  title = "Type (1 = SMA, 2 = EMA)", minval = 1, maxval = 2, step = 1)
SlowMAIsFactor = input(false)

slowMA := SlowMAIsFactor == true ? round(fastMA * slowMA) : slowMA

// === 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 = 2018, title = "From Year", minval = 2012)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear    = input(defval = 2020, title = "To Year", minval = 2012)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

// === MA SETUP ===
fast = Type == 1 ? sma(close, fastMA) : ema(close, fastMA)
slow = Type == 1 ? sma(close, slowMA) : ema(close, slowMA)

// === EXECUTION ===
strategy.entry("L", strategy.long, when = crossover(fast, slow) and window())   // buy long when "within window of time" AND crossover
strategy.close("L", when = crossunder(fast, slow) or time > finish)             // sell long when window ends OR crossunder         

plot(fast, title = 'FastMA', color = yellow, linewidth = 2, style = line)  // plot FastMA
plot(slow, title = 'SlowMA', color = aqua, linewidth = 2, style = line)    // plot SlowMA