....реализовать ожидание последнего бара в истории. История приходит не сразу. Иногда совсем не приходит.
и как я узнаю что он "последний"? особенно если "иногда совсем не приходит" ;)
да и вопрос то не в том. вопрос в том, пополняется ли данными график М1 если я на М30 буду запрашивать его данные а М1 открыт не будет. Я думал что это уже ктото прошел и просто знает ответ - ну да ладно, придется самому проводить "натурный эксперимент".
В периодконверторе есть строка ожидания истории. Она работает, но на выходных зацикливается из-за особенностей RefreshRates().
Доделал:
for (j = 0; i == 0 && !RefreshRates() && !IsStopped() && j < 10; j++, i = iBarShift(sSymbol, nSourceTF, lTimeSource)) Sleep(200);
ну это все равно не решает вопрос. тут скорее всего надо зная время TimeCurrent текущего прихода котировки на текущем тайме (ведь эксперт пнется именно на нем на живом времени), нужно проверить что ближайшее к нему время на другом тайме уже есть.
например TimeCurrent = 20:36:12 мы понимаем что на М1 Time[0] должно быть 20:36 а на М5 - 20:35
остается второй вопрос: что делать если несмотря на наши "понятия" мы получили с М5 время Time[0] например 20:30 и поняли что нет (еще) последнего бара со временм 20:35 ?
Мне кажется, нужно копать в направлении "последней известной цены". История, если она есть, то, когда-нибудь, приходит.
Поэтому я пользуюсь следующей функцией:
double LastKnownPrice( string SymbolName, datetime cTime) { int shift; shift = iBarShift( SymbolName, 0, cTime, false); if (iTime(SymbolName, 0, shift) > cTime) shift++; return( iClose(SymbolName, 0, shift) ); }Здесь используется текущий ТаймФрейм, но это легко правится
Мне кажется, нужно копать в направлении "последней известной цены". История, если она есть, то, когда-нибудь, приходит.
Я много раз замечал как после перключения на другой тайм в течении нескольких секунд происходит подчитка данных и на нем быстренько появляются пара-тройка новых баров. Это значит что в те таймы данные при работающем терминале не записывались.
ForexTools:
Я много раз замечал как после перключения на другой тайм в течении нескольких секунд происходит подчитка данных и на нем быстренько появляются пара-тройка новых баров. Это значит что в те таймы данные при работающем терминале не записывались
Не знаю, как эксперты. Но если индикатор запрашивает данные с таймфреймов, по которым график не открыт, история запрашиваемых таймфреймов сохраняется на компьютере.
Запустите прилагаемый индикатор на минутках. И когда зигзаги прорисуются. Иногда почти сразу. Иногда приходится немного подождать, пока не подкачается история. И посмотрите историю.
Правильно. поэтому первый мой вопрос был такой: если на текущем тайме уже есть "последняя известная цена" означает ли это что она есть и на всех других таймах для ее получения через тот же iClose?
Я много раз замечал как после перключения на другой тайм в течении нескольких секунд происходит подчитка данных и на нем быстренько появляются пара-тройка новых баров. Это значит что в те таймы данные при работающем терминале не записывались.
Я пришел к выводу: если в эксперте задействовать разные ТФ, необходимо, чтобы по данному инструменту были открыты одновременно графики с запрашиваемыми ТФ (т.е. будет автоматом догружаться история по этим ТФ)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Допустим что у меня есть эксперт, которого я прицепил на EURUSD M30 в только что проинсталеный терминал. В нем есть код запрашивающий минутные данные с М1 ( iOpen(Symbol(), PERIOD_M1, FirstBarNo) ). Терминал только что проинсталеный и никакой истории в нем нет кроме той что закачалась на М30 в момент открытия графика для прицепки эксперта.
Кажется мне что данные по М1 я не получу до тех пор пока не открою сам график М1? Но даже если я его открою и подгружу всю историю (например эмуляцией нажатий KEY_HOME), а потом закрою М1. График М1 закрыт и данные в него терминал вроде как не пишет? Что мне вернет iOpen(Symbol(), PERIOD_M1, 0) через час? Наверно цену открытия того нулевого бара который был на момент закрытия графика? Если да - то как принудительно заставить MQL-кодом обновить график M1, работая только на М30?