在金字塔中,日志可以分为

,其中交易日志主要是客户端交易柜台之间每次交互通信时的重要过程记录。是排查交易问题的重要依据,因此分析日志是使用者排查交易相关问题不可或缺的技能之一。在金字塔中,产生有效交易日志的环节如下图所示:

# 手工交易日志

  下面这段日志是手工下单的一个完整过程。是由客户端触发下单和交易柜台柜台回报之间的交互信息构成。其中单条日志可分解为本地时间类型日志内容三部分组成。其他类型的交易日志都是在此结构基础上实现的。

注:系统日志受柜台类型不同、下单功能不同等因素的影响,内容上会有些许差异;但是日志结构相同。本章节则使用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 开 买
1
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] 柜台返回的成交方向【开买=开多、开卖=开空、平买=平空、平卖=平多】

# 图表交易日志

以图表程序化交易已下单日志为例,了解程序化从触发到下单的整个日志过程,后台程序化产生的日志同理。

        本地时间             类型                日志内容
--------------------------------------------------------------------------------------------------------------
2021-12-22 09:03:02.006    【图表】框架:Technic 触发下单 SELL 品种 RB00 下单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    【图表】RB00 运行完毕
- ------------------------------------------------------------------------------------------------------------
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 平 卖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 注解

//客户端程序化交易触发信息、包含框架、触发动作、触发位置、策略信息等内容
2021-12-22 09:03:02.006 【图表】[1]框架:Technic[2] 触发下单 SELL[3] 品种 RB00[4] 下单K线 2021.12.22 13:04:00[5] 公式:MA交易系统[6] 窗格ID:Main[7] 代码行:18[8]

//当前策略触发的下单数量
2021-12-22 09:03:02.007 【图表】模型下单 1[9]

//根据下单系数功能调整实际下单手数(未设置时调整后的下单数量不变)
2021-12-22 09:03:02.011 【图表】下单系数调整后 手数:1[10]

//只有平仓指令才会判断当前账户的可用仓位数量,若可用为0 ,则直接结束后续委托动作。
2021-12-22 09:03:02.014 【图表】实际持仓 7[11]

//客户端程序化下单预处理结束
2021-12-22 09:03:02.018 【图表】直接下单[12]
2021-12-22 09:03:02.023 【图表】RB00 运行完毕[13]

//开始进入向交易柜台下单委托环节
以下省略......[14]

标号 字段解释
[1] 日志类型 含:手工、下单、指令、回报、图表、后台等标记
[2] 下单指令对应的框架名称
[3] 下单指令,图表【BUY, SELL, BUYSHORT, SELLSHORT】 、后台【TBUY, TSELL, TBUYSHORT, TSELLSHORT】
[4] 下单指令对应的品种
[5] 下单指令对应的K线位置
[6] 下单公式名称
[7] 下单指令对应的窗格ID
[8] 下单指令对应的代码位置,
[9] 策略下单数量
[10] 进行下单系数调整,未启用下单系数控制则等于策略下单数量
[11] 当前账户的实际可用仓位
[12] 开始进入下单委托环节
[13] 本次程序化运行结束
[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 平 卖
1
2
3
4
5
6
7
8
9
10
11
12
13
  1. 第1-2行:白银在后台预警<123>触发了平多操作,按照限价4826元处理。
  2. 第3行:平仓操作时,系统会判断账户是否存在可平仓位(开仓无此输出判断),此处得知可平手数为2手
  3. 第4-5行:后台执行结束,执行下单操作。
  4. 第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 开 买
1
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. 第1-10行:完整的图表下单日志,整个交易完成了交易委托,并收到了委托成功的回报。
  2. 第11-17行:通过时间可知,在收到委托回报后,经过10秒挂单后,触发撤单动作。并且成功完成撤单
  3. 第19-26行:完成撤单后,追单委托交易。并且完成成交。

其他辅助类功能参与交易中,其日志结构基本类似,不再枚举示例进行分析。用户可以自行尝试分析。遇到问题可以论坛咨询技术人员协助处理。

# 异常回报日志

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

# CTP常见报错

  CTP柜台常见回报报错内容见下表,通过柜台的具体报错信息,排查造成的报错的具体原因。

序号 CTP柜台常见报错内容 造成报错的常见原因
1 CTP:资金不足 市价指令委托,(柜台按涨跌停板价格预算保证金)
2 CTP:平仓量超过持仓量 策略或者手工下单指定的平仓量大于可用仓位,或者平仓数量包含平仓挂单未成交部分的数量
3 CTP:平今仓位不足 上期所使用平今指令时,平仓数量大于实际持有的今仓数量
4 CTP:找不到合约 下单的合约不存在或退市
5 CTP:撤单已报送,不允许重复撤单 重复发送撤单指令
6 CTP:报单已全成交或已撤销,不能再撤 撤单时订单已经成交或者是之前已经撤单成功
7 CTP:没有报单交易权限 当前账户没有此品种的交易权限,需要联系期货公司开通权限
8 CTP:交易所不支持的价格类型 当前委托使用的交易指令不被交易所支持
9 当前状态禁止此项操作 非交易时段(含集合竞价撮合成交时段)的委托被拒
10 不合法的数量 下单数量超出柜台单笔委托最大数量限制

# 技巧总结

  在使用金字塔交易时,除上述触发交易柜台错误规则的情况以外,还可能存在功能执行结果、策略执行结果与预期结果不同的情况出现;这类问题都可以从交易日志中找到原因或者确定排查方向。

序号 常见现象 建议排查方向
1 图表有信号,但是程序化交易记录中没有触发记录 策略条件闪烁、程序化功能未启用或者设置不合理
2 图表无信号,但是程序化交易记录中有触发记录 策略条件闪烁,检查下单条件
3 交易信号和预期信号不符 根据交易日志,排查定位与之关联的代码部分的逻辑是否正常,必要时使用调试方法跟踪实时执行结果
4 重复下单 根据交易日志,排查定位与之关联的代码部分的逻辑是否正常,必要时使用调试方法跟踪实时执行结果
6 委托数量与实际成交数量不一致 根据交易日志,排查是否存在撤单、持仓同步等操作
  1. 上述中第1、2的现象,是因为图表自身机制造成的,即图表信号是基于历史k线计算,那么当前看到的信号和当时执行时的结果不一定是一致的。若需要知道实时执行的结果,有且只能使用变量调试或者debugfile输出。关于调试方法见下一章节的调试教程