Формирование сигнала:
for (int bar = StartBar; bar < source.Bars.Count; bar++) // Подстановка необходимого значения свечи с которой робот начинает торговлю
{
#endregion

// Параметры и Сигналы

#region Сброс параметров

signalLong = false; // изначально нет длинной позиции
signalShort = false; // изначально нет короткой позиции

#endregion

#region Сигналы на вход в позицию

#endregion


// Исполнение сигналов

#region Выполнение сигналов для длинной позиции

LongPos = source.Positions.GetLastActiveForSignal("OpenLong",bar); // Условие идентификации длинной позиции

Exit_Long= Exit_L[bar]; // Расчет значения Стоп лос ордера для длинной позиции

if (LongPos == null) // Если нет активной длинной позиции
{
if (signalLong) // Если есть сигнал Buy,
{
source.Positions.BuyIfGreater(bar+1,Lot,H[bar], "OpenLong"); // Выдаем ордер на открыте новой длинной позиции
}
}
else
{
LongPos.CloseAtStop(bar+1,Exit_Long, "Stop Long"); // Если есть открвтая длинная позици пробуем выйти по стоп лос ордеру
}

#endregion

#region Выполнение сигналов для короткой позиции

ShortPos = source.Positions.GetLastActiveForSignal("OpenShort",bar); // Условие идентификации короткой позиции

Exit_Short = Exit_S[bar]; // Расчет значения Стоп лос ордера для коротокой позиции

if (ShortPos == null) // Если нет активной короткой позиции
{
if (signalShort) // Если есть сигнал Short
{
source.Positions.SellIfLess(bar+1,Lot,L[bar], "OpenShort"); // Выдаем ордер на открыте новой короткой позиции.
}
}
else // Если есть активная короткая позиция,
{
ShortPos.CloseAtStop(bar+1, Exit_Short, "Stop_Short"); // Пытаемся выйти по стоп лос ордеру
}
#endregion