
이 전략은 MACD 지표의 연속 금포크와 데드포크 신호를 기반으로 거래한다. 연속 금포크 신호가 발생했을 때, 다중 포지션을 열고, 연속 데드포크 신호가 발생했을 때, 공백 포지션을 열는다. 동시에, 이 전략은 사용자가 위험을 제어하기 위해 스톱포크와 스톱로스 포지션을 설정할 수 있도록 한다. 또한, 이 전략은 재측정 시간 범위를 선택하여 사용자가 지정된 시간 동안 전략의 성능을 평가할 수 있도록 한다.
이 전략의 핵심은 MACD 지표의 골드 포크와 덤불 신호를 사용하여 시장 추세의 전환점을 판단하는 것이다. MACD 지표는 빠른 이동 평균 ((EMA) 와 느린 이동 평균 ((EMA) 로 구성되어 있으며, 빠른 EMA와 느린 EMA가 교차할 때 골드 포크 또는 덤불 신호를 형성한다. 연속적인 골드 포크 신호는 시장이 상승 추세에 진입할 수 있음을 나타내고, 이 때 상위 포지션을 열고, 연속적인 덤불 신호는 시장이 하향 추세에 진입할 수 있음을 나타내고, 이 때 상위 포지션을 열고 있다.
이 전략은 연속적인 MACD 골드 포크와 데드 포크 신호를 기반으로 거래하며 시장 추세의 전환점을 포착하려고합니다. 그것은 간단하고 이해하기 쉽고 주요 추세를 추적할 수 있으며 위험 제어 및 유연한 재검토 기능을 제공합니다. 그러나 전략의 성과는 파라미터 선택, 시장 소음 및 추세 지연과 같은 요인에 의해 영향을받을 수 있습니다.
/*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)