我用定时器制作监听,当价格抵达某一个价位的时候,我设置3手交易的时候会出现不断的买入。
但是在之前我已经设置了 返回当前账户的 buytodayholding ,如果此holding > 0 的时候不允许买入,但是程序依旧不断买进,不知道有何良策。我已经设置了orderqueue =1 ,依旧无效。奇怪的是 如果我设置成1手买卖,就不会有这种情况发生!
请各位高手指教。
应该是程序逻辑有问题,没有贴出代码不好指出问题所在,
出现了异常应该是条件中的参数不正确导致,
你可以在程序中适当处输出参数,来验证参数是否正确。
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
代码如上····不知道有无问题?
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
由于代码局部,不知我理解是否正确,还是强调楼主,自己试着通过核实参数的方法来调试程序。
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 才能进行交易
应该使用VBA函数Order.HoldingInfoByCode2获取实际持仓,如果持仓量达到设定的上限,就不再开仓。
call Order.HoldingInfoByCode2(AutoTrade_ID01, MKT01,BuyHoding01,BuyCost01,BuyTodayHoding01,SellHoding01,SellCost01,SellTodayHoding01,PNL01,UseMargin01,800748)
可是我已经call 了 你说的这个holdinginfobycode2 中的实际持仓···并且将这个实际持仓传入 买卖的函数中了···