在金字塔中,日志可以分为和
客户端
和交易柜台
之间每次交互通信时的重要过程记录。是排查交易问题的重要依据,因此分析日志是使用者排查交易相关问题不可或缺的技能之一。在金字塔中,产生有效交易日志的环节如下图所示: # 手工交易日志
下面这段日志是手工下单的一个完整过程。是由客户端触发下单
和交易柜台柜台回报
之间的交互信息构成。其中单条日志可分解为本地时间
、类型
、日志内容
三部分组成。其他类型的交易日志都是在此结构基础上实现的。
注:系统日志受柜台类型不同、下单功能不同等因素的影响,内容上会有些许差异;但是日志结构相同。本章节则使用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] | 柜台返回的成交方向【开买=开多、开卖=开空、平买=平空、平卖=平多】 |
# 图表交易日志
以图表程序化交易已下单日志为例,了解程序化从触发到下单的整个日志过程,后台程序化产生的日志同理。
本地时间 类型 日志内容
--------------------------------------------------------------------------------------------------------------
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 平 卖
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 平 卖
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行:完成撤单后,追单委托交易。并且完成成交。
其他辅助类功能参与交易中,其日志结构基本类似,不再枚举示例进行分析。用户可以自行尝试分析。遇到问题可以论坛咨询技术人员协助处理。
# 异常回报日志
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、2的现象,是因为图表自身机制造成的,即图表信号是基于历史k线计算,那么当前看到的信号和当时执行时的结果不一定是一致的。若需要知道实时执行的结果,有且只能使用变量调试或者debugfile输出。关于调试方法见下一章节的调试教程。