Новая версия платформы MetaTrader 4 build 1350 - страница 4

 
Ihor Herasko #:

OnChartEvent() не должно работать в тестере. Проверил, вижу, что на всех тиках срабатывает 1 - 2 раза за бар Н1. Видимо, это реакция на перемещение графика в момент образования нового бара. Причем у меня эта реакция, чаще всего, не в момент открытия бара, а где-то в его середине. Если в этот момент запросить данные текущего графика, то все данные возвращаются правильно.

Вы проводите тест на EURGBP, а запрашиваете данные с AUDUSD. В МТ4 тестер одновалютный. Для того, чтобы правильно обратиться к другим символам, нужно изрядно потрудиться. Прямое обращение не подойдет.

Ну и в принципе у Вас еще достаточно хороший случай. Ведь текущий ТФ М1, а запрашиваются данные на Н1. То есть бар на Н1 не меняется в течение долгого времени. Вот и получаете Open-цену.

Как-то OnChartEvent  работает в 4 даже лучше чем в 5))
Если в Ontick вставить эффект будет такой же. 
У меня есть ещё похожий экземпляр, мне кажется там данные приходят. Сейчас облегчу его и буду проверять. А что значит не прямое обращение?
ps и если тестер одновалютный, то кто даёт цену Open) Значит всё же цены получать можно)

 
Pavel Verveyko #:

Как-то OnChartEvent  работает в 4 даже лучше чем в 5))

Просто знайте, что в тестере на него особо надеяться нельзя. ))

Если в Ontick вставить эффект будет такой же. 

Да, потому что идет обращение к другому символу, поведение которого не эмулируется тестером. 

У меня есть ещё похожий экземпляр, мне кажется там данные приходят. Сейчас облегчу его и буду проверять. А что значит не прямое обращение?

Через индекс бара. Индексы баров у разных символов не обязаны совпадать по времени. Поэтому сначала следует найти нужный бар (iBarShift), а потом только использовать полученный индекс бара для получения данных.

ps и если тестер одновалютный, то кто даёт цену Open) Значит всё же цены получать можно)

Получать то можно. Только не факт, что это требуемые данные.

 
Ihor Herasko #:

Через индекс бара. Индексы баров у разных символов не обязаны совпадать по времени. Поэтому сначала следует найти нужный бар (iBarShift), а потом только использовать полученный индекс бара для получения данных.

С индексом бара вопросы изредка бывают, это правда.
Попробую мож и сработает. Спасибо.
При запросе данных из индикаторов (4) обычно, ищу бар.

ChartTimePriceToX

тоже требует иного обращения, чем в 5. 

 
iBarshift тоже не работает. Вообще странно. Не важно какое время у бара. Я просто хочу получить 0-й бар и не важно с каким он временем. Время у него возвращается как раз правильно.

0-ю свечу другого инструмента, получить можно, но только Open. Цены всех других свечей получить можно. Прямым способом.
Дело в том что свеча была 0. а не например 10.
 

Pavel Verveyko #:
iBarshift тоже не работает.

Покажите, как запрашиваете.

Вообще странно. Не важно какое время у бара. Я просто хочу получить 0-й бар и не важно с каким он временем. Время у него возвращается как раз правильно.

Допустим, тестируется интервал с 2021.10.01 до 2021.10.15. Для тестируемого символа 0-ой бар будет постоянно изменяться по времени. А вот 0-ой бар другого символа будет всегда соответствовать текущему времени. Это тот бар, который в реальности сейчас формируется. Если нужен 0-ой бар, который соответствует тестируемому 0-ому бару, то нужно сделать такое преобразование:

datetime dtTime = iTime(NULL, PERIOD_CURRENT, 0);
int nBarIndex = iBarShift(<другой символ>, PERIOD_CURRENT, dtTime);
double fHigh = iHigh(<другой символ>, PERIOD_CURRENT, nBarIndex);
 
Ihor Herasko #:

Покажите, как запрашиваете.

Допустим, тестируется интервал с 2021.10.01 до 2021.10.15. Для тестируемого символа 0-ой бар будет постоянно изменяться по времени. А вот 0-ой бар другого символа будет всегда соответствовать текущему времени. Это тот бар, который в реальности сейчас формируется. Если нужен 0-ой бар, который соответствует тестируемому 0-ому бару, то нужно сделать такое преобразование:

Да, я несколько иначе делал. Без привязки к текущему временному периоду. Но период всё равно был нужен разный. Одна из версий была такая. В данной ситуации, меня устраивается, что можно получить хотя бы другие свечи).

double price0[];
CopyHigh("AUDUSD",PERIOD_H1,iBarShift("AUDUSD",PERIOD_H1,time[0],true),1,price0);
 
Pavel Verveyko #:

Да, я несколько иначе делал. Без привязки к текущему временному периоду. Но период всё равно был нужен разный. Одна из версий была такая. В данной ситуации, меня устраивается, что можно получить хотя бы другие свечи).

А почему в iBarShift указано "AUD"? Если такого символа нет (что скорее всего), то вот она ошибка. Ведь iBarShift будет возвращать неопределенный результат.

 
Ihor Herasko #:

А почему в iBarShift указано "AUD"? Если такого символа нет (что скорее всего), то вот она ошибка. Ведь iBarShift будет возвращать неопределенный результат.

Вот сейчас посмотрим)

не. всё равно опен)
 
Pavel Verveyko #:

Вот сейчас посмотрим)

не. всё равно опен)

Для нулевого бара так и будет. Попробуйте любой другой бар. Там должна быть информация правильная.

 
Ihor Herasko #:

Для нулевого бара так и будет. Попробуйте любой другой бар. Там должна быть информация правильная.

не 0, можно получить без шифтбара.
Спасибо за мысли.