Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5 - страница 117

 
У меня в 1972 перестал работать WebRequest(). Что-то он через билд вырубается... проверил на предыдущем (1971) - работает. И аналогичная функция работает в МТ4. Просьба разобраться.
 
pavlick_:

1. О каком полиморфном типе речь? typeid возвращает type_info, если нужно получить динамический тип из указателя на базовый класс, то static_cast/dynamic_cast. В мкл это доступно, а имя типа можно получить через typename.

dynamic_cast тут ни при чём, речь идёт о получении информации о классе объекта.

typename задумано просто для типа переменной, насколько я понимаю.  Поэтому нужна дополнительная фича.  Да и я же не говорил о том, чтобы портировать typeid в нативном виде.  Речь шла просто об аналогичом функционале.  И хэш как таковой не нужен, достаточно просто порядковый номер класса в системе (в дополнении к имени)

 
fxsaber:

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

...

Спасибо. Посмотрю, когда буду у компьютера.
 
Alexey Navoykov:

dynamic_cast тут ни при чём, речь идёт о получении информации о классе объекта.

typename задумано просто для типа переменной, насколько я понимаю.  Поэтому нужна дополнительная фича.  Да и я же не говорил о том, чтобы портировать typeid в нативном виде.  Речь шла просто об аналогичом функционале.  И хэш как таковой не нужен, достаточно просто порядковый номер класса в системе (в дополнении к имени)

А вас в нынешнем typename ничего не смущает? На мой взгляд, typename реализован просто криво, и это надо править. Нужно определиться - что он возвращает? Статический тип (аналог decltype) или динамический (type_info.name())?
class B{};
class Q:public B{};
void OnStart() {
   Q q;
   B *b = &q;
   Alert( typename(*b) );  // B
}


Видно, что статический, а значит логично разрешить

typename(var) new_var;

но нет, нельзя. В итоге текущий typename является как недо_decltype, так и недо_type_info::name(). Возможно, ему следует выдавать динамический тип (Q), это будет то, что ищите.

Поэтому нужна дополнительная фича

Что кроме имени вы ждёте от typeid?
 
fxsaber:

...

ЗЫ Такой код не заполняет все индикаторные буферы

Отсюда в индикаторных буферах случайные значения.

На графике всё верно отображается. Каким образом вы пришли к таким выводам? Или во время оптимизации заполнение индикаторных буферов осуществляется, как-то иначе? Поэтому результаты не соответствуют?
 
Anatoli Kazharski:
На графике всё верно отображается. Каким образом вы пришли к таким выводам? Или во время оптимизации заполнение индикаторных буферов осуществляется, как-то иначе? Поэтому результаты не соответствуют?

Логика if-else показывает, что индикаторные буферы могут не заполняться заданными значениями. Т.е. там могут быть случайные числа. Отсюда и расхождение вполне вероятно.

 
fxsaber:

Логика if-else показывает, что индикаторные буферы могут не заполняться заданными значениями. Т.е. там могут быть случайные числа. Отсюда и расхождение вполне вероятно.

Нужно изобрести метод, с помощью которого можно точно доказать это. 
 
Anatoli Kazharski:
Нужно изобрести метод, с помощью которого можно точно доказать это. 

Вот Ваша схема

void FillIndicatorBuffers(const int i,const datetime &time[])
  {
//--- Если направление ZZ вверх
   if(Condition1)
     {
      //--- Если новый максимум
      if(Condition2)
        {
          // Заполняем буферы...
        }
      //--- Если направление изменилось (вниз)
      else
        {
         if(Condition3)
           {
            // Заполняем буферы...
           }
        }
     }
//--- Если направление ZZ вниз
   else
     {
      //--- Если новый минимум
      if(Condition4)
        {
          // Заполняем буферы...
        }
      //--- Если направление изменилось (вверх)
      else
        {
         if(Condition5)
           {
            // Заполняем буферы...
           }
        }
     }
  }

А это одна из комбинаций, когда буферы не будут заполнены: Condition1 = true, Condition2 = false, Condition3 = false.

 
fxsaber:

Вот Ваша схема

А это одна из комбинаций, когда буферы не будут заполнены: Condition1 = true, Condition2 = false, Condition3 = false.

Да, текущее значение при увеличении буферов нужно принудительно обнулять, если все условия не исполняются. Я сообщу о результате, когда внесу исправления и проведу тесты.
 
В 71 или 72 билде поломали что-то в оптимизаторе — возвращает не то, что тестер. К сожалению, собирать минимальный воспроизводимый пример времени нет.