
この戦略は,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)