
Strategi ini berdagang berdasarkan isyarat garpu emas dan garpu mati berturut-turut dalam indikator MACD. Apabila isyarat garpu emas berturut-turut muncul, buka kedudukan bermulut; Apabila isyarat garpu mati berturut-turut muncul, buka kedudukan bermulut. Pada masa yang sama, strategi ini membolehkan pengguna menetapkan titik berhenti dan titik berhenti untuk mengawal risiko.
Inti strategi ini adalah menggunakan isyarat garpu emas dan garpu mati dalam indikator MACD untuk menilai titik-titik perubahan trend pasaran. Indeks MACD terdiri daripada purata bergerak cepat (EMA) dan purata bergerak perlahan (EMA), yang membentuk garpu emas atau garpu mati apabila EMA cepat bercampur dengan EMA perlahan. Isyarat garpu emas berturut-turut menunjukkan bahawa pasaran mungkin memasuki trend naik, yang membuka posisi overhead; isyarat garpu mati berturut-turut menunjukkan bahawa pasaran mungkin memasuki trend menurun, yang membuka posisi overhead.
Strategi ini berdagang berdasarkan isyarat MACD Gold Fork dan Dead Fork yang berturut-turut, cuba menangkap titik-titik perubahan trend pasaran. Ia mudah difahami, dapat mengesan trend utama, dan menawarkan kawalan risiko dan fungsi pengesanan semula yang fleksibel. Walau bagaimanapun, prestasi strategi mungkin dipengaruhi oleh faktor-faktor seperti pilihan parameter, kebisingan pasaran dan kelewatan trend.
/*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)