每一个执行模型都要做的那些决定
| 假设 | 乐观版 | 保守版 |
|---|---|---|
| 信号时机 | 在产生信号那根 K 线的收盘价成交 | 在下一根 K 线的开盘价成交 |
| 市价单价格 | 最后成交价 | 下一个价格再加上不利方向的滑点 |
| 限价单 | 价格一触及限价就成交 | 只有价格穿过限价才成交 |
| 止损单 | 恰好在止损价成交 | 在止损价与它之后第一个价格之中更差的那个成交,跳空也算 |
| 有歧义的 K 线 | 假设目标先到 | 假设止损先到 |
| 成本 | 没有 | 按张的手续费加上滑点 |
为什么限价成交最难
历史上在你限价价格上的一笔成交印,证明的是有人在那里成交过,而不是你的委托本会被轮到。在多数期货交易所,挂着的委托是按队列顺序成交的,而一张在信号那一刻才放出去的委托,是排到队尾的。当价格只是触及一个位置然后转头时,队列前面那些被成交了,而后面那些没有。因此「触及即成交」的规则,恰恰在那些正好在限价处转头的交易上高估了成交——而那些往往是最好的交易。
「穿越」规则要求价格至少越过限价一跳。它略微低估了成交,并拿掉了那些最讨好的。用逐笔委托数据做的委托簿回放能估计队列位置,但只在存在这类历史的地方才行。
在 Senzoukria 里
自动回测在收好的 K 线上做决定,并在下一根 K 线的开盘价上应用它们。以跳为单位设定的滑点总是惩罚入场,而每一笔交易都扣掉按张计的往返手续费;默认值是 1 跳和 1.24 美元。止损和目标是对着 K 线的最高价与最低价检验的,并在它们自己的价格上成交:一个被某根 K 线最高价触及的目标算作成交,而一根开在止损之外的 K 线仍然按止损价记录,所以穿过止损的跳空没有被建模。当一根 K 线同时触及两个离场时,止损胜出。
回放里用的模拟账户,在成交价达到一张限价单的触发价时按触发价成交它,而它的源码把这描述为一个没有滑点的理想化成交;而结果面板注明回放场次不扣佣金。因此回放度量的是在宽松执行之下的阅读和决策;要检验成本,该去自动回测那边。
常见错误
- 在一套在极端处逆势挂单的策略里,把一个被触及的限价当成一个成交了的限价。
- 以为跨过时段休息和新闻发布时,止损会在它的价格上成交。
- 把一个不含成本的回放结果,和一个含成本的回测结果作比较。
- 从不用更差的假设重跑一遍,去看这个结果在哪里会变号。
相关内容
同一栏目
其他语言版本
常见问题
- 限价单我该用哪一种成交假设?
- 对那些限价挂在转折点上的策略,要求价格至少穿过限价一跳,或者显式地对成交率打折。把结果和「触及即成交」那版比一比:两者之间的差距,就是这份优势里取决于队列位置的那一部分。
- 有了逐笔数据,就不需要成交假设了吗?
- 不是。逐笔数据解决了一根 K 线之内价格的先后顺序,但它记录的仍然只是已经执行的成交。你的委托在一个挂单价格上本会不会成交、以及市场会因为它而移动多少,仍然是假设。