Прошу помощь зала. - страница 5

 
Eugeni Neumoin #:

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

Я так понимаю, синхронизацию данных необходимо проводить перед запуском основного кода программы. А вот провеверку, что возвращают   iTime() и iLow() ....

Если правильно понял Артёма, то:

         datetime time_ = iTime(Symbol(),Period(),20);
         double price_ = iLow(Symbol(),Period(),20);
         if(time_ > 0 && price_ > 0)
         { 
         // далее выполняем то, что планировалось выполнить
         }

С уважением, Владимир.

 
MrBrooklin #:

Если правильно понял Артёма, то:

С уважением, Владимир.

Похоже на то. А если значение будет ==0, то .... вариантов несколько:

1.Прерывать выполнение модуля/подпрограммы...

2. Выход из обработчика события

....

А вот если не синхронизировано с сервером, то можно получить от данных функций значения и >0, но, тем не менее, неправильные. 

 
Eugeni Neumoin #:
А вот если не синхронизировано с сервером, то можно получить от данных функций значения и >0, но, тем не менее, неправильные. 

Так глубоко не копал. Перед проверкой просто делал сброс последней ошибки:

   ResetLastError(); // сбросим значение последней ошибки в ноль

а потом ставил проверку на синхронизированность:

//--- проверка синхронизированности данных по текущему символу между терминалом и сервером
   if(!SymbolIsSynchronized(_Symbol))
     {
      Print("Ошибка синхронизированности данных по текущему символу! ",GetLastError());
      return;
     }

и этого вполне хватало. 

С уважением, Владимир.

 
Eugeni Neumoin #:

Похоже на то. А если значение будет ==0, то .... вариантов несколько:

1.Прерывать выполнение модуля/подпрограммы...

2. Выход из обработчика события

....

А вот если не синхронизировано с сервером, то можно получить от данных функций значения и >0, но, тем не менее, неправильные. 

если с сервером не синхронизировано, значит нет связи

а если нет связи, то и отдать торговый приказ не получится

все на поверхности и все правильно

 
Renat Akhtyamov #:

если с сервером не синхронизировано, значит нет связи

а если нет связи, то и отдать торговый приказ не получится

все на поверхности и все правильно

Рена, как можно проверить синхронность данных при отсутствии связи?
Логика нарушена.

 
Grigori.S.B #:

Рена, как можно проверить синхронность данных при отсутствии связи?
Логика нарушена.

а серверов (адресов/портов/процессов) физически 2.

Один транслирует котировки и данные, второй исполняет приказы и отдаёт их результаты. 

может быть даже 3-й который хранит и отдаёт историю.

Это просто нормальная организация процесса.

Достопамятный FIX - транслирует потоки, его собрат FAST исполняет приказы

---

Ситуации когда котировки идут, а приказы никак и даже наоборот приказы исполняются а котировки подзаткнулись встречаются в реальной жизни. 

 
Maxim Kuznetsov #:

а серверов (адресов/портов/процессов) физически 2.

Один транслирует котировки и данные, второй исполняет приказы и отдаёт их результаты. 

может быть даже 3-й который хранит и отдаёт историю.

Это просто нормальная организация процесса.

Достопамятный FIX - транслирует потоки, его собрат FAST исполняет приказы

---

Ситуации когда котировки идут, а приказы никак и даже наоборот приказы исполняются а котировки подзаткнулись встречаются в реальной жизни. 

Не знал что бывает по нескольку серверов с разделением по функциям. Спасибо за науку.

 

Есть проблема с переводом индикатора с MQL4 на MQL5.


В свое время в 2009 - 2015 годах насоздавал много индикаторов для терминала МТ4. Все они  распространялись в свободном доступе.

Индикаторы, скажем так, не самые простые. В последние годы обращаются с просьбами перевести некоторые индикаторы.

В частности, есть такой индикатор - MZZ9 - выводит зигзаги со старших таймфреймов на текущий таймфрейм. Где-то в 2019 году пытался перевести его на MQL5. Тогда не получилось.

Сейчас опять возобновил попытки. Проверяю. Рачеты делаются - в буферы данные поступают. Но на график зигзаги не выводятся.

Смотрел и документацию, и тексты индикаторов из поставки метатрейдера 5. Перепробовал разные варианты задания параметров зигзагов... и через #property, и динамическое задание.

Не вовыдится. 

Буду благодарен, если кто поможет понять, где я ошибаюсь.

Выкладываю два варианта. Один вариант - версия под МТ4 - одна из последних версий.

И версия под МТ5 - переделана из какой-то более раннней версии идикатора под МТ4. 

Файлы:
MZZ9.mq4  88 kb
MZZ9.mq5  87 kb
 
Eugeni Neumoin #:

Есть проблема с переводом индикатора с MQL4 на MQL5.


В свое время в 2009 - 2015 годах насоздавал много индикаторов для терминала МТ4. Все они  распространялись в свободном доступе.

Индикаторы, скажем так, не самые простые. В последние годы обращаются с просьбами перевести некоторые индикаторы.

В частности, есть такой индикатор - MZZ9 - выводит зигзаги со старших таймфреймов на текущий таймфрейм. Где-то в 2019 году пытался перевести его на MQL5. Тогда не получилось.

Сейчас опять возобновил попытки. Проверяю. Рачеты делаются - в буферы данные поступают. Но на график зигзаги не выводятся.

Смотрел и документацию, и тексты индикаторов из поставки метатрейдера 5. Перепробовал разные варианты задания параметров зигзагов... и через #property, и динамическое задание.

Не вовыдится. 

Буду благодарен, если кто поможет понять, где я ошибаюсь.

Выкладываю два варианта. Один вариант - версия под МТ4 - одна из последних версий.

И версия под МТ5 - переделана из какой-то более раннней версии идикатора под МТ4. 

Инициализация должна быть закончена  return(INIT_SUCCEEDED);

А у вас¿¿¿

// Завершение инициализации
  }
//+------------------------------------------------------------------+
//| Initialization function. Конец.                                  |
//+------------------------------------------------------------------+

Дальше смотреть не буду. Стиль написания как-то не по мне… Тяжело разобраться… Непривычно…

 

Alexey Viktorov #:
Инициализация должна быть закончена  return(INIT_SUCCEEDED);

...  Тяжело разобраться… Непривычно…

Функция инициализации может быть типа void или int. Почему она должна быть закончена  return(INIT_SUCCEEDED); ? И что это дает? Это же индикатор, а не советник. 

К тому же индикатор, как было написано, заполняет индикаторные буферы. То есть инициализация проходит успешно. 

...........

Это одна из самых простых моих программ... Можно сказать, самая простая...

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