2) начинается "счетчик" координат с верхнего левого угла, можно ли как то изменить?
Попробуйте ENUM_BASE_CORNER
3) если свернуть - обзор рынка(табло то что слева), тогда справа соответственно координаты поменяются.
как быть?
Спасибо
Можно запоминать и затем сравнивать ширину графика и менять в кнопке координаты на соответствующую величину. Либо угол привязки попробовать изменить ...
мужики подскажите
#property copyright "Copyright 2021" #property link "http://www.ya.biz" #property version "1.00" #property strict #property indicator_chart_window int i1=0,i2=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping EventSetMillisecondTimer(100); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void PutRect(string name,datetime t1,double p1,datetime t2,double p2,color clr) { ObjectDelete(0,name); //--- создадим прямоугольник по заданным координатам ObjectCreate(0,name,OBJ_RECTANGLE,0,t1,p1,t2,p2); //--- установим цвет прямоугольника ObjectSetInteger(0,name,OBJPROP_COLOR,clr); } //+------------------------------------------------------------------+ void OnChartEvent(const int id, // идентификатор события const long& lparam, // параметр события типа long const double& dparam, // параметр события типа double const string& sparam) // параметр события типа string { //--- нажатие левой кнопкой мышки на графике if(id==CHARTEVENT_CLICK) { OnTimer(); if(i1-i2<5 && lparam>1160) PutRect("R",Time[4],Close[4],Time[10],Close[10],Red); Comment("\n Координаты щелчка мышки на графике: x = ",lparam," y = ",dparam, "\n Time 1: ",i1, "\n Time 2: ",i2); i2=i1; } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnTimer() { i1+=1; } //+------------------------------------------------------------------+
ВОТ КОД: но как я понял от размеров монитора зависит. Да и вообще не правильно так, как правильно подскажите
зачем вам вообще OBJECT ?
сформулируйте задачу иначе:
вы хотите ловить клик на графике и если тот попал в координатную шкалу (или около) то реагировать - вызывать меню
размеры окна и параметры шкалы вы знаете или можете получить из ChartGetXXX,перемещение мыша получаете через ChartEvent. С кликами сложность - помнится что MT отправляет события по отпусканию кнопки. Значит чуть-чуть таймера - опрос состояний
ВОТ КОД: но как я понял от размеров монитора зависит. Да и вообще не правильно так, как правильно подскажите
Когда-же вы научитесь читать документацию? Вы хотите что-то сделать с графиком, а решение ищете в таймере… Жесть…
long chart_ID = ChartID(); /*******************Expert initialization function*******************/ int OnInit() { ChartSetInteger(chart_ID, CHART_EVENT_MOUSE_MOVE, 0, true); return(INIT_SUCCEEDED); }/******************************************************************/ /************************Expert tick function************************/ void OnTick() { }/******************************************************************/ /********************************************************************\ | ChartEvent function | \********************************************************************/ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { if(id == CHARTEVENT_CLICK) { long chartWidth = (long)ChartGetInteger(chart_ID, CHART_WIDTH_IN_PIXELS, 0); Comment("id ", id, "\n", "chartWidth ", chartWidth, "\n", "lparam ", lparam, "\n", "dparam ", dparam, "\n", ""); } }/******************************************************************/
Вот вам ширина графика. Соответственно если координаты мыши больше ширины, значит это уже шкала цены. Высота это dparam — можно ограничить…
Не помешает проверить отображение шкалы цены CHART_SHOW_PRICE_SCALE и если не отображается включить её.
Когда-же вы научитесь читать документацию? Вы хотите что-то сделать с графиком, а решение ищете в таймере… Жесть…
Вот вам ширина графика. Соответственно если координаты мыши больше ширины, значит это уже шкала цены. Высота это dparam — можно ограничить…
Не помешает проверить отображение шкалы цены CHART_SHOW_PRICE_SCALE и если не отображается включить её.
Спасибо за ответ, но я не искал решения в таймере, это был пример, что по нажатию на нужный мне угол, происходит действие
Спасибо что подсказали(прямым текстом сказали) как сделать. Всё получилось
Проблема была в том что я не знал как узнать ширину. Спасибо
Спасибо за ответ, но я не искал решения в таймере, это был пример, что по нажатию на нужный мне угол, происходит действие
Спасибо что подсказали(прямым текстом сказали) как сделать. Всё получилось
Проблема была в том что я не знал как узнать ширину. Спасибо

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Чтобы если я щелкнул в правый верхний угол (по шкале цены) появилась менюшка, проблема заключается в:
1) я не знаю есть ли разница что у всех разные мониторы, значит и координаты будут разные?
2) начинается "счетчик" координат с верхнего левого угла, можно ли как то изменить?
Ловлю координаты так:
3) если свернуть - обзор рынка(табло то что слева), тогда справа соответственно координаты поменяются.
как быть?
Спасибо