以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  [求助]谁能帮我修改一下阿火的VBA跟单程序?  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=72185)

--  作者:bbking
--  发布时间:2014/11/20 9:39:56
--  [求助]谁能帮我修改一下阿火的VBA跟单程序?
 http://www.weistock.com/bbs/dispbbs.asp?boardid=10&id=9439&authorid=1617&page=0&star=3
原版出处在这里~

十六、CTP账户的跟单VBA代码

B账户跟着A账户做单(前提是知道A账户的密码,在同一个金字塔同时登陆A账户和B账户)

Sub ORDER_OrderStatusEx2(OrderID, Status, Filled, Remaining, Price, Code, Market, OrderType, Aspect, Kaiping, Account, AccountType)
if Status="Tradeing" and filled>0 and Account="8000000000" then
if aspect=0 then
if kaiping=0 then order.Buy 1,filled,0,0,code,market,"800000",0
if kaiping>0 then order.sellshort 1,filled,0,0,code,market,"800000",0
end if
if aspect=1 then
if kaiping=0 then order.Buyshort 1,filled,0,0,code,market,"800000",0
if kaiping>0 then order.sell 1,filled,0,0,code,market,"800000",0
end if
end if
End Sub


跟单代码如上~
现在需要实现B账户跟踪A账户下单~
但是保持B账户是A账户持仓的三分之一
具体思路是

A账户下单某合约成交后~
查询B账户与A账户在该合约上的持仓~
保持该合约上B账户持仓为A账户的三分之一
多了就平少了就补~



--  作者:bbking
--  发布时间:2014/11/20 10:53:49
--  
 帮个忙啊
都悬赏了的

--  作者:bbking
--  发布时间:2014/11/20 11:11:19
--  
 两个账户能否改一下用
ac1:="800000";
ac2:="8000000000"
这样表示?

--  作者:王锋
--  发布时间:2014/11/20 11:15:25
--  

VBA的问题需要一定时间安排处理,请不要急躁,谢谢


--  作者:bbking
--  发布时间:2014/11/20 13:33:42
--  
我是觉得这个程序对于有vba基础的人来说简直小菜啊~

至少有人回帖了~
谢谢~
--  作者:bbking
--  发布时间:2014/11/21 9:27:57
--  
 每日一顶
--  作者:guotx2010
--  发布时间:2014/11/21 9:35:41
--  

你这个问题,如果每次A账户都是3手或以上,可以在B账户跟踪时,用手数除以3开B账户,问题是如果A账户不是一次开到位,而是1手1手开,累计达到了3手,那么你的B账户就每次都错过了,所以,啊火的方式不能满足你的要求,你得用定时器,在定时器中定时检查A账户的累计持仓量,然后判断是否B账户开仓或平仓。

建议看看那我那个已经商品化的跟踪程序,在我的博客上有介绍。

http://blog.sina.com.cn/s/blog_78d813780102uzor.html

 


--  作者:bbking
--  发布时间:2014/11/21 10:11:24
--  
 其实我觉得应该是个比较简单的问题啊~

A账户为8000000000
B账户为800000~跟踪A账户操作~保持为A账户的三分之一
我下面的伪代码思路如何?
每次成交后查询AB账户该合约上的多空持仓进行调整?

Sub ORDER_OrderStatusEx2(OrderID, Status, Filled, Remaining, Price, Code, Market, OrderType, Aspect, Kaiping, Account, AccountType)
if Status="Tradeing" and filled>0 and Account="8000000000" then

if round(A账户TBUYHOLDINGEX/3)>B账户TBUYHOLDINGEX then
order.Buy 1,round(A账户TBUYHOLDINGEX/3)-B账户TBUYHOLDINGEX,0,0,code,market,"800000",0
end
if round(A账户TBUYHOLDINGEX/3)<B账户TBUYHOLDINGEX then
order.sell1,B账户TBUYHOLDINGEX-round(A账户TBUYHOLDINGEX/3),0,0,code,market,"800000",0
end


if round(A账户TSELLHOLDINGEX/3)>B账户TSELLHOLDINGEXthen
order.Buyshort 1,round(A账户TSELLHOLDINGEX/3)-B账户TSELLHOLDINGEX,0,0,code,market,"800000",0
end
if round(A账户TSELLHOLDINGEX/3)<B账户TSELLHOLDINGEXthen
order.sellshort 1,B账户TSELLHOLDINGEX-round(A账户TSELLHOLDINGEX/3),0,0,code,market,"800000",0
end

End Sub


--  作者:bbking
--  发布时间:2014/11/21 10:19:42
--  
 帮我写一下吧
这个思路很简单
我只是一时看不懂VBA的帮助文档~
对你们也就是分分钟的事情

没法增加悬赏数量啊
[此贴子已经被作者于2014/11/21 10:20:17编辑过]

--  作者:bbking
--  发布时间:2014/11/21 15:47:30
--  
 伪代码都写好了
还没人帮忙写一下啊?