之前介绍过量化策略开发过程中容易菜的坑,

量化中需留意的坑之一: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等抽样测试.避免偶然因素引起偏差.导致回测结果过于乐观或悲观

量化中需留意的坑之二相关推荐

  1. 量化中需留意的坑之一

    我之前在x矿发的帖子,看到有框友问这方面的问题.就挪过来了 01. 默认手续费过高 问题:优矿默认手续费万八,太高(目前个人新开最低万二点五,之前有万二但被叫停了). 尤其对于日调仓策略,万八会消耗很 ...

  2. 移远EC200UCN_LA 4G通信模块 OpenCPU二次开发过程中遇到的各种坑

    这里主要记录一下我在使用移远开发板进行 EC200UCN_LA 4G通信模块开发中遇到的各种坑. 注: Q为遇到的问题    A为问题的解决办法   T为注意事项 Q. 串口demo无法正常接收和发送 ...

  3. ODrive踩坑(二)3508电机和TLE5012B磁编码器参数配置、校准、位置闭环模式转动电机(TLE5012B-E1000)

    ODrive对无刷电机进行闭环控制,需要提前获取电机和编码器的参数. 电机极对数 电机需要配置的参数为 极对数.最大电流.校准电流.电机类型.其他参数如相电阻.电感等可由驱动器自动测量. 极对数 = ...

  4. 机器学习中踩过的坑,如何让你变得更专业?

    2020-05-24 23:42:23 编译 | 这只萌萌 编辑 | 丛 末 踩过坑才知道哪些路不可行,有时候犯错误也能帮助我们变得更加专业. 数据科学家Archy de Berker 在本文中详述了 ...

  5. HR如何避免求职中那些错误的“坑”?

    HR如何避免求职中那些错误的"坑"? 跳错一个坑,后悔大半年. 对于HR来说,有些职位并不是美丽的邂逅,而是你职业生涯的"陷阱",今天我们探讨如何分析目标岗位, ...

  6. 阿里云ECS服务器配置LAMP时安装配置mysql数据库填坑(二)

    阿里云ECS服务器配置LAMP时安装配置mysql数据库填坑(二) 上篇文章讲到的是安装apache服务器时遇到的坑,经过排错总算是把Apache的坑填完了,没想到安装mysql又跳坑里了,真是不得不 ...

  7. 自己做量化交易软件(5)通通量化中创作的布林指标BOLL线

    自己做量化交易软件(5)通通量化中创作的布林指标BOLL线 我们读者下载了通通量化演示框架的源代码.在这个代码中没有发现BOLL指标线的算法和绘图函数,我在这篇文章中,假设用户自己创作了新指标BOLL ...

  8. 易宝典文章——玩转Office 365中的Exchange Online服务 之二 怎样申请一个Office 365企业(试用)账户...

    玩转Office 365中的Exchange Online服务 之二 怎样申请一个Office 365企业(试用)账户 前面简单介绍了Office 365和Exchange Online.也就是说,可 ...

  9. 整理前端工作中的可复用代码(二):拓展spark-md5,支持计算网络文件md5

    这里是<整理前端开发中的可复用代码>中的第二篇,最初此系列文章的标题不是这个,但觉得标题要准确.明白一些,便做了修改.这里的经验都来自作者的工作实践,入了前端坑的摸爬滚打. 背景 在工作中 ...

最新文章

  1. 设置flashfxp选中ftp密码的时候显示出来看
  2. webpack笔记(6)调试模式
  3. SAP PM技术对象
  4. 2.2 理解 Mini-batch 梯度下降-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  5. 为部署ASP.NET Core准备:使用Hyper-V安装Ubuntu Server 16.10
  6. mybatis批量插入oracle报表达式,mybatis oracle两种方式批量插入数据
  7. 微服务技术栈:API网关中心,落地实现方案
  8. 史上最走心的Webpack4.0中级教程——配置之外你应该知道事
  9. 项目应用EasyUI_Tab控件全部关闭
  10. Java学习资源、视频教程汇总
  11. dragstart drag dragend dragenter dragover dragleave drop
  12. 提升安全性----用户资金防篡改
  13. sqlmap常见命令
  14. Blender 快捷键笔记
  15. 有哪些让你印象深刻的bug?
  16. 高级研发工程师岗位职责
  17. 电脑常见问题之-右键无新建文件夹选项
  18. 基于Java Swing的小游戏-连连看
  19. z390 m.2 接口插上sata 硬盘后,机械硬盘不识别;HDD 硬盘不识别;z390 m.2和 SATA 硬盘安装组合;
  20. 分布电容和杂散电容_杂散电容概述

热门文章

  1. 利用cli.go来写命令行应用
  2. sql 实现决策树_SQL Server中的Microsoft决策树
  3. 转储sql文件_在Linux上SQL Server中更改SQL转储文件位置
  4. ssis导入xml_使用SSIS包将XML文档导入SQL Server表
  5. 如何创建和配置SQL Server代理警报
  6. SQL Server中的内存优化表变量
  7. ContentType明细对照表(文件类型相关的设置)
  8. 医疗信息季节:在医疗行业未来的变化(继续前传)
  9. XML与java的应用
  10. 庆祝ColdFusion十周年