MACD 이동 평균 황소 곰 변환 전략은 시장 추세가 역전되었는지 여부를 결정하기 위해 MACD 지표의 DIFF 및 DEA 라인을 계산하여 거래 신호를 생성합니다. DIFF가 DEA를 넘어서면 길고 DIFF가 DEA를 넘어서면 짧습니다. 전략은 또한 잘못된 브레이크오트를 피하기 위해 가격 EMA 필터를 통합합니다.
이 전략은 주로 MACD 지표의 DIFF 및 DEA 라인을 기반으로합니다. MACD는 이동 평균 컨버전스 디버전스를 의미합니다. DIFF, DEA 및 MACD 라인으로 구성됩니다. 그 중 DIFF는 단기 EMA와 장기 EMA 사이의 차이를 나타냅니다. DEA는 DIFF 신호를 확인하는 데 사용되는 DIFF의 EMA이며 MACD는 디버전스를 식별하는 데 사용되는 DIFF와 DEA 사이의 차이를 나타냅니다.
DIFF가 DEA를 넘으면 단기 이동 평균이 강화되기 시작하고 시장이 상승세를 밟게 된다. DIFF가 DEA를 넘으면 단기 이동 평균이 약해지고 시장이 하향세를 보이는 것을 의미한다. 따라서 이 전략은 DIFF가 DEA를 넘어서면 길게, DEA를 넘어서면 짧게 진행된다.
또한, 전략은 잘못된 브레이크오프를 피하기 위해 가격 EMA 필터를 통합합니다. DIFF가 DEA를 넘어서고 가격이 이전 긴 가격보다 낮을 때만 길게 갈 수 있으며 DIFF가 DEA를 넘어서고 가격이 이전 짧은 가격보다 높을 때만 짧게 갈 수 있습니다.
MACD 이동 평균 황소 곰 변환 전략은 MACD 지표와 가격 EMA 필터를 결합하여 MACD에서만 생성되는 잘못된 신호를 피하여 거래 성능을 향상시킵니다. 이 전략은 시장 트렌드 변화를 신속하게 식별하고 단기 거래에 적합합니다.
주요 장점은 다음과 같습니다.
MACD 이동 평균 황소 곰 전환 전략은 또한 몇 가지 위험을 가지고 있습니다:
위험을 최적화하는 주요 방법은 다음과 같습니다.
MACD 이동 평균 황소 곰 변환 전략은 다음 차원에서 더 이상 최적화 될 수 있습니다:
MACD 이동 평균 황소 곰 변환 전략은 DIFF 및 DEA 크로스오버 신호에 의해 상승 / 하락 시장 진입을 식별하고 잘못된 신호를 제거하기 위해 가격 EMA 필터를 사용하여 시장 트렌드 반전 지점을 효과적으로 결정합니다. 간단하고 명확한 논리로 단기 및 중장기 거래에 적합한 전환 지점을 신속하게 식별합니다. 최적화하기위한 다음 단계는 매개 변수를 조정하고 필터를 강화하고 전략을 더 견고하게 만들기 위해 거래 주파수를 제어하는 것입니다.
/*backtest start: 2022-12-01 00:00:00 end: 2023-12-07 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("macd_strategy", shorttitle="macd", overlay=true, pyramiding=1, max_bars_back=5000, calc_on_order_fills = false, calc_on_every_tick=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type =strategy.commission.percent, commission_value=0.00075) [diff, dea, _] = macd(close, 12, 26, 7) dea_close = ema(diff, 3) price = ema(close, 9) plot(price) cross_over_price = na cross_over_signal = na cross_over_price := cross_over_price[1] cross_over_signal := cross_over_signal[1] cross_under_price = na cross_under_signal = na cross_under_price := cross_under_price[1] cross_under_signal := cross_under_signal[1] if (crossover(diff,dea)) cross_over_price := price[1] cross_over_signal := diff if (crossunder(diff,dea)) cross_under_price := price[1] cross_under_signal := diff if dea > 0 cross_over_price = na cross_over_signal = na else cross_under_price = na cross_under_signal = na if diff > 0 if cross_under_price > cross_under_price[1]*1 and cross_under_signal < cross_under_signal[1]*0.95 strategy.entry("S", strategy.short, comment="S") else if cross_over_price < cross_over_price[1]*1 and cross_over_signal > cross_over_signal[1]*0.95 strategy.entry("B", strategy.long, comment="B") // strategy.exit("exit_s", "S", stop = strategy.position_avg_price*1.05, when=strategy.position_size < 0) // strategy.exit("exit_b", "B", stop = strategy.position_avg_price*0.95, when=strategy.position_size > 0) strategy.close_all(when=(strategy.position_size < 0 and (dea < 0 or diff > cross_under_signal*1 or crossover(diff, dea)) or (strategy.position_size > 0 and (dea > 0 or diff < cross_over_signal*1 or crossunder(diff, dea)))))