이 트레이딩 전략은 이중 이동 평균 크로스오버를 기반으로 합니다. 빠른 이동 평균과 느린 이동 평균의 상호 작용을 사용하여 시장 트렌드를 결정하고 거래 신호를 생성합니다. 빠른 MA가 느린 MA보다 높을 때 구매 신호가 생성됩니다. 빠른 MA가 느린 MA보다 낮을 때 판매 신호가 생성됩니다.
이 전략은 주로 이동 평균의 트렌드 추적 기능을 활용합니다. 이동 평균은 역사적 폐쇄 가격에 기초하여 특정 기간 동안 계산된 평균 가격입니다. 그들은 내일 소액 변동을 부드럽게하고 더 큰 시간 프레임 트렌드를 반영 할 수 있습니다. 빠른 MA는 짧은 기간을 사용하고 가격 변화에 더 빠르게 반응 할 수 있습니다. 느린 MA는 더 긴 기간을 사용하고 장기 트렌드를 나타냅니다. 느린 MA 위에 빠른 MA가 넘어가면 단기 동력이 장기 트렌드를 깨고 상승 추세가 시작되는 것을 나타냅니다. 반대로 느린 MA 아래에 빠른 MA가 넘어가면 장기 트렌드가 압력을 받고 가격이 떨어질 수 있습니다.
이 전략은 다양한 사이클 길이의 이동 평균을 설정하고 크로스오버를 사용하여 거래 신호를 생성합니다. 단기 주기의 MA가 긴 사이클 MA보다 높을 때 단기 추진력을 향상시키는 신호를 표시하고 구매 신호를 생성합니다. 단기 주기의 MA가 긴 사이클 MA보다 낮을 때 단기 트렌드를 약화시키는 신호를 나타내고 판매 신호를 생성합니다. 전략 코드는 MA를 플롯 함수로 그래프하고, MA의 크로스오버를 결정하기 위해 트렌드 변수를 사용하여 크로스오버가 발생하면 구매 및 판매 신호를 출력합니다.
이중 MA 크로스오버 전략은 이동 평균의 트렌드 추적 능력을 활용하고 그 크로스 기반의 신호를 생성합니다. 간단하고 직관적이면서도 몇 가지 결함이 있습니다. 파라미터 튜닝, 확인 추가, 알고리즘 최적화 등을 통해 극복 할 수 있습니다. 전반적으로 이중 MA 전략은 매우 고전적이고 사용하기 쉬운 트렌드 다음 전략입니다.
/*backtest start: 2023-01-01 00:00:00 end: 2023-04-14 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © KivancOzbilgic //@version=4 strategy("pomila", overlay=true) Periods = input(title="ATR Period", type=input.integer, defval=10) src = input(hl2, title="Source") Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0) changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true) showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false) highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true) barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true) atr2 = sma(tr, Periods) atr= changeATR ? atr(Periods) : atr2 up=src-(Multiplier*atr) up1 = nz(up[1],up) up := close[1] > up1 ? max(up,up1) : up dn=src+(Multiplier*atr) dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? min(dn, dn1) : dn trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green) buySignal = trend == 1 and trend[1] == -1 plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0) plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0) dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red) sellSignal = trend == -1 and trend[1] == 1 plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0) plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0) mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0) longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor) fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor) 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 = 999) 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 = 999) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => time >= start and time <= finish ? true : false longCondition = buySignal if (longCondition) strategy.entry("BUY", strategy.long, when = window()) shortCondition = sellSignal if (shortCondition) strategy.entry("SELL", strategy.short, when = window()) buy1= barssince(buySignal) sell1 = barssince(sellSignal) color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na barcolor(barcoloring ? color1 : na)