一、量化交易日志概述

做量化交易这些年,我越来越觉得——日志这东西,就像飞机的黑匣子。

平时你可能觉得它没啥用,甚至有点烦。但一旦出问题,它就是唯一能帮你还原真相的东西。我见过太多人,策略亏了都不知道怎么亏的,回测跑得漂亮实盘却一塌糊涂。说白了,就是缺一本「交易日记」。

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 知识体系总览

说了这么多,我画了一张图帮你理清思路。日志这件事,说白了就是三个维度:记什么、怎么记、怎么用。

量化交易日志 日志记录内容 交易信号 成交记录 资金变动 日志格式规范 CSV(轻量易读) JSON(结构化) 数据库(大规模) 日志核心价值 复盘分析 故障排查 策略优化 记什么 → 怎么记 → 怎么用 三者缺一不可,形成闭环

这张图我画了好几次才满意。你看,日志这件事其实不复杂——左边是「记什么」,中间是「怎么记」,右边是「怎么用」。三者串起来,就是一个完整的闭环。

最后说一句:日志不是写给别人看的,是写给你自己看的。别偷懒,别糊弄。你今天的日志,就是明天你复盘时的救命稻草。


公众号:蓝海资料掘金营,微信deep3321