この戦略は,二層超トレンドチャネルを構築し,価格がチャネルを突破すると取引信号を生成する.また,適応効果のために価格変動を使用してチャネル幅を調整する.これはトレンドフォロー戦略に属する.
価格標準偏差と波動性ATRを計算し,波動性を使ってチャネル幅を調整する.
内部層がより敏感で 外層がより安定した 双層超トレンドチャネルを構築します
価格がチャネル内側や外側を突破すると 買い/売るシグナルを生成します
ダブルチャネル構造は 偽の突破を フィルタリングするのに役立ちます
ATR波動性はチャネル幅を調整し,波動性が上昇するとより広く適応効果をもたらす.
スーパートレンドチャネルは 傾向を追跡するのに シンプルで効果的です
ダブルチャネルは 偽信号をフィルタリングし 信号の質を向上させます
変動に適応した調整により チャンネルは異なる市場環境に適しています
シンプルなパラメータ調整で簡単に実装できます
視覚化されたチャネルとブレイクアウトは 直感的な取引信号を形成します
ブレイクシグナルが誤った信号を出し,不必要な損失を起こす可能性があります.
トレンド方向や トレンド逆の取引のリスクを 判定できないのです
適応調整は過度に敏感で 過剰な調整で
パラメータの最適化が不適切なら オーバーフィッティングになります
トレンドフォロー戦略として レンジ・バインド市場では 苦戦しています
試験パラメータ
主な傾向を特定するために MA を組み込む.
偽の突破を防ぐために 突破の確認を最適化します
ストップ・ロスは,トレード毎の損失制限に追加します.
取引の頻度でチャンネル調整を評価する.
マシン学習を使って パーマータを動的に最適化します
この戦略は,価格トレンドを把握するために適応性のあるダブルスーパートレンドチャネルを使用する.トレンドを追跡する方法はシンプルで直感的です.しかし,リスクには誤ったブレイクアウトと誤ったトレンド方向が含まれます.さらなるパラメータチューニングと補完メカニズムは戦略のパフォーマンスを向上させ,強力なトレンドフォローシステムになります.
/*backtest start: 2023-08-20 00:00:00 end: 2023-09-19 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("SuperTrend Cloud Strategy", shorttitle="SuperTrend Cloud Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital = 1000) //Inputs multi = input(title="Multiplier", type=input.float, step=0.1, defval=3, minval=1) period = input(title="Period", type=input.integer, step=1, defval=10, minval=1) SelfAdjust = input(title="Self-Adjusting", type=input.bool, defval = false) //////////////////////////////////////////////////////////////////////////////// // BACKTESTING RANGE // From Date Inputs fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2019, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2020, title = "To Year", minval = 1970) // Calculate start/end date and time condition startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true //////////////////////////////////////////////////////////////////////////////// dev = stdev(close, period) stdDev = (dev / close) * 100 + 1 MultDev = SelfAdjust ? multi * stdDev : multi up_lev1 = hl2 - MultDev * atr(period) dn_lev1 = hl2 + MultDev * atr(period) up_lev2 = hl2 - (MultDev * 2 * atr(period)) dn_lev2 = hl2 + (MultDev * 2 * atr(period)) up_trend1 = 0.0 up_trend1 := close[1] > up_trend1[1] ? max(up_lev1, up_trend1[1]) : up_lev1 up_trend2 = 0.0 up_trend2 := close[1] > up_trend2[1] ? max(up_lev2, up_trend2[1]) : up_lev2 down_trend1 = 0.0 down_trend1 := close[1] < down_trend1[1] ? min(dn_lev1, down_trend1[1]) : dn_lev1 down_trend2 = 0.0 down_trend2 := close[1] < down_trend2[1] ? min(dn_lev2, down_trend2[1]) : dn_lev2 trend1 = 0 trend1 := close > down_trend1[1] ? 1: close < up_trend1[1] ? -1 : nz(trend1[1], 1) trend2 = 0 trend2 := close > down_trend2[1] ? 1: close < up_trend2[1] ? -1 : nz(trend2[1], 1) st_line1 = trend1 == 1 ? up_trend1 : down_trend1 st_line2 = trend2 == 1 ? up_trend2 : down_trend2 // Plotting plot1 = plot(st_line1, color = trend1 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 1") plot2 = plot(st_line2, color = trend2 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 2") fill(plot1, plot2, color = color.aqua, title = "Cloud") buy = crossover(close, st_line1) and close > st_line2 or crossover(close, st_line2) and close > st_line1 sell = crossunder(close, st_line1) and close < st_line2 or crossunder(close, st_line2) and close < st_line1 if(buy and time_cond) strategy.entry("long", long = true , comment="long") if (close < st_line1 and time_cond or close < st_line2 and time_cond) strategy.close("long") if (not time_cond) strategy.close_all()