임펄스 MACD와 이중 이동 평균 교차를 기반으로 한 다중 시간 규모 추세 추적 전략

MACD SMMA SMA ZLEMA EMA MA
생성 날짜: 2024-05-17 15:33:02 마지막으로 수정됨: 2024-05-17 15:33:02
복사: 5 클릭수: 1201
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

임펄스 MACD와 이중 이동 평균 교차를 기반으로 한 다중 시간 규모 추세 추적 전략

개요

이 전략은 SMMA, SMA, ZLEMA, EMA 등 여러 가지 이동 평균 지표를 사용하며, 이를 기반으로 개선된 MACD 지표 (Impulse MACD) 를 구축하여, Impulse MACD와 그것의 신호 라인을 교차하여 거래 신호를 생성한다. 전략의 주요 아이디어는 다른 시간 스케일의 이동 평균을 사용하여 시장의 흐름을 포착하는 것이며, Impulse MACD를 사용하여 트렌드의 강도와 방향을 확인한다.

전략 원칙

  1. 계산 길이는 34의 높은 가격, 낮은 가격, 닫기 가격의 SMMA, ZLEMA, 임펄스 MACD ((MD) ) 을 얻는다.
  2. 임펄스 MACD의 9주기 SMA를 신호선 ((SB) 로 계산한다.
  3. 임펄스 MACD와 신호 선의 차이를 계산하여 경향 강도를 나타냅니다.
  4. 임펄스 MACD 상위 신호선을 통과할 때 구매 신호가 발생하고, 하위 신호를 통과할 때 평소한다.
  5. 가격과 임펄스 MACD, 높은 낮은 가격 SMMA의 관계에 따라, 다른 색으로 임펄스 MACD 기둥 모양을 그리며, 직관적으로 트렌드 강도를 나타냅니다.

전략적 이점

  1. 여러 종류의 이동 평균을 사용하여 시장의 추세를 더 포괄적으로 반영할 수 있습니다.
  2. 개선된 MACD 지표 (Impulse MACD) 는 가격과 이동 평균의 상대적인 위치를 고려하여 트렌드 강도를 더 잘 반영할 수 있다.
  3. 신호선 도입은 몇 가지 가짜 신호를 필터링하여 신호 품질을 향상시키는 데 도움이 됩니다.
  4. 임펄스 MACD는 트렌드 강도에 따라 다른 색으로 그려져 있다.

전략적 위험

  1. 잘못된 매개 변수 선택은 신호의 빈도나 지연을 초래할 수 있으며, 다른 시장과 주기에 따라 최적화가 필요합니다.
  2. 위기 상황에서는, 이 전략이 더 많은 가짜 신호를 만들어 손실을 초래할 수 있다.
  3. 이 전략은 막상 손실을 줄 수 있는 장치가 없기 때문에, 급격한 시장 상황에서는 더 큰 회수와 마주할 수 있다.

전략 최적화 방향

  1. 트렌드 판단 지표인 ADX를 도입하여 트렌드가 명확할 때만 거래하여 충격적인 상황에서 손실을 줄인다.
  2. 생성된 거래 신호에 대해, RSI, ATR 등과 같은 다른 지표와 결합하여 2차 확인을 하여 신호 품질을 향상시킬 수 있다.
  3. 합리적인 스톱로즈와 스톱 포지션을 설정하고 단편 거래 위험을 제어하십시오.
  4. 파라미터를 최적화하기 위해 유전 알고리즘과 같은 방법을 사용하여 최적의 파라미트 조합을 찾습니다.

요약하다

이 전략은 여러 유형의 이동 평균을 기반으로 개선된 MACD 지표를 구축하고 신호 선과 교차하여 거래 신호를 생성하며 트렌드 강도를 직관적으로 보여 주며 전체적인 아이디어가 명확하고 우위가 분명합니다. 그러나 이 전략에는 위기 상황에 대한 적응력이 부족하고, 위기 관리 조치의 부족 등과 같은 제한이 있습니다. 트렌드 판단, 신호 확인, 위험 제어, 매개 변수 최적화 등의 측면을 고려하여 전략의 건전성과 수익성을 향상시키기 위해 전략에 대한 추가 개선이 가능합니다.

전략 소스 코드
/*backtest
start: 2023-05-11 00:00:00
end: 2024-05-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Impulse MACD Strategy [LazyBear]", shorttitle="IMACD_Strategy", overlay=false)

// Function to calculate SMMA
calc_smma(src, len) =>
    var float smma = na
    smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len
    smma

// Function to calculate SMA
	ta.sma(src, len)
    sum = 0.0
    for i = 0 to len - 1
        sum := sum + src[i]
    sum / len

// Function to calculate ZLEMA
calc_zlema(src, length) =>
    var float ema1 = na
    var float ema2 = na
    var float d = na
    ema1 := ta.ema(src, length)
    ema2 := ta.ema(ema1, length)
    d := ema1 - ema2
    ema1 + d

// Function to calculate EMA
calc_ema(src, len) =>
    ema = 0.0
    ema := ta.ema(src, len)
    ema

// Inputs
lengthMA = input(34, title="Length of Moving Average")
lengthSignal = input(9, title="Length of Signal Line")

// Calculations
src = hlc3
hi = calc_smma(high, lengthMA)
lo = calc_smma(low, lengthMA)
mi = calc_zlema(src, lengthMA) 

md = mi > hi ? (mi - hi) : mi < lo ? (mi - lo) : 0
sb = ta.sma(md, lengthSignal)
sh = md - sb
mdc = src > mi ? src > hi ? color.lime : color.green : src < lo ? color.red : color.orange

// Plotting
plot(0, color=color.gray, linewidth=1, title="MidLine")
plot(md, color=mdc, linewidth=2, title="ImpulseMACD", style=plot.style_histogram)
plot(sh, color=color.blue, linewidth=2, title="ImpulseHisto", style=plot.style_histogram)
plot(sb, color=color.maroon, linewidth=2, title="ImpulseMACDCDSignal")

// Execute trades based on signals
if (ta.crossover(md, sb))
    strategy.entry("Buy", strategy.long)
if (ta.crossunder(md, sb))
    strategy.close("Buy")