Да, к сожалению, как и любой подобный инструмент, конструктор-из-правил имеет свои ограничения. Тут как раз такой случай. Код, который генерируется по этим правилам не очень гибкий, точки входа и выхода попадают в разные ветки условия, if (IsLastPositionActive).
[CODE]if (IsLastPositionActive)
{
Position p = LastPosition;
if (p.EntrySignal.Contains("Group2|"))
{
DataSeries ma_2 = SMA.Series(Close, 20) * (1.0d + 0.3 / 100.0d);
if (CrossOver(bar, Close, ma_2))
{
CoverAtClose(bar, p, "Group2");
}
}
if (p.EntrySignal.Contains("Group1|"))
{
DataSeries ma_1 = SMA.Series(Close, 20) * (1.0d - 0.3 / 100.0d);
if (CrossUnder(bar, Close, ma_1))
{
SellAtClose(bar, p, "Group1");
}
}
}
else
{
DataSeries ma_3 = SMA.Series(Close, 20) * (1.0d - 0.3 / 100.0d);
if (CrossUnder(bar, Close, ma_3))
{
ShortAtClose(bar, "Group2|");
}
DataSeries ma = SMA.Series(Close, 20) * (1.0d + 0.3 / 100.0d);
if (CrossOver(bar, Close, ma))
{
BuyAtClose(bar, "Group1|");
}
}[/CODE]
Замените в готовом коде else на if (!IsLastPositionActive) и получите логику, которую хотели.