虽然关注了优矿很久,但几个月没碰,感觉都忘了差不多。做笔记还是有必要的。
· 调用数据
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订阅数据,模拟交易。