vnpy学习日志

cta_backtesting/backtesting_demo.ipynb

脚本用于执行cta策略回测,具体采用策略在vnpy_ctastrategy文件夹下,我用到的是双均线策略double_ma_strategy.py文件下的doublemaStrategy

首先调用了datetime模块,用于处理日期和时间

从vnpy_ctastrategy.backtesting模块中导入BacktestingEngine类,这个类是回测的核心,负责模拟交易和计算结果

从vnpy_ctastrategy.strategies.double_ma_strategy模块中导入doublemaStrategy类,这是双移动平均线策略的实现

代码运行

1. 初始化回测引擎backtestingengine()赋值给engine

2. 设置回测参数 

  合约代码vt_symbol:IF.CFFEX

  时间范围:2024年12月26日至2025年3月3日

  数据粒度interval:1分钟K线

  手续费率:0.3/10000,滑点:0.2,合约乘数:1

  初始资金:1,000,000

3. 添加策略类doublemaStrategy,第二个参数是一个空字典{}可以设置参数,没有就默认

4. 加载历史数据并运行回测

5. 计算回测结果及统计指标返回一个dataframe

6. 显示回测图表并输出当前合约信息 

脚本运行后,导入类和模块,异步运行代码


代码分析double_ma_strategy.py 

实现基于双均线交叉的CTA策略,通过均线金叉/死叉生成交易信号,完成自动买卖操作 

从vnpy_ctastrategy模块中导入

ctatemplate策略模板类,提供了策略框架

stoporder止损单类

tickdata、bardata、tradedata、orderdata行情数据、分钟线数据、成交数据和订单数据的类

bargenerator生成分钟线数据的类

arraymanager管理数组数据的类

通过bargenerator将Tick数据合成1分钟K线

arraymanager维护K线序列,计算技术指标

加载至少10根历史K线load_bar(10),确保均线计算有足够数据

on_bar应该是策略的核心

每根新K线生成时 

取消所有未完成订单cancel_all() 

更新ArrayManager数据,检查数据是否初始化完成

计算快速均线和慢速均线的当前值与前值然后判断交叉根据均线的交叉勤快进行交易

ctatemplate

文件位置vnpy_ctastrategy

策略生命周期管理、订单接口、日志记录等基础功能

bargenerator

文件位置vnpy_ctastrategy

将tick数据聚合为K线,触发on_bar回调

arraymanager 

文件位置vnpy_ctastrategy

管理时间序列数据,支持sma等指标计算

作用

on_init 策略初始化时的回调函数

on_start策略启动时的回调函数

on_stop策略停止时的回调函数

on_tick收到新的 tick 数据时的回调函数

on_bar收到新的分钟线数据时的回调函数

on_order收到新的订单数据时的回调函数

on_trade收到新的成交数据时的回调函数

on_stop_order收到新的止损单数据时的回调函数


ctatemplate基类

dmoublemastrategy继承的ctatemplate

作为交易策略的模板,提供了基本的框架和工具

trading策略是否在交易中

update_setting(setting)更新策略的参数

get_class_parameters()获取策略类的默认参数

get_parameters()获取策略的参数字典

get_variables()获取策略的变量字典

get_data()获取策略的数据字典

on_tick(tick)、on_bar(bar)、on_trade(trade)、on_order(order)、on_stop_order(stop_order)数据和订单更新的回调方法

buy()、sell()、short()、cover():发送买卖订单的方法

send_order()发送订单的核心方法

cancel_order(vt_orderid)取消订单

cancel_all()取消所有订单

write_log(msg)记录日志信息

get_engine_type()获取引擎类型

get_pricetick()获取合约的最小价格变动单位

get_size()获取合约的乘数

load_bar()、load_tick()加载历史数据

put_event()发送策略事件

send_email(msg)发送电子邮

sync_data()同步策略数据

tick_add价格偏移量

last_tick最后收到的 Tick 数据

last_bar最后收到的分钟线数据

target_pos目标仓位

on_tick(tick)、on_bar(bar)数据更新的回调方法

on_order(order)订单更新的回调方法

check_order_finished()检查订单是否完成

set_target_pos(target_pos)设置目标仓位

trade()执行交易逻辑

cancel_old_order()取消旧订单

send_new_order()发送新订单

Tick数据通过on_tick()接收,触发BarGenerator合成K线

通过on_bar()处理,执行策略逻辑如均线计算、信号生成 

load_bar()加载历史K线数据,触发on_bar()逐根回放

load_tick()加载历史Tick数据,触发on_tick()逐笔回放

BarGenerator

在on_tick()中更新,合成K线后触发on_bar()

1初始化策略

创建CtaTemplate或其子类的实例

调用__init__方法,初始化策略的属性和参数

调用update_setting(setting)方法,更新策略的参数

2加载数据

调用load_bar(days, interval, callback, use_database)或load_tick(days)方法,加载历史数据

数据加载完成后,调用on_bar(bar)或on_tick(tick)方法,更新策略的状态

3策略启动

调用on_start()方法,启动策略

策略进入交易状态,开始处理数据和订单

4数据处理

当新的数据分钟线或 Tick 数据到达时,调用on_bar(bar)或on_tick(tick)方法

在这些方法中,策略会根据数据更新状态,并生成交易信号

5信号生成与订单处理

根据生成的信号,调用buy()、sell()、short()或cover()方法发送订单

订单发送后,调用on_order(order)方法处理订单状态

如果订单成交,调用on_trade(trade)方法处理成交信息,更新持仓

6策略停止

调用on_stop()方法,停止策略

策略退出交易状态,清理资源

7数据同步与事件通知

调用put_event()方法,发送策略事件,通知ui更新

调用sync_data()方法,同步策略数据到磁盘


ctatemplate 在实盘的时候底层调用什么下单,在回测时候调用什么下单

底层调用cta_engine.send_order()方法通过Gateway连接交易所接口实际委托单通过交易API发送到交易所

回测调用BacktestingEngine基于pricetick和slippage计算成交价按时间优先原则匹配订单 自动处理手续费rate参数

send_order方法会调用send_stop_order或send_limit_order


接实盘的时候交易所来行情更新,怎么把新更新的数据推送给策略,或者策略怎么知道数据更新了,怎么获取最新价格

交易所-Gateway-EventBus-CtaEngine-策略实例

1Gateway收到行情后生成TickData/BarData事件

2CtaEngine通过register_event捕获事件

3触发策略的on_tick()或on_bar()回调

4策略通过参数直接获取最新价格tick.last_price    bar.close_price


ctatemplate 在接回测的时候,怎么通过历史数据回放,然后通过回放的数据计算盈亏

从数据库加载历史数据start和end时间过滤按时间顺序逐根推送数据到策略策略产生信号后生成虚拟订单


ctatemplate 底层具体接哪个数据库,由什么控制的

默认数据库SQLite,支持MongoDB  MySQL/PostgreSQL

修改这个里面vt_setting.json

由这个控制

fromvnpy.trader.databaseimport database_manager

database_manager.init("mongodb://localhost:27017")

按这个存储

K线数据dbbardata

Tick数据表dbtickdata

通过Interval字段区分

__init__.py初始化和配置cta策略

。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容