以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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()


    On Error Resume Next
  
    Dim ret
    Dim strAccount,strCode,strMarket
    Dim intBuyHolding,intBuyTodayHolding,dblBuyCost
    Dim intSellHolding,intSellTodayHolding,dblSellCost
    Dim dblProfitAndLoss,dblUsedMargin
   
    strAccount="804982"  \'金仕达的金字塔模拟交易帐户
    strCode="IF04"
    strMarket="ZJ"
   
    \'手动初始化变量
    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)

    Call Application.MsgOut("取当前品种的持仓合约结果 ret=" & ret)
    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

 

用下列代码通过宏调用测试,一切正常。

 

建议你检查 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 不需要,但对程序员还是有用的!