Home >  > VNPY学习笔记(IF88和IF99及日线合成)

VNPY学习笔记(IF88和IF99及日线合成)

0

一、
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__再初始化一次。
否则有多个策略实例的时候会产生冲突。

本文暂无标签

发表评论

*

*