[기술적 분석] 전략 : 골든 크로스/데드 크로스(Golden Cross/Dead Cross)

반응형

 

  골든 크로스와 데드 크로스 전략은 아마 가장 기본적이며 유명한 전략 중의 하나가 아닐까 싶다. 골든/데드 크로스는 장기 단기 이동평균선 두 개를 이용해 단기 이동 평균선이 장기 이동 평균선을 상향 돌파할 경우, 상승 추세로 전환한 것으로 보고 매수,  단기 이동 평균선이 장기 이동 평균선을 하향 돌파한 경우, 하락 추세로 전환한 것으로 보고 매도하는 전략을 사용한다. 일반적으로 단순 이동 평균(Simple Moving Average)을 사용하며 미국의 경우, 12, 26일 이동 평균선을 일반적으로 사용하며, 한국의 경우, 20일, 60일 이동평균선을 사용하여 골든 크로스 데드 크로스 전략에 적용한다.

 

골든 크로스/데드 크로스(Golden Cross/Dead Cross) 전략

반응형

 

  이 전략이 널리 알려지고 아직도 많이 사용되는 이유는 직관적이고 구간을 조절하여 장기 투자에 적용하거나 단기 트레이딩에 적용하는 등 범용성이 뛰어난 점 때문이며 이러한 장점들 때문에 이후 소개할 APO(Absolute Price Oscillator)나 MACD(Moving Average Convergence Divergence) 등 많은 지표와 전략들이 기본적으로 골든 크로스, 데드 크로스 전략을 기반으로 만들어졌다. 현대에도 추세를 직관적으로 파악하거나 장기 추세를 판단하는 데에 다양한 형태로 많이 사용되는 지표이자 전략이다. 널리 알려지고 단순하다고 해서 수익률이 나쁘지는 않다. 유명한 데에는 이유가 있는 법. 이상한 산식이랑 보조지표를 몽땅 넣은 돈 내고 사는 전략들보다 수익률은 오히려 훨씬 좋게 나오며 다른 엥간한 전략들과 비교해도 평균 이상은 나오는 전략이다.

 

  단순 이동 평균선을 사용하다 보니 급등 후 추세가 꺾인 후에도 한참 동안 데드크로스가 발생하지 않아 매도 시그널이 발생하지 않는 등 후행성의 문제가 있어 이를 보완하기 위해 구간을 조정하거나 이동평균선을 좀 더 민감한 WMA(가중 이동 평균, Weigthed Moving Average)나 EMA(지수 이동 평균, Exponential Moving Average) 등을 적용하기도 한다. 단, 이동 평균의 종류나 구간을 바꿔 민감도를 조절하는 경우에는 허위 시그널의 문제 역시 존재하여 추세가 강하거나 일정하지 않고 자주 변경되는 종목 혹은 장세에서는 높은 승률을 가져가가기 어려워진다. 또한 수치화되어 인식하는 지표가 없기 때문에 종목 스크리닝 등에 정량적으로 적용하기 어려운 단점이 있다. 이런 단점을 보완하기 위해 만들어진 것이 APO(Absolute Price Oscillator).

 

  마지막으로 골든 크로스/데드 크로스(Golden Cross/Dead Cross) 소스를 공유하며 마친다.

 

 

  • 골든 크로스/데드 크로스(Golden Cross/Dead Cross) 트레이딩 뷰 파인 스크립트 전략 소스
//@version=5
strategy(title="Golden/Dead Cross", overlay=true, margin_long=100, margin_short=100, default_qty_type=strategy.percent_of_equity, default_qty_value=50, commission_type=strategy.commission.percent, commission_value=0.2, pyramiding=0)
import TradingView/ta/7 as ta7
import blackcat1402/pandas_ta/7 as pta

ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "DEMA" => ta7.dema(source,length)
        "TEMA" => ta7.tema(source,length)
        "FRAMA" => ta7.frama(source,length)
        "T3" => ta7.t3(source,length)
        "TRIMA" => ta7.trima(source,length)
        "RMA" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "HMA" => ta.hma(source, length)
        "VWMA" => ta.vwma(source * volume, length)
        "ALMA" => pta.alma(source, length)
        "JMA" => pta.jma(source, length)
        "SINWMA" => pta.sinwma(source, length)
        "FWMA" => pta.fwma(source, length)
        "LINREG" => pta.linreg(source, length)
        "SWMA" => pta.swma(source)
        "YIDYA" => pta.vidya(source, length)
        "VWAP" => pta.vwap(source)
        "ZLMA" => pta.zlma(source, length)

srcInput = input(close, "Source")
shortLengthInput = input.int(20, title="Short Length", group="Short", minval=1)
shortmaTypeInput = input.string("SMA", title="Short MA Type", options = ["SMA", "EMA", "DEMA", "TEMA", "FRAMA", "T3", "TRIMA", "RMA", "WMA", "HMA", "VWMA", "ALMA", "JMA", "SINWMA", "FWMA", "LINREG", "SWMA", "VIDYA", "VWAP", "ZLMA"], group="Short", display = display.data_window)
longLengthInput = input.int(60, title="Long Length", group="Long", minval=1)
longmaTypeInput = input.string("SMA", title="Short MA Type", options = ["SMA", "EMA", "DEMA", "TEMA", "FRAMA", "T3", "TRIMA", "RMA", "WMA", "HMA", "VWMA", "ALMA", "JMA", "SINWMA", "FWMA", "LINREG", "SWMA", "VIDYA", "VWAP", "ZLMA"], group="Long", display = display.data_window)

shortMA = ma(srcInput, shortLengthInput, shortmaTypeInput)
longMA = ma(srcInput, longLengthInput, longmaTypeInput)

plot(shortMA, title="Short", color=color.yellow)
plot(longMA, title="Long", color=color.purple)

startDate = input.time(defval=timestamp("01 Jan 1970 00:00 +0000"), group = "Test Range")
finishDate = input.time(defval=timestamp("31 Dec 2025 24:00 +0000"), group = "Test Range")
time_condition = time >= startDate and time <= finishDate

if time_condition
    if ta.crossover(shortMA, longMA) 
        strategy.entry("Long", strategy.long, oca_type=strategy.oca.cancel)
    if ta.crossunder(shortMA, longMA)
        strategy.close("Long")
    
bgcolor(strategy.position_size < 0 ? color.new(color.green,90) : na)

 

반응형