MACD 트렌드 전략

저자:차오장, 날짜: 2023-11-16 17:42:09
태그:

img

전반적인 설명

이 전략은 MACD 지표에서 거래 후 트렌드를 구현합니다. 이윤을 잠금하기 위해 MACD를 사용하여 동적 스톱 로스로 트렌드 방향을 식별합니다.

전략 논리

  1. 빠른 MA, 느린 MA 및 MACD 지표를 계산합니다. 빠른 MA는 12 기간 EMA를 사용하고 느린 MA는 26 기간 EMA를 사용합니다. MACD는 빠른 MA와 느린 MA의 차이입니다.

  2. 구매 및 판매 라인을 설정합니다. MACD가 구매 라인을 넘어서면 구매 신호를 생성하고, MACD가 판매 라인을 넘어서면 판매 신호를 생성합니다.

  3. 포지션 개시 후 동적 스톱 로스를 설정합니다. 초기 스톱 로스는 엔트리 가격의 95%로 설정되며 가격 실행에 따라 상승합니다.

  4. 스톱 손실이 발생하거나 역 신호가 표시될 때 닫기 위치

이점 분석

  1. 트렌드 방향을 파악하기 위해 MACD를 사용하면 트렌드를 효과적으로 추적할 수 있습니다.

  2. 동적 스톱 로스는 계속 수익을 확보하고 큰 손실을 피할 수 있습니다.

  3. 전략 논리는 간단하고 명확하고, 이해하기 쉽고 양자 거래에 자동화됩니다.

위험 분석

  1. MACD는 지연 효과를 가지고 있고, 단기 트렌드 반전을 놓칠 수 있습니다.

  2. 너무 느슨하게 설정된 스톱 손실은 수익을 놓칠 수 있고 너무 긴 것은 일찍 중단될 수 있습니다.

  3. 매커드 매개 변수와 구매/판매 라인은 지속적인 테스트와 최적화가 필요합니다.

  4. 트렌딩 시장에서 더 잘 작동하고, 불황스러운 시장에서 손실을 입을 수 있습니다.

최적화 방향

  1. 가장 좋은 조합을 찾기 위해 MACD 매개 변수를 최적화합니다.

  2. 고정점, ATR 기반 등 다양한 스톱 손실 방법을 테스트합니다.

  3. 거짓 신호를 피하기 위해 다른 지표를 사용하여 필터 조건을 추가하십시오. 예를 들어 볼린거 밴드, RSI 등.

  4. 트렌드 식별 도구와 결합, 동적으로 트렌드 대 범위에 묶인 시장에 기반한 전략 매개 변수를 조정.

요약

이 전략은 트렌드를 추적하고 수익을 잠금하기 위해 동적 스톱 로스를 사용하는 명확한 논리를 가지고 있습니다. 트렌딩 시장을 효과적으로 추적 할 수 있습니다. 그러나 MACD는 지체 문제가 있으며 스톱 로스 포인트를 최적화해야합니다. 다음 단계는 매개 변수를 추가 테스트하고 스톱 로스 메커니즘을 최적화하고 다른 지표와 필터를 추가하여 다른 시장 조건에 걸쳐 견고하게 만들고 안정성을 향상시키는 것입니다.


/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle = "EURUSD MACD", title = "EURUSD MACD")
fastMA = input(title="Fast moving average",  defval = 12, minval = 7)
slowMA = input(title="Slow moving average",  defval = 26, minval = 7)
lastColor = yellow
[currMacd,_,_] = macd(close[0], fastMA, slowMA, 9)
[prevMacd,_,_] = macd(close[1], fastMA, slowMA, 9)
plotColor = currMacd > 0 ? currMacd > prevMacd ? lime : green : currMacd < prevMacd ? maroon : red
plot(currMacd, style = histogram, color = plotColor, linewidth = 3)
plot(0, title = "Zero line", linewidth = 1, color = gray)

//MACD
// Getting inputs
fast_length = input(title="Fast Length",  defval=12)
slow_length = input(title="Slow Length",  defval=26)
src = input(title="Source",  defval=close)
signal_length = input(title="Signal Smoothing",  minval = 1, maxval = 50, defval =9)
sma_source = input(title="Simple MA(Oscillator)", type=bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

//plot(hist, title="Histogram", style=columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)
///END OF MACD

//Long and Close Long Lines
linebuy = input(title="Enter Long", type=float, defval=-0.0002)
linesell = input(title="Close Long", type=float, defval=0.0001)

//Plot Long and Close Long Lines
plot(linebuy,color=green),plot(linesell,color=red)


//Stop Loss Input
sl_inp = input(0.05, title='Stop Loss %', type=float)/100


//Order Conditions
longCond = crossover(currMacd, linebuy)
exitLong = crossover(currMacd, linesell)
stop_level = strategy.position_avg_price * (1 - sl_inp)


//Order Entries
strategy.entry("long", strategy.long,  when=longCond==true)
strategy.close("long", when=exitLong==true)
strategy.exit("Stop Loss", stop=stop_level)

더 많은