同一个公式做回测,设置了(time>0.1455)等多个退出条件,当周期设置为1分钟时,经常出现满足退出条件不执行,但是设置周期为2分钟时,则正常了

data-href=周期为1分钟时,成交一次就卡住了

data-href=

周期为2分钟时,则正常了,每天几次成交,到时间14::56分准时退出。

是什么原因呢?

满足条件时止损不执行(求助)
Bar周期为1小时时如何设置夜盘开盘前10分钟不交易
请问如何实现当条件首次满足时不开仓,从第二次满足条件时才开仓
设置条件单
如何设置定时启动策略以及软件定时退出?
参数值设置为范围问题
设置周期为Tick但是日志里一秒触发大于两个OnBar
如何在oninit中设置了允许双向持仓
多周期,只设置图层时间,品种手选
同一个策略多个品种连续合约回测30分钟周期(设置最近250天),不同品种为啥起始时间不同?

有多个退出条件,当周期越小,越容易出现满足退出条件不执行,而把周期设置大一点就正常了,这是什么原因呢?

当周期为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;

}

}

}