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

 
Ihor Herasko:

P./S.: На всякий случай всё-таки уточню, что при проведении этих экспериментов не стала смотреть что произойдёт, если провести загрузку терминала через продолжительное время (т.е., тогда, когда после выгрузки терминала предполагается появление многих новых баров).

 
Alexey Viktorov:

Дина, а у Вас работает? Я вот уже часа 2-3 (только сегодня, не считая вчерашних тестов) бьюсь в попытках получить неработающий вариант в OnInit но всё безуспешно. Всё и всегда отрабатывает как положено. Замечена только такая особенность: Если поставить индикатор на два графика и перезапустить терминал, то отработает только на том графике который был активен в момент закрытия и открытия терминала. На втором, не активном графике не срабатывает. Но это, на мой взгляд, вполне объяснимо, нет отрисовки графика и нет самого графика несмотря на то, что данные поступают.

Да, Алексей, работает. Я тут об этом написала. Видимо за моими цитированиями других постов это затерялось визуально 

 
Dina Paches:

Скажите, пожалуйста, а перед тем, как выгрузить терминал, вы возвращаете график к самым свежим ценам?

Нет, не возвращаю. Потому как именно в этом и суть. Расскажу чуть подробнее, для чего все это нужно. Трейдер использует график как будто тестер. Индикатор скрывает часть реального графика, находящегося справа от якобы текущего времени (на самом деле это время где-то в истории). При нажатии F12 отображается следующая свеча онлайн-графика и т. д. Так вот, именно при перезагрузке терминала с присоединенным индикатором не возвращает положение графика к тому месту, на котором закончил свои исследования трейдер. В итоге он получает пустой график, т. к. терминал переводит отображение графика к последней реальной свече. И это при том, что выгрузка терминала происходила в совершенно другом месте.

Почему спрашиваю:

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

Интересное наблюдение. Проверил у себя - увы и ах, ничего не изменилось. Все равно при перезагрузке получаю самые свежие цены.

Предлагаю "сверить часы". Я все это тестирую на билде 1861. Какой у Вас?

 
Alexey Viktorov:

Дина, а у Вас работает? Я вот уже часа 2-3 (только сегодня, не считая вчерашних тестов) бьюсь в попытках получить неработающий вариант в OnInit но всё безуспешно. Всё и всегда отрабатывает как положено. Замечена только такая особенность: Если поставить индикатор на два графика и перезапустить терминал, то отработает только на том графике который был активен в момент закрытия и открытия терминала. На втором, не активном графике не срабатывает. Но это, на мой взгляд, вполне объяснимо, нет отрисовки графика и нет самого графика несмотря на то, что данные поступают.

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

Какой билд у Вас?

 
Все оказалось еще веселее, чем я думал. Перенес код в OnCalculate (сделал одиночное срабатывание, чтобы на каждом тике не вызывать), но картина не изменилась. То есть даже в OnCalculate при старте терминала ChartNavigate не срабатывает...
 
Alexey Viktorov:

... Замечена только такая особенность: Если поставить индикатор на два графика и перезапустить терминал, то отработает только на том графике который был активен в момент закрытия и открытия терминала. На втором, не активном графике не срабатывает. Но это, на мой взгляд, вполне объяснимо, нет отрисовки графика и нет самого графика несмотря на то, что данные поступают.

Так опробовать - не догадалась сама. Сейчас сделала такие эксперименты (так же с помощью кода Игоря).

При этом умудрилась в итоге получить..., что воспроизвела описываемую им проблему.

 
Ihor Herasko:

...

Предлагаю "сверить часы". Я все это тестирую на билде 1861. Какой у Вас?

И у меня 1861. Но благодаря Алексею Викторову мне удалось воспроизвести описываемую вами проблему при установке через OnInit(). /*до того, получается, как увидела ваши посты*/

Порядок действий: Как у вас описано тут.

I.  Но перед выгрузкой терминала смещала графики к самым свежим ценам.

При этом индикатор устанавливала на два графика одной пары, различающиеся таймфреймами (GBPUSD M5 и GBPUSD H1). 

Итоги у меня по этим экспериментам:

1. Устанавливала индикатор сначала на график GBPUSD M5, затем - на график GBPUSD H1. После, сместив графики к свежим барам, закрывала терминал когда активен график GBPUSD H1 (т.е., активен старший таймфрейм). При таких условиях, если снова открыть терминал, график при открытии - смещённый, на барах, оговорённых вашим кодом.

2. Но если закрыть терминал с активным графиком GBPUSD М5 (т.е., активен младший таймфрейм) и, затем, снова открыть терминал, то после загрузки терминала смещений не происходит ни на одном из этих двух графиков. Графики открываются на свежих барах. При этом по одному выдаёт успешность, по другому - ошибку:

test 2018 06 26 (GBPUSD,M5)     Alert: Успешно
test 2018 06 26 (GBPUSD,H1)     Alert: Ошибка №4111

Проводя эксперименты п.1 и п.2, после перезапуска терминала и ознакомления с результатами удаляла этот индикатор с графиков и, затем, устанавливала его по новой.


3. Когда провела такие же эксперименты, но не переустанавливая каждый раз по новой индикатор, то не происходит смещений графика после перезапуска терминала. Вне зависимости от того, что активен со старшим или младшим таймфреймом. Графики открываются на свежих барах. Сообщения - такие же как в п.2 (успешно и ошибка 4111)

 

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

Итоги у меня: если закрыть/открыть на старшем таймфрейме, то график старшего таймфрейма там, где был перед закрытием. Младший (не активный) - на самых свежих.

Если же открыть/закрыть на младшем - то младший график открывается на свежих барах. Сообщения при этом - как и в п.2 (успешно и ошибка 4111)


III. Проблема проявилась сейчас ещё при следующем:

  • забыла перед установкой индикатора отключить автопрокрутку графика;
  • когда поняла это, удалила индикатор и сразу установила по новой.

Так вот после такой переустановки индикатора - смещения не произошло, но алерт выдал успешность:

test 2018 06 26 (GBPUSD,M5)     Alert: Успешно

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


Как-то так.

Похоже вам стоит написать в Сервисдеск.

 
Dina Paches:

При этом по одному выдаёт успешность, по другому - ошибку:

А вот это сюрприз! Мне еще не удавалось получить ошибку от ChartNavigate. Но это уже что-то.

По сути проблемы, по всей видимости, начинаю понимать, что происходит. 

При первом вызове ChartNavigate() в OnInit() или в OnCalculate() высока вероятность того, что еще не все данные графика успели подгрузиться. Тем не менее ChartNavigate() уже отработал и отработал успешно (на тот момент). Вслед за этим происходит подгрузка данных и их отображение на графике, что приводит к полной перерисовке и смещению графика к его началу. В итоге мы видим график так, будто он вовсе не смещался по ChartNavigate().

Поэтому для успешного смещения графика нужно каким-то образом определить, что отображения данных графика (вследствие подкачки истории) больше не предвидится. Только после установления такого факта можно вызывать ChartNavigate(). 

 
Ihor Herasko:

...

Поэтому для успешного смещения графика нужно каким-то образом определить, что отображения данных графика (вследствие подкачки истории) больше не предвидится. Только после установления такого факта можно вызывать ChartNavigate(). 

Вы правы, вероятно. При том же перезапуске терминала это может становиться актуальным. Ещё, в ходе экспериментов, меня заинтересовало включение/отключение автопрокрутки в сочетании (или без) с переустановкой ндикатора. Следствие того, что описала в блоке III, в конце этого поста. Но пока не рассматриваю это поподробнее. Надо свои насущные вопросы порешать. Поэтому пока далее я - пас. 

 
Ihor Herasko:

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

Какой билд у Вас?

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

ChartNavigate при инициализации

Alexey Viktorov, 2018.06.25 15:10

У меня тоже 1861. Получилось воспроизвести только один раз. Все остальные попытки отработало нормально.


Причина обращения: