Ошибки, баги, вопросы - страница 2265

 
Nikolai Semko:
Да, можно. По хендлу и из тела советника.
Но это тема отдельной статьи. 

В таком случае это можно расценивать как "Нет простого решения". Если так, то будьте более сдержаны в своих комментариях, если нет простого и эффективного кода.

 
Nikolai Semko:

Не дезинформируйте людей пожалуйста

На анимации хорошо видно проскакивание красных небольших квадратов. Пытался от них избавиться когда-то - не получилось.

 
CustomTicksReplace(Name, 0, LONG_MAX, Ticks);

Успешное выполнение этой функции занимает минуту при 24 млн тиков. Возможно ли ускорить?

 
Vladimir Karputov:

В таком случае это можно расценивать как "Нет простого решения". Если так, то будьте более сдержаны в своих комментариях, если нет простого и эффективного кода.

А здесь не шла речь о простом решении. Вопрос ставился можно ли.

А Вы не будьте столь категоричны, когда решение существует, хоть и не самое простое. 

 
fxsaber:

На анимации хорошо видно проскакивание красных небольших квадратов. Пытался от них избавиться когда-то - не получилось.

Да, это очень старое мое творение. Раньше тоже эта проблема стояла передо мной.

Тогда я еще не понимал, что для более эффективной работы нужно использовать только один канвас на весь экран. Или не на весь, если не требуется менять его размеры.

Ну в крайнем случае два, в зависимости от типа задачи: один XRGB под график и один ARGB ( с прозрачностью) над график.

 
Так проблему "квадратиков" решили?
 
fxsaber:
Так проблему "квадратиков" решили?

Конечно, если использовать один немасштабируемый канвас, то их просто нет.

Хочу опубликовать в КБ простенький класс iCanvas, который наследует класс CCanvas, который при объявлении по умолчанию создает канвас на весь экран и дальше его меняет автоматически, если происходит изменение размеров окна. 

Ну и разные там плюшки в виде построения фигур канваса не по координатам хy, а по price, номер бара или времени . Т.е. будут добавлены функции X( datatime T), X(double bar), Y( double price). 
Чтобы канвас для многих не казался таким стрессовым.  

 
Nikolai Semko:

Конечно, если использовать один немасштабируемый канвас, то их просто нет.

У меня всегда был один канвас и красный квадрат все равно проскакивал. Долго бился, чтобы понять причины, но так и не поборол.

 
fxsaber:

У меня всегда был один канвас и красный квадрат все равно проскакивал. Долго бился, чтобы понять причины, но так и не поборол.

Если имеет факт изменения размера канваса, т.е. выполняетмя его переоткрытие или функция Resize, то чтобы не было этих красных квадратиков, нужно использовать канвас на все окно. 

#include <Canvas\Canvas2.mqh>

int OnStart(void)
  {
    int Width=(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);
    int Height=(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS);
    CCanvas canvas;
    if(!canvas.CreateBitmapLabel("SampleCanvas",0,0,Width,Height,COLOR_FORMAT_ARGB_NORMALIZE)) Print("Error creating canvas: ",GetLastError());
  ....
  }

И помнить о том что функция Erase весьма быстрая - на полный экран FullHD выполнится ~ 0.5 миллисекунды 

а Update помедленнее  ~5-7 миллисекунд на полный экран FullHD.
Да - такой вариан более затратный, т.к. Update канваса размером скажем 500x200 займет ~0.5 миллисекунд. 

Поэтому нужно исходить и целесообразности.

Лично я практически всегда сейчас использую канвас на все окно, т.к. помню что имею запас 200 кадров с секунду при Update = ~ 5 миллисекунд.

 

Возможно ли как-то починить это к следующему билду?

Когда переключаюсь на другой счет, то чарт кастомного символа теряет бары - "Ожидание обновления". Бары не запросить. При этом тики - без проблем.

После перезагрузки Терминала, конечно, бары на чарте доступны.

Хотелось бы, чтобы после переключения на другой счет бары кастомных символов оставались доступны без перезагрузки.