以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  VBA 如何获取可用持仓?也就是PEL中的THOLDING  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=51417)

--  作者:szp
--  发布时间:2013/4/25 17:19:02
--  VBA 如何获取可用持仓?也就是PEL中的THOLDING
如题,我的方法:
1.通过 Order.HoldingInfobyCode2 中的 BuyHolding 和 SellHolding 获得实际持仓,也就是PEL中的THOLDING2
2.通过 Order.OrderInfoByCode2 中的 Remaining 获取已挂单但没有成交的数量
3.那么 可用持仓就等于 实际持仓 减去 Remaining 

这样可行吗?

--  作者:王锋
--  发布时间:2013/4/25 17:33:47
--  

可行


--  作者:szp
--  发布时间:2013/4/25 20:00:13
--  
谢谢王锋的回复.


我对 Order.OrderInfoByCode2有疑问,这个方法在文档中说明如下:

OrderInfoByCode2 方法

取指定品种的未成交CTP合约信息

OrderInfoByCode2(Code, Market, OrderID, ConSign, Filled, Remaining, Action, OrderType, LmtPrice, Account, Kaiping)

Code         输入参数,指定的品种代码

Market       输入参数,指定的品种市场

ConSign      输出参数,本次委托数量

Filled       输出参数,已成交数量

Remaining    输出参数,未成交数量

Action       输出参数,动作类型 0买入 1卖出

OrderType    输出参数,订单类型 0限价 1市价 2停损 3市价停损

LmtPrice     输出参数,当OrderType等于0时为限价,为3时为停损限价

Account      输出参数,帐户信息

Kaiping      输出参数,开平仓类型 0开仓 1平仓

返回值:      成功返回1,失败返回0

示例:

dim orderid
dim ConSign
dim Filled
dim Remaining
dim Action
dim OrderType
dim LmtPrice
dim Account
dim Kaiping
call order.OrderInfoByCode2("cu09","sq",orderid,ConSign,Filled,Remaining,Action,OrderType,LmtPrice,Account,Kaiping)
\'打印输出未成交订单ID(可用此ID进行撤单)
msgbox orderid



从说明和示例中可以看出,这个方法是获取指定合约的未成交委托挂单的信息.

参数说明中没有写 OrderID 这个输出参数,但示例中有写,从示例的最后两行可看出,可用此ID进行撤单.

但这里有一个问题,如果我同一个合约先后有几个不同未成交委托挂单,那返回的信息怎么处理呢,按理应该返回一个数组才对呀.


--  作者:王锋
--  发布时间:2013/4/25 20:55:38
--  

这种情况你应该首选取得 OrderNum2 属性得到未成交单数量,然后用OrderInfo2指定索引来遍历整个未成交单订单。在遍历中撤单。

提醒你 OrderInfoByCode2 是有返回值的,要确认返回值为1时再进行操作


--  作者:szp
--  发布时间:2013/4/25 23:11:18
--  
是我表达得不够清楚.

我的目的:获取指定合约品种的可用持仓
我的思路:可用持仓 = 实际持仓 - 已挂单(平仓单)未成交的数量

实际持仓:通过 Order.HoldingInfobyCode2 中的 BuyHolding 和 SellHolding 获得

已挂单未成交的数量:获取这个数量时,未成交的挂单可能不止一个,那么可以用下面的方法获取
1.通过OrderInfo2函数.遍历所有未成交的挂单(0 至 OrderNum2-1),如果Code为指定的合约品种且Kaiping为平仓,则累加Remaining.  
2.通过 Order.OrderInfoByCode2 中的 Remaining 直接获取.

疑问: 方法1累加的 Remaining 和方法2一步获取的是同一个值吗?(这两个值相等?) 
也就是说,Order.OrderInfoByCode2函数的输出参数是所有同一品种的未成交信息的汇总吗?(当然,Order.OrderInfoByCode2的输出参数OrderID是不可能汇总的,这只是一个单值,不是数组或者序列)
[此贴子已经被作者于2013-4-25 23:12:40编辑过]

--  作者:szp
--  发布时间:2013/4/25 23:13:45
--  
单向持仓,不锁仓
单一帐户
[此贴子已经被作者于2013-4-25 23:15:01编辑过]

--  作者:王锋
--  发布时间:2013/4/26 8:46:04
--  
有些懂些解释起来很费劲,建议你遇到疑惑时,首选考虑用msgout输出消息,在模拟账户上测试即便后你就能知道结果
--  作者:szp
--  发布时间:2013/4/26 9:32:05
--  
嗯,明白王锋的意思,可以测试的话,自己测试好一些,不要偷懒,呵

-------------------------

初步测试,结果显示,用OrderInfo2累加的数量才是正确的,而OrderInfoByCode2返回的只是第一个未成交挂单的数量,不是所有的汇总

--  作者:szp
--  发布时间:2013/4/26 9:40:56
--  
那 OrderInfoByCode2 有什么用??
--  作者:guotx2010
--  发布时间:2013/4/26 10:10:25
--  
OrderInfoByCode2是知道合约代码,查询其持仓量。

[此贴子已经被作者于2013-4-26 10:11:23编辑过]