回测的意义和陷阱

回测的意义

  • 回测,是根据历史上已经发生过的真实行情数据,快速模拟策略信号触发和撮合交易,得出一段时间内的绩效报告等数据
  • 一个策略编写完,肯定不是直接就可以实盘的
    • 它还需要不断的回测——调试——回测——调试
    • 直到策略能够完整的实现模型内容,并且能够顺畅运行
  • 策略就是建立在对市场上的一系列认知和假设
    • 回测可以高效率确定这些假设是否成立和稳定
    • 在历史不稳定时期,可能会带来什么样的损失
    • 为预防这些损失辅助作出决策
    • 回测可以帮助检测策略逻辑中的 bug,如未来函数偷价过度拟合等等
    • 为策略可以用于实盘交易提供可靠的证据
  • 意义
    • 验证交易信号的准确度
    • 验证交易逻辑和你的想法是否可行
    • 发现交易系统中的缺陷,并改进原始策略

回测的陷阱

信号闪烁

  • 交易策略在回测时是基于静态的历史数据。而真实的交易的数据是动态的
  • 举例
    • 如果最高价大于昨天的收盘价就买入开仓
      • 这个开仓条件在实盘中
        • 如果 K 线还未走完,那么最高价就是动态的,交易信号就有可能来回闪烁
      • 而在回测时,回测引擎是基于静态的历史数据是可以模拟撮合成交的

未来函数

  • 未来函数是用到了未来的价格,也就是说当前的条件在未来可能会被修改,同样未来函数也能造成信号闪烁的原因
  • 任何函数都具有未来函数特性,比如 “之字转向函数
    • 之字转向函数指示了波峰和波谷的转折点,它能根据最新的实时价格相应得调整自身取值,但是如果当前价格变化的时候,之字转向函数计算的结果也会随着改变
    • 如果用了带有未来函数的函数,可能当前下单信号成立了并且下单,但过会儿可能这个信号又不成立了

偷价

  • 偷价行为是指利用过去的价格去交易
  • 举例
    • 如果最高价大于某个固定价位即以开盘价买入。这个条件就是在偷价格
    • 因为在实盘中,最高价大于某个价位时,价格已经高于开盘价一定距离了,这时用开盘价是买不到的
    • 但在回测中,是有买入信号的,并且能成交
  • 还有一种情况
    • 如果价格跳空高开与策略设定的固定价格,回测时可以以固定价格成交
    • 但是在实盘中这个固定价格显然是买不到的

不可能成交的价格【回测忽视了排队】

  • 第一种:在实盘中,涨停时一般情况下是买不到的,反过来跌停也是如此。但是在回测中却是可以成交的。
  • 第二种:交易所撮合机制是
    • 价格优先、时间优先
    • 有些品种盘口会经常有巨量订单,实盘时如果挂单买卖,需要等待盘口厚度,才能成交甚至不能成交
    • 但是在回测时,挂单买卖是可以成交的。
  • 第三种:如果套利类策略,那么回测利润是很高的
    • 因为回测时每次都已经假设抢到了这些价差
    • 真实的情况下,很多价差都抢不到,或者只抢到了一条腿,一般来说肯定是不利于你的方向的那条先成交,那么就需要马上去补另一条腿
    • 这时候滑点已经不是 1、2 个点了
    • 而套利策略本身就赚这几个点的价差,这种情况是回测中无法模拟的。真实利润完全不如回测。
  • 第四种:黑天鹅事件
    • 在外汇瑞郎黑天鹅事件中,尽管表面上看有开盘价、最高价、最低价、收盘价
    • 其实当天的极端行情中,中间的价格是真空,大量的止损单,造成踩踏事件,流动性为零,成交难度非常大
    • 但是在回测中却能止损【具备第二层思维,思考其他策略的思路和理念】

过度拟合

  • 一个荒谬的模型,只要足够复杂,是可以完美适应数据的
  • 回测是基于历史数据,但历史数据的样本是有限的
    • 如果交易策略的参数过多,或者交易逻辑过于复杂,导致交易策略过多的适应历史数据
  • 量化策略的建模过程本质上就是一个从大量的貌似随机的数据中找寻局部非随机数据的过程,如果不借助统计学的知识,很容易落入过度拟合的陷阱
  • 不要自欺欺人
    • 如果发现样本外数据表现不好,又觉得丢掉模型太可惜或者不愿意承认自己这个模型不行,而对着样本外数据继续做模型优化,直到样本外数据上也表现得一样好,那最后受伤的一定是你的真金白银

幸存者偏差

  • 如果有 1000 个基金经理,那么在 10 年后,大约有 10 个基金经理会连续 10 年跑赢大盘战胜市场
  • 但这可能是随机和运气决定的,和基金经理们的技能没有关系

冲击成本

  • 在真实的交易环境中,价格是一直在波动的,当你看好一个交易机会,下单的那一刻,可能价格就已经变化了
  • 所以滑点问题,无论是在主观交易中,还是在量化交易中,都是不可避免的
    • 滑点是指挂单价格实际成交价格之间的价差, 一般归因于市场价格跳空
  • 但是回测是基于在静态数据,很难模拟出真实的交易环境

不加滑点的回测

  • 在实盘交易中的实际成交价与策略回测的理想成交价存在差异
  • 所以为了减小这种误差,在进行策略回测时,可以设置 2 个滑点,来提高买入价或降低卖出价

加上滑点的回测

  • 同样的策略,如果加上 2 跳滑点后,回测的结果与不加滑点的回测结果,相差很大
  • 那么也就代表这个策略需要改进或者淘汰换新
  • 特别是交易频率比较高的策略,回测时加上 1~2 跳的滑点,可以使回测更接近于真实的交易环境

回测陷阱的解决办法

  • 在策略实盘之前一定要先仿真交易一段时间
  • 如果仿真交易的成交价格与回测时的成交价格,相差无几,那么就证明这个策略是没有问题的,至少策略逻辑是没有问题的

如何做量化交易回测

  • 尽最大可能让策略处于历史的真实环境中,如果忽略历史环境中的细节,可能会导致整个量化回测是无效的
  • 通过回放历史 K 线数据,并进行模拟真实的交易规则进行买卖,最终汇总一个时间段内的夏普比率最大回撤率年化收益率资金曲线等数据
    • 文华财经
    • VNPY
    • 发明者量化
      • 自带高性能回测引擎
      • 采用for-loop(轮询)回测框架
      • 向量化计算
      • 统一回测和实盘的代码

回测界面介绍

  • 配置参数
    • 回测时间
      • 开始 & 结束
      • K 线周期(分钟、小时、天)
      • 模拟级(模拟级Tick、实盘级Tick)
    • 选项
      • 日志
      • 滑点
      • 收益
      • 容错
      • 图表
      • 延迟
      • 低层 K 线周期(分钟、小时、天)
      • 柱长
    • 费用
      • Maker
      • Taker
    • 数据
      • 绘制行情图表(隐藏行情图表)
      • 数据源(默认数据源、指定数据源)
    • 精度
      • 定价
      • 数量
      • 深度
      • 需要分笔数据(无需分笔数据)
    • 平台
      • OKEX期货
      • LTC_USD
    • 参数
      • 合约品种(当周)
      • 杠杆大小(10)
      • 计算周期(4)
      • 上轨系数(0.5)
      • 下轨系数(0.5)
      • 开仓合约张数(1)
      • 重试间隔(毫秒)(2000)
      • 轮询间隔(秒)(3)
      • 图表最大显示 K 线柱数(500)
    • 函数自动容错模板
      • 容错重试间隔(毫秒)(500)
      • 显示重试记录(勾选为True)
      • 屏蔽常见网络错误信息(勾选为True)
      • 容错 API 列表
        • GetAccount
        • GetDepth
        • GetTicker
        • GetRecords
        • GetTrades
        • GetOrders
        • SetContractType
    • 其他
      • 回测执行方式
        • 收盘价模型
          • 当前 K 线走完才执行模型
          • 在下根 K 线开始的时候执行交易
        • 实时价模型
          • 每次价格变动都执行一次模型
          • 当交易信息成立时,就立即交易
      • 默认开仓手数
        • 回测时开平仓数量
      • 最大单次交易下单量
        • 单笔交易委托给回测引擎的最大开平仓数量
      • 加入滑点
        • 实盘的成交价位,与预设的成交价位,之间出现偏移,一般是向不利于交易者的方向移动,导致交易出现额外的损失,所以加入滑点是必须的
        • 国内商品期货一般是加入1跳~2跳,甚至更多,来模拟真实的交易环境
      • 合约品种
        • rb000
        • rb888

策略回测

  • 在回测之前,先确定好你的交易策略
  • 示例:恒温器 Thermostat 策略
    • 根据市场状态,在趋势行情中采用趋势策略,在震荡行情中采用震荡策略
    • 回测日志中,记录了回测用时多少秒,日志总数以及交易次数
      • 其中账户信息打印了策略回测最终绩效结果:平均盈亏持仓盈亏保证金手续费以及预估收益
    • 状态信息栏,记录
      • 交易品种
      • 持仓量
      • 持仓价格
      • 最新价格
      • 上次信号种类
      • 持仓后的最高价和最低价
      • 更新次数和时间
      • 资金信息
    • 浮动盈亏标签,展示了账户的详细资金曲线,还包括常用的绩效指标:
      • 收益率
      • 年化收益率
      • 夏普比率
      • 年化波动率
      • 最大回撤率
      • 基本可以满足绝大多数的用户需求
  • 最为重要的绩效指标:夏普比率
    • 是同时对收益风险加以考虑的综合指标
    • 也是衡量一个基金产品的重要参考指标
    • 通俗来讲,就是你每挣 1 块钱承担了多少钱的风险,所以夏普比率的值是越高越好
  • 年化波动率
    • 日波动率 * 每年的交易日数
    • 它是衡量基金的风险,但绝对不是全部风险
    • 比如
      • 策略 A 波动率较大,但一直波动向上,收益率良好
      • 策略 B 波动率很小,但一直横着不动
      • 我们并不能说策略 B 优于策略 A
  • 在日志信息栏中
    • 详细记录回测时每一笔交易的撮合情况,包括
      • 交易的具体时间
      • 交易所
      • 买卖以及开仓平仓类型
      • 回测引擎撮合的成交价格
      • 交易数量
      • 打印信息

回测之后

  • 大多数情况下,回测的结果都会与自己的期望,相差甚远。毕竟一个长期持续稳定盈利的策略,不是那么容易就能得到的,这需要你对市场认知能力
  • 如果你的策略回测结果是亏钱的,也不要灰心,这其实是很正常的
    • 先看一下策略逻辑是不是写错了
    • 是不是采用了极端参数
    • 是不是开平仓条件过多等等
    • 必要时也可以从另一个角度重新审视自己的交易策略和交易理念
  • 如果你的策略回测结果非常好,资金曲线非常完美,夏普比率超过 1 甚至更多。也先别急着高兴
    • 遇到这种情况,大部分是利用了未来函数、或者偷价、或者过度拟合、或者没有设置滑点等等
    • 可以利用样本外数据仿真实盘交易,来排除这些问题
  • 历史数据回测毕竟是一个所有风险已知的理想环境。所以策略的回测时间最好是经历一轮牛熊市有效的交易次数应当不低于 100 次,这样可以避免部分幸存者偏差
  • 市场永远是在变动和进化中的,历史回测好的策略并不代表未来就一定很优秀,不能只让策略应付回测环境中已知的风险,更要应对未来的未知风险。所以增加策略的抗风险能力普适性是非常有必要的

如何读懂策略回测绩效报告

客观与完整的评价

  • 无论是实盘交易数据的记录,还是采用历史数据进行回溯(Back-Testing)的回测报告,模型的优劣都是通过对交易情况的统计来进行评价
  • 假设在同一时间周期的测试中得到以下两组数据,我们能从中判定哪一个模型表现更优秀么?
编号 总盈利率 胜率 单笔最大盈利 最大回撤
模型A 50% 35% 10% 12%
模型B 30% 45% 20% 16%
  • 答案是,不能。评价体系的片面性将导致量化交易系统走向绝境
  • 一般而言,我们需要从稳定性可持续性判断是否正期望等角度去分析绩效报告
  • 常用的指标类别
    • 绩效比率
    • 周期分析
    • 各种曲线
    • 极端交易分析
  • 常用指标
    • 净利
    • 毛利
    • 毛损
    • 校正后的净利
    • 校正后的毛利
    • 校正后的毛损
    • 选定的净利
    • 选定的毛利
    • 优化毛损
    • 账户资金额度需求
    • 账户资金收益比
    • 初始资金收益
    • 策略最大潜在亏损
    • 策略最大潜在亏损(%)
    • 平仓交易最大亏损
    • 平仓交易最大亏损(%)
    • 策略最大潜在亏损收益比
    • 盈利因子
    • 校正后的盈利系数
    • 优化盈利因子
    • 最大持有合约数量
    • 已付滑价
    • 已付手续费
    • 未平仓盈利/亏损
    • 年化收益利率
    • 月化收益利率
    • 持有收益
    • 月平均收益
    • 月平均收益标准差
    • 潜在上涨比率
    • 夏普比率
    • Sortino比率
    • Fouse指数
    • Calmar比率
    • Sterling比率
    • 净利/单笔最大亏损
    • 净利/单笔最大回撤
    • 净利/策略最大回撤(MSDD)
    • 选定的净利/单笔最大亏损
    • 选定的净利/单笔最大回撤
    • 选定的净利/策略最大回撤(MSDD)
    • 校正后的净利/单笔最大亏损
    • 校正后的净利/单笔最大回撤
    • 校正后的净利/策略最大回撤
    • 交易的平均持仓 K 线根数
    • 盈利交易的平均持仓 K 线根数
    • 亏损交易的平均持仓 K 线根数
    • 平均空仓 K 线根数
    • 两笔盈利交易之间的平均空仓 K 线根数
    • 两笔亏损交易之间的平均空仓 K 线根数
    • 1 倍标准差(单笔净利)
    • 单笔净利 + 1 倍标准差
    • 单笔净利 - 1 倍标准差
    • 极端交易数量
    • 极端交易盈亏
    • 交易周期
    • 策略运行时间
    • 策略运行时间(%)
    • 最长空仓期
    • 单笔最大回撤日期
    • 策略最大回撤日期
    • 平仓交易最大亏损日期
    • 交易总数量
    • 未平仓交易总数量
    • 盈利交易次数
    • 亏损交易次数
    • 胜率
    • 单笔净利
    • 平均盈利额
    • 平均亏损额
    • 平均盈利/平均亏损
    • 单笔最大盈利交易
    • 单笔最大亏损交易
    • Z 值
    • 信心限度
    • 策略精确预期
    • 最大连续盈利交易次数
    • 最大连续亏损交易次数
    • 最大连续盈利额
    • 最大连续亏损额
    • 最大连续盈利(%)
    • 最大连续亏损(%)
    • 最大值
    • 最大值日期
    • 平均值
    • 最大值(%)
    • 最大值(%)日期
    • 平均值(%)
    • 1 倍标准差
    • 单笔净利 + 1 倍标准差
    • 单笔净利 - 1 倍标准差

重要的绩效指标

  • 厚尾现象是每一个程序化交易者必须时刻警惕的
  • 厚尾现象:股票的收益分布明显偏离高斯分布,造成了高收益区域概率与高亏损区域概率大于高斯概率分布的现象
    • 出现的这一现象的原因是因为,高斯分布的前提是投资主体的相互独立
    • 但实际上,股市中投资者相互模仿相互影响,容易形成“羊群效应”

最大资产回撤比率 $( Max\ Drawdown )$

$$Max\ Drawdown = \frac{Max(P_x - P_y)}{P_x}$$

$P_x, P_y = $ 策略某日股票和现金的总价值, $y>x$

  • 对于模型而言,最大回撤$(Max\ Drawdown)$是一个非常重要的风险指标
    • 这个指标甚至比波动率还要重要
    • 在回测中看到的最大回撤也在一定意义上代表你开仓后可能出现的最糟糕的状况
  • 从数学角度看
    • 资金亏损 20%则需要剩余资金盈利 25%,才可以恢复原来的资金规模
    • 如果亏损 50%,则需要剩余资金盈利 100%,才可以恢复亏损前的资金规模
    • 资金向上的利润空间是无限的,向下亏损的空间却是有限的,触底出局的可能性也就越大
  • 不管怎么定义,至少这两点是目前的主流认识
    1. 最大回撤越小越好
    2. 回撤和风险成正比
      • 回撤越大,风险越大
      • 回撤越小,风险越小

调整后收益风险比$( RAROC )$

  • 这个指标是专业玩家业余玩家的分水岭 $$RAROC = \frac{风险调整后的收益}{经济资本}=\frac{收入-经营成本-资金成本-风险成本}{经济资本} * 100\%$$

  • 在投资中不光只看利润,更要看在获得这些利润的时候,付出了多大的风险

  • 资产的风险和收益是成正比的
    • 当模型在收益率上傲视群雄,高歌猛进的时候,其风光的背后可能隐藏着还未爆发的风险
  • 例如
    • 模型中的开平仓条件加减仓条件,在上涨时有更高的收益,可一旦出现下跌,就会把损失成倍放大,造成巨大损失。何况,上涨和下跌具有相当大的不对称影响
    • 很多经验丰富的量化交易者愿意为了降低风险牺牲一部分收益,在这种情况下,经过风险调整后的收益更具有参考价值
    • 一个非常重要的理念就是:正视风险,风险和收益从来不会孤立存在

交易次数

  • 如果回测数据过少,那么回测结果就有可能具有偶然性,要不就是参数偶然,要不就是行情偶然等等
  • 较长的历史数据,也能过滤掉部分幸存者偏差
  • 一般来讲
    • 对于国内的股票、商品,应该回测 5 年以上的数据
    • 对于新上市的品种,至少也要回测 3 年
    • 对于上市较早的品种或国际市场的黄金、美元指数等商品,则应至少回测一个牛熊周期,一般应该在 10 年–15 年以上
  • 对于不能满足这个要求的品种,则应在开仓时将 R 值适当加权处理主动降低风险暴露

平均利润

  • = 净利润 / 交易次数
  • 它是分辨那些回测绩效外表光鲜的照妖镜

胜率

  • 胜率从来都不是单独存在的,如果你在恰好的行情用上恰好的模型,胜率达到 80% 也毫不奇怪,但这毫无意义
  • 价格不是涨就是跌,否则就是不动
    • 如果时间足够长,你会发现,价格上涨和下跌的概率各是 50%
  • 不管你用哪种类型的策略模型,如果回测时胜率超过 50%,你就要小心了
    • 从数学和物理学的角度看,这是不可能的

详细权益曲线 $(Equity\ Curve)$

  • 从第一笔进场的时间点一直到图表的最后一根 bar 的时间点结束
    • 它是交易的实时资金曲线
    • 说它是实时是因为它会将每根 bar 上的浮动盈亏计算在内
  • 详细权益曲线反映的就是帐户净值的变化,是最直观的评量工具,可以一眼就对该策略亏损获利状况及损益的波动/平滑程度有概略的掌握
  • 另外永远不要看平仓权益曲线

年化收益率

  • 有人认为它是给外行人看的,并不具备参考意义
  • 年化收益率,和真实的收益率(持有期收益率)的差距可能是很大的,有些时候大到超出我们想象

为什么需要样本外测试

  • 写一个回测能赚钱的策略还不是最难的,比这更难的是,如何评价这个策略在投入实盘中是否继续有效

回测不等于实盘

  • 一旦一个交易策略被投入到较长时间的实战中,他们就会发现这套策略其实并不有效
  • 许多交易策略,回测的时候胜率可以达到 50% 以上。在这么高胜率的前提下,还可以有 1:1 以上的盈亏比
    • 可是,这些策略一旦付诸实盘,基本上都是亏损的
    • 导致亏损的原因有很多,其中就有,在回测的时候,数据样本太少,导致数据迁就偏差
  • 量化的根源问题——历史数据的局限

什么是样本外测试

  • 如何在数据有限的情况下,尽可能的充分利用有限的数据对交易策略科学回测?答案是样本外测试法
  • 回测的时候,将历史数据根据时间先后分为两段
    • 前一段数据用于策略优化,称为训练集
    • 后一段数据用于样本外测试,称为测试集
  • 数据迁就偏差

    • 如果你构建一个有100个参数的策略,完全可能通过优化参数,使历史业绩看起来非常棒。同样可能的是,该策略的未来业绩与回测结果截然不同、非常槽糕。这么多参数,只是使模型与过去发生但未来不会再重现的任何偶然历史事件吻合。实际上,即使只有一两个参数(如建仓和清仓阈值),也很难避免所谓数据迁就偏差
    • 一般而言,策略的规则越多,模型的参数越多,就越有可能遭遇数据迁就偏差
    • 能经得起时间考验的往往是简单的模型
  • 举例

    • 假设要回测商品期货螺纹钢,现在螺纹钢有 10 年左右的数据(2009年~2019 年)
      • 可以把 2009 年~2015 年的数据作为训练集
      • 把 2015 年~2019年的数据作为测试集
      • 比如一个双均线策略,在训练集中最好的几个参数组
        • 15周期均线和 90 周期均线
        • 5 周期均线和 50 周期均线
        • 10 周期均线和100 周期均线
        • ......
        • 然后,把这几组参数分别放到测试集中回测
        • 并对比训练集与测试集的回测绩效报告和资金曲线
        • 判断它们的相差是否在一个合理的范围内

样本外测试的进阶

  • 特别是在历史数据很少的情况下,比如近年刚上市的原油期货、苹果期货,采用两种方法可以利用有限的数据对模型进行全面的检验
    • 递推式回测方法
      • 第一种:每次检验时,测试数据比较短,测试次数较多
      • 第二种:每次检验时,测试数据比较长,测试次数较少
      • 在实际应用中,可以通过改变测试数据的长度,进行多次测试,用来判断模型在应对非平稳数据的稳定性
    • 交叉式回测方法
  • 递推式检验的基本原理
    • 用前一段较长的历史数据去训练模型
    • 并用随后相对较短的数据去检验模型
    • 然后不断地向后移动取数据的窗口,重复训练与检验的步骤
      • 训练数据:2000 年至 2001 年,测试数据:2002 年;
      • 训练数据:2001 年至 2002 年,测试数据:2003 年;
      • 训练数据:2002 年至 2003 年,测试数据:2004 年;
      • 训练数据:2003 年至 2004 年,测试数据:2005 年;
      • 训练数据:2004 年至 2005 年,测试数据:2006 年;
      • ...以此类推...
  • 交叉式检验的基本原理
    • 把全部数据等分为 N 个部分,每次用其中的 N-1 个部分做训练,用剩下的部分做检验
      • 1、训练数据:2001-2003,测试数据:2000;
      • 2、训练数据:2000-2002,测试数据:2003;
      • 3、训练数据:2000、2001、2003,测试数据:2002;
      • 4、训练数据:2000、2002、2003,测试数据:2001;
    • 交叉式检验最大的优点就是充分的利用有限的数据,每个训练数据同样也是测试数据。但交叉检验应用到策略模型的检验时也存在明显的缺点
      • 当价格数据非平稳时,模型的测试结果往往不可靠
      • 如果用最新的数据训练模型,而用较老的数据测试模型,这本身就不怎么符合逻辑
  • 在对量化策略模型进行检验时,无论是递推式检验还是交叉式检验都遇到到数据重叠的问题
  • 在开发交易策略模型时,大部分的技术指标是基于一定长度的历史数据
  • 例如
    • 利用趋势性指标,计算过去 50 天的历史数据,而下一个交易日,该指标又是该交易日前 50 天的数据计算得出
    • 那么计算这两个指标的数据有 49 天是相同的
    • 这会导致每相邻两天该指标的变化很不明显
  • 数据重叠会导致以下影响:
    • 模型预测的结果变化缓慢导致持仓变化缓慢,这就是我们常说的指标的滞后性
    • 对模型结果检验的一些统计值不可用,由于重复数据导致的序列相关,使得一些统计检验的结果不可靠
  • 优秀的交易策略应该能够在未来具有获利性
    • 样本外测试,除了能客观检测交易策略外,更能有效率节省量化交易者的时间
    • 大部分情况下,直接采用全部样本的最优参数,投入实战是非常危险的
  • 对进行参数优化的时间点前的所有历史数据进行区分,划分为样本内数据与样本外数据
    • 先利用样本内数据进行参数优化
    • 再利用样本外数据进行样本外测试
    • 则可以将这种错误排查出来
    • 与此同时还能检验优化后的策略是否适用于未来的市场

交易策略优化及最佳化

  • 交易策略其本质就是对市场规律的概括和总结
  • 你对市场认识的越深,用代码表达思想的能力越高,你的策略就越贴近市场

优化进出场

  • 大部分趋势跟踪策略会利用突破或者技术指标等方法捕捉行情
    • 通常情况下这些信号的进出场方式,时效性较低
    • 如果策略使用的是收盘价模型,那么入场点会在下根 K 线的开盘价
    • 因此会错过突破这根 K 线的最佳入场时间
    • 无形中会错过很大一笔到手的利润
    • 有效的办法是
      • 在策略实现中使用更具优势的即时价格
      • 当出现信号时,立即发单
      • 这样当信号成立时可以立即入场,不会错失利润
    • 并非所有的即时价格都要优于收盘价,这还要根据交易策略决定
      • 一些交易逻辑简单的策略,即时价格与收盘价效果区别较小
      • 但收盘价模型无法处理更加细致的交易逻辑,就需要采用即时价格了

参数优化

  • 参数优化可以使量化交易策略更贴近历史数据,回测绩效达到更好的结果
  • 参数优化重要的原则就是要选择参数高原而不是参数孤岛
    • 参数高原,指的是存在着一个较宽泛的参数范围,策略在这个参数范围内都能取得较好的绩效,一般会以高原的中心形成类似正态分布状
    • 参数孤岛,指的是只有参数值处于某个很小的范围内时,策略才会有较好表现,当参数偏离该值时,策略的表现就会显著变差
  • 如果附近参数的性能远差于最优参数的性能,那么这个最优参数可能是一个过度拟和的结果,在数学上可以认为是奇点解,而不是所要寻找的极大值解
    • 从数学角度来说,奇点是不稳定的,在未来的不确定行情中,一旦市场特征发生变化,最优参数可能会变为最差参数

增加滤网

  • 很多趋势策略,在行情出现趋势的时候,都能很好的抓住趋势,实现丰厚的回报
    • 但是长期运行下来,最终的结果不是小赚就是亏钱
    • 问题出在哪里?
    • 原因在于
      • 策略在震荡行情中不断的反复交易,而震荡的交易大部分是亏损或者小盈利的
      • 市场有 70% 左右的时间是处于震荡行情
      • 长时间的连续小幅度亏损,导致之前的利润全部回吐
  • 解决办法就是增加滤网
    • 市场上的滤网有很多种,包括损益滤网风险值滤网走势型态滤网技术指标滤网等等
    • 比如增加一条大周期均线滤网,在震荡行情中能降低交易次数过滤掉一半的错误交易

平滑资金曲线

  • 量化追求的是一种稳定的可持续盈利方法
    • 这是绝大多数交易者所希望看到的
    • 谁也不希望今年赚 50%,明年亏 30%,后年再赚 40%
    • 宁愿接受每年 20% 的收益率,但是可以持续十几年
    • 这是量化投资可以做到的
    • 因为量化投资是一种业绩可以持续的交易模式
  • 要想做到平滑的资金曲线,就需要多策略、多品种、多周期、多参数的构建投资组合
    • 但未必是越多越好,这里有一个边际递减的效应
    • 一开始加入组合越多,分散性越好
    • 但是当策略达到一个数量级后就开始出现分散作用递减的效应了
    • 组合的好处就是分散,虽然整体收益率不是最高的,但是最稳健

放弃寻找圣杯

  • 如果这个市场真的有规律,那么理应是智商越高、学历越高、越努力的人将会发现其中的规律,无论是用数学分析、信息垄断、还是其他的分析方法,最终他们将会赚到市场中大多数钱,长此以往,这些人就会垄断交易市场,直至市场无法正常运行

建立概率思维,提升你的交易格局

  • 交易中的方法有很多,无论是价值投资技术分析事件热点套利对冲
    • 表面上看起来逻辑严谨,理论上也能说得通
    • 但实际上往往相互矛盾
    • 有时候,科学的严谨也无法解释艺术的天马行空
  • 不同点
    • 价值投资的优势是可以根据价值给价格波动划分一个安全边际
    • 技术分析的优势是三大假设使交易具有一定的科学性
  • 相同点
    • 对未来的价格分析,只能做到大概预测,而不能精准预测
    • 自始至终交易都是一个概率游戏

概率游戏

  • 许多人在交易中犯错的重要原因就是缺少概率思维,在做交易时过于感性而非理性

交易失败的原因

  • 原因一:因为人性
    • 穷人厌恶风险,害怕亏损。喜欢旱涝保收的工作,追求安稳。即使做一件事,没有绝对把握,也坚决不做
      • 表面上看起来这样做并没有什么错,但是背后却承担了巨大的机会风险
    • 富人更愿意承担风险,知道风险与回报始终成正比,只有风险中才孕育着机会
      • 合理评估风险,并在风险可控的情况下,勇敢下注
  • 原因二:喜欢赚快钱
    • 长期而言,大多数行业的净资产年化回报率很难超过 15%
    • 相反,很多数散户认为在市场中赚个 15%,都不好意思跟人打招呼
      • 重仓
      • 短线
  • 原因三:偏见
    • 因为人的经历是有限的,所以人的认知也是有限的。每个人都或多或少,会根据自己的经历和经验,产生偏见
    • 很多时候,偏见成为了大多数人的习惯,理所当然地带着自己的情感去评判很多事情
    • 无论你对市场的判断是基于基本面分析还是技术分析,这些其实都不重要
      • 如果你的观点与市场大多数人的观点不同,价格则更偏向于市场大多数人,市场不会以你的观点去运行
      • 在交易中一定要牢记“判断,但不依赖判断”,最终还是要基于事实,基于价格
      • 价格涨跌的唯一力量是大多数人对未来的预期
  • 原因四:追求完美
    • 市场的参与主体是人,人本身就是有认知局限的,也就是说市场本身就是错的,是不完美的
  • 期货市场是一个负和游戏的市场。只有转变自己的思维方式,建立自己的交易策略,才有成功的可能

什么是概率的思维方式?

  • 说得通俗点就是——赌博思维
  • 如果你的策略是负期望,就是赌徒
  • 如果你的策略是正期望,就是赌博
  • 为承担一定风险而获得一定回报的活动,人生处处是「赌博」

如何才能久赌必赢

  • 在随机事件的大量重复出现中,往往呈现几乎必然的规律,这个规律就是大数定律
  • 在试验不变的条件下,重复试验多次,随机事件的频率近似于它的概率
  • 偶然中包含着某种必然

概率的变化

  • 假设有一个正反面一样重的硬币,抛出字(背面)和花(正面)的概率都是 50%
  • 但是如果只抛 10 次,则出现正面的概率就变了,这个概率就不一定是 50%了
  • 也是私募机构在开启量化交易策略时,除非特殊条件,不能停止策略的原因