Open kingofhawks opened 8 years ago
zipline pyalgotrade vn.py
ricequant
取数据,策略,下单API,回测,plot 下单时需要考虑涨跌停、停牌退市等情况,拆分与股息
Alpha(阿尔法)、Beta(贝塔)、Sharpe(夏普比率)、Max Drawdown(最大回撤)
策略接口主要实现: initialize
initialize(context) 初始化方法,在整个回测、模拟实盘中最开始执行一次,用于初始一些全局变量
参数 context: UserContext对象, 存放有当前的账户/股票持仓信息
返回 None
示例
def initialize(context):
g.security = "000001.XSHE"
pass
handle_data
handle_data(context, data) 该函数每个单位时间会调用一次, 如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次
参数 context: UserContext对象, 存放有当前的账户/股票持仓信息 data: 一个字典(dict), key是股票代码, value是当时的SecurityUnitData 对象. 存放前一个单位时间(按天回测, 是前一天, 按分钟回测, 则是前一分钟) 的数据. 注意:
为了加速, data 里面的数据是按需获取的, 每次 handle_data 被调用时, data 是空的 dict, 当你使用 data[security] 时该 security 的数据才会被获取. data 只在这一个时间点有效, 请不要存起来到下一个 handle_data 再用 返回 None
示例
def handle_data(context, data): order("000001.XSHE",100) pass
回测过程
准备好您的策略, 选择要操作的股票池, 实现handle_data函数 选定一个回测开始和结束日期, 选择初始资金、调仓间隔(每天还是每分钟), 开始回测 引擎根据您选择的股票池和日期, 取得股票数据, 然后每一天或者每一分钟调用一次您的handle_data函数, 同时告诉您现金、持仓情况和股票在上一天或者分钟的数据. 在此函数中, 您还可以调用函数获取任何多天的历史数据, 然后做出调仓决定. 当您下单后, 我们会根据接下来时间的实际交易情况, 处理您的订单. 具体细节参见订单处理 下单后您可以调用get_open_orders取得所有未完成的订单, 调用cancel_order取消订单 您可以在handle_data里面调用record()函数记录某些数据, 我们会以图表的方式显示在回测结果页面 您可以在任何时候调用log.info/debug/warn/error函数来打印一些日志 回测结束后我们会画出您的收益和基准(参见set_benchmark)收益的曲线, 列出每日持仓,每日交易和一系列风险数据。
订单处理
对于您在某个单位时间下的单, 我们会做如下处理:
如果是按天回测 市价单: 交易价格是当天开盘价, 全部成交, 无滑点. 例外: 如果当天交易量(注意: 模拟时是集合竞价交易量)为0, 则订单无效. 限价单: 我们会根据当天每一分钟的市场实际成交记录来处理订单. 从开盘开始, 每一分钟, 如果成交价格满足限价条件, 则(部分)成交, 成交量不超过这一分钟的实际交易量. 剩余订单顺延到下一分钟, 直到全部成交或者当天结束为止. 当天结束后, 剩余订单会被取消. 整个过程无滑点. 如果是按分钟回测 市价单: 交易价格是这一分钟开始的价格, 全部成交, 有滑点. 例外: 如果这一分钟交易量为0, 则订单无效. 限价单: 和按天回测一样, 从现在开始, 依次按分钟成交. 无滑点. 上述过程中, 如果实际价格已经涨停或者跌停, 则相对应的买单或卖单不成交, 市价单直接取消(log中有警告信息), 限价单会挂单直到可以成交. 一天结束后, 所有未完成的订单会被取消 每次订单完成(完全成交)或者取消后, 我们会根据成交量计算手续费(参见set_commission), 减少您的现金 更多细节, 请看order函数
拆分合并和分红
当股票发生拆分,合并或者分红时,股票价格会受到影响,为了保证价格的连续性, 我们使用前复权来处理之前的股票价格,给您的所有股票价格已经是前复权的价格。
根据算法自动交易