Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 721

 
Как правильно сделать мартингейл? 
Я правильно понимаю:
Пере открытием каждой сделки нужно проверить все сделки по этому символу с этим магиком и если последняя по дате сделка с убытком, соответственно увеличиваем лот?
 
Roman Sharanov:
Как правильно сделать мартингейл? 
Я правильно понимаю:
Пере открытием каждой сделки нужно проверить все сделки по этому символу с этим магиком и если последняя по дате сделка с убытком, соответственно увеличиваем лот?

Примерно так

 
Sergey Gritsay:

Примерно так

только не понимаю как из всех сделок вычислить самую последнюю

 
Народ, кто сталкивался, нужно получить данные индикатора на основе другого индикатора, например RSI наложенного на RSI.
 
Roman Sharanov:

только не понимаю как из всех сделок вычислить самую последнюю

Примерно так.

double  ProfitLastDeals()
  {
   double m_profit=0;
   int total=OrdersTotal();

   for(int i=0; i<total; i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderMagicNumber()!=m_magic)continue;
      if(OrderSymbol()!=m_symbol)continue;
      if(OrderType()==m_type)
        {
         m_profit=OrderProfit();
        }
     }
   return(m_profit);
  }
 
Sergey Gritsay:
Народ, кто сталкивался, нужно получить данные индикатора на основе другого индикатора, например RSI наложенного на RSI.

Все разобрался, вопрос больше не актуален

 
Roman Sharanov:

только не понимаю как из всех сделок вычислить самую последнюю

Извиняюсь, прошлый пример выбирает среди открытых, среди закрытых надо так

double  ProfitLastDealsHistory()
  {
   double m_profit=0;
   int total=OrdersHistoryTotal();

   for(int i=0; i<total; i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
      if(OrderMagicNumber()!=m_magic)continue;
      if(OrderSymbol()!=m_symbol)continue;
      if(OrderType()==m_type)
        {
         m_profit=OrderProfit();
        }
     }
   return(m_profit);
  }
 

Странное поведение iBarShift(). Возвращает индекс (-1) при явном флажке exact =false.

Ошибка возникает произвольно в любой момент времени, поймать вручную никак не удается.

При получении отрицательного индекса, код пишет в консоль параметры выполненного запроса и результат

2019.01.04 10:40:24.047 CCC (GBPUSD,M1) Neg index: NZDUSD TimeCurrent: 2019.01.04 09:40:23 Request: 2019.01.04 09:40:23 TimeLastTick: 2019.01.04 09:40:23.44
2019.01.04 10:40:24.047 CCC (GBPUSD,M1) LastError: 0

Request - это время на которое запрашивается индекс бара

TimeLastTick - это время последнего тика по запрашиваемому символу, MqlTick[] берется сразу после возникновения ошибки.

Какие могут быть причины такого поведения, может кто сталкивался?

 
SemenTalonov:

Странное поведение iBarShift(). Возвращает индекс (-1) при явном флажке exact =false.

Ошибка возникает произвольно в любой момент времени, поймать вручную никак не удается.

При получении отрицательного индекса, код пишет в консоль параметры выполненного запроса и результат

Request - это время на которое запрашивается индекс бара

TimeLastTick - это время последнего тика по запрашиваемому символу, MqlTick[] берется сразу после возникновения ошибки.

Какие могут быть причины такого поведения, может кто сталкивался?

А в документации что написано про exact == false ? 
 
Artyom Trishkin:
А в документации что написано про exact == false ? 

Возвращаемое значение, если бар на указанное время не найден. При значении exact=false iBarShift возвращает индекс ближайшего бара, у которого время открытия меньше указанного (time_open<time). Если такой бар не найден (нет истории раньше указанного времени), то функция вернет -1.

Но история то есть, этож факт. Всё происходит на самом новом (0-ом по таймсерии) баре.

Причина обращения: