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

 
Artyom Trishkin #:

Просто знайте и имейте в виду, что при смене периода или символа графика, старый индикатор удаляется и запускается его новый экземпляр. Новый экземпляр ничего не знает про тот, который был до него.

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

Потому,что кривые руки делали этот индикатор 
 

Кто-нибудь знает, почему не работает return в void OnChartEvent()? Точнее, работает, но лишь наполовину. Он может прервать дальнейшее выполнение условия, но не прерывает сам  OnChartEvent().

 
Vitaly Murlenko #:

Кто-нибудь знает, почему не работает return в void OnChartEvent()? Точнее, работает, но лишь наполовину. Он может прервать дальнейшее выполнение условия, но не прерывает сам  OnChartEvent().

Без кода сказать что-либо конкретное никак. Подозреваю, что "продолжением" работы обработчика является его повторный запуск, отрабатывающий так же, как и первый, как и второй, и третий, и N-ный... Пока условие работает обрывать выполнение внутри обработчика, все его вызовы и работают одинаково по этому условию там, где оно есть, а где его нету, например, в обработке иного значения id, там обработчик и продолжает свою работу

 

Загадка, однако. Смотрите:

Советник к посту приложен

Файлы:
0.mq4  3 kb
 
Vitaly Murlenko #:

Загадка, однако. Смотрите:

// ===================== OnChartEvent() ============================================================
void OnChartEvent(const int id,         // идентификатор события   
  const long& lparam,   // параметр события типа long (Координата Х мыши)
  const double& dparam, // параметр события типа double (Координата Y мыши)
  const string& sparam){ // параметр события типа string (Имя объекта, по которому кликнули)
  
        //--- нажатие левой кнопкой мышки на графике 
  if(id==CHARTEVENT_CLICK){ 
      if(ObjectGetInteger(0,"BtBuyTrLine",OBJPROP_STATE)){
         ObjectSetInteger(0,"BtBuyTrLine",OBJPROP_STATE,false);
         ...Создаете линию
      }
        } 
}       
 

Вот я совсем Вас не понял. Вы что написали? Если был клик по графику и при этом кнопка создания линии нажата, то её отжать и создать линию. Вы, смотрю, меня не поняли. Мне нужно сначала нажать кнопку не создавая при этом линию. Затем сделать клик по графику. И только после этого создать линию и отжать кнопку. Этого не получается, ибо сам клик по кнопке это и нажатие по объекту и нажатие по графику. Почему-то id события клика принимает одновременно ДВА(!) значения.

По логике вещей должно быть так: если щёлкнул по кнопке, то id имеет одно значение, если не по кнопке, то другое. Но щелчок по кнопке (ОДИН ЩЕЛЧОК) выводит на экран сразу ДВА значения id и они разные.

Ща смоделирую код и выложу здесь - попробуете сами.

 
Vitaly Murlenko #:

Вот я совсем Вас не понял. Вы что написали? Если был клик по графику и при этом кнопка создания линии нажата, то её отжать и создать линию. Вы, смотрю, меня не поняли. Мне нужно сначала нажать кнопку не создавая при этом линию. Затем сделать клик по графику. И только после этого создать линию и отжать кнопку. Этого не получается, ибо сам клик по кнопке это и нажатие по объекту и нажатие по графику. Почему-то id события клика принимает одновременно ДВА(!) значения.

По логике вещей должно быть так: если щёлкнул по кнопке, то id имеет одно значение, если не по кнопке, то другое. Но щелчок по кнопке (ОДИН ЩЕЛЧОК) выводит на экран сразу ДВА значения id и они разные.

Ща смоделирую код и выложу здесь - попробуете сами.

Я Вам так и написал.

Нажали кнопку - OBJPROP_STATE==true

затем кликаете в нужном месте и если кнопка нажата отжимаете ее и создаете объект в месте клика.

 
Vitaly Murlenko #:

Вот я совсем Вас не понял. Вы что написали? Если был клик по графику и при этом кнопка создания линии нажата, то её отжать и создать линию. Вы, смотрю, меня не поняли. Мне нужно сначала нажать кнопку не создавая при этом линию. Затем сделать клик по графику. И только после этого создать линию и отжать кнопку. Этого не получается, ибо сам клик по кнопке это и нажатие по объекту и нажатие по графику. Почему-то id события клика принимает одновременно ДВА(!) значения.

По логике вещей должно быть так: если щёлкнул по кнопке, то id имеет одно значение, если не по кнопке, то другое. Но щелчок по кнопке (ОДИН ЩЕЛЧОК) выводит на экран сразу ДВА значения id и они разные.

Ща смоделирую код и выложу здесь - попробуете сами.

Вот пример создания объекта после нажатия кнопки и клика в нужном месте.

Файлы:
0.mq4  7 kb
 
Vitaly Murlenko #:

Загадка, однако. Смотрите:Советник к посту приложен

Посмотрите этот код.

Это не готовое решение, но снимет массу ваших вопросов…

Color Levels
Color Levels
  • www.mql5.com
Color Levels - удобный инструмент для тех, кто применяет в торговле технический анализ и использует такие инструменты, как Трендовая линия и Прямоугольник.
 
Tretyakov Rostyslav #:
Но щелчок по кнопке (ОДИН ЩЕЛЧОК) выводит на экран сразу ДВА значения id и они разные.

Судя по времени события происходят одновременно поэтому два значения