обнаружил, что все время возвращается ошибка 4051 при использовании кода:
ChartTimePriceToXY(0,0,ObjectGetInteger(0,"targetmouseline",OBJPROP_TIME1),ObjectGetDouble(0,"targetmouseline",OBJPROP_PRICE1),newx,newy);
Недавно порешил проблему с масштабированием заменой ChartRedraw на задержку в 3 сек по таймеру - попробуйте, может и вам поможет
Спасибо, но проблема немного не в том. я не использую таймер, только по событию на графике.
проблему нашел только в терминале МТ4 - в МТ5 все нормально работает, написал в сервисдеск
Vladislav Andruschenko:
И я о том же - пока пытасло как белый человек использовать (ChartRedraw + OnChartEvent), получал для построения фигуры дефективные координаты. А когда как абизяна вставил тупую задержку в 3 сек по OnTimer, получил нормально отмасштабированные координаты
проблема немного не в том. я не использую таймер, только по событию на графике.
:) спасибо попробую.
Vladislav Andruschenko:
Вы не корректно наносите объекты, не учитываете точку привязки, ну а второе и самое важное, эта функция ассинхронная и разработчик менять ее не будет.
Konstantin Karpov:
Вы не корректно наносите объекты, не учитываете точку привязки, ну а второе и самое важное, эта функция ассинхронная и разработчик менять ее не будет.
Как можно неправильно нанести линию ? Проблема в функции мт4. В мт5 все ок. Менять ее не надо ее надо правильно сделать.
Вы не корректно наносите объекты, не учитываете точку привязки, ну а второе и самое важное, эта функция ассинхронная и разработчик менять ее не будет.
Вот код советника в котором есть обработка события OnChartEvent:
//+------------------------------------------------------------------+ //| Test.mq4 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- int newx,newy; ChartTimePriceToXY(0,0,ObjectGetInteger(0,"targetmouseline",OBJPROP_TIME1),ObjectGetDouble(0,"targetmouseline",OBJPROP_PRICE1),newx,newy); Comment(TimeCurrent()+"=newx="+newx+" newy="+newy); } //+------------------------------------------------------------------+
изменяется как координата Х, так и координата Y.
При использовании этой функции нужно следить, чтобы объект был в пределах видимости экрана. Иначе функция возвращает ошибку. Или, чтобы не заморачиваться, можно просто по факту обрабатывать полученную ошибку после преобразования. Хотя, на мой взгляд, лучше проверить нахождение передаваемых цены и времени в пределах экрана перед вызовом функции, чтобы избежать лишних вычислений.
Игорь Герасько:
При использовании этой функции нужно следить, чтобы объект был в пределах видимости экрана. Иначе функция возвращает ошибку. Или, чтобы не заморачиваться, можно просто по факту обрабатывать полученную ошибку после преобразования. Хотя, на мой взгляд, лучше проверить нахождение передаваемых цены и времени в пределах экрана перед вызовом функции, чтобы избежать лишних вычислений.
Совершенно правильно. А ещё - функция корректно отрабатывает и в МТ4 и в МТ5. Бывают, конечно, пограничные случаи, но это относится к особенностям устройства операционной системы Windows: изменение размера окна при сворачивании/раскрытии.
При использовании этой функции нужно следить, чтобы объект был в пределах видимости экрана. Иначе функция возвращает ошибку. Или, чтобы не заморачиваться, можно просто по факту обрабатывать полученную ошибку после преобразования. Хотя, на мой взгляд, лучше проверить нахождение передаваемых цены и времени в пределах экрана перед вызовом функции, чтобы избежать лишних вычислений.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Всем привет,
проблему нашел только в терминале МТ4 - в МТ5 все нормально работает, написал в сервисдескесть на графике линия, эта линия имеет координаты - Цена
при изменении масштаба графика по идее цена не изменяется, но изменяется координаты Y данной линии.
для этого есть функция ChartTimePriceToXY - которая преобразует цену в координаты Y
так вот мне кажется она не работает, ибо код:
при нанесении линии на график - меняется newY а вот при изменении масштаба - эта цифра не меняется
при чем в нижнем положении графика эта цифра равна 110
а в верхнем цифра равна 150
Кто работал с этой функцией? были ли у Вас траблы?