量化中需留意的坑之二
之前介绍过量化策略开发过程中容易菜的坑,
量化中需留意的坑之一:https://blog.csdn.net/u011331731/article/details/88351599
本文想补充的是另一个,并且往往会被大家忽视的(被坑过才晓得)
主流量化框架模板(以uqer为例,当然不是一个,ricequant,掘金,以及开源回测框架zipline等都是类似模板)
start = '2017-01-01' # 回测起始时间
end = '2018-01-01' # 回测结束时间
universe = DynamicUniverse('HS300') # 证券池,支持股票、基金、期货、指数四种资产
benchmark = 'HS300' # 策略参考标准
freq = 'd' # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测
refresh_rate = 1 # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟
def initialize(context):
pass
# 每个单位时间(如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次)调用一次
def handle_data(context):
# 卖出当前持有,但目标持仓没有的部分
for stock in set(current_position).difference(target_position):
account.order_to(stock, 0)
# 根据目标持仓权重,逐一委托下单gaigai
for stock in target_position:
account.order(stock, 10000)
这种模板,最大问题在于start = '2017-01-01' ,这一行看似普通,其实对后续交易序列影响很大.
默认调仓为n日一个周期,每个完全卖出再买入,这样当然是最简单直观的。
但这种机制其实有个缺陷,2个完全相同策略,策略开始日期相差一天,实际买卖序列可能完全不同,有偶然因素。
(这个问题自己回测遇到过,但代码以及被冲掉了,所以不大好拿出实例,大家可以用自己之前认为不错的策略试试)
正确的做法什么?
保持每日一刷新,但是每天只使用1/n的资金(比如原来20日一次买卖全部调仓,现在每天买卖,资金为原来1/20),卖出n天前的组合(理论上收回1/n资金),然后买入今天符合条件的个股。但这样做会导致回测框架复杂很多,需要考虑很多细节.比如,需要登记每日的买入卖出stock,T+1日的买入,在T+1+20日进行check是否满足条件,是否卖出.(止损不在此列).
等价于同时执行了20个并行策略,这些策略的start='2017-01-01' ,'2017-01-02' ,'2017-01-03','2017-01-04',,等20个(未考虑工作日,大概这意思).实际操作过程中可以选择start=T,T+5,T+10, T+15等抽样测试.避免偶然因素引起偏差.导致回测结果过于乐观或悲观
量化中需留意的坑之二相关推荐
- 量化中需留意的坑之一
我之前在x矿发的帖子,看到有框友问这方面的问题.就挪过来了 01. 默认手续费过高 问题:优矿默认手续费万八,太高(目前个人新开最低万二点五,之前有万二但被叫停了). 尤其对于日调仓策略,万八会消耗很 ...
- 移远EC200UCN_LA 4G通信模块 OpenCPU二次开发过程中遇到的各种坑
这里主要记录一下我在使用移远开发板进行 EC200UCN_LA 4G通信模块开发中遇到的各种坑. 注: Q为遇到的问题 A为问题的解决办法 T为注意事项 Q. 串口demo无法正常接收和发送 ...
- ODrive踩坑(二)3508电机和TLE5012B磁编码器参数配置、校准、位置闭环模式转动电机(TLE5012B-E1000)
ODrive对无刷电机进行闭环控制,需要提前获取电机和编码器的参数. 电机极对数 电机需要配置的参数为 极对数.最大电流.校准电流.电机类型.其他参数如相电阻.电感等可由驱动器自动测量. 极对数 = ...
- 机器学习中踩过的坑,如何让你变得更专业?
2020-05-24 23:42:23 编译 | 这只萌萌 编辑 | 丛 末 踩过坑才知道哪些路不可行,有时候犯错误也能帮助我们变得更加专业. 数据科学家Archy de Berker 在本文中详述了 ...
- HR如何避免求职中那些错误的“坑”?
HR如何避免求职中那些错误的"坑"? 跳错一个坑,后悔大半年. 对于HR来说,有些职位并不是美丽的邂逅,而是你职业生涯的"陷阱",今天我们探讨如何分析目标岗位, ...
- 阿里云ECS服务器配置LAMP时安装配置mysql数据库填坑(二)
阿里云ECS服务器配置LAMP时安装配置mysql数据库填坑(二) 上篇文章讲到的是安装apache服务器时遇到的坑,经过排错总算是把Apache的坑填完了,没想到安装mysql又跳坑里了,真是不得不 ...
- 自己做量化交易软件(5)通通量化中创作的布林指标BOLL线
自己做量化交易软件(5)通通量化中创作的布林指标BOLL线 我们读者下载了通通量化演示框架的源代码.在这个代码中没有发现BOLL指标线的算法和绘图函数,我在这篇文章中,假设用户自己创作了新指标BOLL ...
- 易宝典文章——玩转Office 365中的Exchange Online服务 之二 怎样申请一个Office 365企业(试用)账户...
玩转Office 365中的Exchange Online服务 之二 怎样申请一个Office 365企业(试用)账户 前面简单介绍了Office 365和Exchange Online.也就是说,可 ...
- 整理前端工作中的可复用代码(二):拓展spark-md5,支持计算网络文件md5
这里是<整理前端开发中的可复用代码>中的第二篇,最初此系列文章的标题不是这个,但觉得标题要准确.明白一些,便做了修改.这里的经验都来自作者的工作实践,入了前端坑的摸爬滚打. 背景 在工作中 ...
最新文章
- 设置flashfxp选中ftp密码的时候显示出来看
- webpack笔记(6)调试模式
- SAP PM技术对象
- 2.2 理解 Mini-batch 梯度下降-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
- 为部署ASP.NET Core准备:使用Hyper-V安装Ubuntu Server 16.10
- mybatis批量插入oracle报表达式,mybatis oracle两种方式批量插入数据
- 微服务技术栈:API网关中心,落地实现方案
- 史上最走心的Webpack4.0中级教程——配置之外你应该知道事
- 项目应用EasyUI_Tab控件全部关闭
- Java学习资源、视频教程汇总
- dragstart drag dragend dragenter dragover dragleave drop
- 提升安全性----用户资金防篡改
- sqlmap常见命令
- Blender 快捷键笔记
- 有哪些让你印象深刻的bug?
- 高级研发工程师岗位职责
- 电脑常见问题之-右键无新建文件夹选项
- 基于Java Swing的小游戏-连连看
- z390 m.2 接口插上sata 硬盘后,机械硬盘不识别;HDD 硬盘不识别;z390 m.2和 SATA 硬盘安装组合;
- 分布电容和杂散电容_杂散电容概述