白天用VBA策略是能正常的实盘开仓,到了夜盘就不正确,不知道什么原因,求解决! 代码如下:
sub xingezc(PN,PZ,mycode,mymarket,A,B,D,CTY,CTY1) 'cl策略编号,A,B,D策略优化参数,cty策略周期,CTY1,CTY2读取多分钟,PN品种编号 pz持仓量
dim H10,L10,H20,L20,AB,OVOL,myclose,sss ' H10,L10中线,H20上轨,L20下轨,d周期原始成交量 ,ovel上期原始成交量,根K线的收盘价变量
SET Histroy = marketdata.GetHistoryData( mycode,mymarket,CTY,0,CTY1) '得到周期K线
myclose=Histroy.Close(Histroy.Count-2) '得到上根K线的收盘价
OVOL=Histroy.Volume(Histroy.Count-2)'原始成交量
'得到上根K线的收盘价
H10=Histroy.Close(Histroy.Count-(2+A))
L10=H10 '平仓线
'多方向开仓线
for a =(2+1) to (b+3)
arr(a)=Histroy.High(Histroy.Count-A)
if arr(a)>H20 then
H20=arr(a)
end if
next
'空方向开仓线
L20=Histroy.LOW(Histroy.Count-(2+1))
for a =(2+1) to (b+3)
arr(a)=Histroy.LOW(Histroy.Count-A)
if arr(a)<L20 then
L20=arr(a)
end if
next
AB=Histroy.Volume(Histroy.Count-(2+D))'d周期原始成交量
sss=pz
xinge=pz '初始化持仓手数
'开多
IF myclose>H20 AND myclose>H10 AND OVOL>AB AND sss=0 THEN
sss=1
' 平多
ELSEIF myclose<h10 AND sss>0 THEN
sss=0
' 开空
elseif myclose<L20 AND myclose<L10 AND OVOL>AB AND sss=0 THEN
sss=-1
' 平空
ELSEIF MYCLSOE>H10 AND sss<0 THEN
sss=0
END IF
xinge=sss
end sub
xinge 是全局变量
ELSEIF MYCLSOE>H10 AND sss<0 THEN
不是这句 原因 这个已改了
当金字塔开盘获取数据时 VBA对应的数组与数据匹对不上,所以一开始 vba获取的K线
数据是错误的 要过一两分钟就对的上了
你在另一处发帖回复过您了,把k线的时间还有价格这种数据都输出记录下。
看是取到的k序列不对呢,还是数据不对。
看到K数据变动的 就开盘是数据变一哈 等一会儿数据又变回来了
会不会是白天数据本地没有所以引用时候变成了前一天的k呢,你输出时候这样去输出把time记录下来。之前也用如下代码在夜盘时候进行了输出,价格还有时间记录也都正常。
myclose=Histroy.Close(Histroy.Count-2) '得到上根K线的收盘价
mydate=Histroy.Date(Histroy.Count-2)
call document.debugfile("C:\OrderLog.Txt",myclose&"---"&mydate,time)
我也不知道怎么的 早上开盘也是一样的 反正开盘会出错 休盘都不会 后面的数据一切正常
在开盘前面一两分钟数据只要不用 我的程序就正常了
建议你还是多用Application.msgout函数多调试一下吧,这种逻辑问题,唯有调试手段才能解决问题的