先给操作流程。
首先,确定收盘bar的时间。注意,这个指的是bar时间,而不是自然时间。具体可以通过k线查看。
比如,15分钟k线图,那么如果想要在下午收盘前最后一根bar收盘平仓,那么可以看到时间点为14点45分,换成tb的时间格式就是0.1445。
再比如,5分钟图,那么如果想要在上午收盘前最后一根bar收盘平仓,可以看到时间点为11点25分,换算成tb的时间格式即使0.1125。
现在以5分钟k线举例,需要在中午收盘和下午收盘时进行收盘平仓,如下步骤操作
首先添加onbarclose部分代码
OnBarClose(ArrayRef<Integer> indexs)
{
if(time == 0.1125 or time == 0.1455)
{
sell(0,close);
BuyToCover(0,close);
Commentary("收盘平仓");
}
}
这个部分可以使历史bar上出现我们想要的收盘平仓信号
但是光这样还不够,我们还需要添加设置,让实盘的时候也能在临近bar收盘的时候执行收盘平仓。
在oninit域里添加代码如下
OnInit()
{
array<Numeric> timepoint;
timepoint[0] = 0.112950;
timepoint[1] = 0.145950;
SetTriggerBarClose(timepoint);
}
这样我们就会在实盘的时候,当走到11:25和14:55这个两个bar的时候,分别在自然时间11:29:50和14:59:50的时候执行onbarclose里的代码,也就是出现收盘平仓信号。
注意,如果在这个时间点之后到当前bar走完之前,系统报警信号闪烁,一般是正常情况,无关紧要。
上述代码基本上可以无缝添加到任何策略模型内,但是不能保证100%不出问题。如果没有达到预想情况,请食用文章底部的解说视频,进一步了解代码的意义。
视频解说配合食用
https://www.bilibili.com/video/BV1Gt4y1t7ET/
作者:kyover https://www.bilibili.com/read/cv17625951 出处:bilibili
请问有什么复杂的处理?这样写会有闪烁。我想到的是叠加更小周期,还有其他更好方案吗
针对这个业务需求可以写两段代码,一段放在onbarclose里用于处理实时bar上的信号,一段放在onbar里用户处理历史bar上的信号