На время отключал систему, сейчас вернулся к этому вопросу.
Похоже разобрался.
После открытия позиции sec.Positions.ActivePositionCount возвращает ненулевое значение независимо от номера бара и даже на самом первом баре мой код (см. первый пост) пытается выполнить:
var Pos = sec.Positions.GetLastPositionActive(i);
if (sec.ClosePrices[i] < TakeProfitLevel) Pos.CloseAtMarket(i + 1, "profit");
При этом скрипт крашится (Pos - пустой объект) и не доходит до текущего бара, поэтому позиция и не закрывается.
Изменю способ получения открытой позиции и должно все заработать.