这个策略的基本逻辑是:当市场的波动性(即价格区间)突然放大时,往往预示着新趋势的开始。我们用一个简单的指标来量化这种波动,并据此进行交易。
- 指标公式
这个策略只使用一个指标,我们称之为波动率因子 (Volatility Factor, VF)。
VF = ln(最高价 / 最低价) * 10
- 最高价:当前K线的最高价。
- 最低价:当前K线的最低价。
- ln:自然对数。ln(最高价/最低价) 本质上是计算当日价格的变化幅度(对数收益率的一种形式)。乘以10是为了放大这个值,使其更容易被观察到和用于触发信号。
这个值的含义:VF 值越大,表示当天的价格波动范围(从最高到最低)越大。
- 买入和卖出时机
这个策略需要一个波动性基准。我们假设如果当前的波动性超过了过去一段时间的平均水平,就可能发生“突破”。
策略规则(以做多为例):
- 计算基准波动率 (Benchmark Volatility):
- 计算过去N天(例如N=20)的VF值的简单移动平均(SMA)。我们称之为 VF_MA。
- VF_MA = SMA(VF, 20)
- 买入信号 (开仓信号):
- 如果当前K线的 VF > VF_MA * 系数K(例如K=1.5)
- 并且当前K线是阳线(收盘价 > 开盘价)
- 则在下一根K线开盘时 买入。
- 逻辑:波动性显著放大(超过平均水平的1.5倍)且价格收涨,表明可能开始了向上的突破行情。
- 卖出信号 (平仓信号):
买入后,设置一个目标盈利点和止损点。
- 止盈:当股价从买入价上涨达到 X% 时,卖出。例如 X = 5%。
- 止损:当股价从买入价下跌达到 Y% 时,坚决卖出止损。例如 Y = 3%。
- 补充条件:如果一直没达到止盈或止损,则在买入后的第M天(例如第5天)无条件卖出。
根据上述描述,我们来实现此策略:
第一步先定义波动率因子指标:
选择SPL公式,输出列名填VF,输出列类型选普通,表达式为ln(最高/最低)*10:
- SPL公式:ln()函数
函数说明:
计算一个数值的自然对数(以常数 e 为底的对数)。
函数语法:
ln(number)
参数说明:
number 数值类型
用法示例:
ln(100) //输出结果4.605170185988091
第二步定义买入信号列:
选择SPL公式,输出列名填VF_signal,输出列类型选信号,表达式为if(VF>VF[-20:-1].avg()*1.5 && 收盘>开盘,1,0)
第三步定义策略:买入信号列选VF_signal,买入价格选昨日收盘价,卖出信号列和卖出价格均不设(其意思是不按此操作),止盈幅度填5,止损幅度填3,最长持仓日填5,平仓缺省价格选昨日收盘价:
提交后可看到回测结果:
可以看到使用该策略,600690这只股票在2022年实现了盈利。
SPL量化工作台(临时)网址:http://stock.raqsoft.com.cn:8092/model.jsp
因股票信息量大,请在大屏幕电脑上使用浏览器操作,不合适小屏幕手机体验。
工作台首页:https://www.raqsoft.com.cn/wx/splqt.html (长期有效,临时网址变更时可从这里获取最新的)。
社区网址:https://c.raqsoft.com.cn/tag/QuantitativeTrading