小秦花了两个周末写完一段策略,回测跑通了,他挺高兴。接上行情接口的那天他傻了眼:同一段代码,算出来的信号跟他在看盘软件上看到的对不上。他查了一整晚的错,最后发现代码没错——是接口送来的那份数据,跟他脑子里想的那份不是一回事。
自己写的菜谱和送菜的那辆车,是两码事。菜谱上写清楚了先放什么、后放什么、火多大;可食材几点送到、送到的是整只还是切好的、今天有没有这一样货,全在车那一头。菜谱不看车,车也不读菜谱。 这篇要说的是:策略代码和行情接口之间,有三处接缝最容易漏,以及怎么把它们接实。先声明:不荐股、不喊单、不替你做投资决策。凡牵扯账户和钱的,一律以官方页面写的那版为准。
三处最容易漏的接缝
粒度、钟点、名册
一、第一处:接口送来的,是哪一种粒度
1、日线、分钟、逐笔,不是同一种货
同名的一根线,粗细可以差很远。 你要的是一分钟一根,接口送来的可能是一分钟里最后一次成交的那一笔。
2、你要的那一档,它未必备着
分钟线、分笔明细、盘口深度,不是每个接口都全给。 给不给,写在它的说明里。
3、历史能往回取多久,接口说了算
能取几年、能取到哪一天,各有各的规矩。 你以为能回测十年,实际只给三年。
动手之前,先去接口说明页确认粒度、年限和字段。确认不到就换个能确认的。
谁把"我们的数据全市场最全"挂在嘴边,别接话。 全不全写在说明里,不写在话里。
把你实际收到的那一份数据,抽一天打印出来看一眼。 看一眼,才知道它到底长什么样。
二、第二处:那个时间戳,是按谁的钟走的
1、图表上的时间,不一定是北京时间
境外品种按交易所所在时区记,你电脑右下角按你所在时区走。 两个钟不是一个钟。
2、不开门的时候,它给不给数
非交易时段、午间休市、节假日,有的接口照发,有的接口静默。 静默的那段,你的代码得自己认出来。
3、集合竞价和盘后,算不算一根线
有人算进去,有人剔出去。 这决定了你一天拿到的根数是多是少。
时区、休市、竞价这三样,写进代码里当常量。靠脑子记,早晚出岔。
把非交易时段的那段空白当成"没行情",是常见的误判。 那可能只是接口没发。
发现某段时间数据不见了,先去官方页面查那天的休市安排。 别急着改代码。
三、第三处:代码表和复权,是谁的活
1、合约代码会换,也会退
期货换月、股票退市、品种改名,代码不是钉死的。 接口换不换表,得问清楚。
2、复权这活有人干,有人不干
除权除息之后的那个缺口,是把历史价格往前挪,还是把现在往后挪,两种算法出来两条曲线。 你的策略跑在哪一条上,得知道。
3、缺了那一段,它补不补
网络断一次、服务器重启一次,中间那一段会不会自己补回来。 不补的话,你的信号就少算一截。
代码表、复权、补数三件事,先问接口方,再写自己的容错。
说"数据我们处理好了你直接用"的,也要自己验一遍。 怎么处理是它的事,对不对是你的事。
换月、改名这些规则,去交易所和平台的官方页面查。 别拿旧表当新表用。
两头各管哪一段
送、算、补
四、接口这一头:它负责送到,不负责核对
1、推送和拉取,是两种节奏
推送是它想起你的时候才喊你,拉取是你想起来才去问。 两种节奏下,同一天的记录条数可以不一样。
2、断了之后,它补不补那一截
有的会补,有的只管往后。 补与不补,决定了你的历史里有没有空洞。
3、它不管你算得对不对
接口只保证把数送到你手上。 你拿它算出来什么,它一概不负责。
接口的长处是稳定送达。它的短处是概不核对。
把"数据收到了"当成"数据是对的",是这一步最常见的想岔。 收到和对,是两件事。
上线之前先把数据落一份原始文件。 落了才查得出后来哪一段不对。
五、策略这一头:接手之前做三件事
1、先对齐粒度
你按分钟算,就别拿日线喂它。 这一条对不上,后面全白搭。
2、再对齐钟点
时区写死,休市认得出来,竞价算不算一开始就说清。
3、最后核对名册
代码表更新了没有、有没有退市的还挂在那儿。 名册乱了,信号就打在空气上。
这三件事加起来花不了多久。省掉它,查错的时间往往是好几倍。
把接口当黑箱用,是最容易埋雷的做法。 黑箱里那三段你没看,出了事也查不到。
真要接实盘之前,先跑一段只看不发的观察期。 别一上来就让它动手。
六、两头对齐:把三样写进代码里
1、频率写死
要一分钟就写死一分钟,别让它自己挑。 挑出来的东西你复盘时说不清。
2、时区写死
写成常量,写在配置文件里,不要散落在各处。 散落了,改一处漏一处。
3、缺数怎么办写死
是跳过、是沿用上一根、还是直接停掉,三种都得预先想好。 没想好,代码会替你随便选一个。
对齐这件事靠的是写下来的常量,不是靠当时记得清楚。
为了让回测好看去改数据的口径,是在给自己造假账。 口径该由品种规则定,不该由曲线定。
想改数据口径的时候,先隔一天再改。 当天改,多半是被当天那根线牵着走。
七、六种状况速查
| 你会遇上的事 | 落在哪一层 | 先核哪一步 |
|---|---|---|
| 信号跟图上看的对不上 | 粒度 | 核接口给的是哪一种线 |
| 一天少了好几根 | 时段口径 | 核竞价与休市算不算 |
| 半夜冒出信号 | 时区设置 | 核对图表与系统时区 |
| 换月之后算不出来 | 名册过期 | 去官方页面查新代码 |
| 回测漂亮实盘不行 | 数据口径 | 补上滑点与成本再算 |
| 中间空了一截 | 补数规则 | 查接口断线补不补 |
前三行占了日常大半。把粒度、钟点、名册管住,比多写十个指标有用。
这张表是拿来认事的,不是拿来打分排名的。两头各管一段,本就没有谁高谁低。
三个容易想岔的地方,和一套笨办法
先接实,再谈跑
八、三个坑
小秦那晚查的就是这个。代价不是少赚,是他一直以为自己在算同一件事。 对策:接上第一天,把收到的数据抽一天打出来逐条看。
一台机器按北京时间算,另一台按交易所时区算,两边都对,放一起就错。 对策:时区写成常量,写进配置文件,不许散落。
回测用的是导出来的那份,实盘用的是接口推过来的那份,两份本来就可以不一样。 对策:让两边走同一条取数路径,取不到就别比。
九、真要上手,按这个顺序走
先去接口说明页确认三件事:给的是哪一种粒度、能往回取多久、非交易时段给不给数。再写死三个常量:频率、时区、缺数怎么处理。然后落一份原始数据存着,日后查错全靠它。第四步跑观察期:只看不动手,跑够一段再谈实盘。最后留退路:任何一次改动都记下日期和内容。接口只管把货送到门口,这一车货该不该收、收了往哪放,始终是你自己的事。这篇只讲两头的分工与接缝,不构成投资建议。
附表:11 项对比,一表看清
| 对比项 | 自写策略这一头 | 行情接口这一头 |
|---|---|---|
| 管的是哪一段 | 把规则一遍遍算出来 | 把数据一趟趟送过来 |
| 认的粒度 | 由你自己写死 | 由说明页写定 |
| 钟点按谁算 | 依你设的常量 | 依它自己那台机器 |
| 名册谁维护 | 你要自己更新 | 它按自己的节奏换 |
| 断线之后 | 留空洞还是停掉 | 补还是不补 |
| 会不会核对 | 不会,只照着算 | 不会,只管送到 |
| 出错的样子 | 一直算,算错了也算 | 静默,少发也不吭声 |
| 记录放在哪 | 日志文件里 | 你自己落的原始文件 |
| 改动一次的影响 | 历史信号整片挪 | 历史空洞补不回来 |
| 少了什么先查哪 | 翻自己的配置文件 | 翻接口说明与公告 |
| 办事敲哪扇门 | 只走官方入口 | 只走官方入口 |
两头各管一段。这张表只点出该留神的那一栏,不给谁排先后。
常见问题
菜谱归菜谱,车归车
菜谱写得再细,食材几点到、送到的是整只还是切好的,它一样都管不着。 车开得再稳,它也不知道你今天要做的是哪道菜。
要记住的就那几样:接上的头几天先核对粒度;时区写成常量别散落;原始数据落一份存着;改动记下日期。把这篇转给那个写了策略却对着回测曲线发呆的朋友,也转给总在问"接上接口是不是就能跑"的同事——多看的那一步,正是替自己挡事的那一步。三条路在这儿:
💬 用户评价 (0)
立即登录