ChartNavigate при инициализации - страница 8

 
Artsem:

прошло 2 недели.

Если не отписались - значит, не смотрели. У разработчиков куча задач, эта не самая приоритетная
 
Нужно позиционировать левую границу на определенную дату. Делаю так.
ChartNavigate(0, CHART_CURRENT_POS, (int)ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR) - iBarShift(_Symbol, PERIOD_CURRENT, Time));

К сожалению, ведет себя непредсказуемо. Кто-нибудь добился стабильного поведения?

 
fxsaber #:
Нужно позиционировать левую границу на определенную дату. Делаю так.

К сожалению, ведет себя непредсказуемо. Кто-нибудь добился стабильного поведения?

Максимум, что смог выжать.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Индикаторы: SpreadSymbol

fxsaber, 2023.01.14 02:25

Дополнительный функционал.

менее пяти секунд понадобилось для формирования сравнительных визуализаций четырех брокеров по 22-м символам.

Технически довольно необычное решение.

  • Индикатор сам себя перезагружает на множестве символов.
  • Подготавливает для каждого символа все данные для визуализации. Вычисления на завязаны на Calculate-событиях.
  • Смещает в нужное место и делает скрин себя же на каждом символе.
Использовал f2 из этого списка вариантов функций навигации по левой границе.
void f1( const datetime Time )
{
  ChartNavigate(0, CHART_CURRENT_POS, (int)ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR) - iBarShift(_Symbol, PERIOD_CURRENT, Time));  
}

void f2( const datetime Time )
{
  ChartNavigate(0, CHART_END, (int)((1 - (ChartGetInteger(0, CHART_SHIFT) ? ChartGetDouble(0, CHART_SHIFT_SIZE) : 0) / 100) *
                                    ChartGetInteger(0, CHART_WIDTH_IN_PIXELS) / (1 << ChartGetInteger(0, CHART_SCALE))) -
                                    iBarShift(_Symbol, PERIOD_CURRENT, Time) + ((int)(ChartGetInteger(0, CHART_SHIFT) << 1) - 1));
}

void f3( const datetime Time )
{
  ChartNavigate(0, CHART_BEGIN, Bars(_Symbol, _Period) - iBarShift(_Symbol, PERIOD_CURRENT, Time) - 1);
}