Vortex Indicator 构建交易策略

发布时间 2023-07-25 20:26:27作者: 数量技术宅

更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。

今天的文章,我们将为大家介绍一个与DMI(Directional Movement Index)类似,判断多空趋势的指标Vortex Indicator。DMI原本的概念为,计算一段周期内走势向上与向下的力度消长,判断多空强弱。而向上的力度在概念上使用今天高点与昨天高点的差值,若今天高点比昨天高点高越多,则表示向上力度比较强。向下的力度则相反。

Vortex Indicator的概念与DMI略有不同,向上力度的计算为使用今天的高点与昨天的低点差值的绝对值,向下力度的计算为使用今天的低点与昨天的低点差值的绝对值。

Vortex Indicator计算方式

1.用当日最高价减去前一日最低价取绝对值:VM+= AbsValue(High - Low[1])

2.用当日最低价减去前一日最高价取绝对值:VM- = AbsValue(Low - High[1])

3.将周期内的VM+加总:VMPlusSum = Summation(VM+,Length)

4.将周期内的VM-加总:VMMinusSum = Summation(VM-,Length)

5.将周期内每日的真实波动区间加总:TRSum = Summation(TrueRange,Length)

6.最后将VMPlusSum除以TRSum则可得+VM7.最后将VMMinusSum除以TRSum则可得-VM

Vortex Indicator多空判断

若+VM从下向上穿越-VM则目前市场趋势为多头

若-VM从下向上穿越-VM则目前市场趋势为空头

Vortex Indicator效果展示

计算方式在K线图上图标化的话很像涡旋(Vortex)的图案,因此取名为Vortex Indicator。

Vortex Indicator指标代码(MC版)

//Indicator:  Vortex

inputs:Length( 14 ) ;
variables:VMPlus( 0 ),VMMinus( 0 ),VMPlusSum( 0 ),VMMinusSum( 0 ),TR( 0 ),TRSum( 0 ),VIPlusSumRge( 0 ),VIMinusSumRge( 0 ),DX(0),ADXX(0);

VMPlus = AbsValue( High - Low[1] ) ;
VMMinus = AbsValue( Low - High[1] ) ;
VMPlusSum = Summation( VMPlus, Length ) ;
VMMinusSum = Summation( VMMinus, Length ) ;
TR = TrueRange ;
TRSum = Summation( TR, Length ) ;

if TRSum <> 0  then
 begin
 VIPlusSumRge = VMPlusSum / TRSum ;
 VIMinusSumRge = VMMinusSum / TRSum ;
 end ;

Plot1( VIPlusSumRge, "VI+Sum/Rge", Green ) ;
Plot2( VIMinusSumRge, "VI-Sum/Rge", Red ) ;

Vortex Indicator交易策略(MC版)

接下来使用Vortex指标回测一个顺势交易策略

1.+VM穿越-VM时判断为多头,突破穿越时的价格高点做多

2.-VM穿越+VM时判断为空头,突破穿越时的价格低点做空

3.多空反手,没有其它出场条件,一直在市

inputs:Length( 14 ); 
variables:VMPlus( 0 ),VMMinus( 0 ),VMPlusSum( 0 ),VMMinusSum( 0 ),TR( 0 ),TRSum( 0 ),
 VIPlusSumRge( 0 ),VIMinusSumRge( 0 ),SignalTradeNum( 0 ),BuySignal( false ),
 ShortSignal( false ),StopPrice( 0 ) ;

VMPlus = AbsValue( High - Low[1] ) ;
VMMinus = AbsValue( Low - High[1] ) ;
VMPlusSum = Summation( VMPlus, Length ) ;
VMMinusSum = Summation( VMMinus, Length ) ;
TR = TrueRange ;
TRSum = Summation( TR, Length ) ;

if TRSum <> 0  then
 begin
 VIPlusSumRge = VMPlusSum / TRSum ;
 VIMinusSumRge = VMMinusSum / TRSum ;
 end ;

if VIPlusSumRge crosses over VIMinusSumRge then
 begin
 SignalTradeNum = TotalTrades ;
 BuySignal = true ;
 ShortSignal = false ; 
 StopPrice = High ;
 end 
else if VIPlusSumRge crosses under VIMinusSumRge then
 begin
 SignalTradeNum = TotalTrades ;
 BuySignal = false ;
 ShortSignal = true ; 
 StopPrice = Low ;
 end ;

if BuySignal and TotalTrades = SignalTradeNum and MarketPosition <> 1 then
 Buy next bar StopPrice stop ;

if ShortSignal and TotalTrades = SignalTradeNum and MarketPosition <> -1 then
 SellShort next bar at StopPrice stop ;

以下是Vortex策略在K线上的交易信号示例

策略回测绩效(MC版)

策略在台湾指数期货60分钟K线的回测绩效:

策略在NYMEX轻原油120分钟K线的回测绩效: