以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  策略编写求助区  (http://www.weistock.com/bbs/list.asp?boardid=11)
----  [求助]请问如何用vba处理多账户同时加减仓问题?  (http://www.weistock.com/bbs/dispbbs.asp?boardid=11&id=147854)

--  作者:saintlucifer
--  发布时间:2017/2/16 15:56:51
--  [求助]请问如何用vba处理多账户同时加减仓问题?

机构版里面,同时挂着多个账户,如果想实现里面的单个品种或者多个品种持仓同时加减仓一定比例,例如1/3,1/2,要怎么用vba来做呢?

 

因为对vba不是很熟,请列出详细步骤跟vba代码,谢谢~~


--  作者:王锋
--  发布时间:2017/2/22 14:31:36
--  

代码范例编写中。。


--  作者:王锋
--  发布时间:2017/2/22 18:21:59
--  

 

帮你写了平仓的过程例子‘

使用方法例如你的账户登录ID为 8888,需要平仓一半

call PingCang("8888",0.5)

 

\'平仓函数

 Sub PingCang(Account, CW)
 
  dim BuyHolding
  dim BuyCost
  dim BuyTodayHolding
  dim SellHolding
  dim SellCost
  dim SellTodayHolding
  dim PNL
  dim UseMargin
  dim Code
  dim Market

    Holding = Order.Holding2(Account)
    For I = 0 To Holding-1
     Result = Order.HoldingInfo2(i,BuyHolding,BuyCost,BuyTodayHolding,SellHolding,SellCost,SellTodayHolding,PNL,UseMargin ,Code,Market)
   If Result = 1 Then
          \'成功得到仓位信息后进行平仓处理
          PingCangSS = BuyHolding * CW \'计算要平仓的手数
          Application.MsgOut BuyHolding & "---"&SellHolding
          If PingCangSS > 0 Then
           call Order.Sell(1,PingCangSS,0,0,Code,Market,Account,0)
          End If
         
          PingCangSS = SellHolding * CW \'计算要平仓的手数
          If PingCangSS > 0 Then
           call Order.SellShort(1,PingCangSS,0,0,Code,Market,Account,0)
          End If
   End If
    Next
 
 End Sub


--  作者:王锋
--  发布时间:2017/2/22 18:23:49
--  

对于多账户的遍历,参考

 

属性

CTPAcCount          当前已经登陆非IB外盘帐户数量(包含无效登陆等情况在内的)

 

方法

CTPAccountName       得到指定基于0索引的非IB外盘帐户名称(包含登陆未成功的),例如 CTPAccountName(0)表示取第一个登陆的用户名称注意:如果频繁调用该属性,请注意使用完毕后释放返回值


--  作者:saintlucifer
--  发布时间:2017/3/13 10:36:39
--  
感谢,悬赏已送上