Код примерно такой:
Code:
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, правда в какой-то момент позиция все же закрывается.