note23_个人vnpy主要改动

vnpy19

回测时使用barmode(默认)

note18_vnpy套利价差的计算和普通价差关系

vnpy中spreed价差计算的理解

价差关系如下

note20_策略停止再启动的风险及趋势策略发单丢失问题

(这篇文章是个人定制版的梳理,和主分支稍有差别)
单个策略停止后启动有哪些风险?
先用vnpy19为例:描述onstart的前应后果
首先init,不解释,其次onInit,初始化策略,最后onstart启动策略
Vp19中执行如下

1
2
3
4
5
6
7
self.strategy.onInit()
self.strategy.inited = True
self.output(u'策略初始化完成')

self.strategy.trading = True
self.strategy.onStart()
self.output(u'策略启动完成')

note22_onTradeOnOrderOnStopOrder区别

ontrade

1
2
3
4
5
6
7
cataEngine:
processTradeEvent
self.eventEngine.register(EVENT_TRADE, self.processTradeEvent)

backtesting
def crossLimitOrder(self):
def crossStopOrder(self):

note19_套利实盘和配置不一致问题

看一组配置和实盘成交序列
`

note17_vnpy关于bar的处理隐患

数据差异:rqdatat和vnpy自己记录行情差异

vnpy自己记录:含头不含尾
9:00有,11:30无,东财上看也同样规则到11.29后续无tick了(所以vnpy记录方式是对的)
rq数据:含头含尾
但是自己下载的rq数据则是满载的9:00有,11:30也有。并且是有成交量的有效数据。

note11_增加测试评估指标

 阅读<海龟交易法则>时,对其评估指标部分,非常认同.其实自己之前在做股票量化时也注意到这个问题,就是起始日期对回撤影响大,尤其是在上证50上做测试时,相差一天结果可能天壤之别.书中提到的一些指标,个人还是比较认同的,所以想在vnpy中实现下,自己回测过程中也可以留意下是否真的更客观的反映策略优劣.

<海龟交易法则>12.4:回归年度回报率:

note12_批量测试标的和策略

目的:每个月测试之前已有策略和不同标的组合,寻找到最优的策略-标的配对组,然后进行进一步的分析.比如.参数优化和表现稳定性测试等.

搜索(百度,google,bing):vnpy批量回测,vnpy并行回测
相关链接:
[原创文章] VNPY 批量策略回测和统计结果的excel输出:http://www.vnpie.com/forum.php?mod=viewthread&tid=2734
VNPY 批量优化参数,并输出到excel:http://blog.itpub.net/22259926/viewspace-2156701/
参考上面进行开发
回测结果写入csv,结果如附件所示:vnpy_batch_test.csv

note13_模拟环境的对接启动

本机界面环境启动回测

01,有界面的启动:

note14_虚拟机软件安装

常规软件安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1,
先修改默认编辑器为vim(默认为nano):
sudo update-alternatives --config editor
2,pip
sudo apt install python-pip -y

3,vim,git,aria2
apt-get install vim
sudo apt install git -y
apt-get -y install aria2

4,安装Anaconda
参考:Linux系统安装Anaconda:https://blog.csdn.net/teeyohuang/article/details/79076239
wget https://repo.anaconda.com/archive/Anaconda3-2019.03-Linux-x86_64.sh
bash bash Anaconda3-2019.03-Linux-x86_64.sh
一般都是yes
留意:Do you wish the installer to initialize Anaconda3
这个推荐no,最好也写yes,yes后不需要手动修改bashrc了

vim ~/.bashrc
最后一行添加 :export PATH="/home/Teeyo/anaconda3/bin:$PATH"
source .bashrc
执行:python,提示信息中有anaconda就说明使用anaconda的python,可以认为成功了。

note16_vnpy穿透认证

1,申请券商模拟盘帐号(提交模拟帐号和appid)
2,填写测试申请表,填写后券商邮件回复中包含有终端认证码:终端认证码xxx
3,结合模拟帐号,密码,appid和终端认证码以及券商接口信息,使用ctptest接口对接。

1
2
3
4
譬如东航
IP 地址:210.13.65.102 交易端口:43205 行情端口:43213
BrokerID:7070
API 版本号:API_6.3.13_T4

note08_自带策略分析优化

策略:AtrRsiStrategy
回测表现:

1
2
3
4
5
6
7
8
9
10
11
12
2019-04-07 20:18:01.810293	第一笔交易:	2014-01-13 10:30:00
2019-04-07 20:18:01.810320 最后一笔交易: 2015-12-31 15:15:00
2019-04-07 20:18:01.810373 总交易次数: 2,103.0
2019-04-07 20:18:01.810397 总盈亏: 845,985.78
2019-04-07 20:18:01.810418 最大回撤: -164,071.12
2019-04-07 20:18:01.810438 平均每笔盈利: 402.28
2019-04-07 20:18:01.810456 平均每笔滑点: 120.0
2019-04-07 20:18:01.810475 平均每笔佣金: 65.11
2019-04-07 20:18:01.810493 胜率 37.9%
2019-04-07 20:18:01.810512 盈利交易平均值 9,815.46
2019-04-07 20:18:01.810531 亏损交易平均值 -5,342.22
2019-04-07 20:18:01.810549 盈亏比: 1.84

note10_常见坑

模板TargetPosTemplate的cancelAll()隐患

 在阅读vnpy的样例代码可以发现,其主要逻辑都是在onbar(or ontick)中实现,这个和大部分基于股票回测的类似zipline等基本类似。但稍有差异的是onbar中首先会清空之前订单,也即是调用self.cancelAll()方法。
但是,在使用模板TargetPosTemplate时,系统提供样例MultiSignalStrategy却没做相同处理,看了下其实是在

note04_回测评价指标的缺陷

 之前自己对CTA一直很好奇,原因之一是其回测曲线形态非常诱人,基本都是是单调上涨的,今天阅读了vnpy的源代码才弄明白,原来其回测曲线是基于交易次数,而非交易时间的,也就是说x轴表示次数。这样的的话就很好解释为何其形态表现好了。但这么评价也存在较大风险或漏洞。

问题1:忽视基础资产在这个区间表现

note05_统计日收益代码问题

vnpy中发现了日收益统计模块
回测发现和自己添加的bar层面的收益通过结果不一致
图1:vnpy的showDailyResult的回测图

图2:类似思路自己开发的基于bar(分钟)的回测图

note06_回测结果可视化改进

 对vnpy原始的策略评估做了调整,去掉部分不是非常重要或虽然重要但从其他图中可以看出的冗余信息(比如最大回撤),没必要专门用一图进行绘制.
 策略:vnpy的样例策略strategyAtrRsi
 回测信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
2019-04-07 20:17:45.237743	开始载入数据
2019-04-07 20:17:45.298343 载入完成,数据量:132026
2019-04-07 20:17:45.298398 开始回测
2019-04-07 20:17:45.380278 策略初始化完成
2019-04-07 20:17:45.380334 策略启动完成
2019-04-07 20:17:45.380345 开始回放数据
2019-04-07 20:18:01.712193 数据回放结束
2019-04-07 20:18:01.712272 计算回测结果
2019-04-07 20:18:01.810235 ------------------------------
2019-04-07 20:18:01.810293 第一笔交易: 2014-01-13 10:30:00
2019-04-07 20:18:01.810320 最后一笔交易: 2015-12-31 15:15:00
2019-04-07 20:18:01.810373 总交易次数: 2,103.0
2019-04-07 20:18:01.810397 总盈亏: 845,985.78
2019-04-07 20:18:01.810418 最大回撤: -164,071.12
2019-04-07 20:18:01.810438 平均每笔盈利: 402.28
2019-04-07 20:18:01.810456 平均每笔滑点: 120.0
2019-04-07 20:18:01.810475 平均每笔佣金: 65.11
2019-04-07 20:18:01.810493 胜率 37.9%
2019-04-07 20:18:01.810512 盈利交易平均值 9,815.46
2019-04-07 20:18:01.810531 亏损交易平均值 -5,342.22
2019-04-07 20:18:01.810549 盈亏比: 1.84
2019-04-07 20:18:07.159576 计算按日统计结果
2019-04-07 20:18:07.932968 ------------------------------
2019-04-07 20:18:07.933012 首个交易日: 2014-01-13
2019-04-07 20:18:07.933033 最后交易日: 2015-12-31
2019-04-07 20:18:07.933048 总交易日: 482
2019-04-07 20:18:07.933063 盈利交易日 247
2019-04-07 20:18:07.933076 亏损交易日: 235
2019-04-07 20:18:07.933090 起始资金: 1000000
2019-04-07 20:18:07.933114 结束资金: 1,846,078.7
2019-04-07 20:18:07.933133 总收益率: 84.61%
2019-04-07 20:18:07.933151 年化收益: 32.7%
2019-04-07 20:18:07.933169 总盈亏: 846,078.7
2019-04-07 20:18:07.933187 最大回撤: -142,187.16
2019-04-07 20:18:07.933205 百分比最大回撤: -8.62%
2019-04-07 20:18:07.933223 总手续费: 136,901.3
2019-04-07 20:18:07.933240 总滑点: 252,300.0
2019-04-07 20:18:07.933258 总成交金额: 4,563,376,620.0
2019-04-07 20:18:07.933276 总成交笔数: 4,205.0
2019-04-07 20:18:07.933294 日均盈亏: 1,755.35
2019-04-07 20:18:07.933311 日均手续费: 284.03
2019-04-07 20:18:07.933328 日均滑点: 523.44
2019-04-07 20:18:07.933346 日均成交金额: 9,467,586.35
2019-04-07 20:18:07.933363 日均成交笔数: 8.72
2019-04-07 20:18:07.933381 日均收益率: 0.14%
2019-04-07 20:18:07.933398 收益标准差: 1.34%
2019-04-07 20:18:07.933415 Sharpe Ratio: 1.57
2019-04-07 20:18:09.036527 ------------------------------
2019-04-07 20:18:09.036648 首个交易bar: 2014-01-13 09:16:00
2019-04-07 20:18:09.036726 最后交易bar: 2015-12-31 15:15:00
2019-04-07 20:18:09.036746 总交易bar: 130136
2019-04-07 20:18:09.036781 盈利交易bar 55358
2019-04-07 20:18:09.036817 亏损交易bar: 56905
2019-04-07 20:18:09.036851 bar均盈亏: 6.5
2019-04-07 20:18:09.036872 bar均手续费: 1.05
2019-04-07 20:18:09.036891 bar均滑点: 1.94
2019-04-07 20:18:09.036910 bar均成交金额: 35,066.21
2019-04-07 20:18:09.036928 bar均成交笔数: 0.03
2019-04-07 20:18:09.036948 bar均收益率: 0.0%
2019-04-07 20:18:09.036966 收益标准差: 0.08%

note01_目录分析及学习要点

粗略来看代码很多的样子,实际没那么复杂,

先对各目录大功能有个概览吧,

note02_各文件功能梳理

先推荐一片vnpy专栏教程:
钱塘小甲子:https://blog.csdn.net/qtlyx/column/info/30705
他写的也比较不错
他基本是按照”先深遍历”的思路阅读的,每个代码块追究比较细致,

我个人喜欢先易后难,否则代码太多,看起来容易灰心,先把容易的清理干净,在追溯代码。

note03_学习推荐

本来是打算花大时间,好好的学习vnpy的,后续作为自己主要开发工具(冲着可实盘)。

但这两天扫了遍代码,发现还是挺轻量级的,如果当做主要开发工具,需要补充还是挺多的(只支持单标的以及缺少分钟数据源。多标的需要另外定制模板类,有些负责,对个人玩家,真没精力在平台上花大力气折腾,公司来做比较合适,而且任何改动都需要完整的测试,否则就是真金白银的损失),后续更倾向于将其当做对接实盘的中介使用。开发,回测,模拟都还在米框上进行(赞下米框,最新也支持期货的模拟盘了)。

vnpy实战培训day01_学习笔记

正期望值系统

期望=仓位*盈利概率*盈利点数-仓位*亏损慨率*止损点数-交易手续费
高频交易:
仓位低,盈利概率高,盈利点数小,交易手续费高
CTA交易:
动态仓位,盈利概率低,盈利点数高
亏损概率高,止损点数低
套利交易:
动态仓位,盈利概率高,盈利点数低
亏损概率低,止损点数低

vnpy实战培训day02_学习笔记

这节课主要讲了numpy,pandas,tushare,talib,matlabplot用法,如果有基础的化不用听了

能看懂如下样例代码就行了

vnpy实战培训day03_学习笔记

这一节纯干货,讲解了vnpy的项目结构(代码结构),核心功能引擎
建议先看视频,在阅读代码,然后在回来看视频,这样理解的更为透出,否则仅仅看视频很难有深入的理解。

vnpy特点及和其他系统区别

vnpy实战培训day04_作业

使用第一堂课的作业,存入MongoDB的数据,对demo策略进行回测。

load数据到mongo并查看
直接使用现成数据吧
VN.PY附带了两份数据,一个是IF指数1分钟数据,一个是螺纹钢指数1分钟数据。在examples\CtaBacktesting目录下,csv格式的。
VN.PY已经帮我们准备好了。在框架的ctaHistoryData.py类中,已经实现好了。
执行:loadCsv,py就行了,2份csv数据就到mongo数据库中了
结果:

vnpy实战培训day04_学习笔记

基于VNPY编写策略

策略运行逻辑 讲解策略在vnpy中的运行逻辑,包括tick级别、分钟级别、混合等

vnpy实战培训day05_作业

课后作业

  1. 使用第一节课入Mongodb 的Tick,对三均线策略进行Tick级别回测
    1
    修改回测引擎回测参数:self.mode = self.BAR_MODE
  2. 从数据源下载分钟级别数据,导入MongoDB,进行回测
    1
    2
    参考另一篇文章
    pyspider抓取数字货币价格bitcoin:https://blog.csdn.net/u011331731/article/details/88791134
  3. 对比1、2,找出其信号差异,尝试修改三均线策略。
    1
    由于本机已经改为v1.9版本,不在进行尝试,计划用vnpy实现常用技术指标策略,双均线,三均线等。
  4. 尝试修改周期为15分钟,或18分钟。
    1
    2
    3
    按照1.9的改法,定义
    self.bg = BarGenerator(self.onBar, 15, self.onBar15)
    在KkStrategy中新增函数onBar15,就是每15分钟应该执行的操作

vnpy实战培训day05_学习笔记

模型实战_三均线趋势模型
这节课主要内容是讲解了三均线案例,最好的学习方式是阅读代码。

基础版:使用分钟级别数据,实现三均线的趋势模型。
趋势模型的优化

vnpy实战培训day06_学习笔记

主要是策略讲解,最好自己看下策略实现

(商品期货)套利分析

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×