MACD 기반 장기 전략


생성 날짜: 2024-01-12 11:02:06 마지막으로 수정됨: 2024-01-12 11:02:06
복사: 0 클릭수: 639
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

MACD 기반 장기 전략

개요

이 전략은 MACD 지표와 긴 선과 평평한 포지션 라인을 기반으로 통화 쌍의 긴 라인 거래를 구현합니다. MACD 지표가 긴 선을 통과하면 포지션을 열고 MACD 지표가 평평한 위치를 통과하면 평평한 포지션을 수행합니다. 동시에 중지 손실 전략을 설정합니다.

전략 원칙

이 전략은 MACD 지표의 빠른 선과 느린 선을 사용한다. 빠른 선은 12일 EMA, 느린 선은 26일 EMA이다. 두 평행선 사이의 차이는 MACD 기둥 모양의 도표이다. 또한 9일 EMA를 신호선으로 계산한다. MACD 기둥 모양의 도표에서 0.04을 뚫을 때 더 많이 하고, 아래로 0.015을 뚫을 때 더 평평하다. 동시에 5%의 스톱로스를 설정한다.

구체적으로, 전략은 먼저 MACD 지표의 빠른 라인, 느린 라인, 신호 라인을 계산한다. 그리고는 긴 라인을 -0.04, 평점 라인을 0.015로 설정한다. 현재 MACD 기둥이 더 큰 경우 더 많이 한다. 현재 MACD 기둥이 더 작은 경우 평점 라인을 더 많이 한다. 또한, 95%의 포지션 개시 가격으로 중지 손실 라인을 설정한다.

우위 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. MACD 지표를 사용하여 시장 추세를 판단하여 높은 정확도
  2. 동시에 긴 선과 포지션 선의 듀얼 필터링을 사용하여 잘못된 신호를 피하십시오.
  3. 손실을 막기 위한 전략을 세우고, 위험을 효과적으로 통제하세요.
  4. 간단하고 명확하고, 논리적으로 명확하고, 이해하기 쉽고, 실행하기 쉽습니다.
  5. 필요한 것 만과 MACD 지표, 자원 사용량이 적다

위험 분석

이 전략에는 위험도 있습니다.

  1. MACD 지표는 다소 지연되어 단선 기회를 놓칠 수 있습니다.
  2. 정지 설정이 너무 보수적일 수 있으며, 장기 동향을 지속적으로 추적할 수 없습니다.
  3. 매개 변수 설정은 반복 테스트를 통해 최적화해야 하며, 그렇지 않으면 너무 잘 맞지 않을 수 있습니다.
  4. 다른 통화의 효과에 의문을 제기하는 경우에만 적용

적절한 변수 조정, 다른 지표의 조합과 같은 방법을 통해 최적화 및 개선 할 수 있습니다.

최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 다른 MACD 변수 조합을 테스트하여 더 우수한 변수를 찾습니다.

다양한 길이의 고속, 느린, 신호 전선을 시도해 볼 수 있고, 더 적합한 조합을 찾을 수 있습니다.

  1. 다른 지표 시험에 대입

예를 들어 RSI, KD와 같은 지표는 매우 다른 효과를 가져올 수 있습니다.

  1. 긴 선과 포지션 선의 변수를 최적화

데이터의 반복적 재검토를 통해 더 적합한 평평한 지점 변수를 찾을 수 있습니다.

  1. 손해 방지 전략을 조정합니다.

트레일링 스톱과 같은 방법을 고려해 볼 수 있습니다.

  1. 다양한 통화쌍을 테스트하는 방법

다른 통화쌍에 전략을 적용하고, 결과를 조사합니다.

요약하다

이 전략overall은 매우 간단하고 직관적인 긴 라인 거래 전략이다. MACD 지표를 사용하여 상황을 판단하고, 두 개의 필터 조건을 설정하여 실수 거래를 줄인다. 동시에 위험을 제어하기 위해 손실을 설정한다. 이 전략은 논리적으로 명확하고, 자원이 많이 들지 않으며, 이해하기 쉽고 실행할 수 있으며, 권장된다. 물론, 매개 변수 최적화, 지표 조정 등의 수단으로 이 전략에는 개선할 여지가 많이 있습니다.

전략 소스 코드
/*backtest
start: 2024-01-04 00:00:00
end: 2024-01-11 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle = "GBPJPY MACD", title = "GBPJPY 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.04)
linesell = input(title="Close Long", type=float, defval=0.015)

//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)