Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1738
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ваш код распечатывает 0, а не -1..
Возможно -1 где то из другого места распечаталось, скорее всего весь код в принтах..
Да, Вы правы, каждый шаг запринтирован, чтобы видеть, в каком месте "затормозило".
Пример привёл некорректный, прошу прощения, сам код большой.
Но, решение Константина решило проблему! Действительно, поменял везде местами i-- и проверку на ноль, и теперь логика работает, как надо, вместо -1 выдает 0, либо 1. (раньше 0, либо -1, при последнем тут же ошибка).
Ваш код распечатывает 0, а не -1..
Возможно -1 где то из другого места распечаталось, скорее всего весь код в принтах..
Прежде чем пытаться решить проблему ее нужно определить.. Убедиться что она есть и локализовать ее место, а только потом решать..
Возьмите ручку и бумажку. И пропишите как считается цикл. В этом коде
проверка
вообще ни когда не пройдет. Если только изначально задать
нечетное значение. Если четное, то при таком коде
до
будет приходить нечетное значение.
Прежде чем пытаться решить проблему ее нужно определить.. Убедиться что она есть и локализовать ее место, а только потом решать..
Понял Вас, имею ввиду
Возьмите ручку и бумажку. И пропишите как считается цикл. В этом коде
Зачем мне брать ручку и бумашку, если в условии сказано что принт =-1, а по факту (я проверил) он принтуется как 0, то есть пример приведен некорректно. А на некорректный пример невозможно дать правильный ответ...
Зачем мне брать ручку и бумашку, если в условии сказано что принт =-1, а по факту (я проверил) он принтуется как 0, то есть пример приведен некорректно. А на некорректный пример невозможно дать правильный ответ...
Ноль принтуется из этой строки
а не из проверки и выходу по break.
Вообще для прохождения массива правильней писать
т.к. массивы начинаются с нулевого индекса
Ноль принтуется из этой строки
а не из проверки и выходу по break.
0 принтуется из этой строки, для того кода, который был приведен..
Print(i);
Вопрос не стоял почему не срабатывает break, вопрос стоял почему принт дал -1.. вот и все. и там не важно четное или нечетное i стартовое, никогда не принтуется -1...
Пробую через Close[], но индекс больше 5000 не дает.
Подскажите, пожалуйста, как можно посчитать тики или свечи за большое время? (год, например).
Пробую через Close[], но индекс больше 5000 не дает.
Тики или свечи такая большая разница, что и сказать страшно…
Тики или свечи такая большая разница, что и сказать страшно…
Вот, например, советник, ему какой угодно период укажи - он в тестере хоть по тикам, хоть по барам М1 пройдёт, каждый примет во внимание.
А если взять советник, который в режиме реального времени лезет в долгую историю и берет оттуда данные, не пойму как это организовать. Терминал больше 5000 свечей не даёт.
UPD
Попробую через эту штуку, код в сети лежит
MqlRates rates[];
int copied=CopyRates(NULL,0,0,100,rates);
if(copied<=0)
Print("Ошибка копирования ценовых данных ",GetLastError());
else Print("Скопировано ",ArraySize(rates)," баров");
UPD
Странно. Ни с того ни с сего заработало. Даже миллионный бар проверяется. Ничего не делал, читал документацию, пил чай. Просто еще раз запустил и заработало. Весь день выдавало ошибку, хотя загрузил историю и настройки поменял еще вчера.
То есть, и дополнительный код (выше) проверять не потребовалось.
МТ4 - темпераментный какой-то. Или у ФорексЧифа такая особенность. Надо будет стандартный поставить, а не брокерский.
Вот, например, советник, ему какой угодно период укажи - он в тестере хоть по тикам, хоть по барам М1 пройдёт, каждый примет во внимание.
А если взять советник, который в режиме реального времени лезет в долгую историю и берет оттуда данные, не пойму как это организовать. Терминал больше 5000 свечей не даёт.
UPD
Попробую через эту штуку, код в сети лежит
MqlRates rates[];
int copied=CopyRates(NULL,0,0,100,rates);
if(copied<=0)
Print("Ошибка копирования ценовых данных ",GetLastError());
else Print("Скопировано ",ArraySize(rates)," баров");
UPD
Странно. Ни с того ни с сего заработало. Даже миллионный бар проверяется. Ничего не делал, читал документацию, пил чай. Просто еще раз запустил и заработало. Весь день выдавало ошибку, хотя загрузил историю и настройки поменял еще вчера.
То есть, и дополнительный код (выше) проверять не потребовалось.
МТ4 - темпераментный какой-то. Или у ФорексЧифа такая особенность. Надо будет стандартный поставить, а не брокерский.
Первое обращение к CopyRates() инициировало подкачку исторических данных (не запускайте недельку, и опять получите то же самое, ну, может и не недельку, но какое-то время).
Просто нужно проверять сколько всего есть данных на сервере и сравнивать доступное количество советнику. Если меньше, чем требуется - выходить до следующего тика. На нём опять проверять. Если за какое-то количество попыток не получилось получить требуемую историю - тут уже обрабатывать сию ошибочку как требуется.