ADX 및 MACD 지표를 기반으로 한 거래 전략


생성 날짜: 2023-12-13 15:45:24 마지막으로 수정됨: 2023-12-13 15:45:24
복사: 3 클릭수: 1244
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

ADX 및 MACD 지표를 기반으로 한 거래 전략

개요

이 전략은 ADX와 MACD 지표를 기반으로 한 트렌드 추적 전략 이라고 불리며, 평균 트렌드 지표 ((ADX) 를 사용하여 트렌드 방향과 강도를 판단하고, 이동 평균 집적 지표 ((MACD) 의 다중 허공 신호와 결합하여 트렌드 추적 거래를 구현합니다. ADX가 강한 트렌드가 있음을 표시하고 MACD가 거래 신호를 내면 이 전략은 다중 또는 허공 위치를 설정합니다.

전략 원칙

이 전략은 ADX와 +DI, -DI 곡선을 계산하여 시장의 경향 방향과 강도를 판단한다. +DI 곡선 위에 DI 곡선을 통과하면 다목 시장이며, -DI 곡선 아래에 +DI 곡선을 통과하면 공백 시장이다. 그것만으로도 충분하지 않다. ADX 값이 20보다 크면, 트렌드가 충분히 강하다는 것을 나타냅니다. 이 때 MACD 지표의 차치 값 ((macdline) 과 신호 값 ((signalline) 의 금색 갈대기 신호를 결합하여, 그 품목을 사고 팔아, 트렌드 추적 거래를 실현한다.

이 전략의 거래 신호 논리는 다음과 같습니다.

멀티 헤드 신호: +DI> -DI 와 MACD의 차차선이 아래에서 위로 신호선을 통과할 때 공백 신호: -DI> +DI와 MACD의 차차선이 신호선을 위아래로 통과할 때

이러한 논리에 따라, 이 전략은 강력한 추세에서 우수한 진입 시기를 잡을 수 있습니다.

전략적 이점

이 전략의 가장 큰 장점은, 동향 판단과 진입 시기를 선택하는 두 가지 요소를 동시에 고려한다는 것입니다. 이는 시장의 강한 방향성이 존재할 때 거래자가 더 나은 진입 지점을 찾을 수 있도록 해줍니다. 이것은 시스템의 안정성과 수익성을 크게 향상시킵니다.

또한, 이 전략은 중지 손실 논리를 도입한다. 위치 손실이 사용자 정의한 중지 손실 가격을 초과할 때, 전략은 적극적으로 중지 손실을 발생시키고, 개별 거래의 손실을 효과적으로 제어한다. 이것은 또한 이 전략의 큰 특징이다.

전략적 위험

이 전략의 장점에도 불구하고 주의해야 할 몇 가지 위험도 있습니다.

  1. ADX와 MACD로 구성된 거래 신호는 특정 시장 상황에서는 유효하지 않거나 잘못된 신호를 생성하여 불필요한 손실을 초래할 수 있습니다.

  2. 사용자가 정의한 스톱로스 가격이 초과될 수 있으며, 예상 이상의 손실이 발생할 수 있습니다.

  3. 반전 시장에서, 전략은 너무 많은 유효하지 않은 거래를 만들어 거래 비용을 지출 할 수 있습니다.

이러한 위험을 줄이기 위해 ADX와 MACD의 파라미터 설정을 최적화하고 엄격한 자금 관리 전략을 시행하는 동시에 상이한 시장 상황에 맞게 스톱 로직을 조정하는 것이 좋습니다.

전략 최적화 방향

이 전략에는 최적화할 여지가 있습니다.

  1. 더 많은 지표를 도입하여 더 강력한 거래 신호를 만들 수 있습니다. 예를 들어, 변동성 지표와 결합하여 거래를 제한합니다.

  2. ADX와 MACD의 매개 변수를 기계 학습으로 자동으로 최적화할 수 있다.

  3. 시장의 변동에 따라 변동하는 가격 동력을 추적할 수 있는 적응형 스톱저 메커니즘을 구축할 수 있다.

이러한 방법을 통해 전략의 안정성과 수익성을 더욱 강화할 수 있을 것으로 기대된다.

요약하다

전체적으로, ADX와 MACD 지표에 기반한 트렌드 추적 전략은 트렌드 방향을 판단하고, 최적의 입문 시점을 찾고, 스톱 로직을 설정하는 등의 장점을 가지고 있으며, 고려할 가치가 있는 거래 시스템입니다. 파라미터의 최적화와 리스크 통제가 이루어지면, 이 전략은 투자 수익을 얻을 수 있습니다. 그러나 거래자는 여전히 잠재적인 위험을 경계하고, 시장 환경의 변화에 주의를 기울여야합니다.

전략 소스 코드
/*backtest
start: 2022-12-06 00:00:00
end: 2023-12-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("TUE ADX/MACD Confluence V1.0", overlay=true)

showsignals = input(true, title="Show BUY/SELL Signals")
showcandlecolors = input(true, title="Show Candle Colors")
length = input(14, title="ADX Length")
smoothing = input(10, title="ADX Smoothing")
macdsource = input(close, title="MACD Source")
macdfast = input(12, title="MACD Fast Length")
macdslow = input(26, title="MACD Slow Length")
macdsignal = input(9, title="MACD Signal Length")
colorup = input(color.green, title="Up Candle Color")
colordown = input(color.red, title="Down Candle Color")

/////////////////////////////////////////////////////////////////////////////////////////////// ADX AND MACD CALC
[diplus, diminus, adx] = ta.dmi(length, smoothing)

[macdline, signalline, histline] = ta.macd(macdsource, macdfast, macdslow, macdsignal)

//////////////////////////////////////////////////////////////////////////////////////////////TRADE CALC

longcheck = diplus > diminus and macdline > signalline
shortcheck = diminus > diplus and signalline > macdline

int trade = 0

//Open from nothing

if trade == 0 and longcheck
    trade := 1

else if trade == 0 and shortcheck
    trade := -1
    
//Reversal

else if trade == 1 and shortcheck
    trade := -1
    
else if trade == -1 and longcheck
    trade := 1
    
//Keep status quo until crossover

else
    trade := trade[1]

//////////////////////////////////////////////////////////////////////////////////////////////PLOT 

colors = longcheck ? colorup : shortcheck ? colordown : color.white

plotcandle(open, high, low, close, color = showcandlecolors ? colors : na)

plotshape(trade[1] != 1 and trade == 1 and showsignals, style=shape.labelup, text='BUY', textcolor=color.white, color=color.green, size=size.small, location=location.belowbar)
plotshape(trade[1] != -1 and trade == -1 and showsignals, style=shape.labeldown, text='SELL', textcolor=color.white, color=color.red, size=size.small, location=location.abovebar)

///////////////////////////////////////////////////////////////////////////////////////////// ALERTS

// Add Stop Loss
stopLossPrice = input(100, title="Stop Loss Price")

if trade == 1
    strategy.entry("Long", strategy.long)

if trade == -1
    strategy.entry("Short", strategy.short)

if trade == 1 and close < close[1] - stopLossPrice
    strategy.close("LongExit")

if trade == -1 and close > close[1] + stopLossPrice
    strategy.close("ShortExit")