
ウィリアムズVIX修正策略は,ブリン軌道,パーセンテージ区間,価格動量特征などの複数の技術指標と組み合わせたCBOE変動率指数VIXの修正値を計算することによって,VIX逆転の判断と取引シグナル生成を実現します.この策略は,VIX指数過度の逆転現象を捕捉し,超買い超売り状況で逆市操作を行うことを目的としています.
この戦略の核心的な論理は以下の通りです.
ウィリアムズVIX修正値 ((wvf) を計算し,VIXの変動を公式で捉える.
ブリン帯の計算パラメータを設定して,VIX指数の中軌,上軌,下軌を得る.
百分区間パラメータを設定して,VIXインデックスの歴史百分区間を取得します.
repaired 変数を使用して,VIX が逆転点にあるかどうかを判断する. repair が真である場合は,VIX が前期に超買いまたは超売り状態にあり,現在逆転点にあることを示します.
価格の突破性 (upRange,upRange_Aggr) をさらに組み合わせてトレンドの特徴を判断する.
最終的には,ブリン帯,パーセント区間,価格特征などの複数の条件を統合して,取引信号を生成することを判断する.
この戦略は,VIXの平均値回帰特性を充分活用し,複数のパラメータを設定して,その反転の機会を捕捉する.戦略の論理は明確で信頼性があり,超買超売の機会を効果的に識別できる.
この戦略には以下の利点があります.
市場が非常に不確実な状況にあるときに,VIXの逆転特性を利用して利益を得ることができます.
複数の技術指標を組み合わせたフィルターで,逆転の機会を効果的に識別できます.
戦略のパラメータは調整可能で,異なる市場環境に対応して最適化できます.
シンプルで理解しやすく,修正しやすく,リリカルなディスクに適しています.
オープンソースのアイデアを最大限に活用し,他の戦略の組み合わせで簡単に使用できます.
戦略は市場関連性が低いので,ポートフォリオのヘッジ部分として使用できます.
逆転しない取引を最小限に抑え,非逆転の機会をフィルターします.
取引頻度は適度で,出入入は頻繁ではない.
この戦略にはいくつかのリスクがあります.
VIX指数自体にはデータの問題があり,戦略のパフォーマンスに影響する可能性がある.
逆転取引には損失のリスクがあり,逆転が起こらなければ損失が増加する.
複数のパラメータ設定により,パラメータ最適化は複雑である.
逆転のタイミングを把握できなければ,取引が失敗する.
取引の頻度を減らすことで,機会を逃すこともあります.
ブリン帯と百分位帯の誤報の問題がある.
価格破綻の判断は策略を無効にします.
主なリスクは以下の方法で軽減できます.
パーメータを最適化して,反転認識をより正確にする.
適切な長期保持期間を延長し,逆転を確実にする.
誤報を避けるために,より多くの指標を組み合わせて検証してください.
ポジション開設条件を調整し,無効取引を減らす.
損失を抑えるため,ストップを増加させる.
この戦略は以下の方向から最適化できます.
ブリン帯とパーセンテージのパラメータを最適化し,反転認識の精度を向上させる.
価格動力の判断指標を多く追加し,トレンド認識の誤りを回避する.
ポジション開設条件の調整により,取引効率が向上する.
リスクの管理のための様々なストップ・モードを設定します.
VIX期貨主連續契約と併合して,套期保值を行う.
異なる市場環境に応じてパラメータを調整し,戦略をより適応的にします.
機械学習モデルを導入し,逆転のタイミングを判断する.
他のAlphaと組み合わせて,全体的な収益率を上げます.
量化方法と組み合わせたパラメータを自動最適化する.
設定範囲停止と追跡停止
ウィリアムズVIX修正策は,VIX指数の逆転特性を捉え,市場パニック時に逆操作を行うことで,典型的ヘッジアップ策である.この策は,様々な指標の優位性を集めて,パラメータを介して制御可能なリスクを設定する.パラメータを適切に最適化すれば,より良いリスク調整リターンを得る.しかし,取引頻度はあまりにも高くならないようにし,リスクを制御することが必要である.全体的に,この策の論理は明確で,オープンソースの戦略を使用する考えは,現場で使用できるVIX取引策である.
/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-13 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "CM Vix V3 Strategy ",shorttitle="Vix3", overlay = true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100,commission_type=strategy.commission.percent,commission_value=0.1,initial_capital=100000)
pd = input(22, title="LookBack Period Standard Deviation High")
bbl = input(20, title="Bolinger Band Length")
mult = input(2.0 , minval=1, maxval=5, title="Bollinger Band Standard Devaition Up")
lb = input(50 , title="Look Back Period Percentile High")
ph = input(.85, title="Highest Percentile - 0.90=90%, 0.95=95%, 0.99=99%")
ltLB = input(40, minval=25, maxval=99, title="Long-Term Look Back Current Bar Has To Close Below This Value OR Medium Term--Default=40")
mtLB = input(14, minval=10, maxval=20, title="Medium-Term Look Back Current Bar Has To Close Below This Value OR Long Term--Default=14")
str = input(3, minval=1, maxval=9, title="Entry Price Action Strength--Close > X Bars Back---Default=3")
//Williams Vix Fix Formula
wvf = ((highest(close, pd)-low)/(highest(close, pd)))*100
sDev = mult * stdev(wvf, bbl)
midLine = sma(wvf, bbl)
lowerBand = midLine - sDev
upperBand = midLine + sDev
rangeHigh = (highest(wvf, lb)) * ph
//Filtered Bar Criteria
upRange = low > low[1] and close > high[1]
upRange_Aggr = close > close[1] and close > open[1]
//Filtered Criteria
filtered = ((wvf[1] >= upperBand[1] or wvf[1] >= rangeHigh[1]) and (wvf < upperBand and wvf < rangeHigh))
filtered_Aggr = (wvf[1] >= upperBand[1] or wvf[1] >= rangeHigh[1]) and not (wvf < upperBand and wvf < rangeHigh)
//Alerts Criteria
alert1 = wvf >= upperBand or wvf >= rangeHigh ? 1 : 0
alert2 = (wvf[1] >= upperBand[1] or wvf[1] >= rangeHigh[1]) and (wvf < upperBand and wvf < rangeHigh) ? 1 : 0
alert3 = upRange and close > close[str] and (close < close[ltLB] or close < close[mtLB]) and filtered ? 1 : 0
alert4 = upRange_Aggr and close > close[str] and (close < close[ltLB] or close < close[mtLB]) and filtered_Aggr ? 1 : 0
//Coloring Criteria of Williams Vix Fix
col = wvf >= upperBand or wvf >= rangeHigh ? lime : gray
//Plots for Williams Vix Fix Histogram and Alerts
longCond=alert3
shortCond = alert2
monthfrom =input(8)
monthuntil =input(12)
dayfrom=input(1)
dayuntil=input(31)
if ( longCond and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil)
strategy.entry("LONG", strategy.long, stop=close, oca_name="TREND", comment="LONG")
else
strategy.cancel(id="LONG")
if ( shortCond and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil )
strategy.entry("SHORT", strategy.short,stop=close, oca_name="TREND", comment="SHORT")
else
strategy.cancel(id="SHORT")