
이 전략은 MACD 지표를 기반으로 트렌드 추적 거래를 구현한다. 전략은 MACD 지표를 사용하여 트렌드 방향을 식별하고, 동적 스톱로스와 함께 이익을 잠금한다.
빠른 선, 느린 선 및 MACD 지표를 계산하십시오. 빠른 선은 12 주기 지수 이동 평균을 사용하고 느린 선은 26 주기 지수 이동 평균을 사용합니다. MACD는 빠른 선과 느린 선의 차입니다.
구매 라인 및 판매 라인을 설정한다. MACD 상에서 구매 라인을 가로질러 구매 신호를 생성한다. MACD 아래에서 판매 라인을 가로질러 판매 신호를 생성한다.
포지션 개시 후 동적 스톱로스를 설정하고, 스톱로스 라인을 추적한다. 스톱로스 라인의 초기 값은 포지션 개시 가격의 95%이며, 가격이 스톱로스 라인에 이동함에 따라 수익을 고정한다.
스톱 손실 또는 역 신호를 쏘면 평지.
MACD 지표를 사용하여 트렌드 방향을 식별하여 트렌드를 효과적으로 추적 할 수 있습니다.
동적 중지 메커니즘은 수익을 지속적으로 잠금하고 손실이 확대되는 것을 방지합니다.
전략 논리는 간단하고 명확하며, 이해하기 쉬운 구현이며, 수량 거래의 자동 실행에 적합하다.
MACD 지표는 지연되어 있으며, 단기 트렌드 반전을 놓칠 수 있다.
너무 느슨하게 손실을 중지하면 수익을 놓칠 수 있고 너무 엄격하게 너무 일찍 손실을 중단 할 수 있습니다.
파라미터 튜닝 문제, MACD 파라미터 및 구매/판매 라인은 지속적으로 테스트 및 최적화를 필요로 한다.
추세상황에서는 효과가 좋고, 변동상황에서는 손실 위험이 있다.
MACD 변수를 최적화하여 최적의 변수 조합을 찾습니다.
점수 손실, ATR 손실 등 다양한 손실 방식을 테스트하십시오.
필터링 조건을 추가하여 다른 지표를 사용하여 잘못된 거래를 피하십시오. 예를 들어, 브린 밴드, RSI 등.
동향 판단 지표와 동향 및 변동 상황을 식별하고 동적으로 조정하는 전략 파라미터를 결합합니다.
이 전략은 전체적인 아이디어가 명확하며, 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)