
La stratégie est basée sur les signaux de forks et de dérives successifs de l’indicateur MACD. Lorsqu’il y a des signaux de forks successifs, des positions multiples sont ouvertes; lorsqu’il y a des signaux de dérives successifs, des positions vides sont ouvertes. La stratégie permet également aux utilisateurs de définir des points d’arrêt et de perte pour contrôler le risque.
Le cœur de la stratégie est d’utiliser les signaux de forks et de croix de l’indicateur MACD pour déterminer les points de basculement de la tendance du marché. L’indicateur MACD est composé de moyennes mobiles rapides (EMA) et moyennes mobiles lentes (EMA), qui forment des forks ou des croix de basculement lorsque les EMAs rapides se croisent avec les EMAs lentes. Des signaux de forks successifs indiquent que le marché pourrait entrer dans une tendance haussière, ouvrant ainsi des positions de plus de la tête; des signaux de croix de basculement successifs indiquent que le marché pourrait entrer dans une tendance baissière, ouvrant ainsi des positions de la tête vide.
La stratégie est basée sur des signaux MACD de fourches dorées et de fourches mortes successives pour traiter et tenter de capturer les points de basculement des tendances du marché. Elle est simple et facile à comprendre, peut suivre les principales tendances et offre des fonctions de contrôle des risques et de rétroaction flexible. Cependant, la performance de la stratégie peut être influencée par des facteurs tels que le choix des paramètres, le bruit du marché et les retards de tendance.
/*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)