Новая версия платформы MetaTrader 5 build 1880: Расчет полной истории синтетических инструментов - страница 3

 

У одного меня iHigh практически всегда возвращает 0 ?

вот пример запроса одной и той же 3-й свечи. GetLastError() кажит 0

32-бит ПК


iHigh

 

а вот вам на сладенькое

        Print("HighLevel=",HighLevel,"  LowLevel=",LowLevel);

                

        if(LowLevel>0 && HighLevel>0){       

          Print("Всё нормально.");         

        }else{

          Print("Полный бред. HighLevel=",HighLevel," LowLevel=",LowLevel);

        }

результат

бред

похоже опять косяк с компилятором на 32-йке.На 64 всё ок. Уже не первый раз. Могло ли это затронуть и MT4?

Имею сейчас в МТ4 такое же непонятное поведение одного и того же кода на разных машинах..

Проект направлен в маркет и возникли баги у вашего проверяющего, в частности с выделением памяти о которой я недавно писал ,

а вы посоветовали мне до этого прикупить ещё планку памяти :), мы это же посоветовал админу в маркете, но боюсь это не пройдёт. :)

P.S. Не имеет значения где компилировать код(32 или 64 бит). На 32-битной машине он работает непредсказуемо. Главный вопрос: не затронуло ли это МТ4 ?

 
Aidas Geguzis:

Откройте пожалуйста заявку  #1901201. Там на скриншоте очень явно видно. Один график по AUDNZD, а рядом другой график по синтетику с одинаковыми таймфреймами. При сравнении графиков по временной шкале видно несовпадение баров.

Вот. У нас нет таких визуальных эффектов.

Мы тут подготовили эксперт для Вашего случая. На каждом новом баре синтетического инструмента распечатываются предыдущие и текущие бары формульных инструментов и время последних котировок формульных инструментов. Запустите этого эксперта у себя на своей синтетике, посмотрите, а потом покажите строчки логов с ошибками, чтобы мы смогли сформулировать условия проверок. После этого будем двигаться дальше

Файлы:
 
Stanislav Dray:

У одного меня iHigh практически всегда возвращает 0 ?

вот пример запроса одной и той же 3-й свечи. GetLastError() кажит 0

32-бит ПК



Какой номер ошибки возвращает GetLastError() после вызова IHigh?

Приведите здесь Ваш код вызова iHigh

 
Stanislav Dray:

а вот вам на сладенькое

        Print("HighLevel=",HighLevel,"  LowLevel=",LowLevel);

                

        if(LowLevel>0 && HighLevel>0){       

          Print("Всё нормально.");         

        }else{

          Print("Полный бред. HighLevel=",HighLevel," LowLevel=",LowLevel);

        }

результат

похоже опять косяк с компилятором на 32-йке.На 64 всё ок. Уже не первый раз. Могло ли это затронуть и MT4?

Имею сейчас в МТ4 такое же непонятное поведение одного и того же кода на разных машинах..

Проект направлен в маркет и возникли баги у вашего проверяющего, в частности с выделением памяти о которой я недавно писал ,

а вы посоветовали мне до этого прикупить ещё планку памяти :), мы это же посоветовал админу в маркете, но боюсь это не пройдёт. :)

P.S. Не имеет значения где компилировать код(32 или 64 бит). На 32-битной машине он работает непредсказуемо. Главный вопрос: не затронуло ли это МТ4 ?

Спасибо за сообщение.

Предоставьте пожалуйста для изучения код, на котором воспроизводится описанное Вами поведение.


UPD: Вместо кода, можете предоставить EX5 файл, на котором воспроизводится данное поведение
 
Slava:

Вот. У нас нет таких визуальных эффектов.

Мы тут подготовили эксперт для Вашего случая. На каждом новом баре синтетического инструмента распечатываются предыдущие и текущие бары формульных инструментов и время последних котировок формульных инструментов. Запустите этого эксперта у себя на своей синтетике, посмотрите, а потом покажите строчки логов с ошибками, чтобы мы смогли сформулировать условия проверок. После этого будем двигаться дальше

Так как в терминале запущенно несколько синтетических инструментов, как запускать Ваш эксперт? На каждом синтетике?

 
Ilyas:

Спасибо за сообщение.

Предоставьте пожалуйста для изучения код, на котором воспроизводится описанное Вами поведение.


UPD: Вместо кода, можете предоставить EX5 файл, на котором воспроизводится данное поведение
//+------------------------------------------------------------------+
//|                                                 MQL32_BUG_Ea.mq5 |
//|                                   Copyright 2018, Stanislav Dray |
//|                               https://www.mql5.com/ru/users/fan9 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Stanislav Dray"
#property link      "https://www.mql5.com/ru/users/fan9"
#property version   "1.00"
#include <Trade\Trade.mqh>
CSymbolInfo Symb;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+

int OnInit()
  {
//---
   
  if(!Symb.Name(_Symbol)){
    Alert("Инициализация символа "+_Symbol+" закончилась неудачно..");  
    return(INIT_FAILED);
  }

  
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

    static double HighLevel=0.0;
    static double LowLevel=0.0;
    static datetime LastCandleTime=0;
 
       
    if(!Symb.RefreshRates() || Symb.Ask()<=0 || Symb.Bid()<=0){
      return;
    }
    
    
   ResetLastError(); 
   if(iTime(Symb.Name(),PERIOD_CURRENT,0)!=LastCandleTime){
   
     int val_index=iHighest(Symb.Name(),PERIOD_CURRENT,MODE_HIGH,10,1);
     
     if(val_index!=-1)
     {  
       HighLevel=iHigh(Symb.Name(),PERIOD_CURRENT,val_index);
       Print("iHigh вернул ",HighLevel," вроде всё пучком");
     }else{
       HighLevel=0;
     }
             
     val_index=iLowest(Symb.Name(),PERIOD_CURRENT,MODE_LOW,10,1);
     
     if(val_index!=-1){  
       LowLevel=iLow(Symb.Name(),PERIOD_CURRENT,val_index); 
     }else{
       LowLevel=0;
     }
     
     Print("HighLevel=",HighLevel," (шо серьёзно?)  LowLevel=",LowLevel, "  LastError=",GetLastError());
     HighLevel=1.0;//Тупо присваиваем 1 патамушо он нулевой 
            
     if(LowLevel>0 && HighLevel>0){       
       Print("Всё нормально.");         
     }else{
       Print("Полный бред. HighLevel=",HighLevel," LowLevel=",LowLevel);
     }
     
     LastCandleTime=iTime(Symb.Name(),PERIOD_CURRENT,0);          
   }
            
   
}

Результат

резульат

 
Stanislav Dray:

Результат

Ну и как теперь верить правильности выполнения своего кода?!

 
fxsaber:

Ну и как теперь верить правильности выполнения своего кода?!

так ни как, но это не самое страшное после введения автоматической валидации в маркете :)

 
Stanislav Dray:

так ни как, но это не самое страшное после введения автоматической валидации в маркете :)

Как долго локализовывали этот апокалипсисбаг? И какие шаги сподвигли начать разбираться?

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