
이 전략은 이동 평균을 기반으로, 트렌드 상향 과정에서, 단기 회귀 후 더 많은 포지션을 열고, 트렌드 추적 유형 전략에 속한다.
이 전략은 3개의 다른 주기적인 EMA선을 사용하며, EMA1선은 다른 2개의 EMA선보다 짧은 기간의 단기적인 경향을 판단하는데 사용된다. EMA2선과 EMA3선은 중장기적인 경향을 판단하는데, 이 중 EMA3선은 가장 긴 기간을 사용한다. 단기적인 EMA1선이 을 때 표시되는 것은 단기적인 상승 경향에 있고, EMA2선은 EMA3선 위에 있으면 중장기적인 상승 경향에 있다는 것을 나타내므로 이 때 더 좋은 기회점이다. 구체적으로, 이 전략의 거래 신호 생성 논리는: 가격이 EMA1선을 을 때 여러 신호를 생성한다.
스톱 손실 평준화 라인 및 스톱 평준화 라인을 설정하여 수익을 잠금 할 수 있습니다. 구체적으로, 스톱 손실 라인은 ATR의 값에 따라 이동하며, 스톱 라인은 ATR의 값에 따라 이동합니다.
이 전략의 가장 큰 장점은 중·장기 상향 추세를 효과적으로 포착할 수 있다는 점이며, 또한 단기 조정도 고려하고 있다는 점입니다. 이 때문에 지주 기간과 수익의 여지가 상당히 크다.
또한 손해 방지 및 차단 장치가 설치되어 위험도 조절할 수 있습니다.
이 전략의 가장 큰 위험은 트렌드 반전 지점을 판단하지 못한다는 것입니다. 만약 중장선 트렌드가 반전하고 단기간에 상승한다면, 이 때 잘못된 다중 신호가 발생하여 더 큰 손실을 초래할 수 있습니다.
또한 재정상황에서 불필요한 거래 손실이 발생할 수도 있습니다.
특정 거래 품종의 특성에 따라 EMA의 주기 파라미터를 조정하여 그 품종의 중장선 주기와 더 잘 맞도록 고려할 수 있습니다.
다른 지표와 결합하여 단기 조정의 끝을 판단할 수 있으며, 잘못된 입시를 방지할 수 있다.
ATR 값의 크기에 따라 스톱패스 계수를 조정하는 것을 고려할 수 있으며, ATR이 크면 스톱패스 거리를 적절히 완화할 수 있다.
이 전략은 전반적으로 좋은 성과를 내는 중장선 트렌드 추적 전략이다. 이동 평균을 통해 트렌드 방향을 판단하고, 리콜 신호를 통해 입문 시기를 판단하고, 스톱 손실 설정을 통해 수익을 고정한다. 그러나 또한 맹목적인 추적의 위험이 있으며, 거래자의 자신의 판단과 함께 입문 여부를 결정해야 한다.
/*backtest
start: 2024-01-21 00:00:00
end: 2024-01-28 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy('Trend Continuation', shorttitle='Trend_Continuation', overlay=true)
// Input
price = input(close)
MA1_Length = input.int(50, step=1, title='EMA 1 Length')
MA2_Length = input.int(80, step=1, title='EMA 2 Length')
MA3_Length = input.int(200, step=1, title='EMA 3 Length')
numberOfCandles = input(1)
slATRFactor = input(3.5)
tpATRFactor = input(3.5)
ATRLength = input(14)
// switch1=input(true, title="Show Bar Color?")
// switch2=input(true, title="Show Moving Averages?")
// Calculation
MA1 = ta.ema(price, MA1_Length)
MA2 = ta.ema(price, MA2_Length)
MA3 = ta.ema(price, MA3_Length)
prev_price = close[numberOfCandles]
// Strategy
allPositive = true
for i = 0 to numberOfCandles - 1 by 1
if close[i] < close[i + 1] or close[i] < MA1
allPositive := false
break
long = MA2 > MA3 and price > MA1 and ta.crossunder(prev_price, MA1) and allPositive
// short = crossover(price, MA3) or ( change(price)>0 and change(MA1)>0 and crossover(price,MA1) and change(MA2)<0 )
if long
strategy.entry('Long', strategy.long, comment='Long')
bought = strategy.position_size[0] > strategy.position_size[1]
atrAtLong = ta.valuewhen(bought, ta.atr(ATRLength), 0)
// Stop loss and take profit
slPrice = strategy.position_avg_price - slATRFactor * atrAtLong
tpPrice = strategy.position_avg_price + tpATRFactor * atrAtLong
SL = plot(slPrice, title='SL', style=plot.style_linebr, linewidth=1, color=color.new(color.red, 0))
if price >= tpPrice and price < MA1
strategy.close('Long')
if price < strategy.position_avg_price
strategy.exit('Stop Loss', 'Long', stop=slPrice)
// Strategy Alert
alertcondition(long, title='Long Alert', message='Go Long!')
// alertcondition(short, title='EMA Slope + EMA Cross Strategy, Short Alert', message='Go Short!')
// MA trend bar color
// up = change(MA2)>0 and change(MA3)>0
// dn = change(MA2)<0 and change(MA3)<0
// bar_color = up?green:dn?red:blue
// barcolor(switch1?bar_color:na)
// MA trend output color
change_1 = ta.change(MA2)
MA2_color = ta.change(MA2) > 0 ? color.lime : change_1 < 0 ? color.red : color.blue
change_2 = ta.change(MA3)
MA3_color = ta.change(MA3) > 0 ? color.lime : change_2 < 0 ? color.red : color.blue
// MA output
// EMA2 = plot(switch2?MA2:na, title="EMA 2", style=linebr, linewidth=2, color=MA2_color)
// EMA3 = plot(switch2?MA3:na, title="EMA 3", style=linebr, linewidth=4, color=MA3_color)
// fill(EMA2, EMA3, color=silver, transp=50)
color_1 = MA2 > MA3 ? color.green : color.red
EMA1 = plot(MA1, title='EMA 1', style=plot.style_linebr, linewidth=1, color=color_1)
// EMA2 = plot(MA2, title="EMA 2", style=linebr, linewidth=2, color=blue)
// EMA3 = plot(MA3, title="EMA 3", style=linebr, linewidth=3, color=red)
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)