이 전략은 거래를 위해 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)