最近,群里又在传着一份据说是量化侠写的“高开卖低开买”策略的代码,JQ官方也在推,称量化侠“数据挖掘揭秘最深A股套路“,因为以前也曾批过一次这样的论调:《我的低开买高开卖》。一时兴起,研究了一下其代码,验证了一下这个思想的可行性。
量化侠原版之漏洞¶
量化侠原版里,有如下两条语句,测试一下:
g.today = context.current_dt.strftime('%Y-%m-%d')
g.start = context.current_dt + datetime.timedelta(-2)
dToday = datetime.datetime(2016,1,4)
dStart = dToday + datetime.timedelta(-2)
dStart.strftime('%Y-%m-%d')
在建仓操作的时候,有如下语句:
# B0、取得最近几天股票价格信息
grid = get_price(stock, start_date=g.start, end_date=g.today, \
fields=['open', 'high', 'low', 'close', 'low_limit', 'paused'])
# B1、今日低开(即:今开<昨低)、今日未跌停则买入
if len(grid) > 1 and grid.low[-2] > grid.open[-1] and grid.open[-1] > grid.low_limit[-1]:
order(stock, int(assign/grid.open[-1]))
测试一下:
stock = '300176.XSHE'
grid = get_price(stock, start_date=dStart, end_date=dToday, \
fields=['open', 'high', 'low', 'close', 'low_limit', 'paused'])
grid
2016-1-2至2016-1-4,只有一行数据,于是 len(grid)>1
这一条件不满足,就不买入了!
而事实上300176.XSHE上一个交易日2015-12-31的最低价是29.17,2016-1-4的开盘价是29.00,也没有开盘跌停,按逻辑应该买入,却仅仅因为没有取到上一个交易日的数据而导致len(grid)是1,侥幸逃过了2016年1月4日的熔断!
要确保能取到上一个交易日的数据,只需要轻轻地改变一下g.start的写法:
g.start = context.previous_date