MACD 골든 크로스와 데드 크로스 전략

MACD EMA DIF DEA
생성 날짜: 2024-04-26 12:08:24 마지막으로 수정됨: 2024-04-26 12:08:24
복사: 0 클릭수: 1107
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

MACD 골든 크로스와 데드 크로스 전략

개요

이 전략은 MACD 지표의 DIF 선과 DEA 선의 교차를 사용하여 거래 신호를 생성한다. DIF 선이 아래에서 위쪽으로 DEA 선을 통과하면 다중 신호를 생성한다. DIF 선이 위쪽에서 아래로 DEA 선을 통과하면 마이너스 신호를 생성한다. 이 전략의 재검토 결과, BTCUSDT 거래 쌍의 승률은 약 40%이며 연간 수익률은 1.05입니다.

전략 원칙

  1. 빠른 이동 평균 ((EMA) 과 느린 이동 평균 ((EMA) 을 계산한다.
  2. DIF 라인 즉, 빠른 EMA와 느린 EMA의 차이를 계산한다.
  3. DEA 선, 즉 DIF 선의 EMA를 계산한다.
  4. MACD 기둥 그래프, 즉 DIF 선과 DEA 선의 차이를 계산한다.
  5. DIF 라인이 DEA 라인을 아래에서 위로 통과하면, 더 많은 신호를 생성하고, 더 많은 위치를 열립니다.
  6. DIF 라인이 DEA 라인을 위아래로 가로질러 지나갈 때, 공백 신호가 발생하고, 공백을 만들고, 공백을 열었다.
  7. 역 교차 신호가 다시 나타났을 때, 현재 포지션을 매장하고, 반대 방향으로 포지션을 개장한다.

전략적 이점

  1. 이 전략은 널리 사용되는 MACD 지표를 사용하여 이해하기 쉽고 구현할 수 있습니다.
  2. 전략 논리가 명확하고 거래 신호가 명확하다.
  3. 트렌드 시장에 적용되어 시장의 주요 트렌드를 추적할 수 있다.

전략적 위험

  1. 이 전략의 성공률은 40%에 불과하며, 이는 60%의 거래가 손실이 될 수 있다는 것을 의미한다.
  2. 이 전략은 보유자 수가 계속 증가하는 데 영향을 미치며, 이는 추가적인 위험점을 초래할 수 있다.
  3. 이 전략은 불안정한 시장에서 거래 신호를 자주 발생시켜 거래 비용을 높일 수 있습니다.
  4. 이 전략은 Stop Loss 및 포지션 관리와 같은 위험 관리를 고려하지 않았으며, 이는 큰 손실을 초래할 수 있습니다.

전략 최적화 방향

  1. 장기 이동 평균과 같은 추세 필터를 도입하여 불안정한 시장에서 거래하는 것을 피하십시오.
  2. 빠른 EMA, 느린 EMA 및 신호 선의 주기와 같은 MACD 지표의 매개 변수를 최적화하여 다른 시장 상황에 적응하십시오.
  3. 잠재적인 손실을 통제하기 위해 스톱로스 및 포지션 관리와 같은 위험 관리 조치를 추가하십시오.
  4. 거래 신호의 신뢰성을 높이기 위해 다른 기술 지표 또는 기본 분석과 결합하십시오.

요약하다

MACD 골드 포크는 트렌드 시장에 적합한 간단한 거래 전략이다. 그러나 이 전략의 승률이 낮고, 위험 관리 조치가 부족하기 때문에 추가적인 최적화와 개선이 필요하다. 트렌드 필터를 도입하고, 최적화 파라미터를 추가하고, 위험 관리와 다른 분석 방법과 결합하여 이 전략의 성능과 신뢰성을 향상시킬 수 있다. 그럼에도 불구하고, 이 전략은 여전히 독립적인 중개 전략으로 사용할 수 없으며, 더 나은 거래 결과를 얻기 위해 다른 전략과 결합되어야 한다.

전략 소스 코드
/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=5
// @description 该策略使用 MACD DIF 线与 EDA 线产生金叉与死叉时进行入场与出场操作, 回测后发现胜率约 40%, BTCUSDT 年化利率 1.05, 同时会导致持有的资产数量不断上升, 无法作为一个独立的套利策略进行使用.

strategy("MACD 金叉策略", overlay=true)

fastLength = input(12, "快线长度")
slowLength = input(26, "慢线长度")
MACDLength = input(9, "MACD 均线长度")

deltaIncreaseOver0 = input(color.green,'MACD 柱在 0 线以上增长')
deltaIncreaseUnder0 = input(color.rgb(153, 230, 156),'MACD 柱在 0 线以下增长')

deltaDecreaseOver0 = input(color.orange,'MACD 柱在 0 线以上下跌')
deltaDecreaseUnder0 = input(color.red,'MACD 柱在 0 线以下下跌')

buySellEnabled = input(true, '是否显示入场与出场信号')

// @variable 做多轮数
var longRound = 0
// @variable 做空轮数
var shortRound = 0

DIF = ta.ema(close, fastLength) - ta.ema(close, slowLength) // 快慢均线差值
EDA = ta.ema(DIF, MACDLength) // DIF 线的 EMA 均线
delta = DIF - EDA // MACD 柱高度

// plot(0, 'Zero', color.black)
plot(DIF,'DIF', color.yellow)
plot(EDA, "EDA", color.purple)

isDeltaIncreasing = delta[1] < delta
isDeltaOver0 = delta > 0
deltaColor = isDeltaIncreasing ? (isDeltaOver0? deltaIncreaseOver0: deltaIncreaseUnder0) :( isDeltaOver0? deltaDecreaseOver0: deltaDecreaseUnder0)
plot(delta, "Delta", deltaColor, style = plot.style_columns)

isDeltaV = delta > delta[1] and delta[2] > delta[1]
isDeltaA = delta < delta[1] and delta[2] < delta[1]

longBuy(round) =>
	entry = str.format("做多买入 {0}",round)
	// log.info(str.format("{0} {1}",entry,close))
	strategy.entry(entry, strategy.long, comment=entry)

longSell(round) =>
	entry = str.format("做多买入 {0}",round)
	exit = str.format("做多卖出 {0}",round)
	// log.info(str.format("{0} {1}",exit,close))
	strategy.close(entry, comment=exit)		

shortSell(round) =>
	entry = str.format("做空卖出 {0}",round)
	// log.info(str.format("{0} {1}",entry,close))
	strategy.entry(entry, strategy.short, comment= entry) 

shortBuy(round) =>
	entry = str.format("做空卖出 {0}",round)
	exit = str.format("做空买入 {0}",round)
	// log.info(str.format("{0} {1}",exit,close))
	strategy.close(entry, comment=exit)		

if (buySellEnabled) 
	if (ta.crossunder(DIF, EDA))
		longSell(longRound)
	if (ta.crossover(DIF, EDA))
		longRound := longRound + 1
		longBuy(longRound)