记录一次CL_RedRover策略的错误

参考合约为螺纹钢2021年的主力合约,当前主力合约映射为10月合约。

2021年5月10日,策略CL_RedRover策略出现很大的错误。

开仓时间是2021年5月6日,开仓价格5488。如下图所示:

实际平仓价格为5月10日的Support价格5639,而记录下的平仓价格为5836。如下图所示。这一下子就相当于虚增了200点的利润。

原因是,系统自带的RedRover策略在止损处是这样写的:

	If(MarketPosition == 1 And BarsSinceEntry > 0 And Vol > 0)
	{
		// 止盈出场
		If(High >= myExitPrice)
		{
			Sell(0, Max(Open,myExitPrice));
			Commentary("止盈出场");
		}
		// 反向突破止损出场
		Else If(Low <= Support[1] - MinMove * PriceScale)
		{
			Sell(0, Min(Open,Support[1] - MinMove * PriceScale));
			Commentary("反转出场");
		}
	}

这就造成一个问题,就是先检测止盈,后检测止损。一天的行情中,低点低于support时,应该止损,而回测或者实盘记录收益时却可能因为也达到了止盈的条件而计算了止盈。利润就是这样被虚增的。

为了解决这个问题,我们将止盈和止损的判断顺序变更一下。

// 平仓
If(MarketPosition == 1 And BarsSinceEntry > 0 And Vol > 0)
{
    // 反向突破止损出场
    If(Low <= Support[1] - MinMove * PriceScale)
    {
        Sell(0, Min(Open,Support[1] - MinMove * PriceScale));
        Commentary("反转出场");
    }
            // 止盈出场
    Else If(High >= myExitPrice)
    {
        Sell(0, Max(Open,myExitPrice));
        Commentary("止盈出场");
    }
}

发表评论