Esta estrategia utiliza el cruce de la línea DIF y la línea DEA en el indicador MACD para generar señales de negociación. Cuando la línea DIF cruza por encima de la línea DEA, genera una señal larga; cuando la línea DIF cruza por debajo de la línea DEA, genera una señal corta. Los resultados de las pruebas de retroceso de esta estrategia muestran que en el par de negociación BTCUSDT, la tasa de ganancia es de aproximadamente 40%, y el rendimiento anualizado es de 1.05. Sin embargo, hará que el número de activos mantenidos aumente continuamente, por lo que no se puede utilizar como una estrategia de arbitraje independiente.
La estrategia MACD de cruz de oro y cruz de muerte es una estrategia de negociación simple y fácil de entender que es adecuada para los mercados de tendencia. Sin embargo, la tasa de ganancia de esta estrategia es baja y carece de medidas de gestión de riesgos, por lo que necesita una mayor optimización y mejora. Al introducir filtros de tendencia, optimizar parámetros, agregar gestión de riesgos y combinar con otros métodos de análisis, se puede mejorar el rendimiento y la confiabilidad de esta estrategia.
/*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)