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