VNPY2 中CTP数据凌晨0点时间戳的处理问题,和夜盘数据时间戳分析
今天在群里面,看到有人反映vnpy2中CTP接口tick数据0点0分0秒这一秒的时间戳有问题,如下图倒序的tick数据,第三条应该是6-29 00:00:00 这个时间,但是存储时候,日报变成了2021-06-28日。这个问题在Github的issue 中也有人提了,https://github.com/vnpy/vnpy/issues/3044 。提问者也做了分析。我这边在重复分析下原因。tick
关于期货交易CTP接口的五档行情接收,和设置实现
就像2020年总结提到,最近想在中高频策略搞搞。对于高频交易,如果有深度行情当然是必须的,看到说上期所五档行情免费提供,而且我用其他行情软件可以查到,就想在VNPY保存到数据库先研究下。有点发现,写下来记录下。首先看了下代码,VNPY的ctp_gateway已经支持五档行情接收,也不需要什么配置,但是没有发现五档行情数据,无论是界面端还是数据库。然后研究下,因为ctp_gateway行情接收是采用
2020年量化交易总结
2020年量化交易总结,简单一句话,之前盈利的策略失效,整个年度下来亏损,在剧烈的市场波动面前,没有全天候的交易策略。由于COVID 原因,上半年3月份开始市场剧烈波动,我策略交易都是期货CTA,寻找肥尾;市场剧烈波动后,策略失效,收益巨幅波动,最后落入亏损。下半年陷入了重新寻找策略的过程,直到现在还有一个稳定盈利的策略;只能说对于非高频来说没有全天候的交易策略,市场整体节奏,我叫市场弹性模式改变
一个小技巧,VNPY策略参数优化时候显示完成数量和总数量
在做VNPY 策略参数优化的时候, 优化数量多的时候要好几天,有时候也不知道完成数量,只能干等。就稍微改了下代码,加入log显示完成数量和总数量,心里面有个底。代码是在VNPY 1.9.2里面的因为我还在1.9.2的版本泥潭里,2.0之后直接用应该也可以的,只要稍微改下变量名称。实质内容,就是python多进程共享变量访问更新,python提供几个不同的多进程变量共享的方法,比如使用可变对象que
SAP TRM 模块提供的敏感度指标
刚刚有复习了下SAP TRM 模块提供的敏感度指标,包括有Macaulay duration 麦考利久期, Fisher-Weil duration FW久期, convexity凸度, basis point sensitivity基点价值, modified duration修正久期和到期收益率YTM。下面是系统提供的计算方法,我也用excel就计算了一边;除了YTM实在不知道怎么实现,e
利用VNPY回测引擎分析实盘交易,并用excel和pdf输出分析结果
算是之前一篇文章的后续http://blog.itpub.net/22259926/viewspace-2564798/之前写了一篇文章,在实盘交易时候,用数据库记录交易信息,其实就是把交易信息类型VtTradeData的实例保存的到数据库中。之前盘后分析主要是数据库把collection导出到csv文档,然后下载本地用excel分析,拼凑出sharpe指标,趋势图一些;费时费力还不准确;只能说近
Python2 和Python3 中对中分数的转化差异,有可能导致计算差异
在从VNPY1.92 逐步转到VNPY2,发现了不少python2和python3的差异。最近发现一个策略,VNPY1和VNPY2的结果怎么都不相同,回测发现,是存储分数差异造成的。算是python2的bug,不注意容易出错。python中数值类型有int整数,float浮点数等,分数通常是按照浮点数存储的。因为python 类型定义时候没有指定类型,按是系统自动匹配的。在python2 中如果分
在VNPY2的进行CTA批量回测,支持Json和Excel格式导入策略
之前VNPY 1版本中,我的个人代码很多是直接在VNPY库代码直接修改或者增加的。每次VNPY升级就是非常头疼,要做代码对比,在一些可能被更新覆盖的地方再次维护测试。而且因为更新的地方很乱,造成后面生产版本一致停留在VNPY1.92。这次准备不在VNPY的库文件代码上修改,而是像引用NUMPY或者Pandas这样,采用调用继承的方式,把自己的代码和VNPY的库代码隔离;这样即使VNPY升级,个人代
一个VNPY 的“CTP:平昨仓位不足”问题的解决记录
其实我现在实盘还是用VNPY 1.92版本,这个“CTP:平昨仓位不足”出现在VNPY1.92版本,而且只发生在使用CtaTrading无人值守程序,而在使用vnTrader这个GUI版本没有这个问题。刚好借这个问题分析下VNPY平昨平今的操作。然后就开始问题分析呢,这个是平仓问题,而且这个区分平今/平昨的品种就上期所和能源等几个交易所。那么开始debug了,这个debug还是挺麻烦,只有在交易天
为VNPY 2版本加入聚宽数据源
之前写过一篇文章,是为VNPY1.9.2 版本加入聚宽的数据源,这个算是后续版本,为VNPY2版本加入聚宽数据源。VNPY论坛里面有个篇文章也是讲加入聚宽数据源的,不过他是相当于集成到VNPY库代码中去,和VNPY自带的米筐数据源一样。我这篇其实也是借鉴他的,当然他说他借鉴之前我的1.92那篇。反正互相借鉴。之前VNPY 1版本中,我的个人代码很多是直接在VNPY库代码直接修改或者增加的。每次VN
刷题系列 - 使用递归推出给定节点数的所有形状二叉搜索树(Binary Search Trees)
继续刷题,这道题倒是花了不少时间,主要问题是审题不清哈。题目:给定节点,比如3,三个节点;返回一个队列,包括所有形状二叉搜索树(Binary Search Trees)。具体如下图。给出三个点,返回三个节点组成不同形状的树。我当时看的时候没有注意到是二叉搜索树(BST),以为是任意二叉树,走了弯路。这里先说下二叉搜索树,,所谓二叉搜索树,其实就是对于一棵二叉树,不存在重复值节点,任意节点的左节点的
python 指针拷贝,浅拷贝和深拷贝
和上文一样,还是一些基础知识。首先对于不可变类型int,string,float,tuple,并不用担心拷贝问题,可以认为每次拷贝时候都是重新创建内存空间来存放,修改新的值不会影响原来的;两个除了值一样没有相关。对于可变类型Dict set list,还有实例对象,类一些,拷贝时候要考虑指针拷贝,浅拷贝和深拷贝的情况。- 指针拷贝:就是通常A = B,对于可变类型,这个复制是多了个指针,两个A,B
关于python类属性和实例属性的一些细节注意点
关于python类属性和实例属性,简单来说,类属性就是在定义类的时候,和类方法同一级别定义的属性;实例属性是在__init__实例初始化时候定义属性。单纯从实例的角度来看,类属性和实例属性都可以在实例中用self.属性名称的方法进行访问更新,相对于在实例方法中的局部属性,可以进行实例全局该属性修改,很多时候甚至都混用了。其实类属性还可以直接用类名.类属性名称方法直接访问,即时没有实例化。这个就是不
刷题系列 - K-th 语法
这个题目有点绕,其实很简单。题目是一行都是只有0或者1两个元素,下一行是当前的转变,0的元素变为01,1的元素变为10。举例如下,那么给出行数N,和横向位数K,那个元素是0还是1.比如如下给出N是4,K是5,那个元素就是1。Explanation:row 1: 0 row 2: 01 row 3: 0110 row 4: 01101001其实这个问题某种意义上就是简单版的帕斯卡三角,如果头铁
刷题系列 - 合并两个顺序队列为一个新的队列
很简单的一题,就是为了记录。合并两个顺序队列为一个新的队列,并确保顺序。示例如下Input: 1->2->4, 1->3->4Output: 1->1->2->3->4->4解题很简单,递归对比即可。# Definition for singly-linked list. # class&nb
刷题系列 - 实现一个指数运算方法,对递归次数和运算时间有约束。
这个题目有很简单,就是实现一个指数运算方法,但是对于递归次数和运算时间有约束。指数运算,就是pow(x,n), x可以是浮点数,输入为x为2.000,n为10,返回1024.000;其中指数n可以为负数。Input: 2.00000, 10Output: 1024.00000 其实python默认内置的指数计算符号是**,比如上面就是2.000**10;直接就是用return x**n提
刷题系列 - 计算爬楼梯不同步数的方法数
这个题目是这样的,如果一次可以向上移动1格或者2格,给出一定格数的梯子,有多少种移动方法可以刚好到顶。比如给出2格梯子,有两种方法,一个是 1->1;还有是 一次 走2 格;给出3格梯子,有三种方法,一个是1->1->1; 还有1->2, 还有2->1。这个题目看起来好像很复制的样子,分析下,其实本质就是一个斐波拉契数组,一个n格的梯子方法数,可以是n-1 和n-2
刷题系列 - 给出一个帕斯卡三角的行数,返回该行元素,要求复杂度为K(O)
这道题让我深深感觉数学才是算法的核心,不对,是爸爸。简单说下题目,帕斯卡三角,如下图,从第三行开始,除了两边的1,其他元素都是上一行两个左右元素之后,比如第三行的中间的2,就是上面两个1之和。如果第一行为0行,那么给出行数,返回该行所有元素,比如给出3,返回[1,3,3,1]关于帕斯卡三角,还是很多有趣属性,可以搜索,最主要就是和二项式展开系数的关系。如果不考虑算法复杂度,其实只要从第一行开始一行
刷题系列 - 在二叉树中查找给出节点,并返回以该节点为根的树
很简答的一道题目,就是二叉树遍历找到某个节点的val是给出值,如果要返回的是以该节点为根节点的树,那么就是按照层级遍历,这里使用递归实现。如果找不到返回为空,如果找到返回该节点即可。# Definition for a binary tree node. # class TreeNode: #  
刷题系列 - 用递归和遍历两个方法反转一个单链队列
二叉树的题目告一段落,后面陆续做了些基础的题;感觉没有什么好记录的。这次是一个非常基础题目用递归和遍历两个方法反转一个单链队列。如下所示。Input: 1->2->3->4->5->NULLOutput: 5->4->3->2->1->NULL递归的方法,考虑了下其实方法很多,我想了比较简单的,就是取出第一个节点,放在后续节队列的最后,如