Ага вот установил более точно. Вот этот случай "Если необходимо получить значение, соответствующее текущему незавершенному бару, то можно использовать первую форму вызова с указанием start_pos=0 иcount=1." работает в случае с 15м графиком если время заканчивается на 00 минут и 30 минут.
В случае если время заканчивается на 15 минут или 45 вместо нулевого бара мы по этой функции получаем предыдущий.
Т.е. tart_pos=0 иcount=1. в 15 минут и 45 минут выдаст на самом деле tart_pos=1 иcount=1 Просто ахтунг. Т.е. такое ощущение что смотрим мы не на 15м график а на 30м график. (процедура так точно)
Если быть точнее, то в 15 минут и 45 идет просто сдвижка на один бар почему-то влево. Т.е. запросим мы tart_pos=2 иcount=1 в 15 минут выдаст 3 бар. Капец.
а ENUM_TIMEFRAMES таки PERIOD_M15 ?
без кода никто ни чего не скажет, могут только посочувствовать)
- www.mql5.com
а ENUM_TIMEFRAMES таки PERIOD_M15 ?
без кода никто ни чего не скажет, могут только посочувствовать)
period_m15 да . 15 минутный график везде. Тут мне код не при чем, и отвечать мне можно не отвечать, надо отправить репорт на доску и все, чтобы исправляли.
Код любой подойдет. Смотрим что нам выдаст в 15 минут. Напечатает цены открытия не с 22:15 бара а с 22:00 бара трех баров. Если в этом же коде поставить 22 часа 30 минут то напечатает 3 бара цен открытия с 22:30 как и должно быть.
if (TimeCurrent()==D'2010.01.04 22:15')
{
CopyOpen("EURUSD",Period(),0,3,buf_temp);
ArraySetAsSeries(buf_temp,true);
for (i=0;i<3;i++)
{correl=buf_temp[i];
Print(correl);}
}
Все запросы к истории в MQL5 являются асинхронными. Это означает, что при отсутствии актуальных данных Вы можете получить то, что есть на текущий момент.
В примечании к функциям CopyXXX() сказано:
Примечание
Если интервал запрашиваемых данных полностью находится вне доступных данных на сервере, то функция возвращает -1. В случае если запрашиваются данные за пределами TERMINAL_MAXBARS (максимальное количество баров на графике), функция также вернет -1.
При запросе данных из индикатора, если запрашиваемые таймсерии еще не построены или их необходимо загрузить с сервера, функция сразу же вернет -1, но при этом сам процесс загрузки/построения будет инициирован.
При запросе данных из эксперта или скрипта, будет инициирована загрузка с сервера, если локально этих данных у терминала нет, либо начнется построение нужной таймсерии, если данные можно построить из локальной истории, но они еще не готовы. Функция вернет то количество данных, которые будут готовы к моменту истечения таймаута, но загрузка истории будет продолжаться, и при следующем аналогичном запросе функция вернет уже больше данных.
При запросе данных в заданном диапазоне дат возвращаются только данные, попадающие в запрашиваемый интервал, при этом интервал задается и учитывается с точностью до секунды. То есть время открытия любого бара, для которого возвращается значение (объем, спред, значение в индикаторном буфере, цена Open, High, Low, Close или время открытия Time), всегда находится в запрошенном интервале.
Таким образом, если текущий день недели Суббота, то при попытке скопировать данные на недельном таймфрейме с указанием start_time=Последний_Вторник и stop_time=Последняя_Пятница функция вернет 0, так как время открытия на недельном таймфрейме всегда приходится на воскресенье, но ни один недельный бар не попадает в указанный диапазон.
Если необходимо получить значение, соответствующее текущему незавершенному бару, то можно использовать первую форму вызова с указанием start_pos=0 и count=1.
Прочитайте также раздел Организация доступа к данным
period_m15 да . 15 минутный график везде. Тут мне код не при чем, и отвечать мне можно не отвечать, надо отправить репорт на доску и все, чтобы исправляли.
Код любой подойдет. Смотрим что нам выдаст в 15 минут. Напечатает цены открытия не с 22:15 бара а с 22:00 бара трех баров. Если в этом же коде поставить 22 часа 30 минут то напечатает 3 бара цен открытия с 22:30 как и должно быть.
if (TimeCurrent()==D'2010.01.04 22:15')
{
CopyOpen("EURUSD",Period(),0,3,buf_temp);
ArraySetAsSeries(buf_temp,true);
for (i=0;i<3;i++)
{correl=buf_temp[i];
Print(correl);}
}
- 2010.02.23
- MetaQuotes Software Corp.
- www.mql5.com
Без исходного кода нельзя точно сказать, в чем дело. В любом случае, вставляйте код правильно, пожалуйста.
ну вот я прописал переменные только и подставить в ontick запустить с января 2010 и все напечатает то что я сказал. Смещенные бары.
Придется прописать алгоритм обхода этого бага, а когда исправят, попытаться маскимально быстро его заметить и поменять обратно все.
double correl, buf_temp[]; int i;
if (TimeCurrent()==D'2010.01.04 22:15')
{
CopyOpen("EURUSD",Period(),0,3,buf_temp);
ArraySetAsSeries(buf_temp,true);
for (i=0;i<3;i++)
{correl=buf_temp[i];
Print(correl);}
}
Все запросы к истории в MQL5 являются асинхронными. Это означает, что при отсутствии актуальных данных Вы можете получить то, что есть на текущий момент.
В примечании к функциям CopyXXX() сказано:
Прочитайте также раздел Организация доступа к данным
это все хорошо, я не уверен, что оно относится к проблеме. Так как все время чередуются эти значения, т.е. смотрим мы на 0 бар а он все время выдает то первый то нулевой. Независимо не от чего.
Я убил на этот баг 5 или 6 часов, чтобы его найти. Я даже в представить себе не мог, что такая лажа вообще возможна. Когда увидел. Аж прозрел. Надо к разработчикам идти.
Надо к разработчикам идти.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Народ, кто знает как в каких десках выложить баг сделайте плиз. А то такая лажа просто ах.
В хелпе про CopyOpen написано "Если необходимо получить значение, соответствующее текущему незавершенному бару, то можно использовать первую форму вызова с указанием start_pos=0 и count=1."
Но выдает она точно не установил, но через раз где-то то действительно незавершенный бар, то предыдущий.
В итоге, если эксперт записывает нулевые бары, то в конце мы имеем массив из двоящихся троящихся повторений цен открытия, а не массив цен открытия.