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

 
Artyom Trishkin:

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

А разве вопрос был в том, чтобы выбрать на каких тайм фреймах отображать объект, а на каких нет?

Допустим на графике есть торговая панель. Затем я вручную строю объекты (торговые уровни, вертикальные линии, прямоугольники).

И все, что я строю вручную, накладывается на торговую панель. Все объекты находятся на одном тайм фрейме.

И как в этом случае поможет "рекомендуемый разработчиками метод" ?

 
Aliaksei Karalkou:
Здравствуйте. 

Хочу индикатор АТР перенести на график цен. Но никак не соображу как именно. Так что бы показывал максимальное движение в волатильности от средней линии того же периода. Если есть у кого код, спасибо Вам, если поделитесь .

https://www.mql5.com/ru/code/23304

Multi_ATR_Bands
Multi_ATR_Bands
  • www.mql5.com
Индикатор Three ATR Bands with multiple selection
 
Artyom Trishkin:

Свойство OBJPROP_TIMEFRAMES:

OBJ_NO_PERIODS - невидимый на всех периодах,

OBJ_ALL_PERIODS - видимый на всех периодах

Спасибо.

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

Теперь объект остаётся визуально выше всех остальных.

 
Maksym Mudrakov:

А разве вопрос был в том, чтобы выбрать на каких тайм фреймах отображать объект, а на каких нет?

Допустим на графике есть торговая панель. Затем я вручную строю объекты (торговые уровни, вертикальные линии, прямоугольники).

И все, что я строю вручную, накладывается на торговую панель. Все объекты находятся на одном тайм фрейме.

И как в этом случае поможет "рекомендуемый разработчиками метод" ?

Я принял к сведению Ваше предложение, но у меня при удалении и повторной отрисовке объекта происходило его мерцание.

Метод, предложенный Artyom Trishkin, на самом деле работает!

Теперь перерисовки и мерцания объекта нет и он визуально сохраняется выше всех.

Кстати, в моём случае это тоже торговая панель, которую загораживали стрелки от открытых и закрытых торговых операций.

Как я решил проблему:

// Глобальное объявление
int last_tick_objects = 0;                // количество объектов на прошлом тике
// имена графических объектов:
string tp_rctngl = "TP Rectangle";
string sl_rctngl = "SL Rectangle";
string vol_rctngl = "Volume Rectangle";

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   long cid = ChartID();
   if(ObjectsTotal() != last_tick_objects)  // количество объектов поменялось
     {
      last_tick_objects = ObjectsTotal();   // запоминаем новое количество объектов
      // выводим на передний план объекты: tp_rctngl, sl_rctngl, vol_rctngl
      if(ObjectFind(cid, tp_rctngl) > -1) // объект существует
        {
         ObjectSetInteger(cid, tp_rctngl, OBJPROP_TIMEFRAMES, OBJ_NO_PERIODS);  // делаем невидимым на всех таймах
         ObjectSetInteger(cid, tp_rctngl, OBJPROP_TIMEFRAMES, OBJ_ALL_PERIODS); // делаем видимым на всех таймах
        }
      //---
      if(ObjectFind(cid, sl_rctngl) > -1) // объект существует
        {
         ObjectSetInteger(cid, sl_rctngl, OBJPROP_TIMEFRAMES, OBJ_NO_PERIODS);  // делаем невидимым на всех таймах
         ObjectSetInteger(cid, sl_rctngl, OBJPROP_TIMEFRAMES, OBJ_ALL_PERIODS); // делаем видимым на всех таймах
        }
      //---
      if(ObjectFind(cid, vol_rctngl) > -1) // объект существует
        {
         ObjectSetInteger(cid, vol_rctngl, OBJPROP_TIMEFRAMES, OBJ_NO_PERIODS); // делаем невидимым на всех таймах
         ObjectSetInteger(cid, vol_rctngl, OBJPROP_TIMEFRAMES, OBJ_ALL_PERIODS);// делаем видимым на всех таймах
        }
      ChartRedraw(cid);// перерисовка графика для применения изменений
     }
  }
//+------------------------------------------------------------------+
 

Пишу советник, которому время от времени нужно проводить несколько длительных циклов разных перерасчётов (например раз в 12, 24, 48 часов). Каждый такой перерасчёт длится 1,5-2 часа на одном ядре (то есть в одном потоке) - и само собой приостанавливают обработку новых тиков и торговлю данным советником

... такие расчёты можно делегировать другому советнику в другом потоке и наладить передачу итоговых данных между советниками с помощью функции EventChartCustom и обработчиком событий OnChartEvent


Но мне нужно иметь возможность опубликовать советник в маркете - поэтому делегирование перерасчётов и перерасчёты в одном потоке не подходят. Есть ли аналог библиотеки thread из C++ или какой-то другой вариант для реализации такого специфического советника в MQL5? (я вводил в поисковик на сайте слово "thread" с фильтром "Документация", и ничего нет)

 
Oleg Remizov:

Я принял к сведению Ваше предложение, но у меня при удалении и повторной отрисовке объекта происходило его мерцание.

Метод, предложенный Artyom Trishkin, на самом деле работает!

Теперь перерисовки и мерцания объекта нет и он визуально сохраняется выше всех.

Кстати, в моём случае это тоже торговая панель, которую загораживали стрелки от открытых и закрытых торговых операций.

Как я решил проблему:

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

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

 
Maksym Mudrakov:

А разве вопрос был в том, чтобы выбрать на каких тайм фреймах отображать объект, а на каких нет?

Допустим на графике есть торговая панель. Затем я вручную строю объекты (торговые уровни, вертикальные линии, прямоугольники).

И все, что я строю вручную, накладывается на торговую панель. Все объекты находятся на одном тайм фрейме.

И как в этом случае поможет "рекомендуемый разработчиками метод" ?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

Oleg Remizov, 2020.04.26 14:44

Спасибо.

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

Теперь объект остаётся визуально выше всех остальных.


 
Maksym Mudrakov:

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

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

Метод, как единственный самый приемлемый, рекомендовал Слава. Можете поискать в его сообщениях - это в профиле - публикации/все сообщения.

И, да, а чем же ваш метод пересоздания всех объектов поможет в той же ситуации?

 
Artyom Trishkin:

Метод, как единственный самый приемлемый, рекомендовал Слава. Можете поискать в его сообщениях - это в профиле - публикации/все сообщения.

И, да, а чем же ваш метод пересоздания всех объектов поможет в той же ситуации?

я бы сделал следующим образом, со сторонним индикатором нужно отслеживать ObjectsTotal(), и если наибольший индекс объекта моей панели меньше ObjectsTotal()-1, то пересоздаем панель. Нужно сначала поробовать ваш метод во всевозможных ситуациях, но пока что я не вижу большей свободы при использовании Видимости объектов.
 
Artyom Trishkin:

Я не могу на строить Meta Trader 5
Причина обращения: