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

本文介绍了一个基于BKT回测平台的自动化交易策略测试流程。通过WindR包实现交易策略的模拟运行,包括获取交易日期、查询持仓与资金情况、执行买卖操作等关键步骤。特别关注了交易过程中可能出现的错误及相应的处理方式。

#回测平台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')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值