分享一个自用LightGBM期货交易信号预测模型
分享一个自用LightGBM期货交易信号预测模型, 具体介绍见下面的Readme, 这个算是一个深度AI辅助编程的结果, 某个时候感觉像是我在辅助他. 训练好的模型可以在vn.py平台作为策略使用, 具体将另外写一篇.Github repo地址 BillyZhangGuoping/Standalone-LightGBM-Futures-Trading-Model: Standa
利用虚拟环境让不同版本的vnpy (VeighNa)共存在一台开发机
之前是采用vnpy 2.6 作为主力更新环境;有本时候会安装不同版本来学习和开发。介绍下不同版本的vnpy (VeighNa)在一台开发机安装,这里是在windows环境使用anaconda的虚拟环境来使用。通过使用虚拟环境可以方便的管理版本,打包迁移1. 用管理员打开anaconda的命令行(prompt),键入如下创建,这里python版本是必须输入,可以3.8,或者其他,即便和主环境版本一样
VeighNa增加按交易数统计回测结果
现在VeighNa交易是按日进行统计回测的,但是在之前的v1版本,是同时支持按日和按照交易数统计回测结果。通过借用之前版本的代码,可以获得按交易数统计回测结果,下图示例,其中红框的都是按交易统计获得数据,比如交易胜率就是盈利交易次数比总交易次数:代码改动,在cta_strategy.backtesting新增TradingResult类中,这里如果输入费率如果大于0.1,则费率按手数计算,小于按照
为回测加入按手数计算交易手续费用
现在VeighNa自带的回测引擎,只提供了按比率计算交易费用的功能。在国内期货中,有很多品种是按照手数计算费用,比如郑期所所有品种,大连和上海的部分品种。这里为回测加入按手数计算交易费用,比较常用做法是在加入一个新枚举(ENUM)参数“费率类型”,包括 按手数 按比率,然后在计算费率时候按照费率类型,来计算。改动比较多。这里倒是有个简单方法,通常按照比率都是在万几,而一手收费在几元。比如螺纹钢是万
VNPY利用邮件引擎,把参数优化结果作为附件发送给预定邮箱
一个简单的引用,分成两步,第一步增强邮件引擎,使得可以发送附件邮件,第二部在回测widget的里面加入一个新方法,在优化完成适合被调用。下面代码是加入EmailEngine,新增一个add_attch, 增强send_email,不是很优雅,不过不会对已有用到send_email的不会又太大影响。 def add_attch(self,msg
基于投入资金的CTA策略开平仓管理
VeighNa的默认的CTA策略开平仓管理是按照手数fixedSize管理,确定固定手数的时候往往要自己心里对应的策略投入资金,而且因为合约价格的变动和保证金率的改动,同样手数对应的资金量也不是统一的。而大多数时候,对于策略绩效和benchmark的对比,都是基于投入资金(Nominal Amount)来讲的,而且当策略数量很多时,也需要通过投入资金来做整体仓位管理,而不是粗略的手数估算。最后一个
使用metabase做分析报表工具分析整体策略绩效
之前使用vnpy自带的回测代码,和一些python自开发,可以分析单个策略绩效。但是如果对于多个策略和合约投资,想从多个维度,可以灵活的按照自定义特性来分析,还是需要一些专业工具。 一开始想使用一些python相关的,比如QuantStats,是一个非常好的策略绩效分析库,但是功能其实类似与vnpy自带,可以针对单个策略做全面分析,但是缺乏多维度,组合分析。 后来觉得还是使用专
使用向导界面 丰富细节的移仓助手
vntrader 自带的移仓助手相当不错,不过细节少了些。我结合实际使用,使用向导界面,在丰富了一些细节,在原理代码上做了一个新版移仓助手。第一页界面输入移仓合约后,跳出需要移仓的策略。这里可以通过打勾选择需要移仓的策略,如果策略不用移仓可以取消。这里增加了一些错误判断,比如目标合约不能是带移仓合约。第二页界面下一步后进入第二页界面,上面是统计策略持仓和账户实际持仓;如果不一致,则会报错;当然如果
利用保存的成交订单,生成实盘交易分析报表
利用之前文章写的保存成交order,借鉴vnpy已有的回测分析报表,生成一个实盘交易分析报表。截图如下。这里有个统计按钮,点击输出统计界面因为我的代码改动不少,直接拿来用估计不合适,只做参考。首先要自行修改database的代码,新增按照strategy名称,和时间段读取保存到数据的order,按照时许正向返回。读取出来是一个order的队列,下面代码可以放在cta_engine.py, 是把开仓
在·VNPY中按照CTA策略实例记录交易条目和损益
这个是一个常见需求,按照策略实例记录交易条目和损益。整体的损益可以通过第三方行情软件来分析,如果有多个CTA策略实例(策略-品种-参数组合实例),如何对每个策略实例记录交易条目和损益情况。下面代码是在vntrader 2.6 级别的实例代码,并不完全,因为改动比较多,这个仅仅是一个思路的示例。先简单介绍下思路,记录分为3个部分,一个是新建触发停止单对象加入触发价,首单价和成交均价信息,二个把完成的
在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矩阵来量化验证。当价格差价差