【从零开始vnpy量化投资】二. CTA策略模板与运行机制

本文详细介绍了vnpy的组件构成,包括vnpy_core、vnpy_ctastrategy、vnpy_mysql等包的用途。重点解析了CTA策略模板的运行机制,包括参数设置、变量记录、主要重写方法及其用途。此外,还提到了策略配置文件的存储位置和使用客户端初始化策略配置的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【从零开始vnpy量化投资】二. CTA策略模板与运行机制

概述

本篇主要目标为理解vnpy的组件构成和cta策略模板的运行机制,便于在编写策略时能够避免因理解偏差造成的交易异常。

vnpy组件构成

vnpy主要使用python语言编写,我们首先打开客户端的安装目录,以笔者为例,我将vnpy安装在了D:\soft\vnpy_client 目录下(后续所有D:\soft\vnpy_client路径都代表客户端安装目录,请自行替换为本地安装目录)。vnpy会默认附带安装一个python3的环境,并将vnpy的代码安装到D:\soft\vnpy_client\Lib\site-packages目录下。
在这里插入图片描述
在这里插入图片描述

各常用组件的用途

vnpy包:

vnpy核心代码,主要包含各组件的定义,位置为D:\soft\vnpy_client\Lib\site-packages\vnpy

  • trader.constant.py: 各种数据属性的枚举,如交易所枚举SHFE和多空枚举LONG/SHORT等
  • trader.database.py: 数据存储类的抽象接口
  • trader.datafeed.py: 第三方数据源的接口(我们在上一篇文章中使用的rqdata即为此接口的一种实现)
  • trader.engine.py: vnpy主引擎入口,使用编码模式启动vnpy时需要通过mainEngine类进行操作
  • trader.optimize.py: 参数优化工具
    在这里插入图片描述

vnpy_ctastrategy包:

CTA策略包,位置为D:\soft\vnpy_client\Lib\site-packages\vnpy_ctastrategy

  • engine.py: CTA策略引擎,传入MainEngine后可支持cta策略的运行
  • backtesting.py: CTA回测引擎,使用此类可进行策略回测
  • template.py: CTA策略模板,单合约交易策略的父类

vnpy_mysql包

database类的某种实现,用于处理k线和tick数据的储存,使用开源关系型数据库mysql实现,后续我们会使用这个包的功能对vnpy数据储存进行改造和扩展。位置为D:\soft\vnpy_client\Lib\site-packages\vnpy_mysql。

vnpy_portfoliostrategy包

组合投资策略实现,组合策略的有点为可以同时订阅多个期货合约,从而实现更加复杂的期货管理策略,相应的,组合策略的开发难度也较CTA策略更高,需要投入更多精力。位置为D:\soft\vnpy_client\Lib\site-packages\vnpy_portfoliostrategy

全局配置与策略配置

vnpy虽附带安装了一个sqlite数据库用于k线数据储存,但软件本身的配置和策略的参数配置是使用文件系统储存的,默认位置为C:\Users\xxx\.vntrader,如在启动时指定其他目录为运行目录,则配置在对应目录的.vntrader目录下。
在这里插入图片描述

  • vt_setting.json文件: 全局配置文件,其中主要用到的内容为datafeed和database的配置,可使用记事本等软件直接编辑,或通过vnpy客户端的菜单栏“配置”进行修改。

  • database.db: k线数据默认储存位置,vnpy默认database实现为sqlite,后期我们会将实现替换为mysql,此文件尽量不要手动修改。

  • cta_strategy_setting.json: cta策略配置文件,具体格式如下。可手动编辑或直接通过vnpy客户端生成,初期建议使用客户端生成,避免手动编辑的json格式错误导致策略无法初始化。
    在这里插入图片描述

  • cta_strategy_data.json: cta策略的数据文件,储存策略运行时需要记录的变量

  • portfolio_strategy_setting.json: 组合策略配置文件,除合约信息为多个外,格式基本同cta策略配置

  • portfolio_strategy_data.json: 组合策略数据文件

以上介绍了我们后期会频繁使用的一些组件,其他包大都为某个组件的具体实现,有兴趣的同学可以自行阅读源码并深入了解组件用途。

使用客户端初始化策略配置

点击“功能”>“CTA策略”,选择好需要初始化的策略点击“添加策略”,弹出策略配置窗口后,根据需要配置策略名称、策略标的合约和自定义参数。最后点击“添加”,即可看到策略已创建成功。
在这里插入图片描述
在这里插入图片描述

同时,C:\Users\xxx.vntrader目录下的cta_strategy_setting.json文件中会出现此策略的配置。
在这里插入图片描述

源码解读:

下面我们将开始讲解vnpy的运行机制,了解策略运行的整个生命周期,便于后期针对不同目标修改对应的环节。
官方源码地址:https://gitee.com/vnpy
CTA策略模板:https://gitee.com/vnpy/vnpy_ctastrategy/blob/main/vnpy_ctastrategy/template.py
cta模板类为策略模板父类,自定义策略通过继承此类并重写部分方法来实现策略业务。
这里我们需要注意一下代码的16、17行和24行。
在这里插入图片描述

parameters

parameters为策略的自定义参数,如双均线策略中的自定义参数为快速均线周期fast_window和慢速均线周期slow_window。
在这里插入图片描述

当settings中配置了这两个值时,通过45行update_setting方法,可在策略初始化时将对应配置注入策略对象的对应变量中。
在这里插入图片描述

variables

定义了策略需要记录的运行时变量,如双均线策略的fast_ma0为快速均线的最后一个值。当调用CTAEngine的update_strategy_setting方法时,会将策略对象的对应变量存入data.json策略数据文件。
以已经创建好的策略为例,第一行为配置的参数parameters,第二行为运行时需要展示和记录的变量variables加几个内置变量inited、trading、pos。
在这里插入图片描述

几个需要重写的主要方法及用途:

@virtual
def on_init(self) -> None:
"""
Callback when strategy is inited.
在mainEngine调用init_all_strategies时会触发
"""
pass
@virtual
def on_start(self) -> None:
"""
Callback when strategy is started.
在mainEngine调用start_all_strategies时会触发
"""
pass
@virtual
def on_stop(self) -> None:
"""
Callback when strategy is stopped.
在mainEngine调用close时会触发
"""
pass
@virtual
def on_tick(self, tick: TickData) -> None:
"""
Callback of new tick data update.
接收到tick数据时触发,在使用分钟级k线处理业务的情况下,一般使用默认实现,将每分钟的tick数据合并为k线数据后使用on_bar方法处理策略逻辑
"""
pass
@virtual
def on_bar(self, bar: BarData) -> None:
"""
Callback of new bar data update.
业务逻辑主入口,无论是回调还是实盘,都可以使用此方法实现策略逻辑
"""
pass
@virtual
def on_trade(self, trade: TradeData) -> None:
"""
Callback of new trade data update.
交易成功时触发,可用于记录交易数据,并计算资金盈亏
"""
pass
@virtual
def on_order(self, order: OrderData) -> None:
"""
Callback of new order data update.
发送交易请求后收到订单状态变化时触发,一般仅用于日志输出,方便定位和排查问题即可
"""
pass

CTA策略模板基础内容大概已介绍完毕,如有兴趣可继续阅读官方提供的策略示例进行对比学习。https://gitee.com/vnpy/vnpy_ctastrategy/tree/main/vnpy_ctastrategy/strategies

官方无UI启动示例:

https://gitee.com/vnpy/vnpy/blob/master/examples/no_ui/run.py
在这里插入图片描述

以上即为官方提供的纯编码方式启动CTA策略的示例代码的主体内容,主要是演示如何配置MainEngine,并完成策略的初始化和启动。

CTA策略运行机制

在这里插入图片描述

以上就是策略运行的整个生命周期各组件的执行步骤,粉色部分与策略相关,尤其是涉及各个回调方法的地方,后期是策略开发需要重点关注的部分。
同时我们也需要关注黄色配置文件和数据文件加载或储存的场景,确保系统出现异常时能保证两个配置文件的内容为正确结果,否则容易出现策略使用错误的历史数据运行,在错误的时机进行交易。

### vnpy量化交易入门教程和资源 #### 了解vn.py框架 vn.py是一个开源的量化交易平台,专为金融市场的算法交易设计。该平台支持多种市场数据接口、交易接口,并提供丰富的工具来帮助用户构建自动化交易系统[^1]。 #### Python编程基础 由于vn.py基于Python编写,因此熟悉这门语言至关重要。Python拥有众多用于科学计算的数据处理库如Pandas, NumPy等,这些都极大地方便了交易者进行历史数据分析回测工作。对于初学者来说,《Python量化交易入门》一书提供了详细的Python编程指导,特别是针对量化交易的应用场景进行了优化说明。 #### 安装环境配置 为了确保vn.py能够正常运行,在安装过程中可能会遇到依赖包版本不兼容的问题。例如,默认安装的NumPy版本可能过低而导致某些功能无法正常使用;此时可以通过指定清华镜像源的方式更新至最新稳定版: ```bash pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade numpy ``` #### 学习路径建议 - **理论学习**:阅读相关书籍资料,理解基本概念和技术细节; - **实践操作**:跟随官方文档完成几个简单的例子项目; - **案例研究**:深入探讨书中提到的具体策略实现方法(如CTA趋势跟踪策略),并尝试自己动手修改参数观察效果变化; - **社区交流**:加入活跃的技术论坛或QQ群组讨论问题分享经验心得。 #### 实战演练指南 通过实际编码练习可以更好地掌握所学知识。可以从最基础的时间序列分析做起,逐步过渡到更复杂的模型训练环节。比如利用`cta_backtesting_util.py`脚本来进行策略性能评估就是一个很好的起点[^2]: ```python from vnpy.app.cta_strategy.backtesting import BacktestingEngine engine = BacktestingEngine() # 加载策略... engine.add_strategy(MyStrategyClass, setting_dict) # 设置回测时间范围和其他必要参数... result = engine.run_backtesting() print(result) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔落凡尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值