在使用金字塔交易过程中,不可避免的会碰到各种交易问题,读懂交易日志将成为我们快速定位异常问题的必不可少的技能之一。
注:日志受柜台类型不同、下单功能不同等因素的影响,内容上会有些许差异;但是日志结构相同。本章节则使用CTP交易产生的日志为示例进行分析。
# 手工交易日志
下面这段日志是手工下单的一个完整过程。是由本地触发记录
和柜台回报
交互构成。其中单条日志可分解为本地时间
、类型
、日志内容
三部分组成。其他交易日志都是在此结构基础上填充实现的;因此掌握基础日志分析将有利于后期快速分析复杂的日志记录。
本地时间 类型 日志内容
----------------------------------------------------------------------------------------------------
2021-12-17 11:22:02.644 【手工】 下单面板 执行下单操作,品种:RB00 螺纹钢连续
2021-12-17 11:22:02.645 【下单】 RB05 价4509.000000 量1 买卖0 类型0 开平0 账户001351
2021-12-17 11:22:02.649 【下单】 确认报单已发送 ID=32346547 RefID = 1748
2021-12-17 11:22:02.740 【指令】 收到回报指令 ID = 32346547 RefID = 1748 品种:rb2205 账户:001351
2021-12-17 11:22:02.741 【回报】 001351 : rb2205 - 已报单 1 价格:4509 开 买
2021-12-17 11:22:02.755 【指令】 收到回报指令 ID = 32346547 RefID = 1748 品种:rb2205 账户:001351
2021-12-17 11:22:02.759 【指令】 收到成交回报指令 REFID = 1748 vol = 1 Account = 001351
2021-12-17 11:22:02.767 【回报】 001351 : rb2205 - 已成交 1 价格:4509 开 买
2
3
4
5
6
7
8
9
10
# 注解
//此条日志记录触发交易相关的操作信息,内容包含使用的功能、相关操作、品种等信息
2021-12-17 11:22:02.644 【手工】[1] 下单面板[2] 执行下单操作[3],品种:RB00 螺纹钢连续[4]
//实际下单品种的委托信息,含委托数量、买卖方向、交易指令等信息
2021-12-17 11:22:02.645 【下单】RB05[5] 价4509.000000[6] 量1[7] 买卖0[8] 类型0[9] 开平0[10] 账户001351 [11]
//执行到出处时,说明本地下单指令已经发出。同时生成本地的ID,用于对于柜台返回的回报信息对应
2021-12-17 11:22:02.649 【下单】确认报单已发送 ID=32346547[12] RefID = 1748 [13]
//对【回报】信息的补充说明,看到它说明已经接收到了柜台回报信息,此处时对委托回报进行补充说明
2021-12-17 11:22:02.740 【指令】收到回报指令 ID = 32346547 RefID = 1748 品种:rb2205 账户:001351
//柜台回报有很多种,含委托、成交、异常等类型的回报内容;此处为委托回报内容,表示柜台已经成功接收到委托请求
2021-12-17 11:22:02.741 【回报】001351 : rb2205 - 已报单 1 价格:4509 开 买 [14]
//对【回报】信息的补充说明,看到它说明再次接收到了柜台回报信息,此处是对成交回报进行补充说明
2021-12-17 11:22:02.755 【指令】收到回报指令 ID = 32346547 RefID = 1748 品种:rb2205 账户:001351
//此处为成交回报内容,表示柜台已经完成撮合成交,含成交数量、成交价等信息
2021-12-17 11:22:02.759 【指令】收到成交回报指令 REFID = 1748 vol = 1[15] Account = 001351
2021-12-17 11:22:02.767 【回报】001351 : rb2205 - 已成交 1[16] 价格:4509[17] 开 买 [18]
标号 | 字段解释 |
---|---|
[1] | 日志类型 含:手工、下单、指令、回报、图表、后台等标记 |
[2] | 触发动作所属的功能;如:下单面板、闪电下单、篮子下单等 |
[3] | 执行的动作类型;如下单操作、撤单操作等 |
[4] | 操作的品种 |
[5] | 实际下单品种 |
[6] | 委托价格 【等于0时表示市价指令】 |
[7] | 下单数量 |
[8] | 买卖方向 【买=0,卖=1】 |
[9] | 交易指令 【限价=0, 市价=1, 停损=2, FAK=4, FOK=5, 对手方最优价=6 , 本方最优价=7 |
[10] | 开平方向 【开=0,平=1,平今=2】 |
[11] | 此次下单的账户 |
[12] | 本地生成的委托订单ID,与柜台回报产生对应关系,可以根据它找到后续相应的柜台回报信息 |
[13] | 本地生成的委托订单RefID ,作用同上 |
[14] | 回报内容,结合上下文,此处为委托信息,涵盖委托数量、委托价格、品种、买卖方向等特征信息 |
[15] | 柜台返回的已成交数量 |
[16] | 同上 |
[17] | 柜台返回的成交价 |
[18] | 柜台返回的成交方向【开买=开多、开卖=开空、平买=平空、平卖=平多】 |
其它手工日志
日志1:
分析得知:采用闪电下单功能,对IC01合约按照市价指令平多委托1手,成交价为7294元
2021-12-21 13:27:58.841 【手工】闪电下单 执行下单操作,品种:IC01 500股指2201
2021-12-21 13:27:58.843 【下单】IC01 价0.000000 量1 买卖1 类型1 开平1 账户001351 Formula 1
2021-12-21 13:27:58.847 【下单】确认报单已发送 ID=535375324 RefID = 1946
2021-12-21 13:27:58.853 【指令】收到回报指令 ID = 535375324 RefID = 1946 品种:IC2201 账户:001351
2021-12-21 13:27:58.855 【回报】001351 : IC2201 - 已报单 1 价格:7293.4 平 卖
2021-12-21 13:27:58.859 【指令】收到回报指令 ID = 535375324 RefID = 1946 品种:IC2201 账户:001351
2021-12-21 13:27:58.863 【指令】收到成交回报指令 REFID = 1946 vol = 1 Account = 001351
2021-12-21 13:27:58.868 【回报】001351 : IC2201 - 已成交 1 价格:7294.0 平 卖
2
3
4
5
6
7
8
日志2:
分析得知以下信息:
- 由第1--6行知:使用复合下单功能,针对RB05合约按照4400元委托多头开仓2手。
- 由第7行知:1分钟后并未成交,手工执行了对价追单操作。
- 由第8--18行知:手工追撤单操作已经执行完毕。
- 由第19--25行知:第二次委托追单,委托价4472元,并且完成成交,成交价4472元。
总结:此次下单总共产生了2次委托交易过程,第一次委托(ID=535375366)未成交,手动执行了对价追单操作,委托被撤销。第二次委托(ID=535375367)完成成交操作
2021-12-21 14:29:51.580 【手工】复合下单 执行下单操作
2021-12-21 14:29:51.580 【下单】RB05 价4400.000000 量2 买卖0 类型0 开平0 账户001351 Formula 1
2021-12-21 14:29:51.586 【下单】确认报单已发送 ID=535375366 RefID = 1988
2021-12-21 14:29:51.591 【指令】收到回报指令 ID = 535375366 RefID = 1988 品种:rb2205 账户:001351
2021-12-21 14:29:51.612 【回报】001351 : rb2205 - 已报单 2 价格:4400 开 买
2021-12-21 14:29:51.616 【指令】收到回报指令 ID = 535375366 RefID = 1988 品种:rb2205 账户:001351
2021-12-21 14:31:03.598 【手工】下单面板 执行对价追单操作
2021-12-21 14:31:03.598 【C++】至队列单方式委托
2021-12-21 14:31:03.605 【队列】当前队列准备处理数据:2条
2021-12-21 14:31:03.608 【队列】发送撤单指令 订单号:535375366
2021-12-21 14:31:03.613 【队列】当前队列准备处理数据:2条
2021-12-21 14:31:03.617 【队列】当前有未处理队列,返回等待
2021-12-21 14:31:03.621 【下单】RB05 执行撤单指令 RefID:1988 帐号:001351
2021-12-21 14:31:03.626 【指令】收到回报指令 ID = 535375366 RefID = 1988 品种:rb2205 账户:001351
2021-12-21 14:31:03.633 【指令】收到撤单回报指令 ID = 535375366 RefID = 1988
2021-12-21 14:31:03.638 【回报】001351 : rb2205 - 已撤单 量:2
2021-12-21 14:31:03.643 【队列】当前队列准备处理数据:1条
2021-12-21 14:31:03.648 【队列】发送下单指令
2021-12-21 14:31:03.652 【下单】RB05 价4472.000000 量2 买卖0 类型0 开平0 账户001351 Formula 1
2021-12-21 14:31:03.659 【下单】确认报单已发送 ID=535375367 RefID = 1989
2021-12-21 14:31:03.663 【指令】收到回报指令 ID = 535375367 RefID = 1989 品种:rb2205 账户:001351
2021-12-21 14:31:03.670 【回报】001351 : rb2205 - 已报单 2 价格:4472 开 买
2021-12-21 14:31:03.675 【指令】收到回报指令 ID = 535375367 RefID = 1989 品种:rb2205 账户:001351
2021-12-21 14:31:03.679 【指令】收到成交回报指令 REFID = 1989 vol = 2 Account = 001351
2021-12-21 14:31:03.685 【回报】001351 : rb2205 - 已成交 2 价格:4472 开 买
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 程序化交易日志
程序化交易日志的结构,其核心在手工交易日志结构的基础上的扩充。下面我们分别进行分析图表和后台两种程序化交易日志。日志都可以分解为程序化交易记录和下单操作两部分。下方示例采用----
分隔。便于观看。
图表交易日志
2021-12-22 09:03:02.006 【图表】框架:Technic 触发下单 SELL 品种 RB05 下单K线 2021.12.22 13:04:00 公式:MA交易系统 窗格ID:Main 代码行:18
2021-12-22 09:03:02.007 【图表】模型下单 1
2021-12-22 09:03:02.011 【图表】下单系数调整后 手数:1
2021-12-22 09:03:02.014 【图表】实际持仓 7
2021-12-22 09:03:02.018 【图表】直接下单
2021-12-22 09:03:02.023 【图表】RB05 运行完毕
- -------------------------------------------------------------------------------------------------------------
2021-12-22 09:03:02.026 【下单】RB05 价0.000000 量1 买卖1 类型1 开平1 账户001351 Formula 1
2021-12-22 09:03:02.029 【下单】确认报单已发送 ID=2017177127 RefID = 1992
2021-12-22 09:03:02.288 【指令】收到回报指令 ID = 2017177127 RefID = 1992 品种:rb2205 账户:001351
2021-12-22 09:03:02.288 【回报】001351 : rb2205 - 已报单 1 价格:4481 平 卖
2021-12-22 09:03:02.293 【指令】收到回报指令 ID = 2017177127 RefID = 1992 品种:rb2205 账户:001351
2021-12-22 09:03:02.298 【指令】收到成交回报指令 REFID = 1992 vol = 1 Account = 001351
2021-12-22 09:03:02.304 【回报】001351 : rb2205 - 已成交 1 价格:4484 平 卖
2
3
4
5
6
7
8
9
10
11
12
13
14
- 第1行:图表交易中,Technic框架中的Main窗格中的公式(第18行),在2021.12.22 13:04:00这根k上触发了平仓操作。
- 第2行:公式中的下单数量为1手
- 第3行:若启用了多账户及下单系数功能,那么此时应该为【系数X公式中的手数】。否者等于公式中的下单数量。此处为1手
- 第4行:图表平仓操作时,系统会判断账户是否存在可平仓位(开仓无此输出判断),此处得知可平手数为7手。
- 第5-6行:图表相关检测执行完毕,执行下单操作。
- 第8-14行:请参照手工交易章节中的解释进行分析。此处不再赘述。
后台交易日志
2021-12-22 10:40:02.356 【后台】AG00 TSell 第 2 行 策略:<123> 出现信号
2021-12-22 10:40:02.356 【后台】AG00 TSell 已成功触发下单操作 价格:4826.000000 数量:1 类型:0 账户: 品种:AG00
2021-12-22 10:40:02.363 【后台】实际账户持仓 2
2021-12-22 10:40:02.369 【后台】下单已发送
2021-12-22 10:40:02.454 【后台】AG00 运行结束
- -------------------------------------------------------------------------------------------------------------
2021-12-22 10:40:02.461 【下单】AG06 价4826.000000 量1 买卖1 类型0 开平1 账户001351 Formula 1
2021-12-22 10:40:02.466 【指令】收到回报指令 ID = 2017177138 RefID = 2003 品种:ag2206 账户:001351
2021-12-22 10:40:02.471 【下单】确认报单已发送 ID=2017177138 RefID = 2003
2021-12-22 10:40:02.478 【回报】001351 : ag2206 - 已报单 1 价格:4826 平 卖
2021-12-22 10:40:02.483 【指令】收到回报指令 ID = 2017177138 RefID = 2003 品种:ag2206 账户:001351
2021-12-22 10:40:02.521 【指令】收到成交回报指令 REFID = 2003 vol = 1 Account = 001351
2021-12-22 10:40:02.527 【回报】001351 : ag2206 - 已成交 1 价格:4826 平 卖
2
3
4
5
6
7
8
9
10
11
12
13
- 第1-2行:白银在后台预警<123>触发了平多操作,按照限价4826元处理。
- 第3行:平仓操作时,系统会判断账户是否存在可平仓位(开仓无此输出判断),此处得知可平手数为2手
- 第4-5行:后台执行结束,执行下单操作。
- 第7-13行:请参照手工交易章节中的解释进行分析。此处不再赘述。
辅助功能日志
程序化追撤单功能参与图表程序化交易产生的日志。图表触发交易后,由于挂单未成交,触发了10s未成交则撤单追单的功能。日志如下所示:
2021-12-22 11:14:01.815 【图表】框架:Technic 触发下单 BUY 品种 RB00 下单K线 2021.12.22 15:14:00 公式:Formula5 窗格ID:Main 代码行:1
2021-12-22 11:14:01.815 【图表】模型下单 1
2021-12-22 11:14:01.820 【图表】下单系数调整后 手数:1
2021-12-22 11:14:01.824 【图表】直接下单
2021-12-22 11:14:01.833 【图表】RB00 运行完毕
2021-12-22 11:14:01.835 【下单】RB05 价4437.000000 量1 买卖0 类型0 开平0 账户001351 Formula 1
2021-12-22 11:14:01.843 【下单】确认报单已发送 ID=2017177153 RefID = 2018
2021-12-22 11:14:01.848 【指令】收到回报指令 ID = 2017177153 RefID = 2018 品种:rb2205 账户:001351
2021-12-22 11:14:01.852 【回报】001351 : rb2205 - 已报单 1 价格:4437 开 买
2021-12-22 11:14:01.862 【指令】收到回报指令 ID = 2017177153 RefID = 2018 品种:rb2205 账户:001351
- -------------------------------------------------------------------------------------------------------------
2021-12-22 11:14:11.738 【追单】发送了首次追单下单指令到队列 追单数量:1 账户001351 报单:1 成交0
2021-12-22 11:14:11.739 【追单】追单队列 撤单操作 订单号:2017177153 账户:001351
2021-12-22 11:14:11.745 【下单】RB05 执行撤单指令 RefID:2018 帐号:001351
2021-12-22 11:14:11.768 【指令】收到回报指令 ID = 2017177153 RefID = 2018 品种:rb2205 账户:001351
2021-12-22 11:14:11.778 【指令】收到撤单回报指令 ID = 2017177153 RefID = 2018
2021-12-22 11:14:11.781 【回报】001351 : rb2205 - 已撤单 量:1
- -------------------------------------------------------------------------------------------------------------
2021-12-22 11:14:11.784 【下单】RB05 价4441.000000 量1 买卖0 类型0 开平0 账户001351 Formula 1
2021-12-22 11:14:11.792 【下单】确认报单已发送 ID=2017177154 RefID = 2019
2021-12-22 11:14:11.799 【追单】撤单成功,发送追单指令
2021-12-22 11:14:11.803 【指令】收到回报指令 ID = 2017177154 RefID = 2019 品种:rb2205 账户:001351
2021-12-22 11:14:11.810 【回报】001351 : rb2205 - 已报单 1 价格:4441 开 买
2021-12-22 11:14:11.815 【指令】收到回报指令 ID = 2017177154 RefID = 2019 品种:rb2205 账户:001351
2021-12-22 11:14:11.819 【指令】收到成交回报指令 REFID = 2019 vol = 1 Account = 001351
2021-12-22 11:14:11.827 【回报】001351 : rb2205 - 已成交 1 价格:4441 开 买
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
- 第1-10行:完整的图表下单日志,整个交易完成了交易委托,并收到了委托成功的回报。
- 第11-17行:通过时间可知,在收到委托回报后,经过10秒挂单后,触发撤单动作。并且成功完成撤单
- 第19-26行:完成撤单后,追单委托交易。并且完成成交。
其他辅助类功能参与交易中,其日志机构基本类似,不再枚举示例进行分析。用户可以自行尝试分析。遇到问题可以论坛咨询技术人员协助处理。
# 异常日志
异常日志分析
异常日志1:
分析得知:此次手工下单,已经正常委托至柜台(第5行)。之后被柜台撤单。撤单原因:由前缀时间得知,是在非交易时段委托造成的。
2021-12-21 13:10:40.608 【手工】下单面板 执行下单操作,品种:AG00 白银连续
2021-12-21 13:10:40.609 【下单】AG06 价4321.000000 量1 买卖0 类型0 开平0 账户001351 Formula 1
2021-12-21 13:10:40.612 【下单】确认报单已发送 ID=535375315 RefID = 1937
2021-12-21 13:10:40.623 【指令】收到回报指令 ID = 535375315 RefID = 1937 品种:ag2206 账户:001351
2021-12-21 13:10:40.623 【回报】001351 : ag2206 - 已报单 1 价格:4321 开 买
2021-12-21 13:10:40.674 【指令】收到撤单回报指令 ID = 535375315 RefID = 1937
2021-12-21 13:10:40.675 【回报】001351 : ag2206 - 26:已撤单报单被拒绝SHFE:当前状态禁止此项操作 量:1
2
3
4
5
6
7