User Tools

Site Tools


tms应用程序接口

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

tms应用程序接口 [2017/07/20 15:15] – created terrytms应用程序接口 [2017/07/20 15:18] (current) – removed terry
Line 1: Line 1:
-**本文档受到 [[http://creativecommons.org/licenses/by-nc-nd/3.0/deed.en_US|Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License]].的版权保护** 
- 
-====== PPro8 PProAPI 应用程序接口====== 
- 
-=====重要信息===== 
-在使用API的时候,请记得:\\ 
-  * API产生的所有交易的盈亏,仍由交易员承担\\ 
-  * API产生的订单和人工输入的订单所受到的检查和监控是一样的\\ 
-  * 交易员有义务监控实时的交易活动\\ 
-  * 如果发现有问题的API活动,我们将暂时冻结API的使用权,直到交易员表明已经改正了错误\\ 
- 
-**有限的支持:**\\ 
-我们默认API的用户有基本的编程知识,并且了解如何把URL的Call命令和其他工具整合。因此,我们仅仅提供有限的API支持服务。基本上仅限于本文档的内容。\\ 
- 
-用户可以自行选择如何使用API接口,用户可以用URL的Call命令,利用任何一种编程语言来处理CSV格式的数据。\\ 
- 
-=====概览====== 
- 
-[[ppro8交易系统|PPro8交易系统]] API是一个网页服务,当启动后,将允许用户利用URL格式发送命令. 
-<code><RequestType>? <parameter=value & parameter=value & parameter=value ... ></code> 
- 
-**注意:**当UDP在运行时,发出的命令不会在XML或log文件中收到回应。API服务器直接在HTTP标题栏收到回应。如果命令运行失败,服务器会收到400错误请求的回应。不运行UDP,且使用正常URL时,正常的回应为200正确请求。 
- 
-要启动PProAPI,用户需要利用这个命令启动PPro8的客户端: 
- 
-<code>PPro8.exe -pproapi_port=8080</code> 
- 
-**注意:**您可以用任何端口,8080只是举一个例子。如果您选择其他的端口,我们建议用 1000 - 65535 端口,因为低于 1000 的端口很可能被操作系统已经预先定义了。 
- 
-登录到PPro8以后,用户可以通过这个链接连接到API的主页:http://localhost:8080。这个端口将显示当前支持的命令的基本信息。 
- 
-**注意:**本文档中,以下的URL链接都忽略http://localhost:8080,因此,请记住下面的命令前面要加http://localhost:8080/ 
- 
-{{ :pproapiv2.0.png?nolink |}} 
- 
-=====UDP功能===== 
- 
-要确保UDP的正常运行,请在编写您的程序的时候,确保它积极地收听端口。只有有一个主动收听的对象的时候,端口才会发送数据。 
- 
-如果您只是想测试UDP的功能,我们建议您使用NetCat,以及附的 [[ http://www.sans.org/security-resources/sec560/netcat_cheat_sheet_v1.pdf | 常见命令页 ]]。 
- 
-要使用NetCat,用下面的命令行启动它,举例: 
- 
-<code>-ul -p4135</code> 
- 
-...其中: 
- 
--u 代表 UDP\\ 
--l 代表 "listening to"收听\\ 
--p 代表port端口,后面的数字按注册的端口不同而不同\\ 
- 
-...连起来,这个命令就是 "UDP的4135端口正在积极收听" 
- 
-然后您可以用这个命令来注册并且发送数据到您指定的端口,例如: 
- 
-注册代码ATML.NQ的Level1数据,发送数据到UDP的4135端口 
- 
-<code>http://localhost:8080/SetOutput?region=1&feedtype=L1&output=4135&status=on</code> 
- 
-回应样本: 
-<code>LocalTime=08:53:20.845,Message=L1,MarketTime=08:53:20.551,Symbol=ATML.NQ,BidPrice=8.05000,BidSize=4700,AskPrice=8.07000,AskSize=2500,Tick=D</code> 
- 
- 
-====Register注册==== 
- 
-Register注册命令用来注册各类的数据。\\ 
- 
-每次注册的时候,写入单个的文档是通过命令中的 **bykey**句法 ,按照下面的方法完成的: 
- 
-<code>Register?symbol=<symbol.extension> & region=[1|2|3] & feedtype=[L1|TOS|L2|IMBALANCE|OSTAT|ORDEREVENT|PAPIORDER] & output=[bykey]</code> 
- 
-另一方面, **bytype**句法将把注册的代码的数据写入到指定的文档。 
- 
-句法如下: 
- 
-<code>Register?symbol=<symbol.extension> & region=[1|2|3] & feedtype=[L1|TOS|L2|IMBALANCE|OSTAT|ORDEREVENT|PAPIORDER] & output=[bytype]</code> 
- 
-如果指定的文档包含了 **TOS**, **L1**, **L2**, **OSTAT**, 用户可以选择哪个代码的数据写入指定的文档 (**bytype**), 或者他们可以把代码的数据写入一个新的文档 (**bykey**) 。 
- 
-Deregister注销也是一样。 
- 
-====Register commands注册命令==== 
- 
-句法: 
- 
-<code>Register?symbol=<symbol.extension> & region=[1|2|3|4] & feedtype=[L1|TOS|L2|IMBALANCE|OSTAT|ORDEREVENT|PAPIORDER]</code> 
- 
-举例: 
- 
-<code>Register?symbol=ZVZZT.NQ&feedtype=TOS</code> 
- 
-注册命令Register一分为三:GetSnapshot获取截图, Register注册, 和SetOutput发送输出。 
- 
-利用这些命令,您可以设置输出,并且通过状态on还是off来启动或者关闭,或者选择写入仅仅截图,仅仅实时数据,或者两个都写入。 
- 
-====GetSnapshot获取截图==== 
- 
-用这个命令获取代码当前的数据 (过去的100个记录,但不包含更新的数据)。 
- 
-**注意:** 对于Level 1(L1)类型,这个指令只会返回两个记录。 
- 
-句法: 
-<code>GetSnapshot?symbol=<symbol.extension> & region=[1|2|3|4] & feedtype=[L1|TOS|L2]</code> 
- 
-举例:  
- 
-<code>GetSnapshot?symbol=ZVZZT.NQ&feedtype=TOS</code> 
-====Register注册==== 
- 
-和原先的命令一样,用这个命令获取代码实时的数据,以及更新的数据。 
- 
-句法: 
- 
-<code>Register?symbol=ZVZZT.NQ&feedtype=TOS</code> 
- 
-====SetOutput设置输出==== 
- 
-用这个命令设置代码输出的信息,定义数据写到哪里,可以是**bykey** 或者 **bytype**。 
- 
-句法: 
- 
-<code>SetOutput?symbol=<symbol.extension> & region=[1|2|3|4] & feedtype=[L1|TOS|L2|IMBALANCE|OSTAT|ORDEREVENT|PAPIORDER] & output=[bykey|bytype|<port>] & status=[on|off]</code> 
- 
-===GetOstats=== 
- 
-句法: 
- 
-<code>SetOutput?region=1&feedtype=OSTAT&output=bytype&status=on</code> 
- 
-UDP注册句法: 
- 
-<code><SetOutput?region=1&feedtype=OSTAT&output=4321&status=on</code> 
- 
-====Level 1 (L1)报价==== 
-举例:<code>Register?symbol=ZVZZT.NQ&feedtype=L1</code> 
- 
-API将注册来接受代码ZVZZT.NQ所有的Level 1的价格/订单大小的更新。这些更新将被写入PPro8的运行目录,文件名的格式为:L1_1_ZVZZT.NQ.log,中间的数字代表市场所在的区域。每个数字代表的区域如下: 
- 
-  * 1 – NCSA 
-  * 2 – EMEA 
-  * 3 – APAC 
-  * 4 – AUNZ 
- 
-**注意:**请确保您为相关的命令注册正确的市场代码。 
- 
-L1的消息必须包含代码这个参数。\\ 
- 
-每一次的L1更新,就是一行逗号隔开的数据行,包含了下面的栏目:\\ 
-  * LocalTime=09:07:29.349 <- 代表更新抵达交易员本地电脑的时间,并按本地电脑的时间显示\\ 
-  * MarketTime=09:07:30.379 <- 代表市场的更新时间\\ 
-  * Symbol=XIU.TO <- 代表更新的代码,格式是 <代码>.<市场缩写>\\ 
-  * BidPrice=19.19 <- 代表L1更新后的Bid最优买价\\ 
-  * BidSize=8000 <- 代表L1更新后的Bid最优买价上的订单数量\\ 
-  * AskPrice=19.24 <- 代表L1更新后的Ask最优卖价\\ 
-  * AskSize=16000 <- 代表L1更新后的Ask最优卖价上的订单数量\\ 
-  * Tick=? <- 代表市场上这次更新意味着价格上涨还是下跌\\ 
-====Time of Sales (TOS)成交记录==== 
-**举例:** 
- 
-<code>Register?symbol=ZVZZT.NQ&feedtype=TOS & output=[bykey|bytype]</code> 
- 
-API将接受代码ZVZZT.NQ所有的成交记录的数据。更新的数据将被写入PPro8的登录目录的一个文档,文件名为:TOS_1_ZVZZT.NQ.log\\ 
- 
-TOS的消息必须包含代码这个参数。 
- 
-TOS的数据,每个代码单独写入一个文档。 
- 
-每个TOS的更新,是一个按逗号分隔的数据行,栏目包括:\\ 
-  * LocalTime=09:30:15.375 <- 代表数据到达本地电脑的时间,按本地电脑的时间显示\\ 
-  * MarketTime=09:30:14.887 <- 代表市场数据更新的时间\\ 
-  * Type=1 <- 代表写入的截图的数据类型\\  
-  * Price=8.63 <- 代表成交的价格\\ 
-  * Size=100 <- 代表成交的股数\\ 
-  * Source=17 <- 这是内部使用的报价来源的代码\\ 
-  * Condition=? <- 显示成交的条件标签\\ 
-  * Tick=? <- 代表这笔交易意味着价格上涨还是下跌\\ 
-  * MmId=C <- 代表成交发生的交易中心缩写\\ 
-  * SubMarketId= <- 代表成交中心的子版块的缩写\\ 
- 
-Type的数字各代表:\\ 
-Type 0 = live feed实时数据\\ 
-Type 1 = start of snapshot截屏开始\\ 
-Type 2 = snapshot record截屏记录\\ 
-Type 3 = end of snapshot截屏停止\\ 
- 
-当使用者注册了数据供应,实时数据便开始启动。 
- 
-**注意:** 截图数据并不只是重复的数据。它更显示了用户注册数据之前的过去100个TOS打印数据。如果使用者想直接从TOS注册了解股票的成交情况,他可以处理截图数据。截图数据用来统计TOS窗口数据当代码注册之后,由于API和软件使用了同等功能,TOS也包含在此。 
- 
-举例:\\ 
-<code>LocalTime=21:32:59.193,MarketTime=00:00:00.000,Symbol=WBC.AX,Type=1,Price=0,Size=0,Source=0</code>\\ 
-<code>LocalTime=21:34:52.322,MarketTime=11:33:15.929,Symbol=WBC.AX,Type=2,Price=34.445,Size=59,Source=0,Condition=?,Tick=?,Mmid=C,SubMarketId=</code>\\ 
-<code>LocalTime=21:32:59.209,MarketTime=00:00:00.000,Symbol=WBC.AX,Type=3,Price=0,Size=0,Source=0</code>\\ 
-<code>LocalTime=21:34:42.916,MarketTime=11:34:41.913,Symbol=WBC.AX,Type=0,Price=34.44,Size=64,Source=42,Condition=?,Tick=?,Mmid=A,SubMarketId=</code> 
-完整的PPro8 Market Center市场中心缩写、Sub Market ID子版块缩写和Sales Conditions成交条件缩写,可以在[[https://docs.google.com/spreadsheets/d/1c-Gfnpshy7PnC6lBmNK9OCz_soPMif574lK9w6SvscU/edit?usp=sharing|TOS的缩写表]]找到。\\ 
- 
-====Market Depth (L2)市场深度==== 
-**举例:** 
- 
-<code>Register?symbol=ZVZZT.NQ&feedtype=L2 & output=[bykey|bytype]</code> 
- 
-API将接收代码ZVZZT.NQ的Level 2的所有报价更新。这些更新将被写入PPro8登录目录的文档,文档名为:L2_1_ZVZZT.NQ.log\\ 
- 
-L2的数据必须包含代码这个参数。\\ 
- 
-L2的数据,每个代码分别写入一个文档。\\ 
- 
-每个Level 2的更新,是一个按逗号分隔的数据行,栏目包括:\\ 
-  * LocalTime=08:39:43.114 <- 代表数据到达本地电脑的时间,按本地电脑的时间显示\\ 
-  * MarketTime=08:39:42.601 <- 市场更新时间\\ 
-  * Mmid=ANON <- 代表本次更新的市场参与者代码MMID\\ 
-  * Side=B <- 代表更新的订单的方向\\ 
-  * Price=8.6 <- 代表更新的订单的价格\\ 
-  * Volume=100 <- 代表更新的订单的股数\\ 
-  * Depth=1 <- 代表订单的价位数\\ 
-  * SequenceNumber=27003 <- 这个序列号,是按每个市场参与者代码MMID、Price订单价格、和方向Side分配的,可以用来排除错乱的数据。\\ 
- 
-每一次的更新,要么 (a) 创建一个新的价位,要么 (b) 对指定的市场参与者代码MMID, 方向Side和价格Price组合作出更新。 
- 
-举例:如果您当前有一个在ANON市场参与者代码中的400股,定价在每股8.6美元的买单,上面的例子将把ANON的8.6价位的买单股数调整到100股。 
- 
-=== Market Depth Snapshot市场深度截图 === 
-当API在一个代码上注册Level 2的数据源的时候,它将首先获取一个截图。截图代表了这个代码目前的报价状态,并且将随着实时的更新消息不断更新。\\ 
- 
-截图的数据从Side=s开始。举例: 
- 
-<code>LocalTime=08:37:31.908,MarketTime=00:00:00.000,Mmid=,Side=s,Price=0,Volume=0,Depth=0,SequenceNumber=0</code> 
- 
-所有截图的数据都显示SequenceNumber=0.\\ 
- 
-截图的数据从Side=e结束,举例: 
- 
-<code>LocalTime=08:37:31.908,MarketTime=00:00:00.000,Mmid=,Side=e,Price=0,Volume=0,Depth=0,SequenceNumber=0</code> 
- 
-====Imbalance (IMBALANCE)尾额数据==== 
- 
-**举例:** 
- 
-<code>Register?region=1&feedtype=IMBALANCE & output=[bykey|bytype]</code> 
- 
-API将注册接收所有市场的尾额数据。数据将被写入PPro8登录目录的一个文档,文件名为:IMBLO_1_ALL.log\\ 
- 
-**注意:**NASDAQ和NYSE的数据是动态的,TSX/TSX-V的数据是静态的,AMEX的数据暂时无法提供。 
- 
-每一个Imbalance尾额数据更新,是一个由逗号隔开的数据行,栏目包括:\\ 
-  * LocalTime=15:57:15.113 <- 代表数据到达本地电脑的时间,按本地电脑的时间显示\\ 
-  * MarketTime=15:57:15.072 <- 代表市场的更新时间\\ 
-  * Side=S <- 代表尾额的方向\\ 
-  * Type=O <- 代表尾额的种类\\ 
-  * Status=  <- 代表当前尾额的状态\\ 
-  * Symbol=LKQ.NQ <- 代表尾额的代码\\ 
-  * Price=32.875 <- 代表股票当前的价格\\ 
-  * Volume=3578 <- 代表尾额的订单股数\\ 
-  * Mmid=Q <- 代表尾额的市场 (Q=NASDAQ, N=NYSE, A=AMEX, T=Toronto, V=Venture).\\ 
-  * AuctionPrice=32.84 <- 代表理论的竞价价格\\ 
-  * ContinuousPrice=32.86 <- 代表连续交易的市场的股票报价\\ 
-  * PairedVolume=67428 <- 代表已经匹配好的订单的股数\\ 
- 
-每一个Imbalance的更新代表当前的代码上的尾额大小,原先的Imbalance数据可以忽略。 
- 
-====Order Status (OSTAT)订单状态==== 
- 
-**举例:** 
- 
-<code>Register?region=1&feedtype=OSTAT & output=[bytype]</code> 
- 
-API将注册接收Region1(NCSA区域)、Region2(欧洲区域)或Region3(亚洲区域)市场的订单状态Order Status (OSTAT)消息。数据将被写入到PPro8的登录文件夹的一个文档,文件名为:OSTAT_1.log。文件名中的数字代表市场区域。\\ 
- 
-OSTAT的数据必须包含Region这个参数。\\ 
- 
-每个Region创建一个文档。为了查看所有的订单状态更新 - 包括内部拒绝的订单,用户需要监控OSTAT和ORDEREVENT日志。\\ 
- 
-**注意:**对于期货合约,API指令发送的是该价位下合约的大小,而不是合约的价格。使用__[[#getlv1获取level_1数据 | GetLv1获取Level 1数据]]__来获得tick size和tick value,计算公式为:Contract Price = (Contract Size * Tick Size) / Tick Value 
- 
-每个OSTAT更新是由逗号分隔的数据行,栏目包括:\\ 
-  * LocalTime=09:35:34.237 <- 代表数据到达本地电脑的时间,按本地电脑的时间显示\\ 
-  * MarketDateTime=20131011-09:35:34.048 <- 代表市场的更新时间\\ 
-  * Currency=CAD <- 代表订单的货币种类\\ 
-  * Symbol=TD <- 代表订单的代码\\ 
-  * Gateway=2028 <- 代表订单发送的通道代码GatewayID\\ 
-  * Side=B <- 代表订单的方向\\ 
-  * OrderNumber=TESTTEST00000024M1713F3100000 <- 代表订单号码\\ 
-  * Price=92.72 <- 代表更新了的订单价格。新订单的话,就是订单价格,如果是订单成交/部分成交的消息,代表订单的成交价格\\ 
-  * Shares=100 <- 代表和这次更新有关的订单股数。新订单的话,就是订单的股数,如果是订单成交/部分成交消息,则是成交的股数\\ 
-  * Position=2 <- 代表这个订单相关的更新消息数。1就是第一条消息,2就是第二条消息\\ 
-  * OrderState=Filled <- 代表订单的状态\\ 
-  * MarketID=2 <- 代表订单发送去的市场\\ 
-  * CurrencyChargeGway=CAD <- 代表通道收取费用的币种\\ 
-  * ChargeGway=-0.31 <- 代表这次更新相关的通道费用\\ 
-  * CurrencyChargeAct=CAD <- 代表交易的手续费用的币种\\ 
-  * ChargeAct=0.011 <- 代表这次更新的手续费用\\ 
-  * CurrencyChargeSec=CAD <- 代表SEC和监管部门费用的币种\\ 
-  * ChargeSec=0 <- 代表这次更新的SEC和监管部门的费用\\ 
-  * CurrencyChargeExec=CAD <- 代表成交费用的币种\\ 
-  * ChargeExec=0.16 <- 代表这次更新的成交费用\\ 
-  * CurrencyChargeClr=CAD <- 代表清仓费用的币种\\ 
-  * ChargeClr=0.008 <- 代表这次更新的清仓费用\\ 
-  * OrderFlags=128 <- 代表订单祥光的标签,仅作内部使用,用来识别订单是通过PPro8还是API发送的\\ 
-  * CurrencyCharge=10 <-  内部参数。\\ 
-  * Account=1TESTOF001TNVTESTTESTCAD1 <- 代表和订单相关的资金账号\\ 
-  * InfoCode=255 <- 内部使用来追踪OSTAT的代码,无外部分析用途\\ 
-  * InfoText= LiqFlags=^Tag6888=20^Tag31=92.720^Tag9730=A <- 代表这次更新相关的其他信息\\ 
-  * SymbolMarket=TD.TO <- 代码名称和市场代码缩写 
- 
-**注意:**如果OrderFlags 的值在128和255之间,它意味着订单是从API发出的。\\ 
- 
-用户可以用OSTAT log文件,加上ORDEREVENT log文件,来监控订单的状态,追踪订单成交和相关的费用。这个消息同时也被客户端用来更新Summary和HistoryLog窗口。\\ 
-====Order Event (ORDEREVENT)订单事件==== 
- 
-**举例:** 
- 
-<code>Register?region=1&feedtype=ORDEREVENT & output=[bykey|bytype]</code> 
- 
-API将注册接收Region 1(NCSA区域)市场的订单的事件消息。数据将写入PPro8登录文件夹,文件名为:ORDEREVENT_1.log\\ 
- 
-ORDEREVENT订单事件的消息必须包括Region这个参数。\\ 
- 
-每个区域都有单独的文件。这个日志文件可以和OSTAT log文件一块,用来监控订单状态更新。\\ 
- 
-ORDEREVENT log文件的主要作用是在一个订单没有在OSTAT记录中出现的时候,确认这个订单是内部拒绝的。\\ 
- 
-每个ORDEREVENT 更新是由逗号分隔的数据行,栏目包括:\\ 
-  * LocalTime=08:39:45.442 <- 代表数据到达本地电脑的时间,按本地电脑的时间显示\\ 
-  * MarketDateTime=20131025-08:39:45.208 <- 代表市场的更新时间\\ 
-  * EventMessageType=1 <- 代表事件的性质: 1=NewOrder新订单, 2=CancelOrder撤销订单, 3=ManualOrderConf手动订单修改, 4=OrderFlagsChange订单标签改变, 5=LastOrderEventType上次订单事件性质\\ 
-  * EventFlavour=2 <- 代表内部的订单状态: 1=Accepted订单接收, 2=Rejected订单拒绝, 3=PendingServer等待服务器, 4=NoConnection没有连接, 5=LastOrderEventType上次订单事件性质\\ 
-  * EventOriginatorId=1 <- 代表订单事件发出方 1=Client客户端, 2=OPC, 3=GS通道服务器, 4=SS程序订单服务器\\ 
-  * OriginatorSeqId=0 <- 代表订单事件发出方的订单事件序号\\ 
-  * Size=100 <- 代表订单的股数\\ 
-  * Price=861000000 <- 代表订单发送的价格。这里用PPro8内部的价格表达格式,要除以10的8次方(100000000)显示真实的价格\\ 
-  * OrderNumber=TESTTEST00000003M171401100000 <- 代表订单的号码\\ 
-  * InfoText= <- 代表订单事件的其他相关信息,例如拒绝理由\\ 
- 
- 
-订单事件(ORDEREVENT)的性质解释如下: 
- 
-  *0 NoOrderEventFlavour没有性质, 
-  *1 RequestPending - 报告命令对现有的订单没有造成任何变化 
-  *2 Accepted - 订单被市场接收 
-  *3 PartFill - 订单仍存在 (转成或者保持部分成交PartFilled的状态) 
-  *4 Filled - 订单不存在 (转成Filled订单成交状态) 
-  *5 Cancel - 订单不存在 (转成PartCancelled剩余订单撤销,或者Cancelled订单撤销状态) 
-  *6 RejectedOrderClosed - 命令被拒绝,订单号码不存在/无效 
-  *7 RejectedOrderOpen - 命令被拒绝,但是订单仍然在市场上 
-  *8 RejectedNoConnection - 命令被拒绝,网络问题 
-  *9 CancelReplace - (订单状态不变,要么是Accepted订单接收,要么是PartFilled订单部分成交) 
-  *10 Holding - 等待,PPro8在等待一个订单事件,然后才会把订单发出 (状态->Holding) 
-  *11 LastOrderEventFlavour 上一次订单事件的性质 
- 
-**注意:** 当价格和订单股数在OPC服务器检查的时候,将显示一个无效的数值。我们预计将在下一个OSM订单状态管理服务器推出时解决这个问题。如果您认为这可能影响您的交易,用户可以很容易地筛选出这些数值,因为它的值是 "-1"。说明中也会注明:'New order, OPC Pending'新订单,OPC等待。 
-====PProAPI Index to Order Number(PAPIORDER)API的订单号码目录==== 
- 
-**举例:** 
- 
-<code>Register?region=1&feedtype=PAPIORDER & output=[bykey|bytype]</code> 
- 
-API将注册接收每次订单申请相关的订单号码的信息。数据将写入PPro8的登录文件夹的文档,文件名为: PAPIORDER_1.log\\ 
- 
-PAPIORDER的消息必须包含Region这个参数\\ 
- 
-这个Log文件的用途是让用户可以限制'GetOrderNumber'的申请命令的发送次数,而通过程序监控Log文件中的这个信息。\\ 
- 
-每个PAPIORDER更新是由逗号隔开的数据行,栏目包括:\\ 
-  * LocalTime=10:10:07.006 <- 代表数据到达本地电脑的时间,按本地电脑的时间显示\\ 
-  * PProApiIndex=3 <- 代表和一个XML格式发送的ExecuteOrder事件有关的申请号码RequestID\\ 
-  * OrderNumber=DV10600503000002M171407100000 <- 代表和申请号码RequestID相关的订单号码\\ 
- 
-=====Deregister===== 
- 
-This command is used to deregister for available data types. This stops the API from writing to log files or making L1 calls available. 
-这个命令用来取消注册某些数据类型。其停止了写入记录文件或L1数据。 
- 
-句法:  
- 
-<code>Deregister?symbol=symbol.extension & region=[1|2|3|4] & feedtype=[L1|TOS|L2|IMBALANCE]</code> 
- 
-举例: 
- 
-<code>Deregister?symbol=ZVZZT.NQ&feedtype=TOS</code> 
-<code>Deregister?region=1&feedtype=IMBALANCE</code> 
- 
-**注意:** 对于L1,, L2或者TOS数据,定义股票代码。对于尾额数据,定义地区。 
- 
-====Lv1 & Tos==== 
-这些功能减弱了,但是仍然提供,利用TOS和L1命令。 
- 
-=====Get获取数据===== 
- 
-这个指令可以从Sumarry的不同层级获取信息。 
- 
-句法: <code>Get?type=tool & tool=[Summary_n] & key=<regionAsset>[^<layerKey>]</code> 
- 
-举例: <code>Get?type=tool&tool=Summary_2&key=NCSA Equity^GODOT^F.NY</code> 
- 
-**注意:** 决定如何获取信息,打开**Summary**,右键点击一个层级,然后双击**Copy Key to Clipboard**。 
- 
-**注意:** 输出数据会保存为CSV格式<logged-on user>_<tool id>.log 
- 
-====GetEnvironment获取环境==== 
- 
-这个指令招回起用户的使用环境(TMS或Live),以及用户ID和PPro8的安装路径。 
- 
-句法: <code>GetEnvironment?</code> 
- 
-这会提出以下响应: 
- 
-<code><Environment="Live" User="ABE001" DataDir="C:\YorkRoad"/></code> 
- 
- 
-====GetLv1获取Level 1数据==== 
- 
-用GetLv1命令获取Level 1数据的截图。在使用之前需要先注册L1数据。 
- 
-句法: 
- 
-<code>GetLv1?symbol=<symbol.extension></code> 
- 
-**举例:** 
- 
-<code>GetLv1?symbol=TD.TO</code> 
- 
-将收到如下回应: 
- 
-<code><Level1Data Message="L1DB" MarketTime="15:22:47.100" Symbol="TD.TO" BidPrice="55.4600" AskPrice="55.4700" BidSize="11000" AskSize="700" Volume="798304" MinPrice="55.1100" MaxPrice="55.5000" LowPrice="55.1100" HighPrice="55.5000" FirstPrice="55.4000" OpenPrice="55.4000" ClosePrice="55.3400" MaxPermittedPrice="0" MinPermittedPrice="0" LotSize="100" LastPrice="55.4600" InstrumentState="Open" AssetClass="Equity" TickValue="0" TickSize="0.00500000" Currency="CAD" Tick="D"/></code> 
- 
-GetLv1命令的回应是由逗号隔开的数据行,栏目包括: 
- 
-  * Volume=798304 ← 代表代码当天的成交量 
-  * LowPrice=55.1100 ← 代表代码当天的最低价 
-  * HighPrice=55.5000 ← 代表代码当天的最高价 
-  * OpenPrice=55.4000 ← 代表代码当天的开盘价 
-  * ClosePrice=55.3400 ← 代表代码当天的收盘价 
-  * MaxPermittedPrice=0 ← 代表代码当天可以允许的最高价 
-  * MinPermittedPrice=0 ← 代表代码当天可以允许的最低价 
-  * LotSize=100 ← 代表最小订单股数 
-  * LastPrice=55.1100 ← 代表最近一次成交价格 
-  * InstrumentState=Open ← 代表代码的状态 
-  * AssetClass=Equity ← 代表代码的资产类别 
-  * TickValue=0 ← 代表最小跳价单位代表的金额 
-  * TickSize=0.00500000 ← 代表最小跳价单位 
-  * Currency=CAD ← 代表代码的交易币种 
- 
-====GetTraderInfo获取交易员信息==== 
- 
-这个指令返回至关于交易员的信息,其中包括算法,LFT数额,以及NL数额。 
- 
-句法: <code>GetTraderInfo?trader=<trader> & region=<region> & assetid=<assetId></code> 
- 
-**举例:** <code>GetTraderInfo?trader=DV113X91&region=1&assetid=1</code> 
- 
-响应: <code>traderId="DV113X91" regionId="1" assetclassId="1" traderState="1" algorithm="0" lftAmount="2000" netLossAmount="1500" timerIsActive="N" currentTimeRemaining="0"</code> 
- 
-响应包含了以下项: 
- 
-  * traderId=DV113X91 ← 交易员ID 
-  * regionId=1 ← 地区ID 
-  * assetclassId=1 ← 资产类别ID 
-  * traderState=1 ← 交易员状态 
-  * algorithm=0 ← 算法ID 
-  * lftAmount=2000 ← 每日LFT额度 
-  * netLossAmount=1500 ← 每日NL额度 
-  * timerIsActive=N ← 风险计时器是否开启(Yes或No) 
-  * currentTimeRemaining=0 ← 风险计时器现在剩余时间 
- 
-  * 交易员状态 
-    * 1 = Active 
-    * 2 = Disabled not flat 
-    * 3 = Disabled by User 
-    * 6 = Closed by User 
-    * 7 = Closed by Risk 
- 
-  * 算法ID 
-    * 2 = Loss from Top 
-    * 3 = Net Loss 
-====GetTransactions获取交易记录==== 
- 
-用GetTransactions命令获取某个交易员ID的所有订单/执行记录。该命令的回应中不再包含Market和SymbolMarket参数。 
- 
-句法: 
- 
-<code>GetTransactions?user=<userId></code> 
- 
-**举例:** 
- 
-<code>GetTransactions?user=GODOT</code> 
- 
-回应: 
- 
-<code><Trader name="GODOT"> <Region id="1" name="NCSA"> <Transaction Message="OrderStatus" MarketDateTime="20141121-09:25:10.252" Currency="USD" Symbol="BRK/A.NY" Gateway="1" Side="B" %%OrderNumber="GODOT___00000001M172461100000" Price="0.01" Shares="1" Position="2" OrderState="Partially Filled" MarketID="18" CurrencyChargeGway="USD" ChargeGway="0.004" CurrencyChargeAct="UNK" ChargeAct="0" CurrencyChargeSec="UNK" ChargeSec="0" CurrencyChargeExec="UNK" ChargeExec="0" CurrencyChargeClr="UNK" ChargeClr="0" OrderFlags="8" CurrencyCharge="0" Account="1ORBX00001OR1GODOT___USD1"%% InfoCode="0" InfoText="Great stock. Great Price"/> </Region> </Trader></code> 
-=====订单相关的命令===== 
- 
-API为用户提供几个和订单互动的方法。要了解更多的信息,请访问API的主页 (http://localhost:8080) 
- 
-====ExecuteOrder执行订单==== 
- 
-ExecuteOrder命令有一系列的参数,根据要发送的订单类型不同您需要提供这些参数的值:\\ 
-  * symbol=<symbol.ext>\\ 
-  * limitprice=<float> (必须是正数)\\ 
-  * ordername=<从热键设置工具中复制粘贴>\\ 
-  * shares=<int> (必须是正整数)\\ 
-  * priceadjust=<float> (可以是正数也可以是负数)\\ 
-  * stopprice=<float> (必须是正数)\\ 
-  * pegdifference=<float>\\ 
-  * displaysize=<int> (必须是正数)\\ 
-  * displayrange=<int>\\ 
-  * minexecsize=<int> (必须是正数)\\ 
- 
-句法: 
- 
-<code>ExecuteOrder?symbol=<symbol.ext>&limitprice=<float>&ordername=<exact order name>&shares=<int>&priceadjust=<float>&stopprice=<float>&pegdifference=<float>&displaysize=<int>&displayrange=<int>&minexecsize=<int></code> 
- 
-**举例:** 
- 
-<code>ExecuteOrder?symbol=BB.TO&limitprice=6.90&ordername=TSX Buy SweepSOR Limit ANON DAY Reserve&shares=1000&displaysize=100</code> 
- 
-这个例子将发送一个Reserve(部分隐藏)订单到TSX通道,订价为限价每股6.90加元,买入1000股(显示100股)。\\ 
- 
- 
- 
-====ExecuteBasketOrder执行一篮子订单==== 
- 
-用这个命令发送一篮子订单(根据在PPro8客户端设置好的订单名称)。 
- 
-句法: 
- 
-<code>ExecuteBasketOrder?basketname=<basketName></code> 
- 
-**举例:** 
- 
-<code>ExecuteBasketOrder?basketname=basket1</code> 
- 
-====ExecuteListOrder执行列表订单==== 
- 
-用这个命令发送订单列表(根据在PPro8客户端设置好的__[[订单列表|订单列表]]__)。\\ 
- 
-句法: 
- 
-<code>ExecuteListOrder?symbol=<symbol.ext>&orderlistname=<orderListName>&shares=<int></code> 
- 
-**举例:** 
- 
-<code>ExecuteListOrder?symbol=ZVZZT.NQ&orderlistname=myList&shares=100</code> 
- 
- 
- 
-====CancelOrder撤销订单==== 
-这个命令让用户可以完成原先可以通过报价窗口按键完成的撤单功能。\\ 
- 
-句法: 
- 
-<code>CancelOrder?type=ordernumber|all|oldest|newest|closest|furthest & ordernumber=<orderNumber> & symbol=<symbol.ext> & side=order|bid|offer</code> 
- 
-**举例:** 
- 
-<code>CancelOrder?type=all&symbol=ZVZZT.NQ</code> 
- 
-这个命令将撤销所有ZVZZT.NQ已经被接受的订单。 
- 
-**新功能:** 撤销订单添加选项: 
-  * <Symbol=*.*> 撤销所有股票的订单。 
-  * <Symbol=*.ext> 撤销某些市场所有股票的订单。 
-  * <Side=Sell> 仅撤销卖出订单。 
-  * <Side=ShortSell> 仅撤销借空订单。 
- 
-====OrderCancelReplace订单撤销/取代==== 
- 
-这个命令修改指定的订单的股数。这个命令只能用来降低订单的股数。 
- 
-句法: <code>OrderCancelReplace?ordernumber=<orderNumber> & shares=desired reduced number of shares</code> 
- 
-举例: <code>OrderCancelReplace?ordernumber=GODOT___03000008M1711F7000000&shares=1000</code> 
- 
-====GetOrderNumber获取订单号码==== 
- 
-这个命令将让用户可以获取通过ExecuteOrder命令发送的请求中相关的订单号码。\\ 
- 
-**注意:** 新推出PAPIORDER数据源类型后,用户也可以仅仅通过那个命令获得各个Region区域的文档来获得这个实时的信息,而不需要不停地从网路服务器读取。\\ 
- 
-句法: 
- 
-<code>GetOrderNumber?requestid=<requestID></code> 
-  
-**举例:** 
- 
-<code>GetOrderNumber?requestid=3</code> 
- 
-这个命令将返回申请号码3对应的订单号码。\\ 
- 
-====GetOrderState获取订单状态==== 
- 
-这个命令将让用户可以获取订单当前的状态。\\ 
- 
-**注意:** 随着OSTAT 和 OrderEvent 数据源类型的推出,用户也可以通过观察这两个命令产生的文档来获取实时的数据,而不需要不断地从网络服务器获取数据。\\ 
- 
-句法: <code>GetOrderState?ordernumber=<orderNumber></code> 
- 
-**举例:** <code>GetOrderState?ordernumber=GODOT04503000008M1711F7000000</code> 
- 
-这个命令将获得订单GODOT04503000008M1711F7000000当前的状态\\ 
- 
-以下数字代表的订单状态将返还。数字代表的状态分别为:\\ 
-  * 0 = eUninitialised\\没有命令 
-  * 1 = eHolding,  %%//!<%% Holding 等待(盘前订单 - 尚未发送到市场)\\ 
-  * 2 = ePending,  %%//!<%% pre accepted / rejected 提前接收/拒绝(盘前订单 - 发送给了市场,没有收到回复)\\ 
-  * 3 = eAccepted, %%//!<%% Accepted 订单接收(订单存在)\\ 
-  * 4 = eAP,       %%//!<%% Part Filled 订单部分接收(订单存在)\\ 
-  * 5 = eAPC,      %%//!<%% Part Cancelled 剩余订单撤销(终极 eAP)\\ 
-  * 6 = eAPF,      %%//!<%% Multi Filled 订单多次成交(终极 eAP)\\ 
-  * 7 = eAF,       %%//!<%% Filled 订单成交(终极 eA)\\ 
-  * 8 = eAC,       %%//!<%% Cancelled 订单撤销(终极 eA)\\ 
-  * 9 = eRejected, %%//!<%% Rejected 订单被拒绝\\ 
-  * 10 = eJunked,  %%//!<%% Junked 订单作废 
- 
-====GetOpenOrders获取公开订单==== 
- 
-句法: <code>GetOpenOrders?user=<userID></code> 
- 
-举例: <code>GetOpenOrders?user=GODOT</code> 
- 
-这个命令取出用户名订单状态的信息。状态包含了以下信息: 
- 
-  * Accepted已接受的 
-  * Canceled撤销的 
-  * Holding保留的 
-  * Rejected拒绝的 
- 
-此命令也返回以下参数: 
- 
-  * Symbol代码 
-  * Price价格 
-  * Side方向 
-  * Gateway通道 
-  * Destination目标 
-  * MarketTime市场时间 
- 
- 
- 
- 
- 
-=====仓位相关的命令===== 
- 
-====GetOpenPositions获取公开仓位==== 
- 
-这个指令取出交易员当前的公开仓位。 
- 
-句法: <code>GetOpenPositions?user=<userID></code> 
- 
-举例: <code>GetOpenPositions?user=GODOT</code> 
- 
-====Flatten平仓==== 
- 
-这个命令发送指示代码的平仓申请,将会导致交易员这只股票的仓位被平。 
- 
-句法: <code>Flatten?symbol=<symbol.extension></code> 
- 
-举例: <code>Flatten?symbol=ZVZZT.NQ</code> 
- 
-这个指令也可以用于多只股票: 
- 
-举例: <code>Flatten?symbol=ZVZZT.NQ,ZWZZT.NQ,ZXZZT.NQ</code> 
-====Get (Summary)获取(概览)==== 
- 
-该命令按照不同类别进行,例如按照交易员ID获取概览。 
- 
-句法: 
- 
-<code>Get?type=tool&tool=<summary instance>&key=<layer & row combination></code> 
- 
-**举例:** 
- 
-<code>Get?type=tool&tool=Summary_1&key=NCSA Equity^GODOT^F.NY</code> 
- 
-这个命令将输出一个CSV文档,文件名为 <用户名>_<工具名>.log。本例中将把交易员GODOT的Summary_1工具中,按Trader:Symbol层设置显示的在F.NY上的仓位输出。\\ 
-=====备注===== 
-  * 了解当前哪些市场可以使用PProAPI进行交易,请见__{{pproapi_markets_list.xlsx|PProAPI市场列表}}__。 
- 
  
tms应用程序接口.1500578148.txt.gz · Last modified: 2017/07/20 15:15 by terry