Стратегии и роботы > Вход по лимитной заявке и индикатору.

Обсуждение, описание стратегий и роботов, идеи для стратегий
Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 366 раз
Контактная информация:

Re: Вход по лимитной заявке и индикатору.

Непрочитанное сообщение evge » 14 авг 2022, 07:23

Пример с стопом по состоянию НПУ % < SL (параметр) срабатывает CloseLong, т.е. это не реальный стоп, а эмуляция. Т.к. StopLoss() после EnterLongLimit() не срабатывает, даже в отдельном условии по CP != 0, возможно терминальные баги или иная причина.
Поэтому стоп в таком виде.

Код: Выделить всё

function Initialize()
{
   StrategyName = "FollowEMA";
   AddParameter("Period", 20, "EMA Period", 1);
   AddParameter("Step", 0.02, "PSAR Step", 1);
   AddParameter("Maximum", 0.2, "PSAR Maximum", 1);
   AddParameter("SL", 2, "Stop Loss", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 1000;
   ShortLimit = -1000;
   AddChartIndicator("EMA", new Dictionary <string, string>{{"Period", "Period"}});
   AddChartIndicator("ParabolicSAR", new Dictionary <string, string>{{"Step","Step"},{"Maximum","Maximum"}});   
}

function OnUpdate()
{
   var I = Input1;
   var C = Input1.Close;
   var E = EMA(I, Period);
   var P = PSAR(I, Step, Maximum);
   var CP = CurrentPosition();
           
   if (C[0] > E[0] && CP == 0)
   {
      CancelActiveOrders(true);
      EnterLongLimit(E[0]);
   }

   if (CurrentPLper() <= -SL)
   {
        CancelActiveOrders(true);
        CloseLong();
   }
   
   else
     
   if (C[0] < P[0] && CP > 0)
   {
      CancelActiveOrders(true);
      CloseLongLimit(P[0]);     
   }
   
}
никогда такого не было и вот опять

Максим
Сообщения: 16
Зарегистрирован: 07 апр 2019, 11:01
Благодарил (а): 14 раз

Re: Вход по лимитной заявке и индикатору.

Непрочитанное сообщение Максим » 14 авг 2022, 11:36

В лонг стоп работает, а для шорта сделал так:

if (CurrentPLper() >= SL)
{
CancelActiveOrders(true);
CloseShort();
}

В результате стоп закрывает ниже, а не выше точки входа. Что делаю не так?

robot3.jpg
robot3.jpg (146 КБ) 20643 просмотра

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 366 раз
Контактная информация:

Re: Вход по лимитной заявке и индикатору.

Непрочитанное сообщение evge » 15 авг 2022, 18:50

это уже не стоп, а фиксация прибыли :)

делать ничего не надо было для шорта, условие должно быть абсолютно тем же

Код: Выделить всё

if (CurrentPLper() <= -SL)
{
CancelActiveOrders(true);
CloseShort();
}
никогда такого не было и вот опять

Максим
Сообщения: 16
Зарегистрирован: 07 апр 2019, 11:01
Благодарил (а): 14 раз

Re: Вход по лимитной заявке и индикатору.

Непрочитанное сообщение Максим » 15 авг 2022, 21:16

Спасибо, теперь все работает ))

Евгений
Сообщения: 1
Зарегистрирован: 16 мар 2023, 22:37

Re: Вход по лимитной заявке и индикатору.

Непрочитанное сообщение Евгений » 17 мар 2023, 00:00

evge писал(а):по закрытию со слежением аналогично, CloseLongLimit(Price)
с проверкой конечно же, что цена на текущий момент ниже чем PSAR

Код: Выделить всё

function Initialize()
{
   StrategyName = "FollowEMA";
   AddParameter("Period", 20, "EMA Period", 1);
   AddParameter("Step", 0.02, "PSAR Step", 1);
   AddParameter("Maximum", 0.2, "PSAR Maximum", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 1000;
   ShortLimit = -1000;
   AddChartIndicator("EMA", new Dictionary <string, string>{{"Period", "Period"}});
   AddChartIndicator("ParabolicSAR", new Dictionary <string, string>{{"Step","Step"},{"Maximum","Maximum"}});   
}

function OnUpdate()
{
   var I = Input1;
   var C = Input1.Close;
   var E = EMA(I, Period);
   var P = PSAR(I, Step, Maximum);
   var CP = CurrentPosition();
         
   if (C[0] > E[0] && CP == 0)
   {
      CancelActiveOrders(true);
      EnterLongLimit(E[0]);
   }
   
   if (C[0] < P[0] && CP > 0)
   {
      CancelActiveOrders(true);
      CloseLongLimit(P[0]);
   }

}



Здравствуйте. Не запускается робот. Что не так делаю?
Копирую код, вставляю в текстовый редактор.
сохраняю как sar.qpl
Пытаюсь загрузить в Квик через: Сервисы - QPILE скрипты.
Выдает ошибку: Неверный формат файла описания скриптов - Ошибка синтаксиса.

Аватара пользователя
Indigo-On
Сообщения: 61
Зарегистрирован: 28 ноя 2018, 18:44
Откуда: Russia
Благодарил (а): 25 раз
Поблагодарили: 9 раз

Re: Вход по лимитной заявке и индикатору.

Непрочитанное сообщение Indigo-On » 20 мар 2023, 22:13

Евгений писал(а):Здравствуйте. Не запускается робот. Что не так делаю?
Копирую код, вставляю в текстовый редактор.
сохраняю как sar.qpl
Пытаюсь загрузить в Квик через: Сервисы - QPILE скрипты.
Выдает ошибку: Неверный формат файла описания скриптов - Ошибка синтаксиса.


Добрый день.
Код только для терминала AlfaDirect 4 и не будет работать в Quik. Совсем и никогда.
В Quik свой язык программирования.


Вернуться в «Стратегии и роботы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей