Ну, код, мягко говоря, не очень. Видимо получен из автоматически генерируемого TSLab`ом временного файла.
Много лишнего.
В коде используются переменные "Source" и "source". Не понятно: это опечатка или так и задумано. Размер, в данном случае, имеет значение

. Очень похожие имена лучше не использовать, можно легко ошибиться.
Повторное:
count--;
это скорее всего ошибка.
В строчках:
if ((source.IsLastBarUsed == false))
barsCount--;
for (int bar = ctx.TradeFromBar; bar < barsCount; bar++)
похоже ошибка. Если "IsLastBarUsed == false" то скрипт будет выставлять последнюю заявку на ПОСЛЕДНИЙ бар, а не на следующий за ним, что не правильно (в реале сделок не будет вообще, насколько я понимаю).
Что еще? Обработка ошибок (try...catch) не нужна. TSLab сам все перехватит.
Да, параллельно ведутся ДВЕ позиции, с именами: "LN" и
"SN". Сигналов рассчитывается тоже 2 и они не связаны. Это означает, что не исключена ситуация когда будет два сигнала и две открытые позиции: лонг и шорт. Скорее всего сигналы взаимоисключающиеся, но из отрывка кода этого не ясно.
Ну и раз уж я все равно это сделал, прикреплю свой вариант форматирования кода, вдруг да окажется полезным:
// Make 'log_long' item data
int count = nRange.Count;
var log_long = new bool[count];
if (Source.IsLastBarUsed == false)
count--;
for (int bar = 1; bar < count; bar++)
log_long[bar] = "условие";
// Make 'log_short' item data
var log_short = new bool[count];
if (source.IsLastBarUsed == false)
count--;
for (int bar = 1; bar < count; bar++)
log_short[bar] = "условие";
//.........................
//Декомпрессия индикаторов
//.........................
//Проход по барам
if (source.IsLastBarUsed == false)
barsCount--;
for (int bar = ctx.TradeFromBar; bar < barsCount; bar++) {
var LongPos = source.Positions.GetLastActiveForSignal("LN");
var ShortPos = source.Positions.GetLastActiveForSignal("SN");
// Торговля
if (LongPos == null) {
if (log_long[bar])
source.Positions.BuyAtMarket(bar + 1, 1, "LN");
} else {
if (LongPos.EntryBarNum <= bar)
if (log_short[bar])
LongPos.CloseAtMarket(bar + 1, "LX");
}
if (ShortPos == null) {
if (log_short[bar])
source.Positions.SellAtMarket(bar + 1, 1, "SN");
} else {
if (ShortPos.EntryBarNum <= bar)
if (log_long[bar])
ShortPos.CloseAtMarket(bar + 1, "SX");
}
}
}
Как там сестру таланта зовут?
