Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1265

 
Roni Iron:

Доброго Всем!


Вопрос: как проще всего определить время хая и лоя бара?

Время открытия/закрытия бара неинтересно.

На МТ4.

Спасибо!

делал такое

в КБ выкладывал https://www.mql5.com/ru/code/25897

 

Подскажите пожалуйста, в МТ4 была предопределенная переменная  double Ask, и, как я понимаю,  внутри void OnTick() без принудительного

RereshRates ее значение НЕ менялось.

В МТ5 на смену Ask пришла MqlTick last_tick; SymbolInfoTick(_Symbol,last_tick); double Ask=last_tick.ask;  ее значение всегда обновляется  новым тиком. 

У меня проблема в том, что мне нужно по значению Ask + Х задать координату линии, но в МТ5 я уже не могу так сделать, так как линия меняет свои координаты вслед за изменением значения

Ask=last_tick.ask. Что посоветуете?

Документация по MQL5: Предопределенные переменные
Документация по MQL5: Предопределенные переменные
  • www.mql5.com
Для каждой выполняющейся mql5-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql5-программы на выполнение...
 
WinProject:

Подскажите пожалуйста, в МТ4 была предопределенная переменная  double Ask, и, как я понимаю,  внутри void OnTick() без принудительного

RereshRates ее значение НЕ менялось.

В МТ5 на смену Ask пришла MqlTick last_tick; SymbolInfoTick(_Symbol,last_tick); double Ask=last_tick.ask;  ее значение всегда обновляется  новым тиком. 

У меня проблема в том, что мне нужно по значению Ask + Х задать координату линии, но в МТ5 я уже не могу так сделать, так как линия меняет свои координаты вслед за изменением значения

Ask=last_tick.ask. Что посоветуете?

Как это не менялось? Менялось с каждым тиком. А вот в цикле, да не менялось. Может с этим вы попутали чуток?

Но ведь и в mql5 можно перед циклом определить текущую цену и пока не выйдешь из цикла она не поменяется.

 
Народ, сорри за тупой вопрос. В терминале мт4 он показывает прибыль с учетом комиссий, свопов и тп. В мт5 показывает "голую". Не могу найти, есть ли какая-то настройка, чтобы мт5 показывал как мт4? Или он так не умеет?
 

Как-то можно измерить в пикселях ширину написанного текста в OBJ_TEXT ?

 
Alexey Viktorov:

Как это не менялось? Менялось с каждым тиком. А вот в цикле, да не менялось. Может с этим вы попутали чуток?

Но ведь и в mql5 можно перед циклом определить текущую цену и пока не выйдешь из цикла она не поменяется.

Да, спасибо, мое предположение оказалось неверным, но вопрос немного в другом. Есть код, один и тот же для МТ4 и MT5 :

 void OnTick()
              {
              string S=Symbol();
              double LastAsk= SymbolInfoDouble(S,SYMBOL_ASK);
              ObjectCreate(0,"hLine",OBJ_HLINE,0,0,LastAsk +500*Point());
              }

Вопрос в том, что  в МТ4 созданная линия будет неподвижно находиться на той цене на которой она была создана, а  в МТ5 каждый раз на новом тике линия  будет отрисована на  новом значении LastAsk и ее положение будет меняться вместе с ценой. Как мне этого избежать в МТ5?

 
WinProject:

Да, спасибо, мое предположение оказалось неверным, но вопрос немного в другом. Есть код, один и тот же для МТ4 и MT5 :

Вопрос в том, что  в МТ4 созданная линия будет неподвижно находиться на той цене на которой она была создана, а  в МТ5 каждый раз на новом тике линия  будет отрисована на  новом значении LastAsk и ее положение будет меняться вместе с ценой. Как мне этого избежать в МТ5?

Проверять наличие линии по имени. Нету - создавать. Это азы вообще
 
Artyom Trishkin:
Проверять наличие линии по имени. Нету - создавать. Это азы вообще

Спасибо, что бы еще почитать про эти азы логики программирования? Вроде элементарно, а с нуля тяжело догадаться.  

 if(ObjectFind(0,"hLine"))

Добавил условие и все заработало.

 
WinProject:

Спасибо, что бы еще почитать про эти азы логики программирования? Вроде элементарно, а с нуля тяжело догадаться.  

Добавил условие и все заработало.

внезапно (впрочем как обычно) ObjectGetInteger(0,objectName,OBJPROP_TYPE) работает быстрее. 

ObjectFind - синхронная команда, то есть ожидает полного обновления(и доступности) объектов чарта..Использование чревато существенными задержками.

если работаете со своими объектами (то есть созданными в вашем-же прикладе), то не стоит использовать ObjectFind - вы и так знаете в каком окне создавался объект и что он скорее всего есть и он нужного типа.
Максимум неприятностей - то что пользователь удалил объект или поменял свойство

 
WinProject:

Да, спасибо, мое предположение оказалось неверным, но вопрос немного в другом. Есть код, один и тот же для МТ4 и MT5 :

Вопрос в том, что  в МТ4 созданная линия будет неподвижно находиться на той цене на которой она была создана, а  в МТ5 каждый раз на новом тике линия  будет отрисована на  новом значении LastAsk и ее положение будет меняться вместе с ценой. Как мне этого избежать в МТ5?

Так я не помню, надо проверять, а неохота. Возможно, что в mql4 при попытке создать объект с именем уже существующего, просто возвращалась ошибка, а в mql5 уже не ошибка а модификация параметров если координаты отличаются.

Как сказал Артём — проверяйте наличие объекта

int  ObjectFind( 
   long    chart_id,     // идентификатор графика 
   string  name          // имя объекта 
   );
Причина обращения: