
Chiến lược này được giao dịch dựa trên các tín hiệu liên tục của MACD. Khi có tín hiệu liên tục của MACD, mở nhiều vị trí đầu; Khi có tín hiệu liên tục của MACD, mở vị trí đầu. Đồng thời, chiến lược cho phép người dùng đặt điểm dừng và điểm dừng để kiểm soát rủi ro. Ngoài ra, chiến lược cũng cung cấp tùy chọn phạm vi thời gian đo lường lại để người dùng có thể đánh giá hiệu suất của chiến lược trong một khoảng thời gian nhất định.
Trung tâm của chiến lược này là sử dụng các tín hiệu của MACD để đánh giá các điểm chuyển hướng của xu hướng thị trường. MACD bao gồm các đường trung bình di chuyển nhanh (EMA) và đường trung bình di chuyển chậm (EMA), tạo thành các dấu hiệu giao dịch hoặc giao dịch khi EMA nhanh và EMA chậm giao nhau.
Chiến lược này dựa trên các tín hiệu MACD Gold Forks và Dead Forks liên tục để giao dịch, cố gắng nắm bắt các điểm biến của xu hướng thị trường. Nó đơn giản, dễ hiểu, có thể theo dõi các xu hướng chính và cung cấp các chức năng kiểm soát rủi ro và phản hồi linh hoạt. Tuy nhiên, hiệu suất của chiến lược có thể bị ảnh hưởng bởi các yếu tố như lựa chọn tham số, tiếng ồn thị trường và trì hoãn xu hướng.
/*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)