Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1461

 
Aleksandr Slavskii #:

Не могу сообразить как сделать.

При наступлении события прокрутки колёсика мыши, выполняется код. 

Колёсико мыши можно прокрутить за раз на несколько щелчков, при этом мы получим не одно событие с dparam = количеству щелчков, а несколько событий с dparam = +/-120.

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

В итоге получается, что колесо мыши уже ник то не крутит, а программа продолжает пересчитываться ещё какое то время.

Колесо мыши прокрутилось в 15:12:22.820  и потом программа выполнялась ещё 5 раз, целых 5 секунд.


Вопрос: как выполнить код программы один раз, а не несколько.

То есть прокрутили колесо на 5 щелчков, delta = dparam / 120 * 5.

Попробуйте так

//+------------------------------------------------------------------+
void OnInit()
  {
   ChartSetInteger(0, CHART_EVENT_MOUSE_WHEEL, 0, true);
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long & lparam, const double & dparam, const string & sparam)
  {
   static double delta = 0;
   bool flag = true;
   if(id == CHARTEVENT_MOUSE_WHEEL)
     {
      //--- какой то код
      delta += dparam / 120;
      Sleep(1000);
      //---
      if(flag)
       {
        Print(delta);
        flag = false;
       }
     }
  }
//+------------------------------------------------------------------+

Я не проверял, если что я не виноват…))) Придётся как-то мутить с флагом… и может придётся код вынести в пользовательскую функцию и там чудить с флагом.

 
Спасибо большое!
 

03 июня опубликовал свой скрипт для MT5 (https://www.mql5.com/ru/code/44732)... до сих пор висит в статусе " проверяется модератором".  Кто знает, как долго ждать проверки?

Скачать бесплатно скрипт 'Quick Change MA (method, period)' от 'NotBuffett' для MetaTrader 5 в MQL5 Code Base
  • www.mql5.com
Скачать бесплатно скрипт 'Quick Change MA (method, period)' от 'NotBuffett' для MetaTrader 5 в MQL5 Code Base
 
Alexey Viktorov #:

Попробуйте так

Я не проверял, если что я не виноват…))) Придётся как-то мутить с флагом… и может придётся код вынести в пользовательскую функцию и там чудить с флагом.

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

В общем получилось сделать, хоть и не совсем айс, но всё же лучше чем было.

//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long & lparam, const double & dparam, const string & sparam)
  {
   static double delta = 0;
   static ulong timeWheel = 0;
   static bool mouse_wheel = false;

   if(id == CHARTEVENT_MOUSE_WHEEL)
     {
      delta += dparam / 120;
      mouse_wheel = true;
      timeWheel = GetMicrosecondCount();
     }

   if(mouse_wheel && GetMicrosecondCount() - timeWheel > 0)
     {
      Print(delta);
      //--- какой то код
      Sleep(1000);
      //---
      delta = 0;
      mouse_wheel = false;
     }
  }
//+------------------------------------------------------------------+
23:48:28.853    test (EURUSD,H1)        1.0
23:48:29.857    test (EURUSD,H1)        1.0
23:48:30.856    test (EURUSD,H1)        4.0
23:48:31.881    test (EURUSD,H1)        2.0
23:48:32.880    test (EURUSD,H1)        4.0
23:48:33.887    test (EURUSD,H1)        11.0
23:48:34.914    test (EURUSD,H1)        15.0
23:48:35.926    test (EURUSD,H1)        7.0
23:48:36.936    test (EURUSD,H1)        9.0
23:48:46.477    test (EURUSD,H1)        6.0
23:48:47.479    test (EURUSD,H1)        -1.0
 
Aleksandr Slavskii #:

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

В общем получилось сделать, хоть и не совсем айс, но всё же лучше чем было.

Из  OnChartEvent тоже можно вызывать пользовательские функции без проблем.

Флаг объявлен на глобальном уровне. Вставить OnTick исключительно для сбрасывания флага никакого труда не составляет и не будет задерживать выполнение кода.

Если флаг открыт, вызвали пользовательскую функцию. Внутри закрыли флаг. В OnTick флаг снова открылся и ждёт следующего исполнения пользовательской функции.

Я думаю это проще чем завязываться на времени исполнения.

 
Alexey Viktorov #:

Из  OnChartEvent тоже можно вызывать пользовательские функции без проблем.

Флаг объявлен на глобальном уровне. Вставить OnTick исключительно для сбрасывания флага никакого труда не составляет и не будет задерживать выполнение кода.

Если флаг открыт, вызвали пользовательскую функцию. Внутри закрыли флаг. В OnTick флаг снова открылся и ждёт следующего исполнения пользовательской функции.

Я думаю это проще чем завязываться на времени исполнения.

Не совсем понял, точнее совсем не понял :)

А если нет тиков, OnTick  вроде как без тиков не срабатывает, что делать?


Собственно я и так из  OnChartEvent вызываю пользовательские функции. Просто проблемно было отследить последний щелчок мыши при прокрутке колёсика.

Задача была задержать выполнение пользовательской функции до момента остановки прокрутки колесика, при этом сосчитать количество щелчков при прокрутке.

В принципе получилось.

 
NotBuffett #:

03 июня опубликовал свой скрипт для MT5 (https://www.mql5.com/ru/code/44732)... до сих пор висит в статусе " проверяется модератором".  Кто знает, как долго ждать проверки?

Только что опубликовал код. Проверка заняла меньше минуты.

Вероятнее всего, вы допустили ошибку при публикации.

 
Aleksandr Slavskii #:

Только что опубликовал код. Проверка заняла меньше минуты.

Вероятнее всего, вы допустили ошибку при публикации.

Попробовал опубликовать снова... и всё тоже самое:

в пункте "5. Тест" пишет "Тестирование завершилось без ошибок"  и предлагает его опубликовать, но при нажатии на кнопку "Опубликовать" выходит ошибка 

404. Такой страницы не существует

В подразделе "Мои коды" теперь висит два кода и на обоих "проверяется модератором".

В общем задам вопрос в общей ветке, может модераторы все же заметят.

 
NotBuffett #:

Попробовал опубликовать снова... и всё тоже самое:

в пункте "5. Тест" пишет "Тестирование завершилось без ошибок"  и предлагает его опубликовать, но при нажатии на кнопку "Опубликовать" выходит ошибка 

404. Такой страницы не существует

В подразделе "Мои коды" теперь висит два кода и на обоих "проверяется модератором".

В общем задам вопрос в общей ветке, может модераторы все же заметят.

Так они и здесь всё видят. Можете не сомневаться.

 

Добрый день!

В тестере стратегий MT5 оптимизировал своего робота на M1, USDJPYrfd.

Результат оптимизации сохранил в set-файле.

Недели через полторы снова попробовал запустить робота в тестере стратегий по тем же самым входным данным. Результат оказался значительно другим.

Чем могут быть вызваны такие значительные расхождения?  Последний запуск был в субботу, а раньше оптимизировал в будний день.

Спасибо за предполагаемый ответ.

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