この戦略は,ブレイクアウトと周波数フィルタリングに基づくトレンドフォロー戦略であり,ロングポジションのみを取ることである.戦略の主な考え方は,現在のトレンド方向を決定するためにEMA指標を使用し,価格が特定の範囲内の最高価格から突破するとロング信号を生成し,取引頻度を制御するために周波数フィルターを使用し,ポジションを頻繁に開かないようにする.戦略はリスクを制御するためにストップ・ロストポイントを設定し,トレンドが終了するとポジションを閉じる.
この戦略は,ブレイクアウトと周波数フィルタリングに基づくトレンドフォロー戦略である.トレンド方向を決定するためにEMA指標を使用し,価格ブレイクアウトをエントリー信号として使用し,トレード周波数を制御するために周波数フィルタを導入し,リスクを制御するためにストップロスを設定する.戦略の利点はトレンドフォロー,ブレイクアウト確認,周波数制御,ストップロスの保護,ダイナミックなポジション閉鎖にありますが,パラメータ敏感性,ブレイクアウト失敗,トレンド認識,頻繁な取引,ストップロスのリスクなどの潜在的なリスクもあります.戦略をさらに最適化するために,パラメータ最適化,シグナルフィルタリング,トレンド判断,ダイナミックストロスの管理,ポジション管理などの側面からスタートし,戦略の安定性と収益性を向上することができます.
/*backtest start: 2023-05-22 00:00:00 end: 2024-05-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Trend Following with Breakout and Frequency Filter (Long Only)", overlay=true) // 输入参数 emaLength = input.int(50, title="EMA长度") lookbackPeriodMin = input.int(80, title="最短回溯期") lookbackPeriodMax = input.int(120, title="最长回溯期") stopLossPct = input.float(2, title="止损百分比") / 100 // 止损百分比 minHoldBars = input.int(10, title="最小持仓K线数量") // 最小持仓K线数量 // 计算EMA ema = ta.ema(close, emaLength) // 计算最高价和最低价 highestHigh = ta.highest(high, lookbackPeriodMax) lowestLow = ta.lowest(low, lookbackPeriodMax) // 定义趋势方向 isBullish = close > ema // 定义突破信号 breakoutCondition = (ta.crossover(close, highestHigh[lookbackPeriodMin]) or ta.crossover(close, highestHigh[lookbackPeriodMax])) and isBullish // 计算止损点 stopLossLevelLong = close * (1 - stopLossPct) // 绘制EMA plot(ema, title="EMA", color=color.blue) // 记录上次开仓时间 var float lastEntryTime = na // 策略执行并标注信号 if (breakoutCondition and (na(lastEntryTime) or (time - lastEntryTime) > minHoldBars * timeframe.multiplier)) strategy.entry("做多", strategy.long) label.new(bar_index, high, text="买入", style=label.style_label_up, color=color.green, textcolor=color.white) strategy.exit("止损", from_entry="做多", stop=stopLossLevelLong) lastEntryTime := time // 定义趋势结束信号 exitCondition = close < ema if (exitCondition and (strategy.position_size > 0) and (time - lastEntryTime) > minHoldBars * timeframe.multiplier) strategy.close("做多") label.new(bar_index, low, text="卖出", style=label.style_label_down, color=color.red, textcolor=color.white)