SMA 크로스오버 거래 전략

저자:차오장, 날짜: 2023-12-25 16:03:48
태그:

img

전반적인 설명

이 전략은 단순 이동 평균 (SMA) 의 황금 십자 및 죽은 십자 원칙을 기반으로 설계되었습니다. 전략은 두 개의 SMA를 사용합니다. 즉 빠른 SMA와 느린 SMA. 빠른 SMA가 아래에서 느린 SMA 위에 넘을 때 구매 신호가 생성됩니다. 빠른 SMA가 위에서 느린 SMA 아래에 넘을 때 판매 신호가 생성됩니다.

전략 논리

이 전략은 주로 두 개의 SMA 지표 라인에 의존한다. 빠른 SMA는 짧은 기간을 가지고 있으며 가격 변화를 더 빨리 포착할 수 있다. 느린 SMA는 더 긴 기간을 가지고 있으며 약간의 소음을 필터링할 수 있다. 빠른 SMA가 밑에서 느린 SMA 위에 넘어가면 단기 상승 속도가 더 빨라지고 구매 신호를 생성한다는 것을 나타낸다. 빠른 SMA가 위에서 느린 SMA 아래에 넘어가면 단기 하락 속도가 더 빨라지고 판매 신호를 생성한다는 것을 나타낸다.

다른 SMA 기간 매개 변수를 설정함으로써 전략 매개 변수는 다른 시장 환경에 적응하기 위해 어느 정도 조정 될 수 있습니다. 동시에 전략은 역사 데이터에 대한 전략 매개 변수를 테스트하기위한 역 테스트 시간 범위를 설정 할 수 있습니다.

이점 분석

  • 간단한 논리로 잘 알려진 SMA 지표를 사용합니다.
  • 높은 적응력을 가진 사용자 정의 가능한 SMA 기간 매개 변수
  • 역 테스트 시간 범위는 매개 변수 최적화를 위해 설정할 수 있습니다
  • 신호를 생성하기 위해 크로스오버를 사용하면 특정 필터링 효과가 있으며 잘못된 거래를 줄일 수 있습니다.

위험 분석

  • SMA 자체는 지연 효과를 가지고 있으며 단기 기회를 놓칠 수 있습니다.
  • 트렌드의 추진력을 결정할 수 없으므로 신호 생성 효과는 불안정 할 수 있습니다.
  • 잘못된 SMA 기간 매개 변수 설정은 잘못된 신호를 증가시킬 것입니다.

위 위험 요소에 대응하기 위해 다음의 조치를 취할 수 있습니다.

  • 감수성을 향상시키기 위해 SMA 주기를 적절히 단축하십시오.
  • 추세 동력을 결정하기 위해 다른 지표를 포함합니다.
  • 매개 변수 최적화 도구를 사용하여 최적의 매개 변수 조합을 찾아

최적화 방향

  • 단일 손실을 제어하기 위해 중지 손실 전략을 추가
  • 위치 관리 메커니즘 추가
  • 다른 기술 지표와 결합
  • 동적 파라미터 최적화를 달성하기 위해 기계 학습 알고리즘을 추가

요약

이것은 트렌드를 따르는 전형적인 전략이다. 이중 이동 평균 크로스오버의 간단한 원리를 적용함으로써 매개 변수를 적절하게 설정하면 좋은 추적 결과를 얻을 수 있다. 그러나 SMA 자체는 특정 지연 효과를 가지고 있으며 트렌드의 추진력을 결정할 수 없다. 따라서 실제 응용에서는 다른 보조 도구를 도입하여 지표 조합을 형성하고 자동화된 매개 변수 최적화 및 위험 통제 수단으로 보완하여 전략을 꾸준히 수익성있게 할 필요가 있다.


/*backtest
start: 2023-12-17 00:00:00
end: 2023-12-18 19:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//strategy(title="MA Cross Entry & Exit w/Date Range", overlay=true, initial_capital=10000, currency='USD')

strategy(title="SMA Cross Entry & Exit Strategy", overlay=true)

// Credit goes to this developer for the "Date Range Code"
// https://www.tradingview.com/script/62hUcP6O-How-To-Set-Backtest-Date-Range/


// === GENERAL INPUTS ===
// short ma
maFastSource   = input(defval = open, title = "Fast MA Source")
maFastLength   = input(defval = 36, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource   = input(defval = open , title = "Slow MA Source")
maSlowLength   = input(defval = 46, title = "Slow MA Period", minval = 1)

// === SERIES SETUP ===
// a couple of ma's..
maFast = sma(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)


// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = red, linewidth = 2, style = line, transp = 30)
slow = plot(maSlow, title = "Slow MA", color = green, linewidth = 2, style = line, transp = 30)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

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

// === LOGIC ===
//enterLong = crossover(maFast, maSlow)
//exitLong = crossover(maSlow, maFast)
enterLong = crossover(maSlow, maFast)
exitLong = crossover(maFast, maSlow)


// Entry //
strategy.entry(id="Long Entry", long=true, when=window() and enterLong)
strategy.entry(id="Short Entry", long=false, when=window() and exitLong)

// === FILL ====

fill(fast, slow, color = maFast > maSlow ? green : red)

더 많은