
A estratégia é baseada em sinais de forquilhas de ouro e de forquilhas mortas em sequência do MACD. Quando ocorrem sinais de forquilhas de ouro em sequência, é aberto um posicionamento de multi-cabeça; Quando ocorrem sinais de forquilhas mortas em sequência, é aberto um posicionamento de cabeça vazia. Ao mesmo tempo, a estratégia permite que o usuário configure um stop loss e um stop loss para controlar o risco.
O núcleo da estratégia é usar os sinais de forcas e mortes do indicador MACD para julgar os pontos de inflexão da tendência do mercado. O indicador MACD é composto por uma média móvel rápida (EMA) e uma média móvel lenta (EMA), que formam um sinal de forcas ou mortes quando o EMA rápido se cruza com o EMA lento.
A estratégia baseia-se em uma sequência de sinais MACD Gold Fork e Dead Fork para negociar, tentando capturar os pontos de inflexão das tendências do mercado. É simples e fácil de entender, pode acompanhar as principais tendências e oferece controle de risco e funções de retrocesso flexíveis. No entanto, o desempenho da estratégia pode ser afetado por fatores como a escolha de parâmetros, ruído do mercado e atraso de tendências.
/*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)