А вот, похоже и искомая ошибка, рассудите, пожалуйста, зачем вот тут:
else
{
double shift = (0 - StopLoss) / 100;
stop = pos.EntryPrice * (1 + (pos.IsLong ? shift : -shift));
}
var lastStop = pos.GetStop(barNum);
0 - StopLoss? Ведь должен быть просто StopLoss?