MACD 지표를 기반으로 한 추세 추종 전략


생성 날짜: 2023-11-16 17:42:09 마지막으로 수정됨: 2023-11-16 17:42:09
복사: 6 클릭수: 677
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

MACD 지표를 기반으로 한 추세 추종 전략

개요

이 전략은 MACD 지표를 기반으로 트렌드 추적 거래를 구현한다. 전략은 MACD 지표를 사용하여 트렌드 방향을 식별하고, 동적 스톱로스와 함께 이익을 잠금한다.

전략 원칙

  1. 빠른 선, 느린 선 및 MACD 지표를 계산하십시오. 빠른 선은 12 주기 지수 이동 평균을 사용하고 느린 선은 26 주기 지수 이동 평균을 사용합니다. MACD는 빠른 선과 느린 선의 차입니다.

  2. 구매 라인 및 판매 라인을 설정한다. MACD 상에서 구매 라인을 가로질러 구매 신호를 생성한다. MACD 아래에서 판매 라인을 가로질러 판매 신호를 생성한다.

  3. 포지션 개시 후 동적 스톱로스를 설정하고, 스톱로스 라인을 추적한다. 스톱로스 라인의 초기 값은 포지션 개시 가격의 95%이며, 가격이 스톱로스 라인에 이동함에 따라 수익을 고정한다.

  4. 스톱 손실 또는 역 신호를 쏘면 평지.

우위 분석

  1. MACD 지표를 사용하여 트렌드 방향을 식별하여 트렌드를 효과적으로 추적 할 수 있습니다.

  2. 동적 중지 메커니즘은 수익을 지속적으로 잠금하고 손실이 확대되는 것을 방지합니다.

  3. 전략 논리는 간단하고 명확하며, 이해하기 쉬운 구현이며, 수량 거래의 자동 실행에 적합하다.

위험 분석

  1. MACD 지표는 지연되어 있으며, 단기 트렌드 반전을 놓칠 수 있다.

  2. 너무 느슨하게 손실을 중지하면 수익을 놓칠 수 있고 너무 엄격하게 너무 일찍 손실을 중단 할 수 있습니다.

  3. 파라미터 튜닝 문제, MACD 파라미터 및 구매/판매 라인은 지속적으로 테스트 및 최적화를 필요로 한다.

  4. 추세상황에서는 효과가 좋고, 변동상황에서는 손실 위험이 있다.

최적화 방향

  1. MACD 변수를 최적화하여 최적의 변수 조합을 찾습니다.

  2. 점수 손실, ATR 손실 등 다양한 손실 방식을 테스트하십시오.

  3. 필터링 조건을 추가하여 다른 지표를 사용하여 잘못된 거래를 피하십시오. 예를 들어, 브린 밴드, RSI 등.

  4. 동향 판단 지표와 동향 및 변동 상황을 식별하고 동적으로 조정하는 전략 파라미터를 결합합니다.

요약하다

이 전략은 전체적인 아이디어가 명확하며, MACD 지표가 트렌드를 추적하고, 동적 스톱로스를 사용하여 수익을 잠금할 수 있으며, 트렌드 상황을 효과적으로 추적할 수 있다. 그러나 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)