이 전략은 단순 이동 평균 (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)