优矿API实现一个双均线策略


虽然关注了优矿很久,但几个月没碰,感觉都忘了差不多。做笔记还是有必要的。


· 调用数据

a=DataAPI.IdxConsGet(secID=u"",ticker=u"000300",intoDate=u"20160414",isNew=u"",field=u"",pandas="1")
a.to_csv("data1.csv",encoding='GBK')

在数据的地方找自己想要的数据,两条代码就可以保存。

然后在data的地方下载下来。


虽然wind也好,更全。不过windpy实在无力吐槽,真要扒数据,还是用wind的excel插件友好下载又快。


· quartz回测系统

start = '2014-01-01'                       # 回测起始时间
end = '2016-04-14'                         # 回测结束时间
benchmark = 'SH50'                        # 策略参考标准
universe = ['510050.XSHG']  # 证券池,支持股票和基金
capital_base = 100000                      # 起始资金
freq = 'd'                                 # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测
refresh_rate = 1                           # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟

def initialize(account):                   # 初始化虚拟账户状态
    pass

def handle_data(account):                  # 每个交易日的买入卖出指令
    hist=account.get_attribute_history('closePrice',30)
    for stk in account.universe:
        ma5=hist[stk][-5:].mean()
        ma30=hist[stk][:].mean()
        
        if ma5>ma30:
            order(stk,1000)
        elif ma5<=ma30 and stk in account.avail_secpos:
            order_to(stk,0)
            

这边写了一个最简单的双均线的策略。

前面设置一堆参数,最重要的就是universe也就是证券池。


initialize函数可以不用管

主要的策略都在handle_data。account是这个回测平台封装的class。


account.get_attribute_history         获得历史数据

account.avail_secpos                     有效证券池,也就是已经买了这个证券了

order(stk,1000)                               买stk,1000股

order_to(stk,0)                                 stk平仓


for stk in account.universe:           for循环就是对每个证券池里的股票都这么干






当然以这样的回测情况显然不是好策略。不过实现完整的回测,还需要:

1. 一个class,包括risk factors, return

2. matplotlib实现乳齿优美的图像

3. 通过wind订阅数据,模拟交易。



阅读更多

更多精彩内容