Здесь всё понятно.
А вот как себя поведет стратегия, если позицию частично мы будем закрывать лимитным ордером, например, CloseShortLimit(Price, Q);
Вот как раз здесь мы и увидим странность:
Позиция будет закрыта частично по лимитной заявке, но полный стоп к позиции останется.
Когда исполнится стоп, мы окажемся в противоположной позиции, хотя в нашем коде не будет поручений на вход в противоположную позицию.
Код обоих примеров тестовых стратегий и скриншоты сигналов:
Код: Выделить всё
/**
x1
**/
function Initialize()
{
   StrategyName = "x1";
   AddParameter("P1", 0.005, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "SBER=МБ ЦК");
   LongLimit = 100;
   ShortLimit = 100;
}
function OnUpdate()
{
   /// ПРАВИЛО 1
   if ( Input1.Open < Input1.Close && CurrentPosition() == 0)
   {
      EnterShort();      
      StopLoss(Input.Close + Input.Close * 0.01, SignalPriceType.Price);
   }
   
   if ( Input1.Open > Input1.Close && CurrentPosition() != 0)
   {
      CloseShort(1);
   }
}Результат
Код: Выделить всё
/**
x2
**/
function Initialize()
{
   StrategyName = "x2";
   AddParameter("P1", 0.005, "", 1);
   AddInput("Input1", Inputs.Candle, 60, true, "SBER=МБ ЦК");
   LongLimit = 100;
   ShortLimit = 100;
}
function OnUpdate()
{
   /// ПРАВИЛО 1
   if ( Input1.Open < Input1.Close && CurrentPosition() == 0)
   {
      EnterShort();      
      StopLoss(Input.Close + Input.Close * 0.01, SignalPriceType.Price);
   }
   
   if ( Input1.Open > Input1.Close && CurrentPosition() != 0)
   {
      CloseShortLimit(Input.Close + Input.Close * 0.01, 1);
   }
}
Результат
во второй тестовой стратегии CloseShortLimit() не в ту строну, но сути это не меняет, он просто исполнился сразу
 Изображения (1057)
 Изображения (1057) Архивы (82)
 Архивы (82) Текстовые файлы (9)
 Текстовые файлы (9) Документы (7)
 Документы (7) Скрипты Альфа-Директ 4 (30)
 Скрипты Альфа-Директ 4 (30)