一、
VNPY的onTrade表示成交信息推送,onOrder表示订单变化推送,可以理解为:当成交发生变化的时候,当订单发生变化的时候。
写策略的时候,不要再buy,sell,在策略里永远只做一件事情:setTargetPos(self,targetPos), 调用trade函数。如果要做多头10手,targetPos=10,调置完之后,调用trade函数。
学习资源:
作者出了书:https://www.quantstart.com/ebooks
Ernie Chan的书:https://www.amazon.com/s/ref=nb_sb_noss_2?url=search-alias%3Daps&field-keywords=Ernie+Chan&rh=i%3Aaps%2Ck%3AErnie+Chan
二、CTR
CTR的全称是:Average True Range(真实波动范围指标),编制CTR策略要注意三要素:信号、过滤、出场。
三、如果不知talib的某个用法,用help()
四、策略名
vn.py的CTA策略模块下,我们如何识别某个策略?
首先,策略文件名(py文件)以小写的strategy开头,py文件中策略类名以Stragegy结尾,首字母大写,比如: ArtrsiStrategy
五、onBar
实盘中只会推tick,理论上只能收到tick数据,直接调用BarGenerator对象的updateTick方法,自动K线合成。
合成一个出来会自动调用onBar,没有凑足不会高调用。
六、四大所的编码
m1801
SR801
rb1801
IF1712
只有上期所的合约要选择平昨、平今。
七、Stop order停止单
Stop order: 用于K线级别的策略代码上模拟实现k线内追入开仓或止损平仓的逻辑。本质上是条件触发单。
八、策略开发
def onStart() 启动策略,再策略类中实现,再示例中,是调用putEvent 发出策略状态的变化事件 def onStop()停止策略,类似onstart def onTick() tick行情接受,推送到BarGenerator中 由其的updatetick处理,生产1分钟K def onOrder( )收到委托变化推送 def onTrader()收到成交推送, def onBar ( )收到Bar推送bg.updateBar(bar),生产不同周期K def onStopOrder def buy( ) 买开,多开;调用sendOrder 发送交易 def sell()卖平,多平;调用sendOrder 发送交易 def short()卖开,即空开;调用sendOrder 发送交易 def cover()买平,空平;调用sendOrder 发送交易 def sendOrder() 调用 策略引擎接口 sendorder发送交易 def cancelOrder()调用策略引擎接口 发送 cancelOder指令 def insertTick () 调用策略引起ctaEngine (insertData)->mainEngin(dbinsert)接口,将tikc保存到mongodb数据库中 def insertBar ()同上,保存的为k线 def loadTick() 从数据库中读取tick,调用ctaEngine的接口 def loadBar() 同上 def writeCtalog ()记录Cta的日志 def getEngineType ()查询当前的运行环境是测试还是实盘 def saveSyncData()保存同步数据到数据库 同样是调用的cta引擎接口 def getPriceTick ( )询最小价格变动,下指令时用到,ctaEngine是从 mainEngine中解析contract获得数据
备注:
ctaTemplate.py在2.0版本中叫template.py
BarGenerator和ArrayManage这两个类已经移到了:C:\ProgramData\VNConda\Lib\site-packages\vnpy\trader\utility.py文件夹下面。
BarGenerator的K线合成功能,你的分钟数量用60必须能够整除,也就是最大只能是30,如果要合成周期更长的请自己编写对应的合成器。
九、object.py
C:\ProgramData\VNConda\Lib\site-packages\vnpy\trader下面有一个叫object.py的文件,里面是一些数据字段的定义。
十、合约
那么我们回测时应该用哪一个呢?
我最近在用螺纹钢回测的时候,发现还是使用99的合约比较好,比如RB88明显换合约的时候价格存在问题:
十一、在策略中自己使用指标
参考:https://www.ricequant.com/doc/rqdata-institutional#research-API-futures
十二、日线合成
from vnpy.trader.constant import Interval self.bg = BarGenerator(self.on_bar, 7,self.on_6hour_bar,Interval.HOUR) self.am = ArrayManager()
十三、均线向上
十四、init
如果是列表、字典、集合这样的可变对像,在前面定义了之后,还需要在__init__再初始化一次。
否则有多个策略实例的时候会产生冲突。