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

임플러스 MACD와 이중 이동 평균 크로스오버에 기반한 다중 시간 프레임 트렌드 추적 전략

저자:차오장, 날짜: 2024-05-17 15:33:02
태그:MACDSMMASMAZLEMAEMAMA

img

전반적인 설명

이 전략은 SMMA, SMA, ZLEMA, EMA 등 다양한 이동 평균 지표를 활용하고, 이를 기반으로 개선된 MACD 지표 (Impulse MACD) 를 구축한다. 이 전략은 임플러스 MACD와 신호 라인의 교차를 통해 거래 신호를 생성한다. 전략의 주요 아이디어는 임플러스 MACD로 트렌드의 강도와 방향을 확인하면서 다른 시간 프레임의 이동 평균을 사용하여 시장 추세를 포착하는 것이다.

전략 원칙

  1. 임플러스 MACD (MD) 를 얻기 위해 높고 낮고 닫는 가격의 SMMA와 ZLEMA를 34의 길이로 계산합니다.
  2. 임플러스 MACD의 9주기 SMA를 신호선 (SB) 으로 계산합니다.
  3. 임플러스 MACD와 신호 라인 (SH) 사이의 차이를 계산하여 트렌드 강도를 반영합니다.
  4. 임플러스 MACD가 신호선을 넘어서면 구매 신호를 생성하고, 이 신호선을 넘어서면 포지션을 닫습니다.
  5. 가격, 임플러스 MACD, 그리고 높은/저한 가격 SMMA 사이의 관계를 기반으로 다른 색상을 가진 임플러스 MACD 히스토그램을 그래프화하여 트렌드 강도를 시각적으로 반영합니다.

전략적 장점

  1. 여러 종류의 이동 평균을 사용하는 것은 시장 동향을 보다 포괄적으로 반영합니다.
  2. 개선된 MACD 지표 (Impulse MACD) 는 가격 및 이동 평균의 상대적 위치를 고려하여 트렌드 강도를 더 잘 반영합니다.
  3. 신호 라인의 도입은 일부 잘못된 신호를 필터링하고 신호 품질을 향상시키는 데 도움이됩니다.
  4. 트렌드 강도에 따라 다른 색상을 가진 임플러스 MACD를 그래프화하면 시장 움직임에 대한 직관적인 판단이 용이합니다.

전략 위험

  1. 부적절한 매개 변수 선택으로 인해 신호가 빈번하거나 뒤떨어질 수 있으며, 다른 시장과 시간 틀에 따라 최적화를 요구할 수 있습니다.
  2. 이 전략은 더 많은 잘못된 신호를 생성하고 불안한 시장에서 손실을 일으킬 수 있습니다.
  3. 이 전략에는 스톱 로스 메커니즘이 없으며 변동적인 시장에서 상당한 마감에 직면 할 수 있습니다.

전략 최적화 방향

  1. ADX와 같은 트렌드 식별 지표를 도입하여 트렌드가 명확할 때만 거래하여 불안한 시장에서 손실을 줄이십시오.
  2. 생성된 거래 신호를 RSI 및 ATR와 같은 다른 지표로 확인하여 신호 품질을 향상시킵니다.
  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")


관련

더 많은