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点的提前触发了,有委托成交。
之前没触发的原因可能是,中午休息的时候电脑睡眠,下午交易时段打开时,会提示:
时间 消息类型 消息级别 内容
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线也有信号了
MA888数据源设置从2023-1-1开始
K线GetSessionCount就是3个,这个少了夜盘时间段,不太对劲。因为没设置夜盘提前触发,没信号没委托也是正常的。
明天下午再测试一下15点提前触发但没委托的问题。
现在已经成历史k线覆盖了,等23点再截图看看。
委托是什么都没发?
那监控器显示什么
图表情况截图看看