在no_ui中使用多进程实现多账户并行执行,并分配各自独立的工作环境和策略
看到群里有人问vnpy下多账户同时运行,并且给每个账户分配不同工作内容,就是执行不同策略。考虑了一下,实现方式很多,在vnTrader 实例代码中 no_ui 启动vnTrader就是用使用多进程模块multiprocessing,在子进程中运行。因为python GIL全局锁的存在,每个子进程都有独立的实例化环境,其实就是一个独立运行vnTrader。那么多开几个子进程,分配给对应的账户参数,就
VNPY创建集中式的k线生成引擎,各个策略采用注册订阅,接收k线推送
创建一个集中的k线生成引擎,可以统一的生成不同品种和长度的k线;各个策略采用注册订阅的模式,接收k线更新和推送。使用背景,在使用vntrade cta策略交易模块时候,其每个策略都有各自实例化的K线生成器BarGenerator,来根据传入的tick或者历史回放的bar,来合成需要的k线bar,在on_minute_bar方法中进行条件发单或者平仓。对于中低频的分钟级策略,一个策略大部分时候,甚至
VnTrader 实现CTA策略初始化完成后,自动启动该策略
其实用VnTrader都知道,CTA策略启动分两步,第一步初始化,第二部启动。初始化要做的比较多,比如回放历史数据,加载保存交易数据等,如果加载历史数据较多,或者从数据源实时下载,是要一会。如果no_ui, 或者定时运行;能不呢让CTA策略初始化完成后,自动启动呢。看起来很简单。cta_engine.init_strategy(strategy.strategy_name) cta_engine
转载一段简洁明了的python代码 实现了读取文件并按行反转后输出
事情是这样,我在用python自带的logging.FileHandler,输出logging记录,主要是记录主力合约切换的。很简单。就是用米筐的get_dominant或者聚宽的get_dominant_future去查询一段时间品种的主力合约,返回的都是是日期为index,合约名称为值的Pandas.Series。这里可以用Series自带的drop_duplicates(), 如果返回一个主
VNPY使用一个方法处理多个事件EVENT,来计算期货单个合约资金比率
最近想到个需求,针对期货CTP接口,比如持有三个合约,每个合约占用的资金比率。这个需求分解下,就是资金占用,这个在期货中就是保证金金额。在CTP接口中,OnRspQryTradingAccount 方法是返回查询账户资金信息,可以返回账号总保证金金额。而onRspQryInvestorPosition方法是返回查询持仓情况,持仓情况包括对应合约的保证金金额,这里要注意的地方是,CTP 系统将持仓明
同时第三方数据源和数据库历史数据,作为cta策略初始化
首先个人推荐使用第三方数据源,如果数据源质量有保证的话。如果启动第三方数据源,在cta策略启动时候,会从数据源下载load_bar所需要的预期的数据,看策略需求,下载日期或长或短。如果策略较少没关系,如果策略较多,尤其是同一合约有多个策略时候,每次启动就花费非常多时间,而且很多是重复下载,比如如果有多个螺纹钢策略,就要下载多次螺纹钢数据,还是不太方法。这里思路很简单,策略启动时候,对比启动需要数据
VNPY 的EVENT事件作为 pyQT5的信号触发函数
最近在做vnpy的一些界面修改,里面很多要做内容就是按照Event事件,作为pyqt5信号,来触发信号槽函数。简单介绍下pyqt5的信号和信号槽,信号是就是QtCore.pyqtSignal类的实实例对象。信号有个emit() 方法,当emit执行时候,相当于触发信号,激活对应的信号槽。信号槽就是对应函数,将会被操作。界面按钮点击或者屏幕双击,都是一些原生的信号事件,直接调用就是可以,至于更多相关
简化 vnTrader 手动下单界面
VnTrader提供了手工交易的界面,这样紧急情况下可以手工下单。但是现有的手工交易界面选项比较多,尤其是针对上交所的平昨平今,还要看看对应持仓情况,不然就提示仓位不足,非常耽误事情。想到cta策略发单都参数其实很简单,针对平今平昨已经提供了OffsetConverter类对订单处理,这里就调用借鉴来简单化手工下单界面。手下看看简化完以后界面,在逐条说说。最近做vntrader界面修改的事情挺多,
介绍下VNPY的Event事件处理,和创建新事件类型
最近在做VNPY前台界面的修改,不可避免就是要接触到Event事件和相关的引擎,学习了不少。这里简单介绍下Event事件和相关处理;然后关于如何维护自己定义的新事件类型。在VNPY中,常见的合约价格,策略状态,发单状态,成交状态和账务等等,这些从相关交易或者市场接口传入后,打包成event,发送对应的接收方法,前台界面显示数据更新,都是通过event传入。可以理解为一个数据传输机制。从VNPY代码
简单介绍下vnpy的价差交易模块 spread_trading
之前说从CTA趋势转日内交易,做了些价差交易策略,也实盘跑了下。结果不太理想,没这么赚钱;总结一句话,交易费用和payup 超点吃掉大部分收益,使得虽然每笔交易看看有收益,实际并不怎么样。虽然现在不用价差交易策略,不过还是简单介绍下吧。VNPY价差交易的简单逻辑价差交易原理很简单,就是一对,或者一组品种其之间价格有一定关联度,这个可以跑通过计算协方差Covariance矩阵来量化验证。当价格差价差
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,寻找肥尾;市场剧烈波动后,策略失效,收益巨幅波动,最后落入亏损。下半年陷入了重新寻找策略的过程,直到现在还有一个稳定盈利的策略;只能说对于非高频来说没有全天候的交易策略,市场整体节奏,我叫市场弹性模式改变