量化交易系统构建

量化交易系统构建

回测系统只是量化交易系统的一个部件。交易系统的设计应满足如下几个目标:

1,行情数据获取,并完成预处理。

2,自动选股(推荐股票)(根据用户需求与偏好)

3,自动控制仓位,优化股票池配置。

4,周期轮动。

5,可以灵活选择策略,并对其进行回测。

可靠,可扩展,实用性。

周期很重要,交易不像下棋,下棋的结果是确定的。交易不一样,如果拉到很长的周期可能是所有公司都会挂掉。但如果你只看1个月,看3个月,或更长时间,对于一支股票的评价就会完全不一样。

所以:

1,盈利目标 2,交易周期

3,交易模型 4,风险管理

回到第一性原理,交易就是低买高卖。那么,第一,交易什么?这里需要一个池子,先得看周期,比如短线,那至少觉得有一定概率一个月内会涨;如果中线,这个1个Q,长线则更长。这就是选股。

然后是择时,何时交易的问题。一个买入时间。二是退出(止盈或止损)

一些实用的小tip

import logging logging.basicConfig(level=logging.DEBUG, format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s) logger = logging.getLogger(__file__) if __name__ == __main__: logger.info(这是我的测试信息) #2017-12-26 09:53:15,520 logger.py[line:9] INFO 这是我的测试信息

停牌的数据如何处理

有时候,一些股票因为某些原因停牌,那数据里是没有对应交易日的数据,那回测如何处理呢?

按道理,应该是使用停牌前最后一个交易日的数据来填充。这样对处理市值,组合价值都没有影响。

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量化最前沿技术、资讯。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Proudly powered by WordPress | Theme: HoneyWaves by SpiceThemes