以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 高级功能研发区 (http://weistock.com/bbs/list.asp?boardid=5) ---- Order.HoldingInfoByCode2 总是返回 0 (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=50818) |
-- 作者:szp -- 发布时间:2013/4/9 11:12:35 -- Order.HoldingInfoByCode2 总是返回 0 金字塔版本:2.983测试版 金字塔帐户类型:机构版 下面的代码总是返回 0 :
Dim ret
Dim strAccount,strCode,strMarket
Dim intBuyHolding,intBuyTodayHolding,dblBuyCost
Dim intSellHolding,intSellTodayHolding,dblSellCost
Dim dblProfitAndLoss,dblUsedMargin
strAccount="000000" \'实际用的是金仕达的金字塔模拟交易帐户: 805xxx
strCode="AG06"
strMarket="SQ"
\'刷新账户的持仓显示
Call Order.HoldingRefurbish(strAccount)
\'取当前品种的持仓合约信息
ret=Order.HoldingInfoByCode2(strCode,strMarket,intBuyHolding,dblBuyCost,intBuyTodayHolding,intSellHolding,dblSellCost,intSellTodayHolding,dblProfitAndLoss,dblUsedMargin,strAccount)
If ret <>1 Then
Call MsgBox("取当前品种的持仓合约信息失败! ret=" & ret)
Exit Sub
End If |
-- 作者:guotx2010 -- 发布时间:2013/4/9 11:29:12 -- intBuyHolding和 intSellHolding才是返回的持仓。 |
-- 作者:szp -- 发布时间:2013/4/9 11:32:54 -- 谢谢 guotx2010 的回复,我的意思是: HoldingInfoByCode2 方法的返回值:成功返回1,失败返回0 我调用 : ret=Order.HoldingInfoByCode2(strCode,strMarket,intBuyHolding,dblBuyCost,intBuyTodayHolding,intSellHolding,dblSellCost,intSellTodayHolding,dblProfitAndLoss,dblUsedMargin,strAccount) 每次 ret 都等于 0,也就是说 Order.HoldingInfoByCode2 的调用不成功 是哪里出了问题?? [此贴子已经被作者于2013-4-9 11:33:22编辑过]
|
-- 作者:szp -- 发布时间:2013/4/9 11:49:33 -- 进一步用下面的代码测试: Public Sub myGetHoldingInfo()
On Error Resume Next
Dim ret
Dim strAccount,strCode,strMarket
Dim intBuyHolding,intBuyTodayHolding,dblBuyCost
Dim intSellHolding,intSellTodayHolding,dblSellCost
Dim dblProfitAndLoss,dblUsedMargin
strAccount="805115" \'金仕达的金字塔模拟交易帐户
strCode="AG06"
strMarket="SQ"
\'手动初始化变量
ret=-999
intBuyHolding=0
intBuyTodayHolding=0
dblBuyCost=0
intSellHolding=0
intSellTodayHolding=0
dblSellCost=0
dblProfitAndLoss=0
dblUsedMargin=0
\'取当前品种的持仓合约信息
ret=Order.HoldingInfoByCode2(strCode,strMarket,intBuyHolding,dblBuyCost,intBuyTodayHolding,intSellHolding,dblSellCost,intSellTodayHolding,dblProfitAndLoss,dblUsedMargin,strAccount)
If ret <>1 Then
Call Application.MsgOut("取当前品种的持仓合约信息失败! ret=" & ret)
Call Application.MsgOut("-------------------------------------------")
Call Application.MsgOut(" 合约代码 = " & strCode)
Call Application.MsgOut(" 市场代码 = " & strMarket)
Call Application.MsgOut(" 买入持仓总量 = " & intBuyHolding)
Call Application.MsgOut(" 持仓成本 = " & dblBuyCost)
Call Application.MsgOut(" 今买持总量 = " & intBuyTodayHolding)
Call Application.MsgOut(" 卖出持仓总量 = " & intSellHolding)
Call Application.MsgOut(" 卖出持仓成本 = " & dblSellCost)
Call Application.MsgOut("今卖出持仓总量 = " & intSellTodayHolding)
Call Application.MsgOut(" 浮动盈亏 = " & dblProfitAndLoss)
Call Application.MsgOut(" 保证金占用 = " & dblUsedMargin)
Call Application.MsgOut(" 帐户 = " & strAccount)
Call Application.MsgOut("-------------------------------------------")
End If
If Err.Number<>0 Then
Call Application.MsgOut("取当前品种的持仓合约信息时出错:(" & Err.Source & ")" & Err.Description)
End If End Sub 结果总是有下面的输出: 取当前品种的持仓合约信息失败! ret=0 ------------------------------------------- 合约代码 = AG06 市场代码 = SQ 买入持仓总量 = 0 持仓成本 = 0 今买持总量 = 0 卖出持仓总量 = 0 卖出持仓成本 = 0 今卖出持仓总量 = 0 浮动盈亏 = 0 保证金占用 = 0 帐户 = 805115 ------------------------------------------- |
-- 作者:王锋 -- 发布时间:2013/4/9 12:03:34 -- 问题核实中 |
-- 作者:王锋 -- 发布时间:2013/4/9 12:24:35 -- Sub myGetHoldingInfo()
Call Application.MsgOut("取当前品种的持仓合约结果 ret=" & ret)
用下列代码通过宏调用测试,一切正常。
建议你检查 1是否有效的登录了交易账户 2是否有查询的AG06品种的持仓 |
-- 作者:szp -- 发布时间:2013/4/9 13:01:51 -- 谢谢 王锋 的回复! 1.已登录 金仕达的金字塔模拟交易帐户 805115 2.没有 AG06 的持仓 也就是说,如果没有查询合约的持仓,则 Order.HoldingInfoByCode2 也返回 0 ? |
-- 作者:王锋 -- 发布时间:2013/4/9 13:02:50 -- 是的,没有持仓就会返回失败 |
-- 作者:szp -- 发布时间:2013/4/9 13:10:54 -- ............. 我建议: 1.方法的返回值只用于反馈方法的调用是否成功,成功(不管有无持仓)则返回1,失败(出错了!)则返回0,不然怎么判断是否是方法调用出错呢? 2.如果查询的合约没有持仓,则:只要不出错,就返回1,同时把 BuyHolding, BuyCost, BuyTodayHolding, SellHolding, SellCost, SellTodayHolding, PNL,
UsedMargin 都设置为 0 3.进一步完善 " 编程信息 " 这个文档,错别字(中文和英文都有)很多,示例不够,部分表述不完整,有歧义!
|
-- 作者:szp -- 发布时间:2013/4/9 13:18:21 -- 比如, Order.HoldingInfoByCode2 方法 在 "编程信息" 这个文档中的表述如下: HoldingInfoByCode2 方法 取指定CTP品种的持仓合约信息。该方法不同于HoldingInfo2,他可以同时取到一个品种的买入持仓和卖出持仓,以及今持和昨持。 HoldingInfoByCode2(Code, Market, BuyHoding, BuyCost, BuyTodayHoding, SellHoding, SellCost, SellTodayHoding, PNL, UseMargin,Account) Code 输入参数,指定的品种代码 Market 输入参数,指定的品种市场 BuyHoding 输出参数,该该持仓品种买入持仓总量 BuyTodayHoding 输出参数,该持仓品种今买持总量 BuyCost 输出参数,该持仓品种持仓成本 SellHoding 输出参数,该持仓品种卖出持仓总量 SellTodayHoding 输出参数,该持仓品种的今卖出持仓总量 SellCost 输出参数,该持仓品种卖出持仓成本 PNL 输出参数,该持仓品种浮动盈亏 UseMargin 输出参数,该持仓品种的保证金占用 Account 输入参数,可缺省,登陆CTP的帐户名称,若不填写则表示当前默认的帐户 返回值: 成功返回1,失败返回0 1.Hoding 这个单词错啦~~ 2.返回值的说明应该为:成功返回1,失败返回0,如果查询合约没有持仓,也返回0 3.如果可以的话,加上每一个参数的类型说明,这个参数到底是一个 int , double,还是一个 string ?虽然 VBS 不需要,但对程序员还是有用的! |