OnBarClose设置提前触发,有提前触发却没有发出委托

1小时周期,设置提前触发OnBarClose,基本抄的示范例子,只是排除了0.1014这个小节:

OnReady()

    {

        Range[0:DataCount-1]

        {

            Array<Numeric> timePoint;

            Integer i;

            Print(\"GetSessionCount:\" + Text(GetSessionCount));

            For i = 0 To GetSessionCount() - 1

            {

                Numeric ret = DateTimeAdd(GetSessionEndTime(i), -9);

                if(ret < 0)

                {

                    ret = DateTimeAdd(GetSessionEndTime(i), 86400 - 9);

                }

                ret = StringToTime(TimeToString(ret));

                if(ret>=0.1014 && ret<=0.11)

                {

Print(\"no SetTriggerBarClose:\" + Text(ret));

                 continue;//排除10:15的15分钟休息

                }

                Print(\"SetTriggerBarClose:\" + Text(ret));

                ArrayPushBack(timePoint, ret);

            }

            SetTriggerBarClose(timePoint);

        }

    }

另外说一下,这里有个奇怪的地方,如果设置数据源是具体个数,比如1000bar,GetSessionCount显示是4个(带夜盘的),如果数据源设置开始日期(测试用2023-1-1开始),GetSessionCount显示3个,就少夜盘的时间段了。

下面是测试用的OnBarClose:

OnBarClose(ArrayRef<Integer> indexs)

{

Print(\"OnBarClose:\" + Text(T)+\"   CurrentTime:\"+Text(CurrentTime));

//Commentary(\"T:\"+Text(T));

//Commentary(\"EndTime:\"+Text(EndTime()));

If(T==0.11){

Buy(3,Close);

FileAppend(\"D:\\\\ATB\", Symbol+\" Buy 3 OnBarClose:0.11 CurrentTime:\"+Text(CurrentTime));

}

If(T==0.14)

{

Sell(1,Close);

FileAppend(\"D:\\\\ATB\", Symbol+\" Sell 1 OnBarClose:0.14 CurrentTime:\"+Text(CurrentTime));

}

If( T==0.22)

{

Sell(0,Close);

FileAppend(\"D:\\\\ATB\", Symbol+\" Sell 0 OnBarClose:0.22 CurrentTime:\"+Text(CurrentTime));

}

}

在文件里可以查询出最早的:

MA888.CZCE Sell 1 OnBarClose:0.14 CurrentTime:0.145949166

最后的:

MA888.CZCE Sell 1 OnBarClose:0.14 CurrentTime:0.150459480

可以确定是提前触发进入了If(T==0.14)的内部,Sell语句应该是执行过了,不知是不是Sell失败了,K线图没有信号,也没有委托发出,问题出在哪呢?

15分钟周期,ONCLOSE提前下单时间但系统提前30多秒发出委托
关于提前发单代码及OnBarClose的疑问
实盘交易跨周期OnBarClose触发问题
OnBarClose的触发时间和设置的触发时间点不一致
怎么实现在K线收盘前几秒触发OnBarClose
收盘价模型的收盘提前发单案例
收盘提前N秒发单的通用方法
设置止损后,再提前手动止损,还会自动开仓
全新事件收盘价触发onbarclose即将上线
为什么我设置了止盈止损却没有触发?

休眠肯定不行 策略没运行了

今天15点的提前触发了,有委托成交。

之前没触发的原因可能是,中午休息的时候电脑睡眠,下午交易时段打开时,会提示:

时间 消息类型 消息级别 内容

2023-03-22 13:54:04.354 策略运行 警告 策略运行,工作区1@ATest1@rb888_H1发生信号闪烁,合约:rb888.SHFE,上次执行信号个数:1,本次执行信号个数:0,发生Bar时间:20230322.110000,发生Bar=1002

11点半前的买入信号被这个机制给抹去了,导致策略单元的持仓为0,因此昨天的15点没有委托和成交。

今天特意检查了一下,发现持仓为0了,然后停止策略单元,重新启动自动交易,有持仓了,到15点提前触发OnBarClose也正常了。

想了解一下为什么睡眠之后再唤醒后,策略单元为啥说有信号闪烁呢,有什么办法可以解决吗?

小改一下OnBarClose输出

OnBarClose(ArrayRef<Integer> indexs)

{

Print(OnBarClose: + Text(T)+   CurrentTime:+Text(CurrentTime));

//Commentary(T:+Text(T));

//Commentary(EndTime:+Text(EndTime()));

If(T==0.11){

Buy(3,Close);

FileAppend(D:\\\\ATB, Symbol+ Buy 3 OnBarClose:0.11 CurrentTime:+Text(CurrentTime));

}

If(T==0.14)

{

bool result=Sell(1,Close);

FileAppend(D:\\\\ATB, Symbol+ Sell 1 OnBarClose:0.14 CurrentTime:+Text(CurrentTime)+ result:+IIFString(result,T,F));

}

If( T==0.22)

{

bool result=Sell(0,Close);

FileAppend(D:\\\\ATB, Symbol+ Sell 0 OnBarClose:0.22 CurrentTime:+Text(CurrentTime)+ result:+IIFString(result,T,F));

}

}

rb888有委托成交了,提前9秒左右,正常没问题

文件输出

rb888.SHFE Sell 0 OnBarClose:0.22 CurrentTime:0.225951632result:T

。。。。。。

rb888.SHFE Sell 0 OnBarClose:0.22 CurrentTime:0.230001028result:T

K线也有信号了

data-href=

MA888数据源设置从2023-1-1开始

data-href=

K线GetSessionCount就是3个,这个少了夜盘时间段,不太对劲。因为没设置夜盘提前触发,没信号没委托也是正常的。

data-href=

明天下午再测试一下15点提前触发但没委托的问题。

现在已经成历史k线覆盖了,等23点再截图看看。

委托是什么都没发?

那监控器显示什么

图表情况截图看看