回测平台小例子BKT:收盘前2分钟买,第二天卖

来源:互联网 发布:db2数据库用户 编辑:程序博客网 时间:2024/04/29 20:11

#回测平台BKT受后台服务限制,速度稳定性上可能有问题。

dobkttest<-function(begintime="20130829",endtime="20140829",strategyname="autotest")
{
    library(WindR)
    w.start(0,FALSE);
    
    bktnote=paste(strategyname,Sys.time(),"Go");
    #begintime="20130329";
    #endtime="20140329";
    
    
    dates<-w.tdays(begintime,endtime)$Data$DATETIME;
    if(length(dates)<10)
    {
        print(dates);
        print("w.tdays error.....");
        return(1);
    }
    
    out<-w.bktstart(strategyname,begintime,endtime,'Period=1m;InitialFund=3000000');
    if(out$ErrorCode!=0)
    {
        print(out);
        print("Error on w.bktstart!");
        return (2);
    }
    bktid <- out$Data$BktId;#回测的id
    codes <- '600000.sh';
    print(paste('bktid=',bktid,'codes=',codes,'begintime=',begintime,'endtime=',endtime));
    
    for(i in c(1:length(dates))){
       print(paste('do i=',i, dates[i]));
       #查仓位
         out<-w.bktquery('position',paste(dates[i],'09:30:00'))
         if(out$ErrorCode!=0)
         {
             print(out);
             print("Error on w.bktquery--position!");
             return (3);
         }
         positions <-out$Data;
    
         #每天收盘前2分钟买,开盘2分钟卖
         if(! is.null(positions))
         {#有持仓则卖出
                 out<-w.bktorder(paste(dates[i],' 09:30:00'),positions$SecurityCode,'sell',positions$SecurityVolume);
                 if(out$ErrorCode!=0)
                 {
                     print(out);
                     print("Error on w.bktorder sell!");
                     return (6);
                 }
         }
        
       #查资金
       out<-w.bktquery('Capital',paste(dates[i],'09:30:00'))
         if(out$ErrorCode!=0)
         {
             print(out);
             print("Error on w.bktquery--Capital!");
             return (4);
         }
         
         totalfund<-out$Data$AvailableFund;        
         if(is.null(totalfund) || is.nan(totalfund) )
         {
            print("totalfund is invalid");
            print(out);
            return(5.5);
         }            
         
         
         out<-w.wsi(codes,'close',paste(dates[i]," 14:58:00"),paste(dates[i]," 14:59:00"));
         if(out$ErrorCode!=0)
         {
              if(out$ErrorCode == -40520007)  #no data available
              {
                 print(out);
                    next;
              }
             print(out);
             print("Error on w.wsi!");
             return (5);
         }
         price <- out$Data$close;
         
         volume <- totalfund / sum(price) *0.9;

         if(is.null(volume) || is.nan(volume) )
         {
            print("volume is invalid");
            print(out);
            next;
            #return(5.5);
         }            
         if(volume<100)
         {
           print(paste("volume",volume));
              next;
         }    
        
         out<-w.bktorder(paste(dates[i],' 14:59:00'),codes,'buy',floor(volume/100)*100);
         if(out$ErrorCode!=0)
         {
             print(out);
             print("Error on w.bktorder buy!");
             return (6);
         }

    }
    
    w.bktend();
    
    print('BKT has finished!');
    return(1);
}

dobkttest(begintime='20130912')

 

0 0
原创粉丝点击