威廉姆斯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")