리소스 로딩... 로딩...

MACD 장기 전용 전략

저자:차오장, 날짜: 2024-01-12 11:02:06
태그:

img

전반적인 설명

이 전략은 통화 쌍의 장기 거래를 구현하기 위해 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 매개 변수 조합을 테스트하십시오.

    다른 길이의 빠른 라인, 느린 라인, 신호 라인 더 적합한 조합을 찾을 수 있습니다.

  2. 다른 지표를 시도해보세요.

    RSI, KD와 같은 지표는 매우 다른 결과를 얻을 수 있습니다.

  3. 긴 라인 및 근 라인 매개 변수를 최적화

    더 적합한 매개 변수는 반복적인 백테스팅을 통해 찾을 수 있습니다.

  4. 스톱 로스 전략을 조정

    중지 손실을 더 역동적으로 만들기 위해 후속 중지 고려

  5. 다른 통화 쌍에서 테스트

    다른 쌍에 전략을 적용하고 효과를 조사

결론

결론적으로, 이것은 전반적으로 매우 간단하고 직관적인 장기 거래 전략입니다. 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)

더 많은