使用第一堂课的作业,存入MongoDB的数据,对demo策略进行回测。

load数据到mongo并查看
直接使用现成数据吧
VN.PY附带了两份数据,一个是IF指数1分钟数据,一个是螺纹钢指数1分钟数据。在examples\CtaBacktesting目录下,csv格式的。
VN.PY已经帮我们准备好了。在框架的ctaHistoryData.py类中,已经实现好了。
执行:loadCsv,py就行了,2份csv数据就到mongo数据库中了
结果:


看看数据长什么样:
mongo
show dbs
use VnTrader_1Min_Db
show collections
db.IF0000.find().limit(1)


格式化后

{"_id": ObjectId("5ca35134f688bd106b484671"),"datetime": ISODate("2010-04-16T09:16:00Z"),"close": 3468,"date": "20100416","exchange": "","gatewayName": "","high": 3488,"interval": "","low": 3450,"open": 3450,"openInterest": 0,"rawData": null,"symbol": "IF0000","time": "09:16:00","volume": "489","vtSymbol": "IF0000"
}

回测跑起来
examples\CtaBacktesting\runBacktesting.py
右键,run
结果:


跟踪查看策略的OnTick,OnOrder,OnTrade

去KkStrategy添加断点,不难发现对onstart,onstop,ontick,onbar,onTrade等KkStrategy都有实现,不妨都加上断点。
忽略一些init操作
重要的执行链如下

  ctabackTestting.runBacktestingself.loadHistoryData():读取数据库行情数据到self.dbCursor中对于每个self.dbCursor的行情,执行newbar函数,那么newbar做了什么呢?self.crossLimitOrder()      # 先撮合限价单,撮合干了什么呢?self.crossStopOrder()       # 再撮合停止单从订单列表中workingLimitOrderDict,寻找可成交的订单,将成交结果通知到self.strategy.onOrder(order)self.strategy.onBar(bar)    # 推送K线到策略中,推送干么什么事情将小bar拼成大bar,并且攒够一个1bar则调用onXminBar方法,触发策略产生买卖信号(买卖指令)self.updateDailyClose(bar.datetime, bar.close),干了什么?只是存储下self.dailyResultDict[date] = DailyResult(date, price)

可以参考下面这个图理解,这个是非回测情况(比如实盘情况,系统调用流程) 

回测情况下,系统调用流程

执行路径:1-2-3-4-6-7

回测引擎不断读取数据的中的bar信息(或者ticket,大部分回测是bar,为了加速,可能会牺牲准确性),调用newtick方法 (1)
newtick方法先执行撮合(2),撮合成功调用策略的onorder方法通知策略(3)这个路径完成,不会到4(图示有误差,改图太麻烦就不改了)
newtick方法执行撮合或者不需要撮合,上面的路径走完后会到4(也就是说2分拆为3和4,而不是2-3-4,图上不确切)
多个ticket会积累成bar,积累够bar后执行判断逻辑(5),达到开仓标准则调用6,发出订单
发出订单后被回测引擎接受,缓存到stopOrderDict(条件单)和workingOrderDict(普通限价单)中(7)

路径:7-2

含义是订单列表的订单会影响到第2步的撮合(这个不难理解,所谓撮合,就是撮合订单)

把策略改为5分钟级别,直接使用Bar数据进行回测

和上面一样的,区别在于多个ticker(orbar)l累计成一个大bar,然后修改方法updateBar,当积累5分钟的bar后调用一个5分钟大bar的函数self.onXminBar(self.xminBar)(self指BarGenerator)。
BarGenerator被策略持有,策略初始化时制定self.bg = BarGenerator(self.onBar, 5, self.onFiveBar) ,这里self就是策略本身。
每次经过self.onBar*5=1分钟×5=5分钟的时间,就调用一次 self.onFiveBar(self.onBar×5所构成的大bar)
策略实现这个方法:self.onFiveBar(大bar),在里面生成买卖信号即可。

学习笔记_vnpy实战培训day04_作业相关推荐

  1. 学习笔记_vnpy实战培训day04

    基于VNPY编写策略 策略运行逻辑 讲解策略在vnpy中的运行逻辑,包括tick级别.分钟级别.混合等 bar内运算:tick运算,高频,cta,r-break,也是ticket.止损也是bar内 b ...

  2. 学习笔记_vnpy实战培训day03

    这一节纯干货,讲解了vnpy的项目结构(代码结构),核心功能引擎 建议先看视频,在阅读代码,然后在回来看视频,这样理解的更为透出,否则仅仅看视频很难有深入的理解. vnpy特点及和其他系统区别 vnp ...

  3. 学习笔记_vnpy实战培训day02

    这节课主要讲了numpy,pandas,tushare,talib,matlabplot用法,如果有基础的化不用听了 能看懂如下样例代码就行了 numpy ####numpy数据结构#### v = ...

  4. 学习笔记_vnpy实战培训day01

    正期望值系统 期望=仓位*盈利概率*盈利点数-仓位*亏损慨率*止损点数-交易手续费 高频交易: 仓位低,盈利概率高,盈利点数小,交易手续费高 CTA交易: 动态仓位,盈利概率低,盈利点数高 亏损概率高 ...

  5. Hadoop学习笔记(8) ——实战 做个倒排索引

    Hadoop学习笔记(8) --实战 做个倒排索引 倒排索引是文档检索系统中最常用数据结构.根据单词反过来查在文档中出现的频率,而不是根据文档来,所以称倒排索引(Inverted Index).结构如 ...

  6. Redis学习笔记(实战篇)(自用)

    Redis学习笔记(实战篇)(自用) 本文根据黑马程序员的课程资料与百度搜索的资料共同整理所得,仅用于学习使用,如有侵权,请联系删除 文章目录 Redis学习笔记(实战篇)(自用) 1.基于Sessi ...

  7. 《文哥的学习笔记——推荐系统实战》笔记

    发现了大神的学习笔记文哥的学习笔记.简单记录下知识点. 第一篇 1.评测指标:满意度,准确度,覆盖率,多样性,新颖性,惊喜度,信任度,实时性,健壮性,商业目标. 第二篇: 1.基于邻域的方法包括基于用 ...

  8. 一篇不懂庄懂的学习笔记-技术美术入门课作业解析(UE4版)

    前言:最近学习庄懂大佬的技术美术入门课,因为一直不太习惯Unity连连看,所以转到UE4来操作了.菜鸡实操,希望有大佬批评指正. 传送门:庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili ...

  9. 【TensorFlow-windows】学习笔记三——实战准备

    前言 因为学习TensorFlow的内容较多,如果只看API会很无聊,可以结合实例去学习.但是在构建基本的模型之前,需要学一些准备知识:数据读取.预处理.优化器.损失函数 国际惯例,参考网址: Ten ...

最新文章

  1. .net 访问 geoserver 发布的 wms   跨域问题解决方案
  2. 191127注意事项
  3. 运算符 - PHP手册笔记
  4. c语言里的宏(翻译)4
  5. 面向对象编程(基础简介)
  6. C/C++编程知识分享:C++四种强制转换,教你多种类型转换方式!
  7. FPGA中亚稳态——让你无处可逃
  8. Axure智慧水务移动端原型、智慧泵房、水厂监控、营收管理、DMA漏损、维护管理、GIS地图、水质监控、电商系统
  9. 火狐浏览器国内版和国际版区别
  10. 京委本圣经的历史考证
  11. 最强PostMan使用教程(7)postman做数字签名认证
  12. Linux三剑客之SED
  13. 京东无货商品强制加入购物车
  14. 打开图片或者视频显示“文件系统错误-2147416359”
  15. 开热点给电脑消耗大吗_手机开启WiFi热点,提供流量给电脑上网,可行吗?
  16. win7计算机睡眠快捷键,Win7系统在桌面创建睡眠模式快捷键的方法
  17. BUAAOJ989 御坂御坂 约瑟夫环
  18. 战神遗迹服务器未响应怎么回事,战神遗迹黑屏闪退怎么处理
  19. UVa Problem 109 - SCUD Busters
  20. 引入iframe标签 404

热门文章

  1. 德鲁伊 oltp oltp_内存中OLTP系列–表创建和类型
  2. Java笔记(二十一) 动态代理
  3. BZOJ 1822 Frozen Nova 霜冻新星
  4. 多个div中的label标签对齐
  5. nginx+pm2+nodejs部署
  6. innerHTML和outerHTML的区别
  7. self、 superclass 、 super的区别
  8. 论策谈百度快照回档和后退的原因
  9. LeetCode_database刷题记录(620. 有趣的电影)
  10. 代码精进之路读后感(三)