この戦略は,スミアード・バリエビリティ・チャネル・インデックス (Smeared VCI) 指標をベースにバイトロットで取引するトレンドフォロー戦略である.これは移動平均値のトレンド判断とVCIのオーバーバイト/オーバーセール判断を組み合わせて,価格の主なトレンド方向を把握する.価格がオーバーバイトまたはオーバーセール状態に入ると,逆演操作が利益を得るために取られる.
この戦略は,トレンド方向を決定するためにvitelot
戦略には2つの条件があります.
トリガー線上を横断する VCI は長い信号で 下を横断する VCI は短い信号です
バックテストの時間枠内でのみ取引する
両方の条件が満たされると,ロングまたはショートポジションが取られ,ストップ・ロスは起動または逆信号が表示されます.
この戦略の利点は次のとおりです.
トレンドフォローインジケーターを使って トレンドを効果的に追跡できます
滑らかなプロセスは 誤った信号を減らす
バックテストは 特定の期間を中心に行われます
ストップ損失セットはリスクを制御します
長期/短期決定の指標パラメータを使うことで ルールが単純で明確になります
この戦略にはいくつかのリスクもあります:
トレンド判断は誤りになり 損失につながるかもしれません
指標パラメータの設定が不適切である場合,収益性が低下する可能性があります.
ストップ・ロスの設定が小さすぎると,すぐにストップアウトする可能性があります.
バックテストの不適切な時間窓は,偏ったテスト結果につながる可能性があります.
頻繁に長時間/短時間切換すると,圧力が発生する可能性があります.
戦略は以下の側面で最適化できます.
最適なパラメータを見つけるために異なるパラメータの組み合わせをテストします.
精度を高めるため,他の指標で確認します.
ストップ損失アルゴリズムを最適化して ダイナミックなストップ損失を達成する
過剰取引を避けるために 入場条件を最適化する.
安定性を確認するために 長い時間窓をテストします
意思決定の正確性を向上させるため 音量などの他の要素を組み込む
トレンドフォロー戦略は,トレンドシグナルが生成されたときにトレンド方向とオープンポジションを決定するために Smeared VCI インディケーターを使用する.リスクはストップ損失によって制御される.戦略にはトレンドフォロー能力があるが,いくつかのリスクもあります.パラメータ最適化,ストップ損失最適化,確認条件を追加することで,安定した信頼性の高い取引システムにするためにさらなる改善ができます.
/*backtest start: 2023-10-15 00:00:00 end: 2023-11-14 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Smeared VCI Backtest", overlay=false, shorttitle="SVCI Backtest", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 10000, slippage = 5) // Smeared Variability Channel Index // a variation of the VCI indicator of the same author. // The orange line over the lime line is bullish; // The lime line over the orange one is bearish. // // vitelot/yanez/Vts // Feb 2019 // src = close ep1 = input(5, minval=1, title="Fast EMA period") ep2 = input(13, minval=2, title="Slow EMA period") sm = input(34, minval=1, title="Smearing period") tp = input(13, minval=1, title="Trigger line period") fixedSL = input(title="SL Activation", defval=300) trailSL = input(title="SL Trigger", defval=1) fixedTP = input(title="TP Activation", defval=150) trailTP = input(title="TP Trigger", defval=1) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2019, title = "From Year", minval = 2017) ToMonth = input(defval = 6, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 19, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2030, title = "To Year", minval = 2017) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window startTimeOk() => time >= start and time <= finish ? true : false // create function "within window of time" if statement true atrP = 96 e1 = ema(src,ep1) e2 = ema(src,ep2) vci = (e1-e2)/atr(atrP) svci = sma(vci,sm) t = sma(svci,tp) plot(svci, color=lime, linewidth=3, transp=0, title="Smeared VCI") plot(t, color=orange, linewidth=3, transp=0, title="Trigger line") hline(0, title="Reference line") long = crossover(svci,t) short = crossover(t,svci) // === STRATEGY - LONG POSITION EXECUTION === strategy.entry("Long", strategy.long, when= long and startTimeOk()) strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) strategy.exit("Exit", when= short) // === STRATEGY - SHORT POSITION EXECUTION === strategy.entry("Short", strategy.short, when= short and startTimeOk()) strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) strategy.exit("Exit", when= long)