另一个视角,使用对数化数据,计算非价位指标
之前在做时序数据整理时候学习时候,发现很多代码都行情数据做了对数化处理。学习了下,发现是另一个视角。https://www.zhihu.com/question/20831196/answer/16324269知乎查了,这个答案比较全。在很多计算中(例如做极大似然的时候),取对数可以将本来需要做的乘法变成加法;取对数可以避免数值巨大,计算机难于处理的困难;与对数有关的数据可以反映出物理量尺度的变化
如果使用Joinquant做实盘行情数据,有一个比较大bug的要注意
在我之前文章中,讲了用Joinquant做数据源,链接:http://blog.itpub.net/22259926/viewspace-2643621/ ,但是在我用作数据源做实盘交易的时候, 发下一个很危险的bug,更新下。如下图,如果运行行情数据下载时候,是在交易日中的话比如2点半,如果填写的endDate是当天,那么返回数据会自动填充到下午3点交易时候。
简单介绍VNPY 1.9.2版本支持看穿式终端的流程
我使用VNPY 1.9.2版本,因为监管要求,需要支持看穿式终端,这里说说实现流程。2.0版本还没有试过,不太确定,仅做参考。首先感谢vnpy及时更新。可以去GITHUB https://github.com/vnpy/vnpy/tree/v1.9.2-LTS , 下载最新版本。第一步是和期货公司客户经理联系,一般他会给你一个申请表,填号信息,主要是AppID:client_vnpyXXXX_版本
利用粒子群优化算法(PSO)来优化vnpy的量化策略参数
上一篇文章中说要用PSO算法来做量化策略优化,模仿DEAP的示例代码,做了一个单线程的类,实现优化。里面代码结构是和之前做利用遗传算法优化的基本一样。粒子全算法可以看看我之前文章,抄的分析结果:粒子群算法比遗传算法具有更高效的信息共享机制,更新群体极值使得信息实现全局范围共享,但遗传算法通过交叉和变异拥有比粒子群算法更有效的逃离局部最优解的概率。下面简单说说代码:1、静态函数object_func
利用聚宽(Joinquant)数据源为vnpy添加期货行情数据
现在基于网络量化平台做的都很专业,richquant也是vnpy数据源的提供方;不过richquant的试用版只有30天,而聚宽(Joinquant)有一年试用期,而且也提供连续主力数据。我就东抄西抄,利用以后logic,做了使用聚宽(Joinquant)数据源JQData为vnpy添加期货行情数据。代码就两个文件,一个config.json主要放登陆用户名和期货品种名称对应表,因为期货品种在聚宽
python多进程简介,和VNPY多进程参数优化代码分析
之前为了实现利用遗传算法,进行多进程策略的优化,学习研究了python的多进程库Multiprocessing。以前感觉真是黑科技,学习后发现,还是python优点,简单好用,对于一般应用还是很好理解。首先,由于GIL(全局解释锁)的问题,全局对象只能一个进程调用,python多线程并不能充分利用多核处理器,比如有时候用pandas跑大型数据分析,发现只有一核在累死累活。如果想要充分地使用多核CP
奇怪报错信息“db already exists with different case already have”解决方法
之前做了给数据库插入成交数据的功能,但是更新1.92后,每次成交都报错db already exists with different case already have: [VnTrader_DEAL_Db] trying to create [VnTrader_DEAL_Db
写了一个类GeneticOptimizeStrategy,针对VNPY策略遗传算法优化
写了一个类,GeneticOptimizeStrategy,Parameterlist 字典; 简化了调用参数和定义对应随机范围问题。只要在Parameterlist 中定义策略参数名称和对应的随机范围就可以,其中两个参数的元祖是两个之间随机数,调用random.uniform(),三个参数元祖是开始结束和中间步进,调用的是random.randrange(), 如果是数组就是在数组中间随机选择。
利用遗传算法库DEAP优化交易策略
首先,要感谢VNPY.com论坛 keke分享 海龟策略深入研究-策略回测系列-17 基于遗传算法的信号优化 一文https://www.vnpy.com/forum/topic/269-hai-gui-ce-lue-shen-ru-yan-jiu-ce-lue-hui-ce-xi-lie-17-ji-yu-yi-chuan-suan-fa-de-xin-hao-you-hua经过一段时
用DataFrame作为容器分析市场行情指标
之前在看一篇《基于阻力支撑相对强度(RSRS)的市场择时》(链接 https://mp.weixin.qq.com/s/LehwGXe_6JFZEZ8ekC4dCg) 尝试说试试用在期货交易,效果不怎么理想。不过作者用DataFrame作为容器来用指标在行情数据进行验证让我学到不少,也学了不少,之前做策略设计时候只是靠第三方平台或者交易软件来看,用DataFram
利用Pycharm进行代码比较更新
很简单的功能,不过还是挺好用,尤其是新版本和老版本对比的时候。点击代码文件A,然后在功能条view -> compare with... 里面选择要对比的文件B如上图,一般我会选择无视空格段,然后蓝色是pyCharm认为是一直但是有更改,绿色是完全新建。你可以点击左推,和右推键,把不同代码调成一直。比如把右边新增的代码加入左边。
针对vnpy的不同期货品种行情数据清理
之前2月25日,上海期货交易所进行测试,在周六进行行情广播,我的datarecording一直在跑;然后就发现读了不少脏数据。vnpy自带的行情清理功能较为简单,只是在清除非交易时段,没有考虑周六日;而且只是笼统给了一个最大时间交易范围,像股指期货没有夜盘,螺纹钢晚上11点就结束,但是默认只是结束在凌晨两点半这个最大交易时间。 所以写了一个方法,按照不同品种,更细致的清理。可以直接把这个方法插入\
针对vnpy的mongodb数据库,合并多个主力合约行情为连续行情数据
最近在做股指期货的策略实现,发现股指期货的主力合约是按月变化,比起商品期货4个月或者半年一切换更为频繁,之前商品期货还可以手动做切换主力月数据回测,股指期货一定要做合并连续主力行情数据。通常主力合约生效时间段就是上月合约交割日到当月合约交割日,比如IC1902, 这个19年2月合约,作为主力合约的时间就是IC1901交割日(2019年1月18日)到IC1902交割日(2019年2月15日)。IC1
VNPY重新启动后,没有停止单挂单原因和简洁解决方法
之前在这个链接里面,提了vnpy重启后,比如开盘前开始,即使符合挂单条件,也没有挂单出现的问题,给了一个比较麻烦的方法。http://blog.itpub.net/22259926/viewspace-2563701/后来研究代码,发现原因应该是:程序用onInit(self) 初始化回放数据,但是此时self.trading 为false,不会发出停止单;而启动onStart时候,不会重新回放启
为VNPY增加数据库记录交易数据功能
在VNPY中,并没有提供实际交易数据库记录功能,虽然可以通过第三方交易软件去读取,但是对于针对单个策略交易效果验证还是不方便,这里说以下为VNPY增加数据库记录交易数据功能。其实主要还是调用VNPY已经提供的功能。1.在vnpy.trader.app.ctaStrategy.ctaBase中增加一个新的数据库。按照你的习惯给名字,比如 DEAL_DB_NAME = 'VnTrader_DE
VNPY中开盘前挂单失效的解决方法
在VNPY量化交易平台中,挂停止单(STOP Order)是交易发起的常见方式,停止单是至一旦价位到了预定点位,才启动交易的订单。期货早盘9点和夜盘9点刚刚开票十分钟,往往是波动最大的时段,交易机会很多。但是VNPY存在明明应该挂着停止单,在开盘时候就没有了,应该是在开盘时刻,所有挂单都是失效了,虽然这些挂单是在VNPY内部失效,但是也会失效。具体代码看了半天,还是没有找到具体原因。这里提供一个临
VNPY 一种基于统计的交易策略简易实现
在微信公众号 “量化投资与机器学习”, 看到一个推文“我就不用AI、ML模型预测股价,来点不一样的“, 链接如下:https://mp.weixin.qq.com/s/QnVn3aZUro4K0XF8A9qFtw交易思维是基于历史数据中,一组数据比如100天中,K线中最高点或者最低点相对于开始价位价差点差,再利用numpy的函数numpy.percentile(), 计算在比如95%机会,最高点或
VNPY 交易所返回委托和交易状态到策略的源代码分析
主要分析两个在类策略模型ctaTemplate的中的函数,onTrade和onOrder,其实两个很相似,被别的其他实例调用,推入更新的Trade和Order实例,并执行函数内的代码。对于Tick级别的交易,还是还是会经常用到这两个。下面是在ctaTemplate中的定义。 def onOrder(self, order): &n
VNPY,从发送交易指令到交易所的源代码分析
在尝试写tick级别的策略,由于交易反馈时间要求高,感觉需要对单个order的事有个全面了解,就花了些时间尝试性去分析了VNPY中 从发送交易指令(sendOrder())到交易所,和接收成交返回信息(onOrder()/onTrade())的代码。如果有错误或者遗漏,请指正。这里先将发送在策略中,一般不直接调用sendOrder(), 而且用四个二次封装函数函数,这些都是在class  
VNPY中 Tick级别准高频交易简单策略
VNPY中,大多策略都是基于bar分钟级别;国内tick是一秒两笔,频率不算太高。这里尝试做了一个Tick基本准高频交易策略,只是为了实现思路。可以回测,不要直接用。。回测时候记得把回测模式改为TICK_MODE, 数据库改为TICK_DB_NAME,还有setStartDate时候initdays设为0,不需要回读历史天数,只需要当天数据; 另外TICK回测超过一天系统就报错内存不够, 所以最好