以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  [求助]定时器买卖时,同一价位不断重复买卖  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=7814)

--  作者:evalist
--  发布时间:2011/9/1 9:43:09
--  [求助]定时器买卖时,同一价位不断重复买卖

我用定时器制作监听,当价格抵达某一个价位的时候,我设置3手交易的时候会出现不断的买入。

但是在之前我已经设置了 返回当前账户的 buytodayholding ,如果此holding > 0 的时候不允许买入,但是程序依旧不断买进,不知道有何良策。我已经设置了orderqueue =1 ,依旧无效。奇怪的是 如果我设置成1手买卖,就不会有这种情况发生!

 

请各位高手指教。


--  作者:evalist
--  发布时间:2011/9/1 9:47:27
--  
PS 我已经将 orderqueue 设置成 等于当前手数依旧无效。
--  作者:26327756l
--  发布时间:2011/9/1 9:47:34
--  

应该是程序逻辑有问题,没有贴出代码不好指出问题所在,

出现了异常应该是条件中的参数不正确导致,

你可以在程序中适当处输出参数,来验证参数是否正确。

[此贴子已经被作者于2011-9-1 9:55:19编辑过]

--  作者:evalist
--  发布时间:2011/9/1 10:24:20
--  

 

 

Sub APPLICATION_Timer(ID)
 if id = 1 and celue01 = "buy" and ZHUANGTAI01 = false  then
    call Order.HoldingInfoByCode2(AutoTrade_ID01, MKT01,BuyHoding01,BuyCost01,BuyTodayHoding01,SellHoding01,SellCost01,SellTodayHoding01,PNL01,UseMargin01,800748)
 call testTrade(QREN01,AutoTrade_NewP01.caption,AutoTrade_BuyPrice01,AutoTrade_ShouShu01,AutoTrade_ID01,MKT01,BuyTodayHoding01,AutoTrade_ZY01,AutoTrade_ZS01,ZHUANGTAI01)

 end if

 

 

sub testTrade(QREN,DQJW,MRJ,SHOUSHU,DAIMA,SHICHANG,NewHOLDING,ZHIYING,ZHISUN,ZHUANGTAI)

\'正式买卖操作
if QREN = TRUE AND DQJW = MRJ AND NewHOLDING = 0 AND ZHUANGTAI = FALSE then
 order.OrderQueue = SHOUSHU
 call order.Buyshort(1,SHOUSHU,0,0,DAIMA,SHICHANG,"",0) \'市价买进
 msgbox "NewHOLDING做空:"&  NewHOLDING & "    " & ZHIYING & "    " &ZHISUN
 msgbox "您已经成功以市价挂单做空!"
 
end if

end sub

[此贴子已经被作者于2011-9-1 10:25:01编辑过]

--  作者:evalist
--  发布时间:2011/9/1 10:30:14
--  

代码如上····不知道有无问题?


--  作者:26327756l
--  发布时间:2011/9/1 10:33:10
--  
问题正在解决中
--  作者:26327756l
--  发布时间:2011/9/1 11:00:13
--  

orderqueue 的设置无效,这是个内部问题,我无法解答。

 

不断开仓的问题,所然贴出代码,但是是局部的,我无法在运行中调试,所以还是提供解决思路。

Sub APPLICATION_Timer(ID)
 if id = 1 and celue01 = "buy" and ZHUANGTAI01 = false  then//条件成立后,执行下列语句,去持仓量和执行交易,
首先要输出一下Order.HoldingInfoByCode2 这个方法的返回是否正确,返回1为正确执行,执行成功后输出,持仓量信息是否正确,改成如下:
    a=Order.HoldingInfoByCode2(AutoTrade_ID01, MKT01,BuyHoding01,BuyCost01,BuyTodayHoding01,SellHoding01,SellCost01,SellTodayHoding01,PNL01,UseMargin01,800748)
 application.msgout a&"  "&BuyTodayHoding01 //信息核实一下,如果下面是一个自定义的开仓方法的话,楼主提到holding > 0 的时候不允许买入,我没有看到此条件的使用,不知是否放在了方法里面,如果存在,那么就只需要在这里验证返回信息的正确性,不行的话再去下面的方法体中去验证,(还有要验证不断交易的执行语句是否是下列的方法执行所至,也许存在别的语句执行)

call RealTradeBuy(QREN01,AutoTrade_NewP01.caption,AutoTrade_BuyPrice01,AutoTrade_ShouShu01,AutoTrade_ID01,MKT01,BuyTodayHoding01,AutoTrade_ZY01,AutoTrade_ZS01,ZHUANGTAI01)


 end if

由于代码局部,不知我理解是否正确,还是强调楼主,自己试着通过核实参数的方法来调试程序。


--  作者:evalist
--  发布时间:2011/9/1 11:25:04
--  

 call testTrade(QREN01,AutoTrade_NewP01.caption,AutoTrade_BuyPrice01,AutoTrade_ShouShu01,AutoTrade_ID01,MKT01,BuyTodayHoding01,AutoTrade_ZY01,AutoTrade_ZS01,ZHUANGTAI01)

 

此时已经将 buytodayholding 传入 testtrade()

而 testtrade中的 nowholding 就是持仓 msgbox 没有问题。

 

我买入条件仅是 nowholding = 0的 情况 这样就摒除了任何 holding > 0 的情况。

也就是说我当前的nowholding = 0 才能进行交易


--  作者:guotx2010
--  发布时间:2011/9/1 13:05:34
--  

应该使用VBA函数Order.HoldingInfoByCode2获取实际持仓,如果持仓量达到设定的上限,就不再开仓。

 


--  作者:evalist
--  发布时间:2011/9/1 13:51:50
--  

    call Order.HoldingInfoByCode2(AutoTrade_ID01, MKT01,BuyHoding01,BuyCost01,BuyTodayHoding01,SellHoding01,SellCost01,SellTodayHoding01,PNL01,UseMargin01,800748)

可是我已经call 了 你说的这个holdinginfobycode2 中的实际持仓···并且将这个实际持仓传入 买卖的函数中了···