
A estratégia usa o cruzamento da linha DIF e da linha DEA no MACD para gerar um sinal de negociação. Quando a linha DIF atravessa a linha DEA de baixo para cima, gera um sinal de multiplicação; Quando a linha DIF atravessa a linha DEA de cima para baixo, gera um sinal de paralisação. Os resultados de retrospectiva da estratégia mostram uma taxa de vitória de cerca de 40% no par de negociação BTCUSDT, com uma taxa de retorno anual de 1.05, mas que leva a um aumento contínuo no número de ativos mantidos e, portanto, não pode ser usado como uma estratégia de arbitragem independente.
A estratégia MACD Gold Fork Dead Fork é uma estratégia de negociação simples e fácil de entender, adequada para mercados em tendência. No entanto, a estratégia tem baixa taxa de vitória e falta de medidas de gerenciamento de risco, portanto, precisa de mais otimização e aperfeiçoamento. A introdução de filtros de tendência, parâmetros de otimização, inclusão de gerenciamento de risco e combinação com outros métodos de análise podem melhorar o desempenho e a confiabilidade da estratégia.
/*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)