Новая версия платформы MetaTrader 5 build 3300: Быстрая компиляция и улучшенная навигация по коду в MetaEditor - страница 5

 
Alexey Viktorov #:

Продолжение я решил выделить в отдельное сообщение.

Думаю не помешало-бы в сервисы добавить событийную модель. То-есть добавить такие события как:

  1. загрузка терминала. Запустил терминал — выполнился определённый код
  2. закрытие терминала. Закрыл терминал — выполнился другой код типа OnDeinit
  3. переход из одного окна графика в другое… 
  4. Наверное лучше сказать активация графика и деактивация. 
  5. Смена инструмента в окне графика, 
  6. смена периода графика… 

В общем подобие OnChartEvent

Может кто ещё чего-то предложит.

Мне кажется, с большинством поставленных задач справится сервис.

А если нужно, чтобы событие получали все советники/индикаторы, сервис может слать всем чартам кастомное событие.

 
Andrey Khatimlianskii #:

Мне кажется, с большинством поставленных задач справится сервис.

А если нужно, чтобы событие получали все советники/индикаторы, сервис может слать всем чартам кастомное событие.

Я и говорил о сервисе. Вы же понимаете разницу между постоянной проверкой в замкнутом цикле и реагированием на событие.

Ведь и от OnChartEvent можно отказаться, и от других событийных функций. Но они облегчают написание кода.

Правда я не знаю пока как-бы это можно было использовать, но ведь и OnTester, и OnTrade используют далеко не все даже при наличии таких функций.

Так-что я думаю лучше иметь и не пользоваться, чем не иметь и сетовать на недостаток…

 

Коллеги, добрый день.

Функция 

int  MathRand();

Иногда выдает отрицательный результат. Согласно документации такого быть не должно!

Пришлось  дополнять код функцией 

MathAbs()

Имейте в виду!

 
Alexey Topounov #:

Коллеги, добрый день.

Функция 

Иногда выдает отрицательный результат. Согласно документации такого быть не должно!

Пришлось  дополнять код функцией 

Имейте в виду!

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


При вычислении MathRand, последней операцией является  return(res & 0x7FFF) - результат MathRand не может получится отрицательным
Ошибка воможна из-за оптимизаций, но для проверки оптимизатора нужен код, на котором возникло отрицательное значение.

 

Странно, что есть непрочитанные сообщения (выделены жирным) и в то же время красный счетчик непрочитанных сообщений равен нулю (отсутствует)

Возможно они были прочитаны ранее на другом устройстве, но почему тогда здесь выделены!?
 
Alexey Viktorov #:

Я и говорил о сервисе. Вы же понимаете разницу между постоянной проверкой в замкнутом цикле и реагированием на событие.

Ведь и от OnChartEvent можно отказаться, и от других событийных функций. Но они облегчают написание кода.

Правда я не знаю пока как-бы это можно было использовать, но ведь и OnTester, и OnTrade используют далеко не все даже при наличии таких функций.

Так-что я думаю лучше иметь и не пользоваться, чем не иметь и сетовать на недостаток…

Какая разница, на каком уровне будет реализован этот цикл с проверкой?

Лет 8 назад я бы тоже ждал доработки МТ5, а сейчас осознаю, что, если что-то нужно, то быстрее сделать самому.

 
Andrey Khatimlianskii #:

Какая разница, на каком уровне будет реализован этот цикл с проверкой?

Лет 8 назад я бы тоже ждал доработки МТ5, а сейчас осознаю, что, если что-то нужно, то быстрее сделать самому.

Андрей, я именно так и говорю всем. В частности о сообщением раньше чем то, с которого вы начали мне отвечать. Но, к сожалению, вы прочли только то, что хотели прочесть. А в начале сообщения я написал «Думаю не помешало-бы» значит мне это не очень надо и если будет необходимость я напишу для себя любимого.

Продолжать диалог бессмысленно. 

 
Ilyas #:

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


При вычислении MathRand, последней операцией является  return(res & 0x7FFF) - результат MathRand не может получится отрицательным
Ошибка воможна из-за оптимизаций, но для проверки оптимизатора нужен код, на котором возникло отрицательное значение.

int GetRandomLine(int _min, int _max)
  {
   int num=(int)(_min + (_max-_min)*MathRand()/32767.);
   return(num);
  }

_min - всегда =0,

_max - всегда >0.

тем не менее иногда функция возвращает число <0

исправление кода на :

int GetRandomLine(int _min, int _max)
  {
   int num=(int)(_min + MathAbs((_max-_min)*MathRand()/32767.));
   return(num);
  }

решило проблему.

 
Alexey Topounov #:

_min - всегда =0,

_max - всегда >0.

тем не менее иногда функция возвращает число <0

Тут дело в машинной арифметике - результатом произведения двух положительных чисел - может вполне стать отрицательное:

void OnStart()
{
    Print( 65844*32677 );
}

Результат: -2143382908

 

Уважаемые разработчики!

Просьба исправить Документацию.

Там есть пример скрипта, где, в частности, объявлено:

//--- prepare CLExecute params
   uint  offset[]={};

Так не работает. Нужно:

//--- prepare CLExecute params
   uint  offset[]={0};
Документация по MQL5: Работа с OpenCL / CLProgramCreate
Документация по MQL5: Работа с OpenCL / CLProgramCreate
  • www.mql5.com
CLProgramCreate - Работа с OpenCL - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5