Esta estratégia é baseada nos sinais de cruz de ouro e cruz de morte consecutivos do indicador MACD para negociação. Quando os sinais de cruz de ouro consecutivos aparecem, abre uma posição longa; quando os sinais de cruz de morte consecutivos aparecem, abre uma posição curta. Ao mesmo tempo, a estratégia permite aos usuários definir níveis de take-profit e stop-loss para controlar o risco. Além disso, a estratégia fornece a opção de selecionar o intervalo de tempo de backtest, permitindo aos usuários avaliar o desempenho da estratégia dentro de um período de tempo especificado.
O núcleo desta estratégia é usar os sinais de cruz de ouro e cruz de morte do indicador MACD para determinar os pontos de virada das tendências do mercado. O indicador MACD consiste em uma média móvel rápida (EMA) e uma média móvel lenta (EMA). Quando a EMA rápida cruza a EMA lenta, ela forma uma cruz de ouro ou sinal de cruz de morte.
Esta estratégia opera com base em sinais MACD consecutivos de cruz de ouro e cruz de morte, tentando capturar pontos de virada nas tendências do mercado. É simples e fácil de entender, pode rastrear as principais tendências e fornece controle de risco e capacidades de backtesting flexíveis. No entanto, o desempenho da estratégia pode ser influenciado por fatores como seleção de parâmetros, ruído do mercado e atraso da tendência. Para melhorar ainda mais, pode-se considerar combiná-lo com outros indicadores, otimizar parâmetros, introduzir take-profit dinâmico e stop-loss e gerenciamento de posição.
/*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 strategy("连续MACD交叉和回测范围") //策略初始化時間設置 useDateFilter = input.bool(true, title="启用时间回测范围", group="回测范围") backtestStartDate = input(timestamp("1 Jan 2023"), title="开始时间", group="回测范围") backtestEndDate = input(timestamp("1 Jan 2024"), title="结束时间", group="回测范围") inTradeWindow = true // 定义MACD指标参数 fastLength = input.int(12, "快速EMA周期") slowLength = input.int(26, "慢速EMA周期") signalSmoothing = input.int(9, "信号线平滑周期") long_win = input.float(defval = 0.01,title = "多单止盈设置", tooltip = "0.01代表1%" ) long_lose= input.float(0.01,"多单止损设置") short_win = input.float(0.01,"空单止盈设置") short_lose = input.float(0.01,"空单止损设置") // 计算MACD值 [macdLine, signalLine, _] = ta.macd(close, fastLength, slowLength, signalSmoothing) // 定义金叉和死叉的条件 crossUp = ta.crossover(macdLine, signalLine) crossDown = ta.crossunder(macdLine, signalLine) // 使用历史状态记录上一次交叉情况 var lastCrossUp = false var lastCrossDown = false // 更新历史状态 if crossUp lastCrossUp := true else if crossDown lastCrossUp := false if crossDown lastCrossDown := true else if crossUp lastCrossDown := false // 交易执行逻辑:检查是否存在连续的金叉或死叉 if lastCrossUp and crossUp and inTradeWindow strategy.entry("买入开多", strategy.long) strategy.exit("买入止盈止损", "买入开多", limit=close * (1 + long_win), stop=close * (1 - long_lose)) if lastCrossDown and crossDown and inTradeWindow strategy.entry("卖出开空", strategy.short) strategy.exit("卖出止盈止损", "卖出开空", limit=close * (1 - short_win), stop=close * (1 + short_lose)) // 显示MACD线和信号线 plot(macdLine, "MACD线", color=color.blue) plot(signalLine, "信号线", color=color.orange)