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

펄스 MACD와 쌍평선 교차에 기반한 멀티 타임 스케일 트렌드 추적 전략

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

基于脉冲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와 신호 라인의 차이 (SH) 를 계산하여 경향 강도를 나타냅니다.
  4. 임플러스 MACD가 신호선을 통과할 때 구매 신호를 생성하고, 아래로 통과할 때 평형된다.
  5. 가격과 임플러스 MACD, 높은 가격과 낮은 가격 SMMA의 관계에 따라, 다른 색상으로 임플러스 MACD 기둥 그래프를 그립니다.

전략적 장점

  1. 다양한 종류의 이동평균을 사용하여 시장 추세를 보다 포괄적으로 반영합니다.
  2. 개선된 MACD 지표 (Impulse MACD) 는 가격과 이동 평균의 상대적 위치를 고려하여 추세 강도를 더 잘 나타냅니다.
  3. 신호 라인의 도입은 일부 가짜 신호를 필터링하여 신호 품질을 향상시키는 데 도움이 됩니다.
  4. 트렌드 강도에 따라 다양한 색상으로 Impulse 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")


관련 내용

더 많은 내용