同一个公式做回测,设置了(time>0.1455)等多个退出条件,当周期设置为1分钟时,经常出现满足退出条件不执行,但是设置周期为2分钟时,则正常了
周期为1分钟时,成交一次就卡住了周期为2分钟时,则正常了,每天几次成交,到时间14::56分准时退出。是什么原因呢?
周期为1分钟时,成交一次就卡住了周期为2分钟时,则正常了,每天几次成交,到时间14::56分准时退出。是什么原因呢?
有多个退出条件,当周期越小,越容易出现满足退出条件不执行,而把周期设置大一点就正常了,这是什么原因呢?
当周期为15s,30s,时都会出现满足退出条件不执行,当周期大于1分钟时,则能够正常运行,一天成交几次
代码看看,time是k线时间周期太小的话0.1455 后面还有1456 1457
回复:Params //此处添加参数 array<string> mysymbol([\"000016.SSE\",\"HO2304-P-2400.CFFEX\",\"HO2304-C-2450.CFFEX\",\"HO2304-P-2450.CFFEX\",\"HO2304-C-2500.CFFEX\",\"HO2304-P-2500.CFFEX\",\"HO2304-C-2550.CFFEX\",\"HO2304-P-2550.CFFEX\",\"HO2304-C-2600.CFFEX\",\"HO2304-P-2600.CFFEX\",\"HO2304-C-2650.CFFEX\",\"HO2304-P-2650.CFFEX\",\"HO2304-C-2700.CFFEX\",\"HO2304-P-2700.CFFEX\",\"HO2304-C-2750.CFFEX\",\"HO2304-P-2750.CFFEX\",\"HO2304-C-2800.CFFEX\",\"HO2304-P-2800.CFFEX\",\"HO2304-C-2850.CFFEX\",\"HO2304-P-2850.CFFEX\",\"HO2304-C-2900.CFFEX\" ]); Numeric COUNTS(1);//开仓手数 Numeric outfit(0);//允许50指数浮动范围 Numeric datafit(50);//数据源变化单位 Numeric dynamicfit(50);//指数差值 Numeric startfit(-150);//数据源起始设置 Vars Global Array< Numeric> count(0); Global Numeric countoneday(0); Global array< Numeric> lastdayclose;//上日收盘价 Global Array<Numeric> lastlastdayclose;//前日收盘价 global bool switchs(true); Global array< Numeric> entrycon; global array< Numeric> exitcon; Global Array <numeric> EntryPrices; Global Numeric i; Global Array< Numeric> sumturnover(0); Global Array< Numeric> sumvolume(0); Global Array< Numeric> avgp; Defs //此处添加公式函数 Numeric calcAvg(Numeric a,Numeric b) { return (a+b)/2; } Events //此处实现事件函数 //初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作 OnInit() { FOR i = 0 to GetArraySize(mysymbol)-1 { SubscribeBar(mysymbol[i],\"15s\",20230317); count[i]=0; } } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { if (time>0.1450) { countoneday=0; } Range[i=1:datacount] { if( (i+2)%2==1) { if (CurrentBar==0) { lastdayclose[i]=data[i].open; } if(time==0.1459) { lastlastdayclose[i]=lastdayclose[i]; } if ((data0.open>(2500+startfit+((i+1)/2)*datafit)) && (time<0.11) && (time>0.0930)&&(data0.open<(2500+startfit+((i+1)/2)*datafit+dynamicfit)) ) { if (count[i]<COUNTS&&switchs&&countoneday<2) { buy(1,open); EntryPrices[i]=open; Print(DateToString(date)+\" \"+TimeToString(Time)+\"P\"+text(2500+startfit+((i+1)/2)*datafit)+\"买开:\"+text(data[i].open)); count[i]=1; entrycon[i+1] = 1; switchs=False; countoneday=countoneday+1; } } if ((data0.open>(2500+startfit+dynamicfit+((i+1)/2)*datafit+outfit))or(time>=0.1455) or (data0.open<(2500+startfit+((i+1)/2)*datafit-outfit)) or (time>0.1455)) { if(MarketPosition>0 and count[i]==1 ) { sell(0,open); Print(DateToString(date)+\" \"+TimeToString(Time)+\"P\"+text(2500+startfit+((i+1)/2)*datafit)+\"卖平:\"+text(data[i].open)); count[i]=0; exitcon[i+1]=1; } } } if( (i+2)%2==0) { if (CurrentBar==0) { lastdayclose=open; } if(time==0.1459) { lastlastdayclose=lastdayclose; } if ((entrycon[i]==1) &&(count[i]<COUNTS)) { buy(1,open); Print(DateToString(date)+\" \"+TimeToString(Time)+\"C\"+text(2500+startfit+dynamicfit+i*datafit/2)+\"买开:\"+text(data[i].open)); count[i]=1; EntryPrices[i]=data[i].open; entrycon[i] = 0; } if(count[i]==1&&MarketPosition>0 && exitcon[i]==1) { sell(0,open); Print(DateToString(date)+\" \"+TimeToString(Time)+\"C\"+text(2500+startfit+dynamicfit+i*datafit/2)+\"卖平:\"+text(data[i].open)); count[i]=0; exitcon[i]=0; switchs=true; } } } } OnBarClose(ArrayRef<Integer> indexs) { Numeric i = 1; range[i=1:datacount] { if(time>=0.0930 &&time<=0.1456) { sumturnover[i]=sumturnover[i]+turnover; sumvolume[i]=sumvolume[i]+v; avgp[i]=(sumturnover[i]/sumvolume[i]/100); }if(time>0.1456){ sumturnover[i]=0; sumvolume[i]=0; } } }