Vladimir Pastushak: Ребят, надоело в андроиде в мт5 постоянно вводить логин и пароль от www.mql5.com Почему они постоянно слетают ???
Смените браузер на тот, который хранит пароли. Например используйте Google Chrome - он подтянет все Ваши сохранённые пароли (конечно если Вы в настольной версии Google Chrome работаете залогинившись в Google аккаунт).
Смените браузер на тот, который хранит пароли. Например используйте Google Chrome - он подтянет все Ваши сохранённые пароли (конечно если Вы в настольной версии Google Chrome работаете залогинившись в Google аккаунт).
Ребят, надоело в андроиде в мт5 постоянно вводить логин и пароль от www.mql5.com
Почему такая весьма полезная функция как ChartXYToTimePrice() такая дорогая по времени выполнения?
Я написал функцию - аналог XYToTimePrice() и она работает гораздо быстрее. До нескольких сотен раз быстрее. Уважаемые разработчики, загляните плиз в свой код. Такое ощущение, что он сделан весьма не оптимально и его можно убыстрить на 2-3 порядка. Код тестового индикатора прилагаю. Просто двигайте мышкой.
void XYToTimePrice(int x,int y,datetime &time,double &price,int id)
{
staticint left_bar; // номер самого левого бара на экранеstaticint WidBar;
staticint Wid;
staticint Hei;
staticdouble y_min;
staticdouble y_max;
staticint PerSec=PeriodSeconds();
staticbool ChartChange=true;
if(id==CHARTEVENT_CHART_CHANGE) { ChartChange=true; return; }
if(ChartChange) // если было изменение чатра после последнего вычисления
{
left_bar=(int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR); // номер самого левого бара на экране
Wid=(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS); // ширина экрана в пикселях
WidBar=(int)ChartGetInteger(0,CHART_WIDTH_IN_BARS); // ширина экрана в барах
Hei=(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS); // высота экрана в пикселях
y_min=ChartGetDouble(0,CHART_PRICE_MIN); // макс. цена на экране
y_max=ChartGetDouble(0,CHART_PRICE_MAX); // мин. цена на экране
}
if(x>Wid || x<0 || y<0 || y>Hei) return; // выходим если точка (x,y) за пределами экрана
price=y_min+(Hei-y)*(y_max-y_min)/Hei;
int NrBar=left_bar-(int)((double)x/((double)Wid/(double)WidBar));
datetime T[1];
if(NrBar>=0) CopyTime(NULL,0,NrBar,1,T);
else { CopyTime(NULL,0,0,1,T); T[0]+=fabs(NrBar)*PerSec;}
ChartChange=false;
time=T[0];
}
Так там же еще и ChartID_in с SubWindow_out в оригинале. Сделайте полный аналог.
Добавить ChartID_in и SubWindow_out совсем не сложно. Но я не преследую цель создать полный аналог, а лишь создал эту функцию, чтоб показать тормознутость ChartXYToTimePrice().
void XYToTimePrice(long chart_id,int x,int y,int& sub_window,datetime &time,double &price,int id)
{
staticint left_bar; // номер самого левого бара на экранеstaticint WidBar;
staticint Wid;
staticint Hei;
staticdouble y_min;
staticdouble y_max;
staticint PerSec=PeriodSeconds();
staticbool ChartChange=true;
if(id==CHARTEVENT_CHART_CHANGE) { ChartChange=true; return; }
if(ChartChange) // если было изменение чатра после последнего вычисления
{
left_bar=(int)ChartGetInteger(chart_id,CHART_FIRST_VISIBLE_BAR, sub_window); // номер самого левого бара на экране
Wid=(int)ChartGetInteger(chart_id,CHART_WIDTH_IN_PIXELS, sub_window); // ширина экрана в пикселях
WidBar=(int)ChartGetInteger(chart_id,CHART_WIDTH_IN_BARS, sub_window); // ширина экрана в барах
Hei=(int)ChartGetInteger(chart_id,CHART_HEIGHT_IN_PIXELS, sub_window); // высота экрана в пикселях
y_min=ChartGetDouble(chart_id,CHART_PRICE_MIN, sub_window); // макс. цена на экране
y_max=ChartGetDouble(chart_id,CHART_PRICE_MAX, sub_window); // мин. цена на экране
}
if(x>Wid || x<0 || y<0 || y>Hei) return; // выходим если точка (x,y) за пределами экрана
price=y_min+(Hei-y)*(y_max-y_min)/Hei;
int NrBar=left_bar-(int)((double)x/((double)Wid/(double)WidBar));
datetime T[1];
if(NrBar>=0) CopyTime(NULL,0,NrBar,1,T);
else { CopyTime(NULL,0,0,1,T); T[0]+=fabs(NrBar)*PerSec;}
ChartChange=false;
time=T[0];
}
но правда для моей функции необходим еще дополнительный параметр id события. И пока эта функция более менее одинаково работает с оригиналом при толщине свечи один пиксель, но можно ее доработать, если есть необходимость.
Добавить ChartID_in и SubWindow_out совсем не сложно. Но я не преследую цель создать полный аналог, а лишь создал эту функцию, чтоб показать тормознутость ChartXYToTimePrice().
но правда для моей функции необходим еще дополнительный параметр id события. И пока эта функция более менее одинаково работает с оригиналом при толщине свечи один пиксель, но можно ее доработать, если есть необходимость.
А еще я заметил странную особенность ChartXYToTimePrice. Время ее выполнения прямо пропорциональна количеству бар на графике.
Это говорит о "странности" алгоритма её вычисления. А именно о циклическом суммировании, что весьма странно для оптимального решения подобной задачи.
Скорость же функции XYToTimePrice одинакова вне зависимости от количества бар.
И, по правде сказать, скорость выполнения функций ChartGetInteger и ChartGetDouble тоже явно невероятно завышена и имеет очень странные особенности. Например функция
ChartGetDouble(0,CHART_PRICE_MAX);
выполняется в 20-100 раз быстрее функции:
ChartGetDouble(0,CHART_PRICE_MIN);
если МAX стоит после MIN:
но если поменять их местами, ситуация будет обратной.
т.е. вроде логично - такая же функция, которая вычисляется повторно, использует уже вычисленные и сохраненные данные из предыдущего вызова функции. Но просто это говорит о том, что происходят какие то сумасшедшие вычисления и создания кучи промежуточных данных и может быть даже массивов для вычисления простого значения double максимальной (или минимальной) цены графика, которая наверняка уже и так сидит уже в какой-нибудь переменной и нужно просто ее взять.
Хотя я и не исключаю, что данный эффект происходит из-за какой-то особенности профилирования и носит фейковый характер. Но тормознутость этих функций не фейковая.
Точно не бред, есть непонимание. Объясните, куда ломится метаедитор, что ему делать в инете?
Ну так не показывайте свое непонимание на людях.
Какое отношение имеет метаедитор и то что он ломится к загрузке терминалом процессора?
Вот Ренат в ветке, у него и спросите куда едитор ломится
Почему они постоянно слетают ???
Ребят, надоело в андроиде в мт5 постоянно вводить логин и пароль от www.mql5.com
Почему они постоянно слетают ???
Смените браузер на тот, который хранит пароли. Например используйте Google Chrome - он подтянет все Ваши сохранённые пароли (конечно если Вы в настольной версии Google Chrome работаете залогинившись в Google аккаунт).
Смените браузер на тот, который хранит пароли. Например используйте Google Chrome - он подтянет все Ваши сохранённые пароли (конечно если Вы в настольной версии Google Chrome работаете залогинившись в Google аккаунт).
Ребят, надоело в андроиде в мт5 постоянно вводить логин и пароль от www.mql5.com
Ребят, надоело в андроиде в мт5 постоянно вводить логин и пароль от www.mql5.com
Почему-то вообще не получается авторизоваться. На сайте всё работает. В MT5 на андроиде не получается:
Почему такая весьма полезная функция как ChartXYToTimePrice() такая дорогая по времени выполнения?
Я написал функцию - аналог XYToTimePrice() и она работает гораздо быстрее. До нескольких сотен раз быстрее.
Уважаемые разработчики, загляните плиз в свой код. Такое ощущение, что он сделан весьма не оптимально и его можно убыстрить на 2-3 порядка.
Код тестового индикатора прилагаю. Просто двигайте мышкой.
Ребят, надоело в андроиде в мт5 постоянно вводить логин и пароль от www.mql5.com
Почему они постоянно слетают ???
У меня тоже спрашивает регулярно, но я не ввожу логин/пароль, а просто жму кнопку Назад, и оказывается, что он залогинен.
Почему такая весьма полезная функция как ChartXYToTimePrice() такая дорогая по времени выполнения?
Я написал функцию - аналог XYToTimePrice() и она работает гораздо быстрее. До нескольких сотен раз быстрее.
Так там же еще и ChartID_in с SubWindow_out в оригинале. Сделайте полный аналог.
Так там же еще и ChartID_in с SubWindow_out в оригинале. Сделайте полный аналог.
Добавить ChartID_in и SubWindow_out совсем не сложно. Но я не преследую цель создать полный аналог, а лишь создал эту функцию, чтоб показать тормознутость ChartXYToTimePrice().
но правда для моей функции необходим еще дополнительный параметр id события. И пока эта функция более менее одинаково работает с оригиналом при толщине свечи один пиксель, но можно ее доработать, если есть необходимость.
Добавить ChartID_in и SubWindow_out совсем не сложно. Но я не преследую цель создать полный аналог, а лишь создал эту функцию, чтоб показать тормознутость ChartXYToTimePrice().
но правда для моей функции необходим еще дополнительный параметр id события. И пока эта функция более менее одинаково работает с оригиналом при толщине свечи один пиксель, но можно ее доработать, если есть необходимость.
А еще я заметил странную особенность ChartXYToTimePrice. Время ее выполнения прямо пропорциональна количеству бар на графике.
Это говорит о "странности" алгоритма её вычисления. А именно о циклическом суммировании, что весьма странно для оптимального решения подобной задачи.
Скорость же функции XYToTimePrice одинакова вне зависимости от количества бар.
И, по правде сказать, скорость выполнения функций ChartGetInteger и ChartGetDouble тоже явно невероятно завышена и имеет очень странные особенности. Например функция
выполняется в 20-100 раз быстрее функции:
если МAX стоит после MIN:
но если поменять их местами, ситуация будет обратной.
т.е. вроде логично - такая же функция, которая вычисляется повторно, использует уже вычисленные и сохраненные данные из предыдущего вызова функции. Но просто это говорит о том, что происходят какие то сумасшедшие вычисления и создания кучи промежуточных данных и может быть даже массивов для вычисления простого значения double максимальной (или минимальной) цены графика, которая наверняка уже и так сидит уже в какой-нибудь переменной и нужно просто ее взять.
Хотя я и не исключаю, что данный эффект происходит из-за какой-то особенности профилирования и носит фейковый характер. Но тормознутость этих функций не фейковая.