1.vn.py快速入门6 - 开发第一个量化策略
2.利用gplearn遗传规划生成期货cta策略
3.Quant åºè¯¥å¦ä¹ åªäº Python ç¥è¯
4.基于VN.PY的策策略CTA策略入门心得
5.Python之路 11 双均线策略的3种回测方法
6.客观地说用一创聚宽做股票量化很合适啊
vn.py快速入门6 - 开发第一个量化策略
欢迎来到vn.py社区的快速入门教程系列的第6篇,我们将开始实践编程部分。代码假设你对Python有一定基础,策策略如果没有,代码推荐《笨方法学Python3》作为入门书籍。策策略在此教程中,代码简单表白网站源码我们将使用Visual Studio Code (VS Code),策策略一个由微软开发的代码开源编程编辑器,配合其丰富的策策略插件,成为我们的代码编程工具。
首先,策策略下载并安装VS Code,代码点击官网链接,策策略安装完成后,代码找到左侧导航栏底部的策策略Python插件并安装。虽然我们推荐VS Code,但PyCharm、WingIDE、Vim或Visual Studio等其他IDE也适用,遇到问题时,可以切换回VS Code,因为教程中的所有操作都是通用的。
接下来,理解用户目录的概念,通常位于C:\Users\你的用户名,这是vn Trader默认的运行时目录。vn Trader会在该目录下创建.vntrader文件夹存放配置和临时文件。同时,CTA策略会在strategies文件夹中寻找用户自定义策略,Windows用户需在C:\Users\你的用户名\strategies创建这个文件夹。
在strategies文件夹下创建名为demo_strategy.py的策略文件,然后用VS Code打开。策略类开发从定义CtaTemplate基类开始,它是所有CTA策略的基础,提供事件处理和操作函数的框架。
策略类中,需要定义参数和变量,参数是策略逻辑中的固定数值,变量则用于存储策略执行过程中的中间状态。定义完成后,需添加到对应的参数和变量列表中,以便策略引擎管理。
在vn.py中,交易逻辑由事件驱动,比如K线推送。对于双均线策略的DemoStrategy,我们只需在on_bar函数中处理K线数据,如使用ArrayManager计算均线指标并进行金叉或死叉判断。策略的执行涉及开仓、平仓操作,以适应双均线策略的交易逻辑。
实盘交易时,需要自己合成K线,vn.py的BarGenerator工具可以帮助完成这个任务。在策略的__init__函数中初始化BarGenerator,并提供on_bar回调。每当收到Tick更新,更新BarGenerator,BarGenerator会在K线走完时触发on_bar函数,执行交易逻辑。
以上就是东软接口源码vn.py快速入门的实践部分,如需了解更多内容,欢迎关注vn.py社区的微信公众号获取更多资讯。
利用gplearn遗传规划生成期货cta策略
春节期间,我决定深入研究期货交易策略,决心通过全面探索来发掘潜在的因子。于是,我在假期里花费了两天时间,选择了gplearn这一工具进行实验。
gplearn是Python中最成熟的符号回归算法,它作为监督学习的一种,目标是揭示隐藏的数学公式,以预测目标变量。在这个实验中,我选择了2万根ETH合约的分钟K线数据作为基础。
在构建因子的过程中,我尝试了两种策略。华泰研报推荐的方法是方法二,我认为两者有相似之处。方法一是利用talib提供的众多函数,直接融入到模型中。方法二是参考了Allen Chi在CSDN博客中的高频因子挖掘技术。
接下来,我开始对数据进行切割,进行自变量和应变量的训练。这个过程可能需要秒到秒,甚至更长,具体时间取决于数据量的大小。评估模型的效果,我选择了Spearman相关性作为主要指标,另一种方法则是自定义评估函数,以追求收益率优化的最优解。
经过一系列的训练和评估,我最终绘制出学习曲线,成功地获得了最佳的策略结果。这次实验不仅提升了我对期货交易策略的理解,也展示了gplearn在生成CTA策略中的潜力。
Quant åºè¯¥å¦ä¹ åªäº Python ç¥è¯
1. å¦æè¿éè¦Deep Learningæ¹é¢çä¸è¥¿çè¯ï¼å¯ä»¥èèTheanoæè Kerasãè¿ä¸¤ä¸ªä¸è¥¿å¯è½ä¼ç¨å¨åææ°é»æ°æ®æ¹é¢ãä¸è¿ä¸æ¯å¾æ¨è使ç¨è¿ç±»æ¹æ³å»åéå模åï¼å 为计ç®éå®å¨æ¯å¤ªå¤§ï¼ææ¬å¾é«ã
2. 交ææ¡æ¶æ¹é¢ï¼é¤äºvn.pyï¼è¿æ¨èPyAlgoTradeæ¡æ¶ï¼githubä¸å¯ä»¥æå°ãç§ä»¥ä¸ºè¿ä¸ªæ¡æ¶æ¯vn.pyçé¼å¤ªå¤äºï¼æ¯ç«æ¯ä¸ä¸ªå¨éèITé¢å混迹è¿å¹´çèå¦çä½åï¼æ¶æ设计ä¸æ¯ä¸è¬çä¼ç§ã
3. å½å çè¯ï¼ricequantæ¯ä¸ªä¸éçéæ©ï¼è½ç¶ä½¿ç¨çæ¯Javaï¼ä½æ¯å¢éæè§è¿ï¼é½æ¯åéèITåºèº«çï¼åºæ¬ä¸é½æ7ã8年以ä¸ç»éªï¼åºå±ååºé常æå®ï¼åäºæ é½å¾é è°±ãç°å¨ä»ä»¬ä¹å¨èèæSDKæ©å±å°Pythonè¿è¾¹ã
4. å½å çè¡æ å交ææ¥å£ï¼ä½¿ç¨çæ¯èªå·±çåè®®ï¼æ¯å¦CTPæ¥å£ä½¿ç¨çæ¯FTDåè®®ï¼ï¼èä¸æ¯å½é ä¸å¹¿æ³ä½¿ç¨çFIXåè®®ï¼å¹¶ä¸é½ä¸å¼æºãå¦æéè¦è¿æ¥è¡æ ï¼è¿éè¦èèå°æ¥å£SDK为pythonå°è£ ä¸ä¸ãï¼ä¿®æ¹ï¼è¯è®ºä¸æ人æå°å¾å¤å¸åä¹å¼æ¾äºFIXæ¥å£ï¼ä¸è¿ä¼¼ä¹æ¯å¨å ç½ä½¿ç¨ï¼
5. æ人è°å°æ°æ®åºäºï¼è¿éæä¹è¯´ä¸ä¸ï¼å¯¹äºé«é¢tick级å«çæ°æ®ï¼å ¶é级å¯ä»¥è¾¾å°æ¯å¤©TB级å«ï¼æ®éçå ³ç³»æ°æ®åºæ¯æä¸ä½çãå¦æè¯å¾ä½¿ç¨ä¼ ç»çå ³ç³»æ°æ®åºï¼æ¯å¦Oracleä¹ç±»çå¯ä»¥ççäºã对ä»è¿ç§çº§å«çæ°æ®ï¼éç¨æ件系ç»+å åç´¢å¼ä¼æ´å¥½ãä¸è¿è¿ç§åºæ¯ï¼ä¸è¬ä¹å°±æ¯æºæéé¢è½ç¢°å°äºï¼ä¸ªäººquantå¯ä»¥ä¸ç¨èèã
基于VN.PY的CTA策略入门心得
CTA策略简介与VN.PY入门指南
CTA策略,即商品交易顾问(Commodity Trading Advisor),是量化投资领域中重要组成部分,相较于股票量化策略,CTA策略能提供更稳定的收益与更低的风险。通过CTA策略的对冲性和高频性,市场波动趋于平滑,使得对冲做得好时,能无视大盘波动。
开发CTA策略时,选择适合的工具极为关键。市面上的可编程交易软件如TB或MC,价格不菲且语言小众,开发复杂。在比较了多种选项后,VN.PY成为了CTA策略开发的首选平台。本文将为读者介绍VN.PY的入门心得,旨在快速帮助大家了解VN.PY并上手开发,而不涉及策略的深度开发。
一、VN.PY安装
安装VN.PY主要依赖于VNStation,用户可在官网上下载最新版进行安装,版本为2.5.1。安装目录默认为C:\vnstudio。业绩小程序源码需要注意的是,VNStation自带Python包,建议使用VSCode作为开发IDE,且本地Python环境应保持干净,避免与其他环境混用。此外,VN.PY的源代码位于C:\vnstudio\Lib\site-packages\vnpy目录下,与GitHub上的源代码存在差异,建议使用vnpy目录下的源代码。
二、启动VNStation
启动VNStation前需创建策略代码目录,一般在C:\Users[用户名或Administrator]\strategies下。启动VNStation后,选择VN Trader Pro,配置底层接口为CTP或CTP测试,选择上层应用时,通常选择CTA自动交易模块与CTA回测研究模块。设置运行目录与策略代码目录保持一致。
三、CTA回测与策略
在使用CTA回测或CTA策略前,需要进行数据准备。VNTrader提供RQData数据或本地数据库服务。启动CTA回测功能,选择策略,输入本地代码与回测条件,点击开始回测。回测页面显示各项指标,如账户净值、盈亏分布等。回测过程中,注意理解初始化日的限制、平今仓手续费设置以及优化参数等。
四、策略调试与学习资源
策略调试可选择命令行或Jupyter notebook方式。通过VN Studio Prompt启动VN Station,运行命令行调试,或在Jupyter notebook中导入策略进行调试,修改相关参数,运行代码。学习资源方面,VN.PY公众号视频教程、官网项目文档、知乎频道、蜗牛博客与《Python量化交易》书籍均可作为深入学习的参考资料。
Python之路 双均线策略的3种回测方法
对于每一个交易日,都能计算出前N天的移动平均值,然后将这些平均值连起来,形成一条线,称为N日移动平均线。
在双均线策略中,我们使用两条均线,快均线(例如:5日均线)和慢均线(例如:日均线)。当快均线上升穿过慢均线时,形成金叉,给出买入信号。反之,当快均线下降穿过慢均线时,形成死叉,给出卖出信号。然而,趋势形成指标源码双均线策略并非一个可靠的CTA策略,它只提供买卖信号,没有明确的过滤器和止损,因此稳定性较差。而且因为越来越多的人了解并使用它,策略已经逐渐失效。尽管以前很多前辈能用它赚到很多钱,但现在单纯想靠双均线策略赚钱太难了。
由于策略的简单性,它可以作为一个很好的策略回测方法的入门,被称为量化领域的‘Holle World!’
通常,当我们得到一组数据时,第一步是使用简单的向量回测方法来检测它是否有强的自相关性。如果数据在时间序列上表现出趋势,则适合使用CTA类的策略。反之,如果表现出均值回归(即在一定价格区间上下震荡),则使用套利类策略。
第二步,当数据显示很强的自相关性或很弱的自相关性时,需要更精细化的策略回测,Python中可以使用事件驱动引擎来进行事件化回测或基于vn.py框架的策略回测。
以下用上证ETF()为例。
导入包,使用Tushare获取数据,然后用sort_index()改变其时间排序方式,再计算每天的价格变化。
计算两条均线,分别是5日移动均线和日移动均线。使用rolling()函数:滚动窗口的周期是5,不取中间数(FALSE)。
从下图中可以观察到,ma5是从第5个交易日才开始有的(统计的是前4天的收盘价,加上今天的收盘价),而ma是从第个交易日才开始产生的。因此,到2月6日所有数据才完整起来,同时从这天起(个交易日)开始产生交易信号。
清除空值,从2月6日开始统计。
通过交易信号计算持仓情况。如果快均线上穿慢均线,即ma5>ma时,产生买入信号。因为ma5和ma是今天收盘时才刚刚统计出来的,所以其交易信号需要明天开盘时执行。
每天盈亏=当日持仓*当天价格变化。
当仓位发生变化时,如做多变成做空,会产生手续费。手续费=开仓的总数(这里是2万股)*当日收盘价*手续费率(万分之三)。
净盈亏=每天盈亏-手续费。
最后计算累计盈亏。
绘图。
测试表明双均线策略并不理想。图中显示2.3万的本金,在年全年只能盈利2千左右。
以下为双均线策略的事件化回测。
这里我们需要使用事件驱动引擎。精简ui影视源码
事件驱动:当一个新的事件来临时候,我们会做一些事情并把某些结构固定下来,在这样一个框架下,你不可能获得未来的数据。只要细节的盈亏计算代码不出现问题,不应该包含任何未来函数。
导入包,因为我使用的是Python2,这里使用一个新的库__future__,即把下一个新版本的特性导入到当前版本。这里是导入Python未来支持的语言特性division(精确除法)。
获取当天价格变化。
定义缓存结构,初始化输入的参数。
定义类(每天盈亏结果),在类中再次初始化参数,然后定义各参数的逻辑关系。
现在开始运行回测。
df.iterrows()生成Python迭代器,enumerate()当传入一个迭代器作为参数时,会返回当前迭代变量的基数情况。在迭代的过程中,dataframe每一行是一个日期外加2个字段(close和change),所以会以table的形式返回每一行。所以在table中,第一个元素就是日期,然后是当日收盘价和差价。然后是遍历下面的内容。
将数组中的老数据平移一格(将当前最新的收盘价插入数组最后位置上,更新到最新的情况)。
如果尚未有个数据点缓存数量,则continue后面的逻辑则不执行。当积累到个信号后,开始正式的计算。
计算双均线策略的交易信号。
回测跑完后,现在要通过累计收益来显示策略结果。
该图和上图用向量回测得到的结果差不多。
以下为双均线策略的基于vn.py框架的回测。
首先,搭建vn.py运行环境。
详细,请看《懒人包:vn.py安装图文详解》(更新至v1.9.0)。
安装好之后开始跑回测。
导入包。
In[1]
获取数据。
In[2]
创建MongoDB连接。在MongoClient传入参数,第一个是MongoDB所在服务器的默认IP(本机地址)和第二个是默认端口。然后返回client下的数据库对象,在数据库中查找vtSymbol。
在MongoDB数据库中可以看见collection已经创建好了。
将数据插入历史数据库。
最后一行:
update_one 保证其唯一性(所谓数据库的唯一性,就是这个键是已知的时候,这个键对应的数值是唯一的,若重复插入时候,要么报错,要么新的值把老的值给覆盖掉),所以在重复插入,新的值把老的值给覆盖掉。
{ '$set':bar.__dict__} flt出现的时候做一个更新。
用upsert=True,意思为当数据已经存在的时候,去覆盖它,upsert=False则是当数据已经存在的时候,不做任何操作。
In[3]
开发策略。
导入策略模板文件中的策略模板对象。
In[4]
下面分别是构造函数,初始化策略,启动策略,停止策略和收到Tick推送。
具体的双均线策略就出现在onBar函数上。
因为是策略回测而不是实盘,所以下面都pass了。
在策略类设置完之后,下面开始加载回测引擎。
In[5]
设置产品相关参数。
让我们看看双均线策略回测结果。
首先是参数输出,盈利是2千多,交易日从2月6号开始,最大回撤达%,这是纯双均线策略的特点,过于钝化,需要结合有效离场指标来降低亏损。
最后是绘图结果。
总盈亏图有些出错,应该是从2月初开始交易的,但是大致的图形都与上两幅符合。
从双均线策略回测效果看来,vn.py的回测并不具有优势,需要导入很多库,而且策略框架写起来很麻烦。但是,vn.py对于自己手写,第一个好处就是杜绝未来函数,而且vn.py设计之初只是用于实盘交易,所以其回测与实盘公用一套代码是第二优点。最后是对于要用到多个技术指标的通道突破策略,或者多策略+多品种回测,在已有框架下写策略显然要比自己手写要轻松。
感谢@Chandler Chan的提醒,由于那时候刚刚学Python没多久,把初始化天数和一些参数搞错了,导致vn.py回测得到的图形和上2种方法的图有相当程度的不同。现已完善得差不多。
客观地说用一创聚宽做股票量化很合适啊
我一直在寻找一个值得信赖的股票量化交易接口,我的需求其实并不复杂。
有人向我推荐了聚宽,起初我还有点犹豫,但深入了解后,我最终决定接受它。
我通常不赞成使用Python进行交易,因此我更倾向于C++的接口。然而,由于股票程序化受到严格的监管,如果每个散户都使用C++接口,并没有太好的解决方案。因此,我最终选择了聚宽的Python接口。
我之前一直纠结的一个问题是,聚宽只提供1G的内存。这对研究高频策略,如1分钟K线、分笔数据等,显然是不够的。但另一方面,我们可以独立于聚宽进行研究,将回测好的策略上传到聚宽,仅使用其交易功能,这实际上是很划算的。
聚宽解决了股票程序化的合规问题,没有资金限制,且提供1分钟K线和分笔数据,实盘只是时间问题。1分钟K线也可以用于高频策略,无需纠结。聚宽目前没有年费,对散户来说非常划算,其他平台通常需要收取-的费用。
聚宽采用云端部署,节省了部署的麻烦。对于普通散户来说,最好免除所有这些成本,只收取手续费。一创聚宽确实满足了这一需求,手续费仅为万分之二点五,非常划算。
实盘支持1分钟和日线,虽然不支持逐笔数据,但普通策略是可行的。1分钟数据也可以用于高频策略。我认为普通散户可以配置一些大盘蓝筹股,进行趋势增强,无需限制T+0,只需关注短趋势即可。
许多做T+0的股票都是跌跌不休的,不会长期持有。普通散户无法用股指对冲,因此最好老实做蓝筹+趋势增强。
聚宽现在每人可以上传一个策略,有兴趣的可以关注微信公众号babyquantFinance或添加微信babyquant,看看这个是否值得尝试。这类趋势策略类似于期货CTA/日内非高频策略,只需重新拟合和调整参数即可。我认为股票市场比期货市场更大,人傻钱多。
如何评价vnpy量化回测?
vnpy量化框架在体验上表现出色,是值得推荐的开源量化工具。在使用过程中,可能会遇到版本选择上的困惑,确保使用的是VeighNa量化社区的vn.py版本。在搭建个人量化平台时,vn.py的回测功能尤为重要,可以通过其提供的CTABacktester引擎对策略进行回测,并将结果直观地展示在平台上。
在安装vnpy时,下载最新的开源软件包,并按照指示逐步安装,确保与所使用的Python版本兼容。在vnpy的run.py中,插入代码开启CTABacktester,需要在全局配置中输入自己的mongoDB数据库的用户名、密码等链接信息。随后,打开CTA回测界面,确保已将所需的历史行情数据导入数据库,以进行高效回测。
回测数据包含起始资金、结束资金、总收益率、年化收益、最大回撤等多个关键指标,帮助评估策略的有效性。通过修改vn.py代码,可以将回测功能集成至个人量化平台,实现策略的自定义开发与回测。
为了提供更直观的策略展示,可以设计个性化的量化平台Web页面,并定义特定的策略,如EMaStrategy。通过在vnpy中创建策略文件(如“ema_strategy.py”)并集成至CTABackTesting中,实现策略回测。利用plotly解决方案,自定义输出结果和表现形式,生成html格式的可视化图表,以直观展示回测结果。
为了比较不同策略的表现,可以同时进行多策略回测。通过vnpy的回测引擎和plotly的图形化输出,可以便捷地在个人量化平台上进行策略评估与分析,优化投资决策。若有任何问题,欢迎访问adog.net.cn/news获取更多资源或加入“知shi星球(阿岛格)”进行深入讨论。
cta和算法交易有什么区别?如何系统学习cta策略?
CTA交易策略,全称是商品交易顾问策略,是一种通过期货、期权等衍生品进行中短期投机的投资方式。CTA策略偏重于基于技术信号、市场特征的中短期操作,旨在从传统股票、债券之外的资产类别中获取收益。CTA策略通常包括趋势跟踪和均值回归两种类型,以及主观CTA与量化CTA两大分支。量化CTA依赖计算机模型进行交易决策,而主观CTA则由投资经理根据研究和风险管理策略作出决策。
CTA策略的执行周期较短,有时甚至为日内平仓,对价差敏感,要求快速执行和较低成本。量化CTA策略可能基于技术分析的图表、趋势追踪、动量指标和随机指标,也可能基于基本面因素如能源供给、就业数据等经济数据。主观型CTA策略的核心是人,决策过程包含了对市场现像的分析和未来走势的预测,但最终决策由交易员作出,可能面临情绪干扰。
CTA策略在市场中混合运用不同策略,以适应不断变化的市场环境。高频做市策略、日内交易策略、中长线策略等是常见的CTA策略实例,各具特点,适用于不同市场环境和投资者偏好。
在进行量化交易时,基础数据的获取、清洗、分析至关重要。量化交易与传统交易有本质差异,但本质上都是寻找可重复的市场现象,利用其预测未来走势以获取收益。计算机的加入显著增强了运算能力,使得传统技术面和基本面分析成为可能。
量化交易的实现需要具备一定编程基础和经验,常用语言包括C++、C#、Java、MATLAB、R和Python等。Python以其强大功能和易学性成为量化交易领域流行的选择,尤其因其成熟的工具链和与C++的兼容性,使得在实现CTA策略时可以高效利用性能优化的底层代码。
在使用Python进行量化交易时,需要注意其在多线程执行、静态类型检查方面的限制,以及代码重构时的痛苦。然而,Python的解释性语言特性、丰富的库支持以及相对快速的执行速度使其成为实现CTA策略的理想选择。对于性能要求较高的高频策略,C++可能更为合适。
实现CTA策略的平台如MultiCharts,提供从策略编写、数据回测到自动化下单的全方位支持,能够满足股票、期货、期权等多种交易需求。MultiCharts支持多数据源、多周期、多商品的图表分析,并提供丰富的指标、警告功能和回测报告,帮助交易者优化策略并实现自动化交易。
ALPHA ZONE为新手交易员提供了集学习和实践于一体的平台,包括量化交易和CTA策略的学习资源、交易经验分享以及模拟盘交易比赛。通过与MT4交易平台授权的wetrademarket进行交互,交易员可以实践CTA策略并积累经验。ALPHA ZONE还推荐了MQL4作为入门编程语言,适合自动化交易策略的实现。
总之,CTA交易策略与量化交易之间存在紧密联系,通过学习和实践,交易员可以利用技术、数据和自动化工具实现高效的市场分析与决策,从而在复杂多变的金融市场中获取收益。
DeepAlpha通用因子挖掘:支持GPlearn遗传算法和深度强化学习挖掘因子(代码+数据下载)
原创文章第篇,专注“AI量化投资、个人成长与财富自由”。
按惯性每周五咱们会迭代版本,今天也不例外。
年前咱们更新到quantlab3.6:
Quantlab3.6:后续产品化的思考
Quantlab3.5代码发布:因子表达式及Alpha因子库实现 | 超参数优化(代码+数据)
本周的重点是gplearn在因子挖掘上的应用,重点是CTA场景。
gplearn遗传算法应用于CTA因子挖掘:手把手教程(代码+数据下载)
gplearn系列:使用因子rank ic评估因子性能(代码+数据)
大家知道,原生的GPLearn并不适合挖掘因子,主要存在以下几个问题:
1、gplearn只支持单标的,在CTA策略单标的可以,但单标的下挖掘的因子,很容易过拟合。
2、内置的函数不适合金融量化因子,需要自己扩展。而且原生的扩展,不支持常数项,比如SMA(),这个就是常数。
3、原生的fitness是ic和Rank IC,不支持夏普比或者卡玛比率这种。
4、而且网上能用的代码有限,版本鱼龙混杂,不成体系,或者文档不全。
5、传统的因子挖掘方法大多基于遗传规划(Genetic Programming)方法,这类方法具有收敛速度慢、超参数难以调优等局限;
网上的代码都是“暴改”之后的,且没有文档,demo未必能跑通。
我给大家跑通了一份,但是基于qlib的,与DeepAlpha同构,后续以这份代码为蓝本了。
大家直接pip install -r requirements.txt即可(python 3.8)
基于A股的qlib数据也会打包给大家,置于~/.qlib/qlib_data/cn_data_rolling目录下:
代码已经发布至星球:AI量化实验室——量化投资的星辰大海
1、支持GPLearn, DSO以及强化学习的版本。
2、数据目前的A股全量数据,qlib格式。
3、支持多支股票同时挖掘。
4、支持多因子联合评测。
AI量化实验室——量化投资的星辰大海