Sub APPLICATION_VBAStart()
sCode="IF07"
\'sCode2="IF07"
sMarket="ZJ"
sAccountID=""
call Application.SetTimer(0,1000) \'创建一个0号定时器,间隔时间1秒
frmControl.Show
End Sub
\'停止VBA时,把计时器也停了
Sub APPLICATION_VBAEnd()
Call application.KillTimer(0)
End Sub
Sub APPLICATION_Timer(ID)
\'读取信号
GetFlag
\'获取帐户的实际持仓,如果跟信号持仓不一致,就进行持仓同步
GetHoldByCode sAccountID,sCode,sMarket
\'根据信号持仓与实际持仓的对比,进行开平仓操作
StartTrade
End Sub
Sub GetFlag()
sPolicyName="一分钟超级短线2"
iPeriod=0 \'周期类型,0 1分钟 1 5分钟 2 15分钟 3 30分钟 4 60分钟 5日线 6周线 7月线 8年线 9多日线 10分笔成交 11多小时线 12多秒线 13多分钟线 14季度线 15半年线 16节气线 17 3分钟 18 10分钟 19 多笔线
Set Formula = marketdata.STKINDI(sCode,sMarket,sPolicyName,0,iPeriod)
iFlag=Formula.GetBufData("Flag",Formula.DataSize-1)
nFlagPrice=formula.GetBufData("FlagPrice",Formula.DataSize-1)
iBars=Formula.GetBufData("Bars",Formula.DataSize-1)
application.MsgOut "信号:"&iFlag & "价格:"&nFlagPrice & "周期:"&iBars
End Sub
Sub GetHoldByCode(sAccount1,sCode1,sMarket1)
dim BuyHoding
dim BuyCost
dim BuyTodayHoding
dim SellHoding
dim SellCost
dim SellTodayHoding
dim PNL
dim UseMargin
dim Code
dim Market
on Error resume Next
AccountStatus=Order.Account2(2,sAccount1)
\'application.MsgOut sCode & "," & sMarket1 & "," & sAccount1 & ",NextCode:" & NextCode & ",账户状态:" & AccountStatus
if AccountStatus=255 or AccountStatus="" then
exit sub
end if
iBuyHold=0
iSellHold=0
DuoPrice=0
KongPrice=0
Call Order.HoldingInfoByCode2(sCode1,sMarkdt1,BuyHoding,BuyCost,BuyTodayHoding,SellHoding,SellCost,SellTodayHoding,PNL,UseMargin,sAccount1)
\'显示持仓量
\'application.MsgOut "显示持仓量:" & BuyHoding
if BuyHoding>0 then
iBuyHold=BuyHoding
else
iBuyHold=0
end if
if SellHoding>0 then
iSellHold=SellHoding
end if
if BuyCost>0 then
DuoPrice=BuyCost
else
DuoPrice=0
end if
if SellCost>0 then
KongPrice=SellCost
else
KongPrice=0
end if
End Sub
Sub StartTrade()
if iFlag>0 then \'信号是多单
iOpenVol=iFlag-iBuyHold \'信号持仓-实际持仓,如果为正,说明信号持仓持仓大,那么就要补充开仓,如果小,说明实际持仓大,就得平掉多单
if iOpenVol>0 then
Call order.Buy(0,iOpenVol,0,0,sCode,sMarket,sAccountID,0)
elseif iOpenVol<0 then
Call order.Sell(0,Abs(iOpenVol),0,0,sCode,sMarket,sAccountID,0)
end if
if iSellHold>0 then \'如果此时帐户持有空单,就把空单全部平掉
Call order.SellShort(0,iSellHold,0,0,sCode,sMarket,sAccountID,0)
end if
end if
if iFlag<0 then \'信号是空单
iOpenVol=iFlag-iSellHold \'信号持仓-实际持仓,如果为正,说明信号持仓大,那么就要补充开仓,如果小,说明实际持仓大,就得平掉多单
if iOpenVol>0 then
Call order.BuyShort(0,iOpenVol,0,0,sCode,sMarket,sAccountID,0)
elseif iOpenVol<0 then
Call order.SellShort(0,Abs(iOpenVol),0,0,sCode,sMarket,sAccountID,0)
end if
if iBuyHold>0 then \'如果此时帐户持有空单,就把空单全部平掉
Call order.Sell(0,iSellHold,0,0,sCode,sMarket,sAccountID,0)
end if
end if
if iFlag=0 then \'如果图表信号为0,就是没有持仓,那么将帐户的多、空单全部平掉
if iBuyHold>0 then \'平帐户多单
Call order.Sell(0,iSellHold,0,0,sCode,sMarket,sAccountID,0)
end if
if iSellHold>0 then \'平帐户空单
Call order.SellShort(0,iSellHold,0,0,sCode,sMarket,sAccountID,0)
end if
end if
End Sub
请问大师
第一个问题:为啥 iPeriod=0 \'周期类型,0 1分钟 1 5分钟 2 15分钟 3 30分钟 4 60分钟 5日线 6周线 7月线 8年线 9多日线 10分笔成交 11多小时线 12多秒线 13多分钟线 14季度线 15半年线 16节气线 17 3分钟 18 10分钟 19 多笔线
一分钟K线取不到 application.MsgOut "信号:"&iFlag & "价格:"&nFlagPrice & "周期:"&iBars
而19,或其它的分钟却可以。
第二个问题:在模拟帐户开通中, iPeriod=19,同时application.MsgOut "信号:"&iFlag & "价格:"&nFlagPrice & "周期:"&iBars有数据变化,而帐户却无法自动买卖交易。
谢谢!