PDF下载 下载

扫单策略说明

扫单是通过文件交换方式接入掘金交易通道。
适用场景:
用户可以在不重写旧有策略的前提下,以扫单文件接入掘金交易通道,或者在不接通掘金交易api的情况下使用扫单功能。
同量化策略相比:
扫单策略使用sqlite作为中转文件,没有代码,也不需要接口,不限制策略所在平台,可以用于掘金仿真和实盘交易,可以读取订单、持仓、资金,回报等信息
下单延迟大吗?
目前最高支持10ms频率极速扫单,对比主流通道延迟,影响可忽略

新建扫单策略

实盘交易or仿真交易 - 新建策略 - 扫单策略

在新建扫单策略页面填入扫单策略信息,扫单策略新建完成后,将在指定位置生成标准扫单格式文件、文件说明和python扫单读写demo

使用扫单策略

扫单策略启动后,自动打开扫单控制台窗口,用于监控扫单过程

注意事项

  • 扫单路径:存放扫描单策略文件地址,新建后会自动生成sqlite格式的交易数据文件
  • 扫描单频率:扫单策略读写文件的时间间隔
  • 扫单策略只能运行于仿真和实盘模式,启停、增删和量化策略一致
  • 在策略详情-设置中可以获取当前扫单策略文件存放地址
  • 扫单策略启动后会立刻下单,为了防止订单累积,请先启动扫单策略

扫描策略示例

扫描策略示例随扫单文件自动生成,用python语言编写,运行时随机生成交易订单写入当前扫单文件,请勿用于真实交易。其他语言文件读写方式请参考以下说明

扫单策略架构图

完整的工作流程

外部策略与扫单策略使用 sqlite做为数据交换的形式, 按各个程序对数据的写入与读取来区分,
分为in.db, out.db文件

扫描in.db的完整流程(内部处理流程)

  1. 从out.db读取adim_run_info表scan_sorder_id, scan_scancel_order_id 字段, 做为扫描开始的id
  2. 读取 in.db 的in_place_order表, 限制参数为id > scan_sorder_id(步骤1读取的值)且ctime > (当前时间 - preSeconds(默认为3600s))的订单,
  3. 过期单不会被扫描(默认有效期1个小时). 把扫描的订单集合一起下单出去(默认单批次最大单量为500,且不管订单是否执行成功)
  4. 读取 in.db 的in_cancel_order表, 限制参数为id > scan_scancel_order_id(步骤1读取的值)且ctime > (当前时间 - preSeconds(默认为3600s))的订单,
  5. 过期单不会被扫描(默认有效期1个小时). 把扫描的订单逐条执行撤单操作(不管撤单是否执行成功)
  6. 更新 admin_run_info表的scan_sorder_id, scan_scancel_order_id 字段值
  7. 如果2,3阶段单次没有扫完所有订单, 则继续执行2操作,直到扫描完毕为止. 扫描完毕后,扫单程序进入间隔频率等待 下次继续执行步骤2
  8. 订单扫描是状态时间会记录在out.db的ctime(读取订单时点)和send_time(发送订单时点),用于标注扫单的执行动作,一般扫单系统处理间隔很小

out.db写入的完整流程

扫单程序接收终端服务返回的 资金/持仓/委托状态变化流水/成交流水 信息, 把接收到的信息排队写入out.db

in.db 数据库说明

in.db 是用户的策略写入下单/撤单信息的数据库, 这个库由用户策略负责写入, 扫单程序只是读取

in_place_order 表

下单表, 用户策略对这个表只能是增加记录,写就是只能insert, 不能update跟delete

字段名 类型 说明
id int 自增,主键 (用户策略不需要提供这个值)
sid varchar(128) 用户策略维护的orderId
symbol varchar(32) 证券代码(市场.代码)如:SHSE.000001
volume int 委托量
price float64 委托价格
side int 买卖方向 参见
position_effect int 开平标志 参见
order_type int 委托类型 参见
order_duration int 委托时间属性 参见
order_qualifier int 委托成交属性 参见
ctime datetime 创建时间 (用户策略不需要提供这个值)

in_cancel_order 表

撤单表, 外部策略对这个表只能是增加记录,写就是只能insert, 不能update跟delete

字段名 类型 说明
id int 自增,主键 (外部策略不需要提供这个值)
sid varchar(128) 用户策略维护的orderId
ctime datetime 创建时间 (外部策略不需要提供这个值)

out.db 数据库说明

out.db 是扫单程序把从掘金系统返回的资金/成本回报/持仓等流水信息写入, 用户策略负责读取

admin_order_map 表

维护用户的orderId与掘金系统的clOrdId的关系.

字段名 类型 说明
id int 自增,主键
sid varchar(128) 用户策略维护的orderId
cl_ord_id varchar(128) 掘金系统维护的orderId
ctime datetime 创建时间. utc时间(也是读取in.db里in_place_order表 记录的时间)
send_time datetime 发送in.db里 in_place_order表下单记录及 in_cancel_order 表撤单记录的时间. utc时间

out_account_status 表

资金帐号状态变化流水表

字段名 类型 说明
id int 自增,主键
octime datetime 记录入库时间
account_id text 账号ID
account_name text 账户登录名
status int 参见

out_cash 表

资金表, 记录当前策略关联帐号的资金信息

字段名 类型 说明
id int 自增,主键
octime datetime 记录入库时间
account_id text 账号ID
account_name text 账户登录名
currency int 币种
nav real 净值(cum_inout + cum_pnl + fpnl - cum_commission)
pnl real 净收益(nav-cum_inout)
fpnl real 浮动盈亏(sum(each position fpnl))
frozen real 持仓占用资金
order_frozen real 挂单冻结资金
available real 可用资金
balance real 资金余额
cum_inout real 累计出入金
cum_trade real 累计交易额
cum_pnl real 累计平仓收益(没扣除手续费)
cum_commission real 累计手续费
last_trade real 上一次交易额
last_pnl real 上一次收益
last_commission real 上一次手续费
last_inout real 上一次出入金
change_reason int 资金变更原因 参见
change_event_id text 触发资金变更事件的ID
created_at datetime 资金初始时间
update_at datetime 资金变更时间

out_execrpt 表

执行回报 变化流水表

字段名 类型 说明
id int 自增,主键
octime datetime 记录入库时间
strategy_id text 策略ID
account_id text 账号ID
account_name text 账户登录名
cl_ord_id text 委托客户端ID
order_id text 委托柜台ID
exec_id text 委托回报ID
symbol text 证券代码(市场.代码)如:SHSE.000001
position_effect int 开平标志 参见
side int 买卖方向 参见
ord_rej_reason int 委托拒绝原因 参见
ord_rej_reason_detail text 委托拒绝原因描述
exec_type int 执行回报类型 参见
price real 委托成交价格
volume int 委托成交量
amount real 委托成交金额
commission real 委托成交手续费
cost real 委托成交成本金额
created_at datetime 回报创建时间

out_order 表

order 状态变化流水表

字段名 类型 说明
id int 自增,主键
octime datetime 记录入库时间
sid varchar(128) 用户策略维护的orderId
strategy_id text 策略ID
account_id text 账号ID
account_name text 账户登录名
cl_ord_id text 委托客户端ID
order_id text 委托柜台ID
ex_ord_id text 委托交易所ID
symbol text 证券代码(市场.代码)如:SHSE.000001
side int 买卖方向 参见
position_effect int 开平标志 参见
position_side int 持仓方向 参见
order_type int 委托类型 参见
order_duration int 委托时间属性 参见
order_qualifier int 委托成交属性 参见
order_src int 委托来源 参见
status int 委托状态 参见
ord_rej_reason int 委托拒绝原因 参见
ord_rej_reason_detail text 委托拒绝原因描述
price real 委托价格
stop_price real 委托止损/止盈触发价格
order_style int 委托风格 参见
volume real 委托量
value real 委托额
percent real 委托百分比
target_volume int 委托目标量
target_value real 委托目标额
target_percent real 委托目标百分比
filled_volume int 已成量
filled_vwap real 已成均价
filled_amount real 已成金额
filled_commission real 已成手续费
created_at datetime 委托创建时间
updated_at datetime 委托更新时间

out_position 表

持仓表, 记录当前策略的持仓信息. 其中 account_id, symbol, side 联合做为主键

字段名 类型 说明
id int 自增,主键
octime datetime 记录入库时间
account_id text 账号ID
account_name text 账户登录名
symbol text 证券代码(市场.代码)如:SHSE.000001
side int 持仓方向 参见
volume real 总持仓量; 昨持仓量(volume-volume_today)
volume_today real 今日持仓量
vwap real 持仓均价
amount real 持仓额(volumevwapmultiplier)
price real 当前行情价格
fpnl real 持仓浮动盈亏((price-vwap)volumemultiplier)
cost real 持仓成本(vwapvolumemultiplier*margin_ratio)
order_frozen int 挂单冻结仓位
order_frozen_today int 挂单冻结今仓仓位
available int 可平总仓位(volume-order_frozen); 可平昨仓位(available-available_today)
available_today int 可平今仓位(volume_today-order_frozen_today)
last_price real 上一次成交价
last_volume int 上一次成交量
last_inout int 上一次出入持仓量
change_reason int 仓位变更原因 参见
change_event_id text 触发资金变更事件的ID
has_dividend int 是否除权除息
created_at datetime 建仓时间
update_at datetime 仓位变更时间

admin_order_map 表

维护用户的orderId与掘金系统的clOrdId的关系.

字段名 类型 说明
id int 自增,主键
sid varchar(128) 用户策略维护的orderId
cl_ord_id varchar(128) 掘金系统维护的orderId
ctime datetime 创建时间

admin_run_info 表

扫描程序运行时信息表

字段名 类型 说明
id int 自增,主键
scan_sorder_id int 对in.db的 sorder 表扫描的最大id
scan_scancel_order_id int 对in.db的 scancel_order 表扫描的最大id
0 篇笔记