Я делал заказ, нашел баг с CHARTEVENT_OBJECT_DRAG (объект который тащили - типа не существует, его свойства нельзя изменить из обработчика событий)
спросил есть ли этот баг в новом билде - ответили что повторить не смогли.
я заказчику и пишу - чуть-чуть потерпеть надо, всё будет красиво в новом билде.
а оказалось не очень((
В общем, проверил на 711 билде в MT4 и на 986 билде в MT5. Работает и там и там. Ты пишешь, что у тебя и в предыдущих билдах не работало и сейчас, в последнем, не работает.
функция ChartHeightInPixelsGet должна вернуть высоту графика иникатора.
По чему то возвращает 0 (но без ошибок GetLastError()) при первом использовании для индикатора в подокне.
Далее при переключении тф все работает нормально и возвращает нужное значение.
Тоже в MT4?
Да, есть такая проблема. Но можно решить. Проявляется только при первом вызове, а далее, если вызвать ещё раз, например из таймера, то всё нормально.
Если же нужно обязательно получить высоту подокна при первом же запросе, то нужно принудительно в OnInit() указать высоту подокна индикатора.
//---
P.S. Но при таком подходе не получается потом изменять высоту подокна вручную. В таком случае нужно разблокировать это "недоразумение". Это делается так. При первом заходе в функцию OnCalculate() нужно указать, например, нулевую высоту для подокна. Подокно останется таким же по высоте, но его уже можно будет изменять вручную.
при открытии нового графика возвращается хендл этого графика. что бы показать нужный график сверху делаем так, соответственно нужно знать хендл
ну и естественно зная значение этого свойства будем знать, поверх всех окон график или нет
•CHART_BRING_TO_TOP – показывает график поверх всех других.
//+------------------------------------------------------------------+//| Отправка терминалу команды на показ графика поверх всех других. |//+------------------------------------------------------------------+bool ChartBringToTop(constlong chart_ID=0)
{
//--- сбросим значение ошибкиResetLastError();
//--- покажем график поверх всех другихif(!ChartSetInteger(chart_ID,CHART_BRING_TO_TOP,0,true))
{
//--- выведем сообщение об ошибке в журнал "Эксперты"Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- успешное выполнениеreturn(true);
}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Я делал заказ, нашел баг с CHARTEVENT_OBJECT_DRAG (объект который тащили - типа не существует, его свойства нельзя изменить из обработчика событий)
спросил есть ли этот баг в новом билде - ответили что повторить не смогли.
я заказчику и пишу - чуть-чуть потерпеть надо, всё будет красиво в новом билде.
а оказалось не очень((
Попробуй вот этот код. Объект (любой, где можно изменить цвет) создай вручную:
Я делал заказ, нашел баг с CHARTEVENT_OBJECT_DRAG (объект который тащили - типа не существует, его свойства нельзя изменить из обработчика событий)
спросил есть ли этот баг в новом билде - ответили что повторить не смогли.
я заказчику и пишу - чуть-чуть потерпеть надо, всё будет красиво в новом билде.
а оказалось не очень((
В общем, проверил на 711 билде в MT4 и на 986 билде в MT5. Работает и там и там. Ты пишешь, что у тебя и в предыдущих билдах не работало и сейчас, в последнем, не работает.
А у заказчика тоже, как я понял, не работает?
Вот видео из MT4:
Вот видео из MT4:
А чем видео записывали? Себе хочу такое в лукоморье.
в 711 не работает, вот видео (не очень красивое но суть в том что не работает и .)
Касаемо заказчика - у него тоже не работало в 670 билде, касаемо новых билдов - он на связь не выходил еще, хотя я отписался.
Сейчас вот еще одна проблема обнаружилась:
#property strict #property indicator_separate_window int wind_numb = 0; int OnInit() { wind_numb = WindowNumber(); return(INIT_SUCCEEDED); } 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[]) { Print ("wind = " + string(wind_numb) + " Heigth = " + string(ChartHeightInPixelsGet(0, wind_numb))); return(rates_total); } //+------------------------------------------------------------------+ int ChartHeightInPixelsGet(const long chart_ID=0,const int sub_window=0) { long result=-1; ResetLastError(); if(!ChartGetInteger(chart_ID,CHART_HEIGHT_IN_PIXELS,sub_window,result)) { Print(__FUNCTION__+", Error Code = ",GetLastError()); } return((int)result); } //+------------------------------------------------------------------+ int WindowNumber( long chartID = 0, string short_name = "" ) { int window = -1; if (( ENUM_PROGRAM_TYPE ) MQLInfoInteger( MQL_PROGRAM_TYPE ) == PROGRAM_INDICATOR ) window = ChartWindowFind(); else { window = ChartWindowFind( 0, short_name ); if ( window == -1 ) Print( __FUNCTION__ + "(): Error = ", GetLastError() ); } return( window ); }функция ChartHeightInPixelsGet должна вернуть высоту графика иникатора.
По чему то возвращает 0 (но без ошибок GetLastError()) при первом использовании для индикатора в подокне.
Далее при переключении тф все работает нормально и возвращает нужное значение.
в 711 не работает, вот видео (не очень красивое но суть в том что не работает и .)
Касаемо заказчика - у него тоже не работало в 670 билде, касаемо новых билдов - он на связь не выходил еще, хотя я отписался.
Да, на видео видна проблема.
Скачал терминал от MMCIS и убедился, что у меня и в нём работает нормально. )))
Может попробуй переустановить терминал? Мало ли.
Сейчас вот еще одна проблема обнаружилась:
...
функция ChartHeightInPixelsGet должна вернуть высоту графика иникатора.
По чему то возвращает 0 (но без ошибок GetLastError()) при первом использовании для индикатора в подокне.
Далее при переключении тф все работает нормально и возвращает нужное значение.
Тоже в MT4?
Да, есть такая проблема. Но можно решить. Проявляется только при первом вызове, а далее, если вызвать ещё раз, например из таймера, то всё нормально.
Если же нужно обязательно получить высоту подокна при первом же запросе, то нужно принудительно в OnInit() указать высоту подокна индикатора.
//---
P.S. Но при таком подходе не получается потом изменять высоту подокна вручную. В таком случае нужно разблокировать это "недоразумение". Это делается так. При первом заходе в функцию OnCalculate() нужно указать, например, нулевую высоту для подокна. Подокно останется таким же по высоте, но его уже можно будет изменять вручную.
Вот пример (только для MT4):
//---
Но это всё костыль конечно. Нужно исправлять. ))
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
ALXIMIKS, 2014.09.29 22:28
Вернулся к написанию кода советника, который открывает 2 новых чарта
при открытии нового чарта происходит изменения видимого чарта (просто говоря - кидает на тот чарт, что только что открылся)
я же хочу вернуться туда, где я был.
Как узнать ChartID или хендл активного в данный момент чарта, а не там где сидит советник??? (ChartID() не подходит)
Что-то пробовал наугадать с API (GetForegroundWindow, GetWindow, GetTopWindow, GetActiveWindow, GetAncestor) но все безуспешно
Второй вариант решения проблемы в целом - создания чарта с API но без BringWindowToTop, но тоже глухой лес....
Помогите кто в теме. Спасибо.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
sanyooooook, 2014.09.30 00:08
при открытии нового графика возвращается хендл этого графика. что бы показать нужный график сверху делаем так, соответственно нужно знать хендлну и естественно зная значение этого свойства будем знать, поверх всех окон график или нет