【vn.py】量化策略历史回测(基于本地csv数据)

10 篇文章 41 订阅
订阅专栏

写在前面

策略研发之后,为了检测我们策略的效果,不可能一上来就接入实盘,所以需要的就是通过历史数据对我们的策略进行检验,也就是历史回测。vn.py也有推出历史回测的教程,是通过内置的RQdata进行的,也就是说需要购买RQdata的服务,通过RQdata下载的数据会自动添加到.vntrader下面的SQlite数据库中。除此之外,vn.py还有一种回测方式,就是通过手动导入csv到SQlite数据库中,这种方式就需要你自己有提供数据服务的服务器或者本地用于回测的csv数据。因为在vn.py的源码中,默认是通过RQdata获取数据,如果没有成功,就从数据库中查询。
第一种方法由于需要购买数据服务,虽然需要花钱,但是这是最好的方式了,因为RQdata与vn.py正好契合,不仅可以提供历史回测的数据还可以在实盘阶段为策略进行初始化操作,所以有条件的还是购买这个比较合适。RQdata在vn.py的配置官方教程中已经推出,下面以本地csv进行历史回测进行演示和总结整理。

获取数据

数据获取按照上一篇文中以 新浪财经API获取数据为例。在获取到数据之后,我们需要将得到的数据保存为csv格式数据,以代码中RB1910的1h线为例:

from urllib import request
import json
import pandas as pd


def get_data(id):
    url_60m = 'http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesMiniKLine60m?symbol='
    url = url_60m + id
    req = request.Request(url)
    rsp = request.urlopen(req)
    res = rsp.read()
    res_json = json.loads(res)


    bar_list = []

    res_json.reverse()
    for line in res_json:
        bar = {}
        bar['Datetime'] = line[0]
        bar['Open'] = float(line[1])
        bar['High'] = float(line[2])
        bar['Low'] = float(line[3])
        bar['Close'] = float(line[4])
        bar['Volume'] = int(line[5])
        bar_list.append(bar)

    df = pd.DataFrame(data=bar_list)
    print(df)
    df.to_csv('./data.csv', index=None)

if __name__ == '__main__':
    get_data('rb1910')

这里需要注意的是,在生成的csv的columns的名字必须按照上面的形式进行创建,因为vn.py在csv导入时是按照这些名称进行解析的。

csv数据导入

在得到csv数据之后,我们打开VN Station,选择csv载入模块。

根据我们的数据格式进行选择导入数据。由于我们的数据是rb1910的1h数据,所以代码就是rb1910,交易所是SHFE,周期是HOUR,然后将数据进行导入。
历史回测

输入成功导入之后,打开CTA回测模块,填入相关信息然后开始回测:

得到回测结果:

在这里插入图片描述
上面四个图的意义为别是:

  • 子图1:资金变化曲线,笔直向下说明稳定亏损
  • 子图2:最大回撤曲线,越来越大说明策略亏损越来越多
  • 子图3:每日盈亏统计,红绿分布平均,但绿色密度更大(亏损)
  • 子图4:盈亏的概率分布图,尖峰在0轴左侧(中位数日期发生亏损)
    除了基本的收益走势,每一笔的成交记录、每日盈亏以及K线图都可以进行查看。

回测的另一方面也是为了让我们找到合适的参数,所以对参数进行优化也是必要的。vn.py中也为我们提供了参数优化的模块:
在这里插入图片描述
通过多进程优化可以得到优化的结果:

通过参数优化,我们可以得到最优的参数组合,通过这个最优参数组合再进行回测可以得到更好的结果:

写在后面

不得不说,vn.py无论是数据的下载或者本地csv的load,还是回测的可视化效果,还有参数优化,作为一个专注于量化实盘的框架已经做的很不错了。如果习惯于其他的回测框架,如pybacktest、zipline,也可以选择它们作为回测框架+vn.py实盘框架,回测当然可以选择多个框架进行测试,这样也可以得到更高的鲁棒性。不过话说回来,vn.py在回测方面也做得这么贴心和周到,确实很不容易。

REF

vn.py官方教程

【从零开始vnpy量化投资】十七. 投资组合策略分段回测
魔落的博客
05-26 492
根据投资组合理论最基础的结论,分散投资可以获得比单个资产更低的风险,所以投资组合策略基本需要用到大量的合约来进行测试,尤其是相关性不强的品种。同时,组合策略中的绝大部分都是中长期策略,也就是回测需要验证的周期更长。这两个原因导致我们在测试组合策略时,经常需要加载长达10年的多个合约品种来进行回测
【从零开始vnpy量化投资】六. 历史数据储存到mysql
魔落的博客
04-19 905
在第一课的内容中,我们介绍了如何使用vnpy客户端通过米筐rqdata下载数据,但没有深入研究数据下载到了哪里,以及如何通过代码访问和使用数据。这节课我们将修改database的实现,使用独立安装的mysql来储存数据,用于回测与实盘。
vnpy怎么创建策略回测_【手把手教你】入门量化回测最强神器backtrader(一)
weixin_39724382的博客
10-29 1975
1引言目前基于Python的量化回测框架有很多,开源框架有zipline、vnpypyalgotrader和backtrader等,而量化平台有Quantopian(国外)、聚宽、万矿、优矿、米筐、掘金等,这些量化框架或平台各有优劣。就个人而言,比较偏好用backtrader,因为它功能十分完善,有完整的使用文档,安装相对简单(直接pip安装即可)。优点是运行速度快,支持pandas的矢量运算;...
一个简单量化策略回测
photon222的博客
08-30 9016
实现一个简单的指数定投策略,写一个回测脚本验证一下。 策略 定投创业板指数(场内ETF,或场外指数基金) 一般的定投每期固定金额,而这里采取更激进的方法,每期定投金额随指数降低而增加,即越跌越投(策略详见脚本) 获取指数历史行情 如何获取历史行情数据? 由于我们是按月定投,只需要获取按月K线图即可。有付费软件和网站当然可以获取历史行情数据,但作为一个打游戏从来不充钱的人,本着能不花钱就不花钱的原则,在网上努力找到了免费的资源。 在浏览器输入https://q.stock.sohu.com/hisHq?c
量化交易之回测篇 - 重写vnpy自带的双均线策略
04-26 1084
""" 在测试期货回测器的时候, ag品种出现了一个问题: 回测时ag净值曲线无最大回撤值,也就是说明ag在双均线策略上无回撤,理论上这是不可能的; 所以, 一层层剥开代码来排查后发现问题在vnpy自带的双均线策略的更新bar上除了问题; 慢均线的指标值一直都是nan, 也就是说就算回测的bar已经足够多了, 该值还是更新不成功; 所以就直接废弃了vnpy自带的更新bar操作, 重写; """ from tqz_strategy.template import CtaTemplate from .
iQuant 使用手册——3、策略回测
qq_42879475的博客
07-13 899
回测主图和周期可以 在策略编辑器-基本信息中进行设置,回测开始和结束时间、基准、费率等可以在策略编辑器-回测参数 中设置。此时,可最小化或者关闭「策略编辑器」,并对回测结果进行分析,随着光标在 K 线主图上的移动,右 边回测结果展示窗口会动态显示截止光标所在当日的绩效分析结果(包括年化收益,基准年化收益,单 位净值,下方差,信息比率,夏普比率,波动率,索提诺比率,阿尔法系数,贝塔系数,跟踪误差,最 大回撤,胜率等)、当日买入、当日卖出、持仓列表。回测结果分析-绩效分析、当日买入、当日卖出、当日持仓。
数据分析师1.4量化交易策略回测方法和技巧
weixin_42850424的博客
08-18 2594
1、具体流程 1。利用Python编写好策略,选择选好的股票池。 2。设置开始和结束的时间点,然后设定资金池 3。通过股票池和日期获得股票数据,然后按照设定的间隔,比如每天/每 分钟调用回测函数。 4。下单后,交易软件处理交易。 5。绘制图表显示回测结果 6。回测结束后,画出收益和基准收益曲线,列出每日持仓,每日交易和一 些列风险数据。 风险指标学习 ...
基于Python的vn.py开源量化交易框架源码
最新发布
03-25
vn.py是一个基于Python的开源量化交易框架,旨在为开发者提供一套完整的系统以构建专业的量化交易解决方案。该项目包含133个文件,主要采用Python语言编写,并辅以HTML、Shell和CSS等多种语言,以丰富其功能与界面...
10-vn.py 2.2.0源代码深入分析210326.docx
04-02
vn.py是基于Python语言的量化交易系统,是目前国内最好的开源量化交易平台之一。 vn.py是机构级别的量化交易软件,掌握vn.py框架原理并且熟练使用,有利于快速入门量化交易,搭建自己的量化交易系统,也可以在机构中...
vn.py 2.0.7代码分析入门.docx
10-20
vn.py是基于Python语言的量化交易系统,是目前国内最好的开源量化交易平台之一。 vn.py是机构级别的量化交易软件,掌握vn.py框架原理并且熟练使用,有利于快速入门量化交易,搭建自己的量化交易系统,也可以在机构中...
vn.py是一套基于Python的开源量化交易系统开发框架
01-21
VeighNa是一套基于Python的开源量化交易系统开发框架,在开源社区持续不断的贡献下一步步成长为多功能量化交易平台,自发布以来已经积累了众多来自金融机构或相关领域的用户,包括私募基金、证券公司、期货公司等。
ctp密码修改工具——带源码,适合vn.py首次登陆修改密码使用
01-25
最近一直在玩vn.py,上一篇文章vn.py开发环境搭建(windows)介绍了如何搭建二次开发环境,解决了一些搭建环境过程中遇到的坑。那么接下来这篇文章将解决运行期间的第一个问题。 开始vn.py 1.环境部署完成之后,...
量化策略入门-VNPY系统应用
06-26
VNPY系统是一个开源 的量化策略交易系统,学习本课程快速上手量化交易,赚取属于自己的第一桶金!手把手教课,不错过任何一个细节。1.环境准备2.国内期货CTP3.其他市场交易接口4.第一个量化策略5.历史数据回测优化6.策略实盘自动交易课后讲师布置作业,到您确实可以运行VNPY体系
vnpy-vnpy无界面回测模式
qq_43712322的博客
09-14 909
1.准备工作 我用的是vnpy-v2.5.0 首先是新建一个VNPY_Developer文件夹,将github里面的代码放到这个文件夹(下图只是展示了一部分代码) 2.在vnpy_ctastrategy里面新建backtesting_文件夹,然后创建python文件:backtesting_demo 3.mysql的准备 注意这块是创建vnpy.dbbardata,然后columns要像图中那样,注意2.5版本新增了turnover字段。这块用sql语言创建的时候,注意interval是关键字,因此s
VNPY - CTA策略模块策略回测
IAlexanderI的专栏
08-10 1万+
作者:魔元 目录 使用回测引擎 读懂回测报告 优化策略参数 多进程优化 量化策略主要是从历史数据统计或者发现规律然后应用于实盘交易。当然历史不是简单的重复,这就要求策略需要根据市场调整和优化参数。通过回测历史数据可以验证策略的有效性,了解策略历史收益、最大回撤和回撤时长,对策略参数进行优化等等。CTA策略模块的主要回测目标是验证交易信号是否正确,仓位大小的问题在实盘中则由交易员来确定。...
vnpy框架的策略开发和回测逻辑详解---以螺纹钢主力合约的R-breaker日内策略为例
S_o_l_o_n的博客
08-03 1万+
       笔者之前写过一篇关于vnpy的简单介绍和安装方法,本篇文章的目的是简单介绍vnpy的框架,然后详细介绍一下如何用vnpy开发自己的量化策略以及整个的回测逻辑是怎么样的。只有我们真的搞清楚了框架结构和相关的逻辑,我们才可以比较灵活高效的使用这种开源框架。        vnpy是开源的,好处是显而易见的,我们可以自己修改和增加相关的功能,个性化定制;但是弊端就是,对于我这样的一个初级...
量化投资策略:常见的几种Python回测框架(库)
热门推荐
lawme的专栏
05-19 6万+
量化投资策略:常见的几种Python回测框架(库)  在实盘交易之前,必须对量化交易策略进行回测。在此,我们评价一下常用的Python回测框架(库)。评价的尺度包括用途范围(回测、虚盘交易、实盘交易),易用程度(结构良好、文档完整)和扩展性(速度快、用法简单、与其他框架库的兼容)。   Zipline: 事件驱动的回测框架。Quantopian 正在使用它。 Zip
京东量化教你如何用简单的策略回测盈利
JDquant的博客
12-23 8352
阅读原文:http://club.jr.jd.com/quant/topic/963245 今天来教大家使用量化平台中Python的部分,完成一个简单的策略回测。   首先,回测界面是长这个样子的 可以看到,左半边的大部分区域是编辑代码的地方,开发环境会自动识别Python语言的关键词。在代码区上面的设置标志里面可以个性化调节开发环境的视觉效果。   Python的回测代码主要
vn.py MA策略回测
06-06
好的,下面是一个使用vn.py库进行MA策略回测的示例代码。 首先,我们需要导入所需的库和数据: ```python from vnpy.app.cta_strategy.backtesting import BacktestingEngine, OptimizationSetting from vnpy.app.cta_strategy.strategies.ma_strategy import MAStrategy # 创建回测引擎对象 engine = BacktestingEngine() # 设置回测数据 engine.set_parameters( vt_symbol="IF88.CFFEX", interval="1m", start=datetime(2010, 1, 1), end=datetime(2021, 12, 31), rate=0.3/10000, slippage=0.2, size=300, pricetick=0.2, capital=1_000_000, ) # 添加策略 engine.add_strategy(MAStrategy, {'fast_window': 5, 'slow_window': 10}) # 加载数据 engine.load_data() # 运行回测 engine.run_backtesting() # 输出回测结果 df = engine.calculate_result() print(df[['net_pnl', 'total_profit', 'total_commission']]) ``` 这里我们使用`BacktestingEngine`类创建回测引擎对象,并设置回测参数,包括交易品种、回测时间、手续费等。然后我们添加`MAStrategy`策略,并使用`load_data()`方法加载数据,使用`run_backtesting()`方法运行回测,并使用`calculate_result()`方法计算回测结果,并输出净利润、总盈亏、总手续费等指标。 在上面的代码中,`MAStrategy`是一个简单的MA策略类,其中`fast_window`和`slow_window`分别表示快速和慢速移动平均线的窗口大小。下面是`MAStrategy`类的示例代码: ```python from vnpy.app.cta_strategy import ( CtaTemplate, Direction, StopOrder, TickData, BarData, TradeData, OrderData, BarGenerator, ArrayManager, ) class MAStrategy(CtaTemplate): """ 简单的MA策略 """ author = "vn.py" fast_window = 5 slow_window = 10 fixed_size = 1 fast_ma = 0.0 slow_ma = 0.0 parameters = ["fast_window", "slow_window", "fixed_size"] variables = ["fast_ma", "slow_ma"] def __init__(self, cta_engine, strategy_name, vt_symbol, setting): super().__init__(cta_engine, strategy_name, vt_symbol, setting) self.bg = BarGenerator(self.on_bar, 5, self.on_5min_bar) self.am = ArrayManager() def on_init(self): self.write_log("策略初始化") self.load_bar(10) def on_start(self): self.write_log("策略启动") def on_stop(self): self.write_log("策略停止") def on_tick(self, tick: TickData): self.bg.update_tick(tick) def on_bar(self, bar: BarData): self.bg.update_bar(bar) def on_5min_bar(self, bar: BarData): self.am.update_bar(bar) if not self.am.inited: return self.fast_ma = self.am.sma(self.fast_window) self.slow_ma = self.am.sma(self.slow_window) if self.fast_ma > self.slow_ma: if self.pos == 0: self.buy(bar.close_price + 5, self.fixed_size) elif self.pos < 0: self.cover(bar.close_price + 5, self.fixed_size) self.buy(bar.close_price + 5, self.fixed_size) elif self.fast_ma < self.slow_ma: if self.pos == 0: self.sell(bar.close_price - 5, self.fixed_size) elif self.pos > 0: self.sell(bar.close_price - 5, self.fixed_size) self.short(bar.close_price - 5, self.fixed_size) ``` 在`MAStrategy`中,我们定义了`fast_window`和`slow_window`两个参数来设置快速和慢速移动平均线的窗口大小,并定义了`fixed_size`参数来设置每次交易的数量。在`on_5min_bar()`方法中,我们使用`ArrayManager`类计算快速和慢速移动平均线,并根据MA交叉信号进行买入和卖出操作。 除了单一品种的回测外,vn.py还支持多品种的回测和参数优化等功能,可以根据具体需要进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • RMSE(均方根误差)、MSE(均方误差)、MAE(平均绝对误差)、SD(标准差) 248974
  • 时间序列分析之ADF检验 185021
  • 机器学习里面的Ground Truth是什么意思 161139
  • pandas之分组groupby()的使用整理与总结 142180
  • python 字符串(str)与列表(list)以及数组(array)之间的转换方法详细整理 137870

分类专栏

  • optimization 3篇
  • math 3篇
  • latex 1篇
  • --- 编程语言以及相关知识 --- 1篇
  • java 4篇
  • python 32篇
  • hadoop 6篇
  • linux 5篇
  • Git 1篇
  • data structures and algorithms 5篇
  • django 1篇
  • --- 人工智能 --- 1篇
  • reinforcement learning 3篇
  • outlier analysis 4篇
  • ensemble learning 2篇
  • machine learning 34篇
  • concept drift 2篇
  • --- 量化领域 --- 1篇
  • time series 16篇
  • data analysis 4篇
  • quantitative trading 17篇
  • probability and statistics 7篇
  • option research 4篇
  • vn.py 10篇
  • --- 其他 --- 1篇
  • interview 1篇
  • personal experience 11篇

最新评论

  • 时间序列分析之协整检验

    陌路.642: 请问您的numpy的版本是多少呀?

  • 时间序列分析之ADF检验

    MistyPerth: p-value 和adf值都是拒绝H0的,但是跟可视化序列和把序列拆分成几部分看是否是平稳的结果不一致,这是为什么呀?

  • 解读:基于图卷积特征的卷积神经网络的股票趋势预测(文末赠书)

    Carrielll: 请问有相关代码可以参考一下嘛,邮箱jiali6829@163.com 十分感谢!

  • 机器学习中参数模型和非参数模型理解

    Grenesty: 看到非参数模型对预测效果解释性不强莫名觉得好笑,只要我不做预测,那我就不会预测错误(

  • 【python量化】将Informer用于股价预测

    m0_46723094: 你好,请问data_loader里面只需要改Dataset_Custom这个类的内容吗?还需要改它下面的Dataset_Pred这个类吗

大家在看

  • 463.岛屿的周长 Java笔记
  • (pdf和笔记)Hadoop权威指南 第3版 修订版 (Tom Wbite著)
  • ArcGIS Pro SDK (三)Addin控件 1 按钮类 311
  • 杂项——OPENMV识别红绿灯 128
  • 掌握C++智能指针:shared_ptr、unique_ptr 和 weak_ptr 详解 221

最新文章

  • COLING 2024 | 量化交易相关论文(附论文链接)
  • 【python量化】利用首个时序大模型TimeGPT进行股价预测
  • AAAI 2024 | 量化交易相关论文(附论文链接)
2024年5篇
2023年23篇
2022年16篇
2021年13篇
2020年32篇
2019年68篇
2018年57篇
2017年21篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳SEO优化公司茂名网站优化推广哪家好娄底网站建设推荐阿里百姓网标王推广推荐渭南关键词按天扣费多少钱达州网站开发推荐赤峰网络营销咸阳企业网站制作多少钱阿坝关键词排名包年推广娄底网站优化推广价格乌海百度竞价价格东营设计网站报价山南外贸网站建设德宏百姓网标王推广哪家好霍邱网络广告推广推荐中卫品牌网站设计多少钱黑河模板推广推荐桐城网站优化排名哪家好襄樊网站优化按天扣费多少钱长春网站制作白银关键词按天计费报价塘坑网络广告推广价格张家口网站优化推广多少钱大芬百度网站优化排名凉山建网站价格霍邱网络推广哪家好海口外贸网站设计推荐荆门网站改版哪家好衡水企业网站制作价格长葛品牌网站设计价格毕节seo网站优化价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化