Код примерно такой:
IList<Bar> b = sec.Bars;
for(int i = 0; i < b.Count - 1; i++)
{
#region close pos
if(...)
{
IPosition lastBuy = null;
IList<IPosition> pl = sec.Positions.ToList();
foreach(IPosition pos in pl)
{
if(pos.IsActive && pos.IsLong)
{
lastBuy = pos;
ctx.Log(lastBuy.EntrySignalName + " " + (i) + " CLOSE", 0x000000);
break;
}
}
if(lastBuy != null)
{
lastBuy.CloseAtMarket(i + 1, "Close" + lastBuy.EntrySignalName);
ctx.Log(lastBuy.ExitSignalName + " " + (i) + " CLOSE__", 0x000000);
}
}
#endregion
}
Здесь sec - входной параметр метода Execute.
Происходит, примерно, следующее: при неком значении i я нахожу какой-то lastBuy и, вроде как, закрываю позицию, но на последующих итерациях цикла я снова нахожу этот же lastBuy с пустым ExitSignalName, правда в какой-то момент позиция все же закрывается.