Vitaly Murlenko #: Эта функция срабатывает с приходом новой котировки. То есть, на каждом тике. Подумайте. Посмотрите чужие коды простейших индикаторов.
Уже подумал и переделал). Правда не рисует, однако ошибок и предупреждений нет
CHARTEVENT_CLICK — cобытие щелчка мыши на графике;
CHARTEVENT_OBJECT_CLICK — событие щелчка мыши на графическом объекте, принадлежащем графику;
Правильно ли я понимаю -
voidOnChartEvent(constint id, // идентификатор события constlong& lparam, // параметр события типа long constdouble& dparam, // параметр события типа double conststring& sparam) // параметр события типа string
{
//--- нажатие левой кнопкой мышки на графике if(id==CHARTEVENT_CLICK)
{
Print("Координаты щелчка мышки на графике: x = ",lparam," y = ",dparam);
}
//--- нажатие мышкой на графическом объекте if(id==CHARTEVENT_OBJECT_CLICK)
{
Print("Нажатие кнопки мышки на объекте с именем '"+sparam+"'");
}
. . .
здесь 'OnChartEvent()' это такая же функция как OnInit() или OnTimer()? Т.е. внутри OnTimer() {...} клик мышки проверить не получится?
здесь 'OnChartEvent()' это такая же функция как OnInit() или OnTimer()? Т.е. внутри OnTimer() {...} клик мышки проверить не получится?
Да, такая же как и инициализация или таймер. А зачем проверять клик мыши внутри таймера?
Вот Вам Ваш же код. Вставьте его после блока деинициализации в советника.
// ===================== OnChartEvent() ============================================================voidOnChartEvent(constint id, // идентификатор события constlong& lparam, // параметр события типа long (Координата Х мыши)constdouble& dparam, // параметр события типа double (Координата Y мыши)conststring& sparam){ // параметр события типа string (Имя объекта, по которому кликнули)//--- нажатие левой кнопкой мышки на графике if(id==CHARTEVENT_CLICK){
Print("Координаты щелчка мышки на графике: x = ",lparam," y = ",dparam);
}
//--- нажатие мышкой на графическом объекте if(id==CHARTEVENT_OBJECT_CLICK){
Print("Нажатие кнопки мышки на объекте с именем '"+sparam+"'");
}
}
Теперь создайте объект "Прямоугольник" и залейте его цветом. Теперь выделите его. Теперь откройте журнал экспертов и отслеживайте координаты X и Y. Наведите указатель мыши точно в центр прямоугольника. Сделайте клик и посмотрите на координаты в журнале. Теперь из этой же точки зажмите левую кнопку мыши и перетащите прямоугольник на новое место. Как только Вы отпустите левую кнопку мыши, в журнале появится запись но новых координатах. Заметьте, запись появится ПОСЛЕ того, как Вы отпустили левую кнопку мыши. И запись появляется мгновенно. Зачем тут может понадобиться таймер?
Да, такая же как и инициализация или таймер. А зачем проверять клик мыши внутри таймера?
Вот Вам Ваш же код. Вставьте его после блока деинициализации в советника.
Теперь создайте объект "Прямоугольник" и залейте его цветом. Теперь выделите его. Теперь откройте журнал экспертов и отслеживайте координаты X и Y. Наведите указатель мыши точно в центр прямоугольника. Сделайте клик и посмотрите на координаты в журнале. Теперь из этой же точки зажмите левую кнопку мыши и перетащите прямоугольник на новое место. Как только Вы отпустите левую кнопку мыши, в журнале появится запись но новых координатах. Заметьте, запись появится ПОСЛЕ того, как Вы отпустили левую кнопку мыши. И запись появляется мгновенно. Зачем тут может понадобиться таймер?
Написал индикатор, в котором есть один модуль для окна, когда оно активное (т.е. выделено), и другой модуль для окна, когда оно пассивное. Сейчас для того чтобы указать индикатору активное окно вручную мышкой перетаскиваю Label в левую часть окна (во всех других окнах в это время Label-ы других индикаторов находятся в правой части окон). Индикаторы разных окон взаимодействуют между собой. Хотелось бы просто кликнуть мышкой, сделав окно активным, и тем самым включить в индикаторе модуль для активного окна (остальные окна будут неактивными). В индикаторе обновление один раз в секунду, сделано в OnTimer().
По правде говоря я не знаю как работает OnTimer() - это как цикл типа 'for', из которого индикатор выходит только один раз в OnDeinit()? Или происходит чередование OnTimer() => OnChartEvent() => OnTimer() => OnChartEvent() => ... ?
...По правде говоря я не знаю как работает OnTimer() - это как цикл типа 'for', из которого индикатор выходит только один раз в OnDeinit()? Или происходит чередование OnTimer() => OnChartEvent() => OnTimer() => OnChartEvent() => ... ?
К посту прицеплен советник. Посмотрите на деле как работает таймер. Запустите его в режиме реалтайм, но сперва откройте журнал экспертов - он туда новости Вам напишет.
Понятно, что в вышеуказанную функцию). Главный вопрос, что вписывать. Вопрос, может ли эта функция быть "пустой"?
Эта функция срабатывает с приходом новой котировки. То есть, на каждом тике. Подумайте. Посмотрите чужие коды простейших индикаторов.
Уже подумал и переделал). Правда не рисует, однако ошибок и предупреждений нет
Вот оригинал (оригинал рабочий ).
Вот, что получилось у меня
Если не трудно, подскажите, почему не формируется линия?
Существует ли в mql4 возможность воспринимать клик мышки в качестве команды для к-л действия?
Если не трудно, подскажите, почему не формируется линия?
События
Правильно ли я понимаю -
здесь 'OnChartEvent()' это такая же функция как OnInit() или OnTimer()?
Т.е. внутри OnTimer() {...} клик мышки проверить не получится?
Спасибо большое, за помощь.
Правильно ли я понимаю -
здесь 'OnChartEvent()' это такая же функция как OnInit() или OnTimer()?
Т.е. внутри OnTimer() {...} клик мышки проверить не получится?
Да, такая же как и инициализация или таймер. А зачем проверять клик мыши внутри таймера?
Вот Вам Ваш же код. Вставьте его после блока деинициализации в советника.
Теперь создайте объект "Прямоугольник" и залейте его цветом. Теперь выделите его. Теперь откройте журнал экспертов и отслеживайте координаты X и Y. Наведите указатель мыши точно в центр прямоугольника. Сделайте клик и посмотрите на координаты в журнале. Теперь из этой же точки зажмите левую кнопку мыши и перетащите прямоугольник на новое место. Как только Вы отпустите левую кнопку мыши, в журнале появится запись но новых координатах. Заметьте, запись появится ПОСЛЕ того, как Вы отпустили левую кнопку мыши. И запись появляется мгновенно. Зачем тут может понадобиться таймер?
Да, такая же как и инициализация или таймер. А зачем проверять клик мыши внутри таймера?
Вот Вам Ваш же код. Вставьте его после блока деинициализации в советника.
Теперь создайте объект "Прямоугольник" и залейте его цветом. Теперь выделите его. Теперь откройте журнал экспертов и отслеживайте координаты X и Y. Наведите указатель мыши точно в центр прямоугольника. Сделайте клик и посмотрите на координаты в журнале. Теперь из этой же точки зажмите левую кнопку мыши и перетащите прямоугольник на новое место. Как только Вы отпустите левую кнопку мыши, в журнале появится запись но новых координатах. Заметьте, запись появится ПОСЛЕ того, как Вы отпустили левую кнопку мыши. И запись появляется мгновенно. Зачем тут может понадобиться таймер?
Написал индикатор, в котором есть один модуль для окна, когда оно активное (т.е. выделено), и другой модуль для окна, когда оно пассивное.
Сейчас для того чтобы указать индикатору активное окно вручную мышкой перетаскиваю Label в левую часть окна (во всех других окнах в это время Label-ы других индикаторов находятся в правой части окон). Индикаторы разных окон взаимодействуют между собой. Хотелось бы просто кликнуть мышкой, сделав окно активным, и тем самым включить в индикаторе модуль для активного окна (остальные окна будут неактивными).
В индикаторе обновление один раз в секунду, сделано в OnTimer().
По правде говоря я не знаю как работает OnTimer() - это как цикл типа 'for', из которого индикатор выходит только один раз в OnDeinit()?
Или происходит чередование OnTimer() => OnChartEvent() => OnTimer() => OnChartEvent() => ... ?
...По правде говоря я не знаю как работает OnTimer() - это как цикл типа 'for', из которого индикатор выходит только один раз в OnDeinit()?
Или происходит чередование OnTimer() => OnChartEvent() => OnTimer() => OnChartEvent() => ... ?
К посту прицеплен советник. Посмотрите на деле как работает таймер. Запустите его в режиме реалтайм, но сперва откройте журнал экспертов - он туда новости Вам напишет.