
この策略は,vitelotのSmeared Variable Channel Index (Smeared VCI) 指標をベースに取引するトレンド追跡策である.この策略は,移動平均のトレンド判断と,変動チャネル指数の超買超売判断を組み合わせて,価格の主なトレンド方向を捕捉する.価格走行が超買または超売状態に突入したとき,反転操作を行って利益を得る.
この戦略は,vitelotのSmeared VCI指標を使用してトレンドの方向を判断する.Smeared VCI指標は,変数通路指数 (VCI) に基づいて平滑処理が行われている.それは,急速EMA,遅いEMA,および滑動周期の3つのパラメータで構成されている.急速EMAが遅いEMAよりも高いときは,看板であり,そうでなければ,下向きである.平滑処理を加えた後,部分的なノイズをフィルターすることができます.
戦略には2つの条件があります.
Smeared VCI 上はTrigger線を介して多信号; 下は空白信号
返信時間枠内での取引のみ
2つの条件が同時に満たされると,多行または空行操作を行う.平行条件が止損または逆行シグナルが発生したときに平行する.
この戦略の利点は以下の通りです.
トレンド追跡型の指標を用いて,トレンドを効果的に追跡できます.
滑らかな処理を加えることで,偽信号を減らすことができます.
タイムウィンドウの反省を使用して,特定の時間帯の状況に対してテストを行う
ストップポイントを設定し,リスクをコントロールします.
指数パラメータを用いて多空判断し,規則は単純明快である.
この戦略にはいくつかのリスクがあります.
トレンド判断の誤りで損失を招く可能性
指数パラメータの設定が不適切である場合,収益が不良になる可能性があります.
ストップポイントの設定が小さすぎると,小ストップが発生します.
反射時間窓が不合理であるため,テスト結果の偏差が起こり得る
多空間のスイッチが頻繁すぎると,取引費用のプレッシャーが生じます.
この戦略は以下の点で最適化できます.
異なるパラメータの組み合わせをテストし,最適なパラメータを探します.
他の指標を活用して 判断を補完し 精度を向上させる
止損アルゴリズムを最適化し,止損を動的に追跡する
ポジション開設条件を最適化して,頻繁に取引を避ける
戦略の安定性を検証するより長い時間ウィンドウをテストする
取引量などの他の要因と組み合わせて,意思決定の正確性を向上させる
この戦略は,全体として比較的単純なトレンド追跡戦略である.これは,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)