以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  [求助]vba策略夜盘开仓与指标不一致,白天正常  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=78316)

--  作者:cyq220657
--  发布时间:2015/5/6 13:56:06
--  [求助]vba策略夜盘开仓与指标不一致,白天正常
白天用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 是全局变量

--  作者:cyq220657
--  发布时间:2015/5/6 14:10:19
--  

 ELSEIF MYCLSOE>H10 AND sss<0 THEN

不是这句 原因 这个已改了


--  作者:cyq220657
--  发布时间:2015/5/28 10:12:24
--  
当金字塔开盘获取数据时 VBA对应的数组与数据匹对不上,所以一开始 vba获取的K线        数据是错误的 要过一两分钟就对的上了
--  作者:yukizzc
--  发布时间:2015/5/28 10:46:34
--  

你在另一处发帖回复过您了,把k线的时间还有价格这种数据都输出记录下。

看是取到的k序列不对呢,还是数据不对。


--  作者:cyq220657
--  发布时间:2015/5/28 11:12:25
--  
K线是对的 
--  作者:cyq220657
--  发布时间:2015/5/28 11:15:41
--  
看到K数据变动的  就开盘是数据变一哈 等一会儿数据又变回来了
--  作者:yukizzc
--  发布时间:2015/5/28 15:39:37
--  

会不会是白天数据本地没有所以引用时候变成了前一天的k呢,你输出时候这样去输出把time记录下来。之前也用如下代码在夜盘时候进行了输出,价格还有时间记录也都正常。

myclose=Histroy.Close(Histroy.Count-2)  \'得到上根K线的收盘价     
     mydate=Histroy.Date(Histroy.Count-2)
    call document.debugfile("C:\\OrderLog.Txt",myclose&"---"&mydate,time)


--  作者:cyq220657
--  发布时间:2015/5/28 15:49:46
--  

我也不知道怎么的 早上开盘也是一样的 反正开盘会出错 休盘都不会 后面的数据一切正常 

 在开盘前面一两分钟数据只要不用 我的程序就正常了


--  作者:王锋
--  发布时间:2015/5/28 17:54:30
--  

建议你还是多用Application.msgout函数多调试一下吧,这种逻辑问题,唯有调试手段才能解决问题的