一、量化交易日志概述
做量化交易这些年,我越来越觉得——日志这东西,就像飞机的黑匣子。
平时你可能觉得它没啥用,甚至有点烦。但一旦出问题,它就是唯一能帮你还原真相的东西。我见过太多人,策略亏了都不知道怎么亏的,回测跑得漂亮实盘却一塌糊涂。说白了,就是缺一本「交易日记」。
1.1 日志的重要性
量化交易日志到底有多重要?我总结了三句话:
- 复盘的基础——没有日志,你拿什么复盘?凭记忆?别闹了,人的记忆最不可靠。
- 排障的利器——程序出bug了、数据源断了、成交滑点异常了……日志能帮你快速定位问题。
- 优化的依据——你的策略到底哪里好、哪里差?日志里的数据会告诉你答案。
我个人习惯:每天收盘后花10分钟扫一眼日志。不是看盈亏,而是看「有没有异常」。这个习惯帮我躲过至少三次大坑。
你想想看,一个交易系统跑了一年,产生了上百万条记录。如果没有日志,你根本不知道这一年里发生了什么。系统升级过吗?参数调整过吗?中间断过电吗?
嗯,这里要注意——日志不是写给别人的,是写给未来的自己的。
1.2 日志记录的内容
日志该记什么?我见过有人什么都记,结果日志文件比数据库还大。也见过有人只记个成交价,出了事啥也查不出来。
我个人认为,核心就三类:
1.2.1 交易信号
交易信号是策略的「决策记录」。什么时候发出了什么指令,为什么发这个指令。
- 信号生成时间(精确到毫秒)
- 信号类型(买入/卖出/平仓/加仓)
- 信号参数(触发条件、置信度、策略版本)
- 信号原始数据(当时的行情快照)
避坑指南:我曾经遇到过一个策略,回测时信号正常,实盘却频繁漏单。查了两天才发现——是信号生成时间戳的时区没统一。回测用的UTC,实盘用的本地时间。从那以后,我所有日志都强制用UTC+0。
1.2.2 成交记录
成交记录是「事实」。信号发出去之后,到底成交了没有?成交价是多少?滑点有多大?
- 订单ID(唯一标识)
- 成交时间(交易所时间)
- 成交价格、数量、方向
- 滑点(预期价 vs 实际成交价)
- 手续费、税费
这里有个细节——很多人只记成交价,不记「预期价」。但滑点分析恰恰需要这两个数据。我建议你把信号发出时的预期成交价也记下来,哪怕它和实际成交价一样。
1.2.3 资金变动
资金变动是「结果」。赚了还是亏了?仓位怎么变的?
- 账户余额(实时更新)
- 持仓市值、浮动盈亏
- 保证金占用、可用资金
- 出入金记录
注意:资金变动日志最好和交易所/券商的结算单做交叉验证。我见过有人程序里算的盈亏和券商对不上,最后发现是分红、送股这些事件没处理。嗯,这些细节很容易被忽略。
1.3 日志格式规范
格式这东西,看似简单,其实门道不少。我见过最乱的日志——同一行里混着中文、英文、数字,分隔符一会儿用逗号一会儿用竖线。这种日志,机器读不了,人也读不懂。
常用的格式就三种:
1.3.1 CSV格式
CSV是最简单的格式。轻量、易读、Excel直接打开。
timestamp,symbol,type,price,volume,status
2024-01-15 09:30:00.123,BTCUSDT,buy,43250.12,0.1,filled
2024-01-15 09:30:00.456,BTCUSDT,sell,43260.88,0.1,filled
2024-01-15 09:31:00.789,ETHUSDT,buy,2280.50,1.0,pending
我的建议:CSV适合做快速分析。但要注意——如果字段里包含逗号或换行符,记得加引号。我踩过这个坑,解析出来的数据全是乱的。
1.3.2 JSON格式
JSON更适合结构化数据。嵌套、数组、对象都能表达。
{
"timestamp": "2024-01-15T09:30:00.123Z",
"signal": {
"id": "sig_001",
"type": "buy",
"strategy": "ma_cross_v2",
"confidence": 0.85
},
"order": {
"symbol": "BTCUSDT",
"price": 43250.12,
"volume": 0.1,
"status": "filled"
}
}
我个人更偏爱JSON。为什么?因为它可读性好,而且几乎所有编程语言都有现成的解析库。但缺点也很明显——文件体积大,写入速度慢。
1.3.3 数据库存储
数据量大了之后,CSV和JSON都不够用。这时候得上数据库。
| 数据库类型 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| SQLite | 单机、小规模 | 零配置、轻量 | 并发写入差 |
| PostgreSQL | 中等规模、团队协作 | 功能强大、支持JSON | 需要维护 |
| ClickHouse | 大规模、分析型 | 查询极快、压缩率高 | 写入模式受限 |
| InfluxDB | 时序数据 | 天然适合交易日志 | 学习成本高 |
我的经验:刚开始做量化时,用CSV就够了。等策略多了、数据量上来了,再迁移到数据库。别一上来就上ClickHouse,那是杀鸡用牛刀。
1.4 知识体系总览
说了这么多,我画了一张图帮你理清思路。日志这件事,说白了就是三个维度:记什么、怎么记、怎么用。
这张图我画了好几次才满意。你看,日志这件事其实不复杂——左边是「记什么」,中间是「怎么记」,右边是「怎么用」。三者串起来,就是一个完整的闭环。
最后说一句:日志不是写给别人看的,是写给你自己看的。别偷懒,别糊弄。你今天的日志,就是明天你复盘时的救命稻草。
公众号:蓝海资料掘金营,微信deep3321