이 전략은 거래 신호를 생성하기 위해 MACD 지표에서 DIF 라인과 DEA 라인의 교차를 사용합니다. DIF 라인이 DEA 라인의 위를 넘을 때 긴 신호를 생성합니다. DIF 라인이 DEA 라인의 아래를 넘을 때 짧은 신호를 생성합니다. 이 전략의 백테스팅 결과는 BTCUSDT 거래 쌍에서 승률이 약 40%이며 연간 수익률은 1.05입니다. 그러나 보유 자산의 수가 지속적으로 증가하도록 만들므로 독립적인 중재 전략으로 사용할 수 없습니다.
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)