MACD 트렌드 전략

저자:차오장, 날짜: 2024-03-29 15:14:18
태그:

img

전반적인 설명

MACD 트렌드 다음 전략 (MACD Trend Following Strategy) 은 MACD 지표에 기반을 둔 양적 거래 전략이다. 이 전략의 주요 아이디어는 트렌드의 방향을 결정하고 적절한 시간에 긴 또는 짧은 포지션을 설정하기 위해 MACD 지표의 황금 십자 및 죽음의 십자 신호를 사용하는 것입니다. MACD 라인이 신호 라인을 넘어서 제로 축을 넘을 때 긴 포지션은 열립니다. MACD 라인이 신호 라인을 넘어서 제로 축을 넘을 때 짧은 포지션은 열립니다. 전략은 가장 최근의 최저 지점을 긴 포지션의 스톱 로스로 사용하고 가장 최근의 가장 높은 지점을 짧은 포지션의 스톱 로스로 사용합니다. 폐쇄 조건은 MACD 라인이 신호 라인을 반대 방향으로 넘을 때입니다.

전략 원칙

MACD 트렌드 추적 전략의 핵심 원칙은 트렌드의 형성과 반전을 포착하기 위해 MACD 지표를 사용하는 것입니다. MACD 지표는 두 이동 평균 (고속 및 느린) 사이의 차이로 구성되며 신호 라인과 함께 거래 신호를 생성하는 데 사용됩니다. MACD 라인이 신호 라인과 제로 축 위에 넘어가면 상승 추세가 형성되고 긴 포지션을 열고 있음을 나타냅니다. MACD 라인이 신호 라인과 제로 축 아래에 넘어가면 하락 추세가 형성되고 있음을 나타냅니다. 짧은 포지션을 열고 있습니다. 전략은 가장 최근의 중요한 MAC 낮은 지점을 긴 포지션의 스톱 손실로 사용하고 가장 최근의 중요한 높은 지점을 짧은 포지션의 스톱 손실로 사용하여 위험을 제어합니다. MACD 라인이 반대 방향으로 트렌드를 넘어가면 현재 포지션은 닫습니다.

전략적 장점

  1. MACD 트렌드 다음 전략은 트렌드 형성의 시작에서 포지션을 설정하여 트렌드의 동력을 완전히 활용함으로써 트렌드 기회를 효과적으로 포착 할 수 있습니다.

  2. 이 전략은 MACD 황금/죽음 크로스와 제로 축을 필터링 조건으로 사용하며, 오스실레이션 시장에서 잘못된 신호를 더 잘 필터링할 수 있습니다.

  3. 이 전략은 가장 최근의 중요한 최고와 최저점을 스톱 로스 수준으로 사용하며, 이는 단일 거래의 위험 노출을 제어할 수 있습니다.

  4. 전략 논리는 명확하고 이해하기 쉽고 실행하기 쉽기 때문에 초보자도 배울 수 있습니다.

전략 위험

  1. MACD 지표는 본질적으로 지체 지표로, 트렌드 반전 초기에는 상당한 마감 현상이 발생할 수 있습니다.

  2. 이 전략은 변동적인 시장에서 빈번한 거래를 유발할 수 있으며, 높은 거래 비용을 초래할 수 있습니다.

  3. 스톱 로스 레벨의 설정은 가장 최근의 중요한 최고와 최저점에 달려 있으며, 이는 특정 상황에서 조기 또는 지연된 스톱 로스를 초래할 수 있습니다.

  4. 이 전략은 실제 적용에서 특정 상황에 따라 최적화되어야 하는 포지션 크기와 자금 관리를 고려하지 않습니다.

전략 최적화 방향

  1. 신호의 신뢰성 및 정확성을 향상시키기 위해 필터링 조건으로 다른 기술적 지표 또는 가격 행동 패턴을 도입하는 것을 고려하십시오.

  2. ATR 또는 비율에 기반한 스톱 손실을 사용하는 것과 같은 스톱 손실 수준을 설정하는 방법을 최적화하여 위험을 더 잘 제어합니다.

  3. 시장의 변동성과 계좌 자금에 기초하여 지점 크기를 동적으로 조정하기 위한 지점 크기와 자금 관리 메커니즘을 도입합니다.

  4. 최적화 및 다양한 시장 및 거래 도구에 대한 매개 변수를 조정하여 가장 적합한 매개 변수 조합을 찾습니다.

요약

MACD 트렌드 추적 전략 (MACD Trend Following Strategy) 은 MACD 지표의 특성을 활용하여 트렌드 기회를 포착하는 간단하고 효과적인 수치적 거래 전략이다. 전략은 명확한 논리를 가지고 있으며, 이해하기 쉽고 구현하기 쉽고, 초보자도 배울 수 있도록 적합합니다. 그러나 실제 응용에서는 위험 통제에주의를 기울여야하며, 더 강력한 거래 성과를 달성하기 위해 최적화 및 개선을위한 다른 방법과 결합해야합니다.


/*backtest
start: 2023-03-23 00:00:00
end: 2024-03-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("MACD trendfollow", shorttitle="MACD TF", overlay=true)
// switch = input(true, title="Enable MACD Bar Color")
// X001TK MACD trendfollow Strategy
//
// 
// This strategy combines the non standart approach in MACD strategy to buy once to buy when the MACD value goes above Signal line and a zero line, to sell on the opposite condition.
//
//
// This strategy goes long if the MACD (3,9,5) goes above its Signal and above zero
//
// You can set Stop loss on the recent lowest low when long position is opened and recent highest hugh in short
// 
//
// Exit rule is simple. We close the LONG position once MACD goes below Signal line and close SHORT on the opposite condition 
//
// 
// 
//
// Input
fastMAlen = input(3, minval=1, title="MACD fast moving average")
slowMAlen = input(9,minval=1, title="MACD slow moving average")
signalMACDlen = input(5,minval=1, title="MACD signal line moving average")
// switch = input(true, title="Enable MACD Bar Color")
length = input(1, minval=1)



// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2002, title = "From Year", minval = 2000)
ToMonth   = input(defval = 3, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2029, title = "To Year", minval = 2017)



// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 00, 00)        // backtest finish window
window()  => true // create function "within window of time"

// MACD Calculation
MACD = ema(close, fastMAlen) - ema(close, slowMAlen)
signalMACD = ema(MACD, signalMACDlen)
delta = MACD - signalMACD
fastMA = ema(close,fastMAlen)
slowMA = ema(close,slowMAlen)


// Colors
//bartrendcolor = MACD > signalMACD and MACD > 0? green : MACD < signalMACD and MACD < 0? red : MACD < signalMACD? gray :  gray 
//barcolor(switch?bartrendcolor:na)

barcolour=(MACD > signalMACD and MACD > 0)?#53B987:(MACD < signalMACD and MACD < 0)?#EB4D5C:na
barcolor(color=barcolour)


// === STRATEGY ===
// conditions

longCond =  MACD > signalMACD and MACD > 0 
XlongCond = MACD < signalMACD 
ShortCond = MACD < signalMACD and MACD < 0 
XShortCond = MACD > signalMACD 





strategy.entry("long", strategy.long, when=longCond==true and window()==true )
//strategy.exit(id="Close Long", stop=longStop)//, limit=longTake)
strategy.close("long", when=XlongCond==true and window()==true)
strategy.entry("short", strategy.short,  when=ShortCond==true and window()==true )
//strategy.exit(id="Close Short", stop=shortStop)//, limit=shortTake)
strategy.close("short", when=XShortCond==true and window()==true)

// === /STRATEGY ===

더 많은