MatchingEngineSimulator

模拟撮合引擎插件(Matching Engine Simulator)用于模拟用户在某个时间点发出或取消订单的操作,并获取相应的交易结果。

该插件以行情数据(快照数据或逐笔数据)和用户委托订单(买方或卖方)作为输入,根据订单撮合规则实现模拟撮合后,将订单成交结果(含部分成交结果、拒绝订单和已撤订单)输出至订单明细输出表,未成交部分等待与后续行情撮合成交,或者等待用户撤单。

安装插件

版本要求

DolphinDB Server:2.00.9 及更高版本,支持 Linux x86-64, Linux JIT。

安装步骤

  1. 在 DolphinDB 客户端中使用 listRemotePlugins 命令查看插件仓库中的插件信息。

    login("admin", "123456")
    listRemotePlugins("MatchingEngineSimulator")
  2. 使用 installPlugin 命令完成插件安装。

    installPlugin("MatchingEngineSimulator")
  3. 使用 loadPlugin 命令加载插件。

    loadPlugin("MatchingEngineSimulator")
注: 使用 2.00.9 版本 server 的用户,可从二进制插件包中获取二进制插件包,并用 loadPlugin 命令加载后使用。

插件接口

createMatchEngine

语法

MatchingEngineSimulator::createMatchEngine(name, 
	exchange, 
	config, 
	dummyQuoteTable,
	quoteColMap, 
	dummyUserOrderTable,
	userOrderColMap, 
	orderDetailsOutput,
	[orderDetailsAndSnapshotOutput], 
	[snapshotOutput])

详情

创建一个模拟撮合引擎。

参数

  • name:名称,字符串标量,全局唯一。

  • exchange:交易所标识,股票类型可以为深交所 "XSHE" 或上交所 "XSHG",期货期权类型可以为商品期货和期权 ”commodity”、国债期货股指期货和权益类的期权”equity” 或 无时间限制 “universal”。

  • config: 是一个字典标量,包含配置的键值对,类型为(STRING, DOUBLE)。

字典 key

含义

dataType 行情类别:

股票逐笔:0;

股票快照:1;

股票分钟:4;

股票日频:5;

期货期权快照:6;

期货期权分钟:7;

期货期权分钟:8;

depth 匹配的订单簿深度,5 - 50
outputOrderBook 是否输出订单簿。0(不输出),1(输出)
outputInterval 输出订单簿的最小时间间隔,单位为毫秒
latency

模拟时延,单位为毫秒,用来模拟用户订单从发出到被处理的时延。

latency=-1 时,订单会即时撮合

orderBookMatchingRatio 成交百分比
matchingMode

快照模式下,匹配的两种模式,可设置为 1 或者 2

  • 撮合模式一:与最新成交价以及对手方盘口按配置的比例撮合

  • 撮合模式二:与区间的成交列表以及对手方盘口撮合成交

matchingRatio 快照模式下,快照的区间成交百分比,默认和成交百分比 orderBookMatchingRatio 相等
enableOrderDetailsAndSnapshotOutput 是否需要输出到复合输出表
outputTimeInfo

成交输出表中是否需要订单收到时的行情最新时间,”匹配开始时间“”匹配完成时间“

0(不需要), 1(需要)

outputQueuePosition

是否输出订单在真实行情数据的位置信息。

如果输出该信息,则在成交明细和未成交订单接口中会增加以下 5 个指标:

  • 优于委托价格的行情未成交委托单总量

  • 次于委托价格的行情未成交委托单总量

  • 等于委托价格的行情未成交委托单总量

  • 等于委托价格且早于用户订单时间的行情未成交委托单总量

  • 优于委托价格的行情档位数

该参数可设置为如下值:

  • 0:默认值,表示不输出
  • 1:表示订单撮合成交计算上述指标的时候,把最新的一条行情纳入订单薄
  • 2:表示订单撮合成交计算上述指标的时候,把最新的一条行情不纳入订单薄,即统计的是撮合计算前的位置信息
outputOrderConfirmation 是否输出委托回报,默认为 true。
outputRejectDetails 是否输出用户订单、用户撤单被拒绝的具体原因。默认为 false。
cpuId 绑定到的 CPU 核的 ID,只在第一次接收到行情或者用户订单的时候绑定该线程
  • dummyQuoteTable:插入行情数据的表的实际结构,对于一些引擎内部使用到的列,由参数 quoteColMap 提供列名映射关系。

  • quoteColMap:行情数据表的列名映射关系,一个字典标量,类型为(STRING, DOUBLE)。

    其中,对于逐笔模式,行情表必须提供的列如下:

名称

类型

含义

symbol SYMBOL 股票标的
symbolSource SYMBOL 证券市场:深交所、上交所
timestamp TIMESTAMP 时间戳
sourceType INT 0(order) ,1(transaction)
orderType INT

order:

  • 1:市价
  • 2:限价
  • 3:本方最优
  • 10:撤单(仅上交所,即上交所撤单记录在 order 中)

transaction:

  • 0:成交
  • 1:撤单(仅深交所,即深交所撤单记录在 transaction 中)
price DOUBLE 订单价格
qty LONG 订单数量
buyNo LONG transaction 对应其原始数据;order 填充原始订单号,无意义,深交所数据为了补全上交所数据格式增加的冗余列
sellNo LONG transaction 对应其原始数据;order 填充原始委托订单号,无意义,深交所数据为了补全上交所数据格式增加的冗余列
direction INT 1(买 ),2(卖)
seqNum LONG 逐笔数据序号

对于快照模式,行情表必须提供的列如下:

注:

注意:

股票行情撮合模式二中必须提供 tradePrice(成交价格)和 tradeQty(成交数量)列表字段,撮合模式一中可以不包含这两列。

期货期权有 highPrice 和 lowPrice 两个字段。

名称

类型

含义

symbol SYMBOL 股票标的
symbolSource SYMBOL 证券市场:深交所、上交所
timestamp TIMESTAMP 时间戳
lastPrice DOUBLE 最新价
upLimitPrice DOUBLE 涨停板价
downLimitPrice DOUBLE 跌停板价
totalBidQty LONG 区间买单成交数量总和
totalOfferQty LONG 区间卖单成交数量总和
bidPrice DOUBLE[] 买单价格列表
bidQty LONG[] 买单数量列表
offerPrice DOUBLE[] 卖单价格列表
offerQty LONG[] 卖单数量列表
tradePrice DOUBLE[] 成交价格列表(股票撮合模式二时必须有)
tradeQty LONG[] 成交数量列表(股票撮合模式二时必须有)
highPrice DOUBLE 最高价(期货期权品种时带有的字段)
lowPrice DOUBLE 最低价(期货期权品种时带有的字段)

对于分钟频率和日频数据,行情表必须提供的列如下:

字段

类型

名称

symbol SYMBOL 标的代码
tradeTime TIMESTAMP 时间
open DOUBLE 开盘价
low DOUBLE 最低价
high DOUBLE 最高价
close DOUBLE 收盘价
volume LONG 成交量
amount DOUBLE 成交额
upLimitPrice DOUBLE 涨停价
downLimitPrice DOUBLE 跌停价
  • dummyUserOrderTable:插入用户订单数据的表的实际结构,对于一些引擎内部使用到的列,由参数 userOrderColMap 提供列名映射关系。

  • userOrderColMap:用户订单表的列名映射关系,一个字典标量,类型为(STRING, DOUBLE)。

    • 股票,用户订单表必须提供的列如下:

名称

类型

含义

symbol STRING 股票标的。取消订单时股票标的无效,以 orderId 为准。
timestamp TIMESTAMP 时间戳
orderType INT

上交所:

  • 0:市价单中最优五档即时成交剩余撤销委托订单
  • 1:市价单中最优五档即时成交剩余转限价委托订单
  • 2:市价单中本方最优价格委托订单
  • 3:市价单中对手方最优价格委托订单
  • 5:限价单
  • 6:撤单
  • 7:市价单中最优五档即时成交剩余撤销委托订单(保护限价)
  • 8:市价单中最优五档即时成交剩余转限价委托订单(保护限价)
  • 9:市价单中本方最优价格委托订单(保护限价)
  • 10:市价单中对手方最优价格委托订单(保护限价)

深交所:

  • 0:市价单中最优五档即时成交剩余撤销委托订单
  • 1:市价单中即时成交剩余撤销委托订单
  • 2:市价单中本方最优价格委托订单
  • 3:市价单中对手方最优价格委托订单
  • 4:市价单中全额成交或撤销委托订单
  • 5:限价单
  • 6:撤单

分钟频率、日频模式:

  • 0:市价单
  • 5:限价单
  • 6:撤单
price DOUBLE 订单委托价格
orderQty LONG 委托数量
direction INT 1(买 ),2(卖)
orderId LONG 用户订单 ID,仅撤单时起作用
    • 期货期权,用户订单表必须提供的列如下:
名称 类型 含义
symbol SYMBOL 期货标的
symbolSource SYMBOL 交易所代码
timestamp TIMESTAMP 时间
orderType INT

订单类型:默认 5 表示限价单

5:限价单

6:撤单

0:市价单,以涨跌停价委托,并遵循时间优先原则

1:市价止损单

  市价止损单是指某标的市场价格一旦达到委托设定的价格水平时即转变为市价单。市价止损单既可以是平仓单,也可以是开仓单

2:市价止盈单

市价止盈单是指某标的市场价格一旦达到委托设定的价格水平时即转变为市价单。市价止盈单既可以是平仓单,也可以是开仓单

3:限价止损单

限价止损单是指委托订单指定某合约成交的价格波动区间。价格一旦触发后即转变为价格波动区间极值的限价单。限价止损单既可以是平仓单,也可以是开仓单。

4:限价止盈单

限价止盈单是指委托订单指定某合约成交的价格波动区间。价格一旦触发后即转变为价格波动区间极值的限价单。限价止盈单既可以是平仓单,也可以是开仓单。

price DOUBLE 委托订单价格
stopPrice DOUBLE 止损价/止盈价
orderQty LONG 委托订单数量
direction INT 买卖方向:1:买开;2:卖开;3:卖平;4:买平
timeInForce INT

委托订单有效性:

0:当日有效(默认)

1:立即全部成交否则自动撤销(FOK)

2:立即成交剩余自动撤销(FAK)

orderId LONG 用户订单ID,仅撤单时起作用
  • orderDetailsAndSnapshotOutput:复合输出表,包含订单簿及用户订单成交委托详细情况表。需要调用 extractInfo 接口(详见后文该接口说明)来解析出具体数据。

名称

类型

含义

msgType INT 1(成交结果)或 2(订单簿)
content BLOB 具体数据
  • orderDetailsOutput:订单详情结果输出表(包括用户订单委托回报,成交、拒单以及撤单状态)。

    • 在配置项 outputRejectDetails 为 true 时(详见本接口的 config 参数说明),启用 outputRejectDetails 列。

    • 在配置项 outputQueuePosition 为 1 时(详见本接口的 config 参数说明),启用 openVolumeWithBetterPrice, openVolumeWithWorsePrice, openVolumeAtOrderPrice, priorOpenVolumeAtOrderPrice 和depthWithBetterPrice五列。

    • 在配置项 outputTimeInfo 为 1 时(详见本接口的 config 参数说明),启用 receiveTime, startMatchTime, endMatchTime 列。

名称

类型

含义

orderId LONG 成交的用户订单 ID
symbol STRING 股票标的
direction INT 1(买 ),2(卖)
sendTime TIMESTAMP 订单发送时间
orderPrice DOUBLE 委托价格
orderQty LONG 订单委托数量
tradeTime TIMESTAMP 成交时间
tradePrice DOUBLE 成交价格
tradeQty LONG 成交量
orderStatus INT

用户订单是否完全成交

  • 4:已报
  • -2:表示撤单被拒绝
  • -1:表示订单被拒绝
  • 0:表示订单部分成交
  • 1:表示订单完全成交
  • 2:表示订单被撤单
sysReceiveTime NANOTIMESTAMP 订单收到时的时间(系统时间)
rejectDetails STRING 用户订单、用户撤单的具体拒单原因
openVolumeWithBetterPrice LONG 优于委托价格的行情未成交委托单总量
openVolumeWithWorsePrice LONG 次于委托价格的行情未成交委托单总量
openVolumeAtOrderPrice LONG 等于委托价格行情未成交委托单总量
priorOpenVolumeAtOrderPrice LONG 等于委托价格行情且比自己早的行情未成交委托单总量
depthWithBetterPrice INT 优于委托价格的行情档位数
receiveTime TIMESTAMP 订单收到时的行情最新时间
startMatchTime NANOTIMESTAMP 匹配开始时间
endMatchTime NANOTIMESTAMP 匹配完成时间
注:

订单状态 orderStatus 为 -1 即订单被拒绝的场景:

  1. 委托的用户订单不在交易所交易时间内。

  2. 委托数量不符合要求:volume <0;买单的 volume 不是100 的倍数;科创版“68”的限价单小于 200 股或超过 10 万股;科创版“68”的市价单小于 200 股或超过 5 万股;上交“11”或深交”12”的 volume 不是 10 的倍数。

  3. 用户订单的价格大于涨停价或者小于跌停价。

  4. 在 dataType=5 时,行情的价格必须低于涨停价和高于跌停价。

  5. 在 dataType=0 和 dataType =1 时,用户订单开始处理时,没有时间早于用户订单的行情。

  6. 在 dataType=4 时,插入市价的用户订单前没有行情。

  7. 在 dataType=0 和 dataType=1 时,市价用户订单在 9:15-9:25 或 14:57 以后。

订单状态 orderStatus 为 -2 即撤单被拒绝的场景:

  1. 撤单的委托时间不能迟于用户订单的委托时间。

  2. 回撤了一个不存在的订单或者是已经完全交易的订单。

  3. 用户撤单发生在 9:20-9:25、14:57-15:00。

  • snapshotOutput:行情快照输出表。

名称

类型

含义

symbol STRING 股票标的
timestamp TIMESTAMP 时间
avgBidPrice DOUBLE 买单成交均价
avgOfferPrice DOUBLE 卖单成交均价
totalBidQty LONG 买单成交数量总和
totalOfferQty LONG 卖单成交数量总和
bidPrice DOUBLE[] 买单价格列表
bidQty LONG[] 买单数量列表
offerPrice DOUBLE[] 卖单价格列表
offerQty LONG[] 卖单数量列表
lastPrice DOUBLE 最新价
highPrice DOUBLE 最高价
lowPrice DOUBLE 最低价

返回值

一个模拟撮合引擎。

getOpenOrders

语法

MatchingEngineSimulator::getOpenOrders(engine, symbolList);

详情

获取未成交的用户订单信息。

参数

  • engine:通过 createMatchEngine 接口创建的撮合引擎。

  • symbolList:股票标的列表,选填,表示获取所有的未成交订单。

返回值

返回值是一个表。包含如下列:

注意:仅当 outputQueuePosition=1 时,包含 openVolumeWithBetterPrice, openVolumeWithWorsePrice, openVolumeAtOrderPrice, priorOpenVolumeAtOrderPrice, depthWithBetterPrice,

updateTime 五列。(详见 createMatchEngine 接口的 config 参数说明)

名称

类型

含义

orderId LONG 订单 ID
timestamp TIMESTAMP 时间
symbol STRING 股票标的
price DOUBLE 委托价格
totalQty LONG 用户订单数量
openQty LONG 用户订单余量
direction INT 1(买 ),2(卖)
isMacthing INT 订单是否到达撮合时间
openVolumeWithBetterPrice LONG 优于委托价格的行情未成交委托单总量
openVolumeWithWorsePrice LONG 次于委托价格的行情未成交委托单总量
openVolumeAtOrderPrice LONG 等于委托价格行情未成交委托单总量
priorOpenVolumeAtOrderPrice LONG 等于委托价格行情且比自己早的行情未成交委托单总量
depthWithBetterPrice INT 优于委托价格的行情档位数
updateTime TIMESTAMP 最新更新时间

resetMatchEngine

语法

MatchingEngineSimulator::resetMatchEngine(engine)

详情

清空内部缓存的所有订单信息以及行情信息。

参数

engine:通过 createMatchEngine 接口创建的撮合引擎。

返回值

无。

getEngineList

语法

MatchingEngineSimulator::getEngineList();

详情

获取所有的 engine。

返回值

返回一个 engine 列表。类型为字典,key 为 ID,value 为 engine 对象。

getSymbolList

语法

MatchingEngineSimulator::getSymbolList(engine);

详情

获取某引擎中当前存在的股票 symbol 列表。

返回值

返回一个 STRING 类型的向量,包含当前存在的股票标的。

stopMatchEngine

语法

MatchingEngineSimulator::stopMatchEngine(engine, symbolList);

详情

停止模拟撮合引擎。

参数

  • engine:通过 createMatchEngine 接口创建的撮合引擎。

  • symbolList:字符串标量,可选参数,表示需要停止模拟的股票。若不填,则停止所有股票模拟。

extractInfo

语法

MatchingEngineSimulator::extractInfo(msgType, msg, [table]);

详情

解析 orderDetailsAndSnapshotOutput 表中的内容。(详见 createMatchEngine 接口的 orderDetailsAndSnapshotOutput 参数说明)

参数

  • msgType:1 表示订单状态详情表,2 表示订单簿。

  • msg: 待解析的 BLOB 类型的数据。

  • table: 与 orderDetailsAndSnapshotOutput 相同结构的表。

返回值

如果指定 table,则将解析结果 append 到 table 的末尾中,并返回 true。

如果未指定 table,则返回解析结果。

insertMsg

语法

MatchingEngineSimulator::insertMsg(engine, msgBody, msgType);

详情

插入行情和用户订单数据。

参数

  • engine:通过 createMatchEngine 接口创建的撮合引擎。

  • msgBody:行情或用户订单数据。

  • msgType:数据类型。1 表示行情,2 表示用户订单。

返回值

如果插入的是行情数据,返回 Void;

如果插入的是用户订单数据,返回用户的订单 ID(LONG 类型的向量)。

setLimitPrice

语法

MatchingEngineSimulator::setLimitPrice(engine, data);

详情

设置模拟撮合引擎的涨停价和跌停价。

注意:价格超过涨停价和跌停价范围内的用户订单都会被拒绝。

参数

  • engine:通过 createMatchEngine 接口创建的撮合引擎。

  • data:一个表。包含 3 列(symbol, upLimitPrice, downLimitPrice),分别是 STRING,DOUBLE,DOUBLE 类型。

返回值

如果设置成功,返回 true。

setPrevClose

语法

MatchingEngineSimulator::setPrevClose(engine, prevClose);

详情

设置模拟撮合引擎的前收盘价。

注: 深交所的逐笔模式且有创业版的股票时,必须设置前收盘价。

参数

  • engine:通过 createMatchEngine 接口创建的撮合引擎。

  • prevClose:一个字典。键值类型为 STRING-DOUBLE。字典的 key 为股票号,value 为对应股票的前收盘价。

返回值

如果设置成功,返回 true。

getSnapshot

语法

MatchingEngineSimulator::getSnapshot(engine, symbolList);

详情

获取逐笔引擎中的行情快照信息。

参数

  • engine:是通过 createMatchEngine 接口创建的逐笔撮合引擎。

  • symbolList: 股票标的,字符串向量。如果没有填该参数,表示获取所有股票标的快照。

返回值

返回一个表 ,结构如下:

名称

类型

含义

symbol STRING 股票标的
timestamp TIMESTAMP 时间
avgTradePriceAtBid DOUBLE 买单成交均价
avgTradePriceAtOffer DOUBLE 卖单成交均价
totalTradeQtyAtBid LONG 买单成交数量总和
totalTradeQtyAtOffer LONG 卖单成交数量总和
bidPrice DOUBLE\[] 买单价格列表
bidQty LONG\[] 买单数量列表
offerPrice DOUBLE\[] 卖单价格列表
offerQty LONG[] 卖单数量列表
lastPrice DOUBLE 最新价
highPrice DOUBLE 最高价
lowPrice DOUBLE 最低价

例子

例 1:通过自定义函数指定模拟撮合需要的参数

login("admin", "123456") //登录 loadPlugin("/DolphinDBPlugin/MatchingEngineSimulator/bin/PluginMatchingEngineSimulator.txt")
            //加载插件 go //用户订单 MARKET_OTHER_BEST = 3 MARKET_THIS_BEST = 2 MARKET_BEST_FIVE = 0 MARKET_INSTANT_DEAL = 1 MARKET_ALL_DEAL = 4 LIMIT_ORDER = 5 ORDER_CANCEL = 6 def initArgsSnapshotmode2(){     dummyQuoteTable = table(1:0,
            `symbol`symbolSource`timestamp`lastPrice`highestPrice2`lowestPrice2`highestPrice`lowestPrice`openPrice`preClosePrice`upLimitPrice`downLimitPrice`avgBidPrice`avgOfferPrice`totalBidQty`totalOfferQty`bidPrice`bidQty`offerPrice`offerQty`tradePrice`tradeQty,
            [STRING, STRING,
            TIMESTAMP,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE, DOUBLE,
            LONG, LONG, DOUBLE[], LONG[], DOUBLE[], LONG[],DOUBLE[],LONG[]])     quoteColMap = dict(
            `symbol`symbolSource`timestamp`lastPrice`highestPrice`lowestPrice`highestPrice2`lowestPrice2`openPrice`preClosePrice`upLimitPrice`downLimitPrice`avgBidPrice`avgOfferPrice`totalBidQty`totalOfferQty`bidPrice`bidQty`offerPrice`offerQty`tradePrice`tradeQty,
            `symbol`symbolSource`timestamp`lastPrice`highestPrice`lowestPrice`highestPrice2`lowestPrice2`openPrice`preClosePrice`upLimitPrice`downLimitPrice`avgBidPrice`avgOfferPrice`totalBidQty`totalOfferQty`bidPrice`bidQty`offerPrice`offerQty`tradePrice`tradeQty)
                dummyUserOrderTable = table(1:0,
            `symbol`timestamp`orderType`price`orderQty`direction`orderId, [STRING, TIMESTAMP, INT,
            DOUBLE, LONG, INT, LONG])             userOrderColMap = dict(
            `symbol`timestamp`orderType`price`orderQty`direction`orderId,
            `symbol`timestamp`orderType`price`orderQty`direction`orderId)             orderDetailsOutput  = table(1:0,
            `orderId`symbol`direction`sendTime`orderPrice`orderQty`tradeTime`tradePrice`tradeQty`orderStatus`sysReceiveTime,
            [LONG, STRING, INT,TIMESTAMP,DOUBLE,LONG, TIMESTAMP,DOUBLE,LONG, INT,NANOTIMESTAMP])
                orderDetailsAndSnapshotOutput = table(1:0, `msgType`content, [INT, BLOB])
                snapshotOutput  = table(1:0,
            `symbol`timestamp`avgBidPrice`avgOfferPrice`totalBidQty`totalOfferQty`bidPrice`bidQty`offerPrice`offerQty`lastPrice`highPrice`lowPrice,
            [STRING, TIMESTAMP,DOUBLE,DOUBLE, LONG, LONG,DOUBLE[],LONG[], DOUBLE[],
            LONG[],DOUBLE,DOUBLE,DOUBLE])     return
            [dummyQuoteTable,quoteColMap,dummyUserOrderTable,userOrderColMap,orderDetailsOutput,orderDetailsAndSnapshotOutput,snapshotOutput]
            }

在上述代码中,

  1. 登录 DolphinDB 客户端(login("admin", "123456"))并使用 loadPlugin 载入位于 /DolphinDBPlugin/MatchingEngineSimulator/bin/PluginMatchingEngineSimulator.txt 的插件。

  2. go 语句后指定用户订单。

定义了 initArgsSnapshotmode2 函数,并为各个命名函数指定需要执行的语句。

initArgsSnapshotmode2 返回一个包含多个表格和字典的列表,其中:

  • dummyQuoteTable:报价表。

  • quoteColMap:字典,用于映射报价表中的列名。

  • dummyUserOrderTable:用户订单表。

  • userOrderColMap:字典,用于映射用户订单表中的列名。

  • orderDetailsOutputsnapshotOutputorderDetailsAndSnapshotOutput 分别代表了交易输出、快照输出、复合输出表。

例 2:快照模式下以模式二模拟撮合委托订单

下例展示了在快照模式下以模式二(matchingMode = 2,详见 createMatchEngine 接口的 config 参数说明)模拟撮合证券交易市场委托订单的关键过程。

config = dict(STRING, DOUBLE); //定义了一个包含多个配置参数的字典
            config["latency"] = 0; //模拟时延 config["orderBookMatchingRatio"] = 0.12; //成交百分比 config["dataType"] = 1; // 行情类别为快照 config["outputOrderBook"] = 1; //是否输出订单,此处1表示输出 config["depth"] = 6; //匹配的订单簿的深度,区间为5到50,此处为6 config["matchingMode"] = 2; //快照模式下的匹配模式,此处为按照模式二撮合订单 name = "engine_snapshot" //指定引擎名称 exchange = "XSHE" //指定交易所名称 symbol = "AAA123" //指定证券代码 try{dropStreamEngine(name)}catch(ex){} args = initArgsSnapshotmode2() engine = MatchingEngineSimulator::createMatchEngine(name, exchange, config,
            args[0], args[1], args[2], args[3], args[4], args[5], args[6]) MatchingEngineSimulator::resetMatchEngine(engine) appendMsg(engine, (symbol, "XSHE", 2021.01.08
            10:14:01.400,23.5,,,25.0,23.0,,,,, 23.51, 23.59, 100, 100, [23.45  23.4  23.3  23.2
            23.1  23.0],  [1000 1000 1000 1000 1000 1000], [23.72  23.78  23.8  23.9  24.0 24.1],
            [1000 1000 1000 1000 1000 1000],[23.441 23.1235 23.653 23.771],[100 100 100 100]), 1)
            appendMsg(engine, (symbol, 2021.01.08 10:14:01.400, MARKET_THIS_BEST, 23.2, 200,
            ORDER_SEL, 1), 2)   // 23.72 appendMsg(engine, (symbol, 2021.01.08 10:14:01.400, MARKET_THIS_BEST, 23.3, 400,
            ORDER_SEL, 2), 2)  // 272 res = MatchingEngineSimulator::getOpenOrders(engine) ex = table([1,2] as orderId, [2021.01.08 10:14:01.400,2021.01.08 10:14:01.400]
            as timestamp, ["AAA123","AAA123"] as symbol, [23.72,23.72] as price, [200,400] as
            totalQty, [200,400] as openQty, [2,2] as BsFlag,  [true, true] as isMatching)
            assert 1, each(eqObj, res.values(), ex.values()) appendMsg(engine, (symbol, 2021.01.08 10:14:01.450, LIMIT_ORDER, 23.68, 400,
            ORDER_SEL, 2), 2)  // 23.68 appendMsg(engine, (symbol, "XSHE", 2021.01.08
            10:14:01.500,24.3,,,25.0,23.0,,,,, 23.51, 23.59, 1000, 1000, [23.45  23.4  23.3  23.2
            23.1  23.0],  [1000 1000 1000 1000 1000 1000], [23.72  23.78  23.8  23.9  24.0 24.1],
            [1000 1000 1000 1000 1000 1000],[23.65 23.81 23.73 23.72 23.45],[100 100 100 200 100]),
            1) appendMsg(engine, (symbol, "XSHE", 2021.01.08
            10:14:01.600,24.3,,,25.0,23.0,,,,, 23.51, 23.59, 1000, 1000, [23.45  23.4  23.3  23.2
            23.1  23.0],  [1000 1000 1000 1000 1000 1000], [23.67  23.78  23.8  23.9  24.0 24.1],
            [1000 1000 1000 1000 1000 1000],[23.72 0],[1200 0]), 1) res = select orderId, symbol, direction, sendTime, orderPrice, orderQty,
            tradeTime, tradePrice, tradeQty, orderStatus, sysReceiveTime from
        args[4]

在上述代码中,

  • 定义了一个名为 config 的字典,它包含了一些配置参数,如模拟时延、成交百分比、行情类别、是否输出订单、订单簿深度等。

  • 指定了引擎名称、交易所名称和证券代码。

  • 还定义了一些函数,如 appendMsggetOpenOrders,用于向引擎中添加消息和获取当前未完成的订单。

  • 使用 assert 函数来验证结果是否符合预期。

其中,函数 dropStreamEngine 用于释放已创建的流数据引擎的定义,例如上述例子中的 name = "engine_snapshot"