我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python量化回测常见陷阱有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python量化回测常见陷阱有哪些

这篇文章主要介绍“Python量化回测常见陷阱有哪些”,在日常操作中,相信很多人在Python量化回测常见陷阱有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python量化回测常见陷阱有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

很多量化交易的朋友在指定策略时往往容易犯下这几种类型的错误:前视偏差、不设置滑点、无手续费、过度优化等。这些错误可以使你在回测阶段把不盈利策略变得盈利,但是在真正的交易中却会造成灾难性的后果。

首先介绍下前视偏差。前视偏差是指在策略回测阶段采取了未来的信息来决定之前的交易,而这些信息在实盘操作中是无法获知的。这里我们提供几个典型的案例来介绍下:

买入策略1:“当天的收盘价突破前一天的最高价,则利用当天开盘价买入股票”,很明显,在开盘价成交几乎是不可能的事情了。

前视偏差是我们要极力避免的错误。如何避免前视偏差?可以使用“滞后”的历史数据来计算策略信号。滞后的数据意味着,在涉及到移动平均值、最高价、最低价、成交量等指标时,只使用“上一”交易日的收盘数据。比如:

shift(1)是在index不变的情况下对序列的值向后移动一个单位。目的是获取昨天为止的最高/最低价格。这样就能使用“滞后”的历史数据来计算策略信号。

如果一个交易策略要求你利用信号触发时的价格进行交易,那么这个交易策略就存在偷价的情况。

很多人会低估偷价的危害性,事实上,固定点数的偷价相当于在原本的资金曲线上叠加了一条斜率为正的直线(在每次交易都是固定手数的情况下)。假设一年250个交易日,每个交易日均对一只长期保持10元的股票执行一次100股的买卖,每次买卖都偷价1个tick(tick设置为1个点,即0.1元),那么全年下来可以多获利5000.1100 = 5000元,这甚至超越了你的本金(10*100=1000)。

然而,现实的情况是不但无法低于一个tick的价格成交,更多的反而是高于一个甚至多个tick的价格成交。原因很简单,大多数趋势交易者都会在某个关键点位建仓,竞争导致价格在这些关键位置形成剧烈波动,并且这种波动通常是对程序化交易不利的波动。所以在构建一个频率较高的交易系统的时候,更多是要考虑和解决滑点问题。

手续费相当于在原本的资金曲线上叠加了一条斜率为负的直线(在每次交易都是固定手数的情况下)。策略进行测试时,如果不计入手续费,资金曲线可能会产生巨大差异,甚至不计手续费时盈利的策略,在计入手续费后可能产生亏损。

当前股票交易费用由三部分组成:佣金、印花税、过户费(仅上海股票收取)

  • 印花税:成交金额的1‰ 。

  • 过户费:这是指股票成交后,更换户名所需支付的费用。此费用按成交金额的0.02‰收取。

  • 交易佣金:最高收费为3‰,最低收费5元。

假设你买入10000股,每股票价格为10元,以此为例,对其买入成本计算:
买入股票所用金额:10元/股×10000股=100000元;
过户费:0.02‰×100000=2元;
交易佣金:100000×3‰=300元(按最高标准计算,正常情况下都小于这个值);
买入总成本:100000元+300元+2元=100302元(买入10000股,每股10元,所需总资金)
若以10.08每股卖出价格计算:
股票金额:10.08元/股×10000股=100800元;
印花税:100800元×1‰=100.8元;
过户费:0.002%×100800元≈2元;
交易佣金:100800元×3‰=302.4元;
卖出后收入:100800元-100.8元-2元-302.4元=100394.8元;

滑点是指触发指令的价格和最终成交价格之间的差异,它是难免会发生的情况,通常滑点产生的原因有以下两类:

行情波动剧烈、市场容量不够等情况导致的

网络延迟、交易平台不稳定等情况导致的

滑点是一个合格的交易策略必须充分考虑的因素。如果在一个交易策略中,将滑点数设置为0,即采用现价指令买卖证券其资金曲线就会优于同一个滑点数不为0的策略。通常我们要在最极端的条件下去构建和测试系统,一般系统都是高于2个tick的滑点来构建的。

接下来谈谈过度优化。过度优化是指为了迁就历史数据的噪音而将一个策略的参数或者规则反复优化到最佳的情况。

假如要把某个策略的资金曲线做的非常出色,我们可以这么优化:针对某段特定的行情进行参数优化,之后将分段行情对应的资金曲线拼接起来,得到一个表现更优秀的资金曲线。也可以指定过去某几个表现较差的交易日不进行交易。上述经过加工的回测一定表现优异,单纯为了追求资金曲线,这类策略模型仅仅适用于过去发生但未来不会再重现的历史偶然事件,并不考虑是否适用于未来的行情。

避免过度优化的有效办法有以下几个:

一般而言,策略的规则越多,模型的参数越多,就越可能出现过度拟合问题。因此采用的参数越少,可以优化的规则越少,自然过度优化的情况就能够得到很好的避免,并且,越少参数构建的策略,往往越稳健,无论其时效性或鲁棒性均能超越众多复杂的策略。

合理选择样本。有些策略覆盖的股票品种太少,时间周期太短,不能充分展现策略效果。这些策略只能用于个别品种上,或者在更长时间周期上的资金曲线可能表现的并没有那么好。有些策略虽然覆盖了较长的时间段,或较多的品种或市场,但仅仅覆盖了一种类型的行情(例如一轮较长时间的大牛市)。这些策略在遇到截然不同的市场情况时,表现可能会大相径庭。

进行样本外测试。构建策略模型时,将历史数据根据时间先后分为两段。参数优化和定性选择使用前一段数据(训练集),策略模型的测试使用后一段数据(测试集)。两段数据的大小要大致相等,若数据量不够,则至少用三分之一的数据做测试。训练集的最小含量由样本含量经验规则确定。

到此,关于“Python量化回测常见陷阱有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python量化回测常见陷阱有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python量化回测常见陷阱有哪些

这篇文章主要介绍“Python量化回测常见陷阱有哪些”,在日常操作中,相信很多人在Python量化回测常见陷阱有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python量化回测常见陷阱有哪些”的疑惑有所
2023-06-02

python使用语句的常见陷阱有哪些

这篇文章主要为大家展示了“python使用语句的常见陷阱有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python使用语句的常见陷阱有哪些”这篇文章吧。1、冗余input语句的冗余使用,这
2023-06-20

Golang 技术性能优化中的常见陷阱有哪些?

避免 go 语言性能优化中的陷阱:过早优化:在基准测试确定瓶颈前避免优化。过度使用 goroutine:明智地使用 goroutine,考虑替代的并发机制。不正确的内存分配:避免重复分配,考虑使用内存池。不恰当的同步:仅同步必要的代码块,使
Golang 技术性能优化中的常见陷阱有哪些?
2024-05-11

C++ 函数异常处理中常见陷阱有哪些?

c++++ 函数异常处理中常见的陷阱:避免在异常处理块中返回局部变量引用或指针,以免指向无效内存。异常处理块中不要重复抛出异常,以免覆盖原始异常信息。谨慎使用 noexcept 指定符,确保函数确实不会抛出异常。使用智能指针和异常规范,以提
C++ 函数异常处理中常见陷阱有哪些?
2024-04-24

web网页抓取中的常见陷阱有哪些

本篇内容主要讲解“web网页抓取中的常见陷阱有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“web网页抓取中的常见陷阱有哪些”吧!  1、更改页面的HTML  这是网页抓取脚本停止工作的最常
2023-06-21

C++ 函数错误处理中常见陷阱有哪些?

c++++ 函数错误处理的常见陷阱包括:过度使用异常跳过错误检查释放资源不当不检查函数参数的有效性忽略警告将错误混入数据避免这些陷阱可确保编写可靠、可维护的 c++ 代码。C++ 函数错误处理中的常见陷阱在 C++ 中编写健壮可靠程序时,
C++ 函数错误处理中常见陷阱有哪些?
2024-04-23

MySQL增删改查方法与常见陷阱有哪些

本文小编为大家详细介绍“MySQL增删改查方法与常见陷阱有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL增删改查方法与常见陷阱有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、MySQL的增
2022-11-30

C++ 元编程的最佳实践和常见陷阱有哪些?

元编程是一种编译时代码操作技术,提供了代码通用化、高效化、易维护等优点。最佳实践包括隔离元编程代码、使用类型安全、清晰命名、单元测试和文档化。常见陷阱有可扩展性问题、调试困难、维护挑战、性能问题和代码复杂性。元编程可用于创建可变长元组等高级
C++ 元编程的最佳实践和常见陷阱有哪些?
2024-05-21

软考选择题中常见的陷阱有哪些?如何避免?

在软考中,选择题是常见的题型之一。然而,由于选择题的特殊性质,考生在做题时容易陷入一些陷阱,导致失分。那么,软考选择题中常见的陷阱有哪些呢?又该如何避免呢?具体请见下文。
软考选择题中常见的陷阱有哪些?如何避免?
2024-10-08

Python常见的测试框架有哪些

这篇文章主要介绍“Python常见的测试框架有哪些”,在日常操作中,相信很多人在Python常见的测试框架有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python常见的测试框架有哪些”的疑惑有所帮助!
2023-06-27

浅谈PHP性能优化中的常见陷阱:避免这些错误,优化更有效!

浅谈服务器性能优化中的常见陷阱:避开这些,优化更有效!
浅谈PHP性能优化中的常见陷阱:避免这些错误,优化更有效!
2024-02-05

软考系统架构设计师考试中有哪些常见的陷阱或易错点

软考系统架构设计师考试因其复杂性和综合性,考生在备考过程中容易遇到一些陷阱或易错点。了解这些常见问题有助于考生更好地准备考试,避免不必要的失分。具体请见下文。
软考系统架构设计师考试中有哪些常见的陷阱或易错点
2024-09-11

多线程和异步编程的调试方法有哪些?常见的错误和陷阱是什么?

多线程和异步编程调试方法:使用现代调试器设置断点、检查变量和逐步执行代码;添加日志记录语句跟踪线程执行;使用可视化工具分析线程交互和识别瓶颈。多线程和异步编程的调试方法多线程和异步编程引入了一些独特的调试挑战,以下是一些常见的调试方法:
多线程和异步编程的调试方法有哪些?常见的错误和陷阱是什么?
2024-05-07

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录