量化交易系统构建
回测系统只是量化交易系统的一个部件。交易系统的设计应满足如下几个目标:
1,行情数据获取,并完成预处理。
2,自动选股(推荐股票)(根据用户需求与偏好)
3,自动控制仓位,优化股票池配置。
4,周期轮动。
5,可以灵活选择策略,并对其进行回测。
可靠,可扩展,实用性。
周期很重要,交易不像下棋,下棋的结果是确定的。交易不一样,如果拉到很长的周期可能是所有公司都会挂掉。但如果你只看1个月,看3个月,或更长时间,对于一支股票的评价就会完全不一样。
所以:
1,盈利目标 2,交易周期
3,交易模型 4,风险管理
回到第一性原理,交易就是低买高卖。那么,第一,交易什么?这里需要一个池子,先得看周期,比如短线,那至少觉得有一定概率一个月内会涨;如果中线,这个1个Q,长线则更长。这就是选股。
然后是择时,何时交易的问题。一个买入时间。二是退出(止盈或止损)
一些实用的小tip
停牌的数据如何处理
有时候,一些股票因为某些原因停牌,那数据里是没有对应交易日的数据,那回测如何处理呢?
按道理,应该是使用停牌前最后一个交易日的数据来填充。这样对处理市值,组合价值都没有影响。
def update_bars(self):
dt = self._get_trading_day()
if dt is None:
return False
#这里查出当天的universe里的列表[{},{}]
bar_dict = {}
daily_datas = data_utils.get_prices_by_date(dt,self.universe)
for data in daily_datas:
code = data[code]
self.barlist_dict[code].append(data)
bar_dict[code] = data
if len(daily_datas) == len(self.universe):
logger.debug(onbar数据与universe相同)
else:
for symbol in self.universe:
if symbol not in bar_dict.keys():
logger.warning(onbar数据与universe不同,可能有些symbol:%s停牌,未返回数据 % (symbol))
bar_dict[symbol] = self.bar_dict[symbol]#用上一期的数据 self.barlist_dict[symbol].append(self.barlist_dict[symbol][-1])#用上一期的数据
bar_dict[date] = dt
self.bar_dict = bar_dict
self.update_index_prices(dt)
self.events.put(BarEvent(bar_dict))
return True关于作者:魏佳斌,互联网产品/技术总监,北京大学光华管理学院(MBA),特许金融分析师(CFA),资深产品经理/码农。偏爱python,深度关注互联网趋势,人工智能,AI金融量化。致力于使用最前沿的认知技术去理解这个复杂的世界。
扫描下方二维码,关注:AI量化实验室(ailabx),了解AI量化最前沿技术、资讯。
发表回复