Стратегии и роботы > Робот Alfa_AO

Обсуждение, описание стратегий и роботов, идеи для стратегий
manolega
Сообщения: 10
Зарегистрирован: 26 апр 2019, 23:26

Робот Alfa_AO

Непрочитанное сообщение manolega » 27 апр 2019, 01:58

Здравствуйте! Подскажите как описать(дополнить) в коде данного робота условия при которых робот не будет выставлять заявку при наличии сигнала, а будет ждать смены условий для входа.
Условия такие:
1) робот открыл сделку в лонг, гистограмма индикатора АО положительная.
2) гистограмма индикатора АО продолжает идти положительная, непрерывно, без смены на отрицательное значение, но цена движется постоянно вниз, падает.
3) робот закрывает длинную сделку по стопу и тут же опять открывает лонг, потому что сохраняется сигнал для входа в длинную сделку.
Как написать код, чтобы робот при таких условиях - гистограмма непрерывно положительная, а цена непрерывно падает, не входил в сделку, по все ещё присутствующему сигналу на вход в лонг, а ждал, после выхода по стопу, смены зачения на противоположный знак гистограммы индикатора АО?
С Уважением.

Grant
Сообщения: 3
Зарегистрирован: 03 июл 2019, 18:48
Благодарил (а): 1 раз

Re: Робот Alfa_AO

Непрочитанное сообщение Grant » 03 июл 2019, 18:51

День добрый! Тоже присоединяюсь к вопросу, переделал стратегию по MACD, но такая же проблема. Нигде в источниках как решить не нашел. Как сделать, чтобы робот после стопа не переоткрывал позицию пока не выполнится противоположное условие, например Шорт. Спасибо

oxi
Сообщения: 160
Зарегистрирован: 20 сен 2016, 23:20
Благодарил (а): 11 раз
Поблагодарили: 65 раз

Re: Робот Alfa_AO

Непрочитанное сообщение oxi » 03 июл 2019, 19:12

Надо добавить еще строку в условие открытия, что не предыдущем шаге индикатор имел другое направление.
Пример для лонга
Снимок12345.PNG
Снимок12345.PNG (5.12 КБ) 3923 просмотра

Для шорта
Снимок23456.PNG
Снимок23456.PNG (5.18 КБ) 3923 просмотра

Grant
Сообщения: 3
Зарегистрирован: 03 июл 2019, 18:48
Благодарил (а): 1 раз

Re: Робот Alfa_AO

Непрочитанное сообщение Grant » 04 июл 2019, 00:03

Спасибо огромное за отклик!
Как вот конкретно в эту стратегию это вставить и правильно ли будет срабатывать стоп?


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

function Initialize()
{
   StrategyName = "MyMTS8";
   AddParameter("Pfast", 45, "быстрая ema", 1);
   AddParameter("Pslow", 65, "медленная ema", 0);
   AddParameter("Psig", 8, "сигнальная ema", 0);
   AddInput("Input1", Inputs.Candle, 60, true, "SBERP=МБ ЦК");
   LongLimit = 0;
   ShortLimit = 0;
   AddChartIndicator("MACD", new Dictionary <string, string>{{"PeriodFast", "Pfast"},{"PeriodSlow", "Pslow"},{"PeriodSignal", "Psig"}});
}

function OnUpdate()
{
   /// ПРАВИЛО 1
   if ( (MACD(Input1.Close, Pfast, Pslow, Psig).GetValue("Histogram", 0) > 0) && (Pfast < Pslow) )
   {
      EnterLong();
   }

   /// ПРАВИЛО 2
   if ( (MACD(Input1.Close, Pfast, Pslow, Psig).GetValue("Histogram", 0) < 0) && (Pfast < Pslow) )
   {
      EnterShort();
   }

   /// ПРАВИЛО 3
   if ( (CurrentPosition() > 0) && (Input1.Close > AverPrice()) )
   {
      TrailingStopLoss(0.5, SignalPriceType.DeltaInPercentFromAveragePrice);
   }

}

Grant
Сообщения: 3
Зарегистрирован: 03 июл 2019, 18:48
Благодарил (а): 1 раз

Re: Робот Alfa_AO

Непрочитанное сообщение Grant » 04 июл 2019, 01:17

oxi писал(а):Надо добавить еще строку в условие открытия, что не предыдущем шаге индикатор имел другое направление.
Пример для лонга
Снимок12345.PNG
Для шорта
Снимок23456.PNG


И в этой стратегии какая то ерунда получается на тестировании, после срабатывания стопа, в эту же минуту перезаходит в противоположном направлении. Вообщем вопрос все еще открыт...

oxi
Сообщения: 160
Зарегистрирован: 20 сен 2016, 23:20
Благодарил (а): 11 раз
Поблагодарили: 65 раз

Re: Робот Alfa_AO

Непрочитанное сообщение oxi » 04 июл 2019, 10:34

1. Надо аналогично предыдущему добавить условие вида пересечение , а не больше меньше
2. Трейлинг-стоп в тестировании не будет работать (нет возможности корректно его отработать)
3. Варианты кода со стопом

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

function Initialize()
{
   StrategyName = "MyMTS8";
   AddParameter("Pfast", 45, "быстрая ema", 1);
   AddParameter("Pslow", 65, "медленная ema", 0);
   AddParameter("Psig", 8, "сигнальная ema", 0);
   AddInput("Input1", Inputs.Candle, 60, true, "SBERP=МБ ЦК");
   LongLimit = 0;
   ShortLimit = 0;
   AddChartIndicator("MACD", new Dictionary <string, string>{{"PeriodFast", "Pfast"},{"PeriodSlow", "Pslow"},{"PeriodSignal", "Psig"}});
}

function OnUpdate()
{
   /// ПРАВИЛО 1
   if ( (MACD(Input1.Close, Pfast, Pslow, Psig).GetValue("Histogram", 0) > 0)
     && (MACD(Input1.Close, Pfast, Pslow, Psig).GetValue("Histogram", 1) <= 0) )
   {
      EnterLong();
   }

   /// ПРАВИЛО 2
   if ( (MACD(Input1.Close, Pfast, Pslow, Psig).GetValue("Histogram", 0) < 0)
     && (MACD(Input1.Close, Pfast, Pslow, Psig).GetValue("Histogram", 1) >= 0) )
   {
      EnterShort();
   }

   /// ПРАВИЛО выставляем стоп, если позиция в прибыли
   if ( (CurrentPosition() != 0) && (CurrentPLper() > 0) )
   {
      CancelStopLoss();
      // Вариант 1 - Фиксированный стоп к учетной цене
      //StopLoss(0.5, SignalPriceType.DeltaInPercentFromAveragePrice);
      // Вариант 2 - Перенос стопа под минимум/максимум
      if (CurrentPosition() > 0 )
         StopLoss(Input1.Low[0], SignalPriceType.Price);
      if (CurrentPosition() < 0 )
         StopLoss(Input1.High[0], SignalPriceType.Price);
     
   }

}





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

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

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