Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1689
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Если не нравится "-1", то можно так
Нет, так нельзя - программа рухнет, если вы обращаетесь так к своему массиву.
В лучшем же случае, если обращаетесь к внутренним массивам, вы пропустите нужные вам данные, или просто не дойдёте до них в цикле.
В общем тут все просто, ваш unique суммирует все не совпавшие ордера между разными магиками..
Например есть 3 ордера
Первая итерация магик=1 unique=0, в конце итерации unique будет=2
Вторая итерация магик=2 unique=2, в конце итерации unique будет=3
тк 3>=числа всех ордеров, то цикл while разрывается.. А магик =3 так и не был проверен... Итого магик снова =2 и так со всеми..
Первому ордеру по умолчанию даётся маджик = 1. Далее включается в работу цикл:
Начало итерации magic = 1 unique = 0, в конце (когда уже есть один ордер с маджиком = 1 ) magic всё ещё 1, а unique = 0
Вторая итерация magic = 2 unique = 0, в конце, magic = 2, а unique = 1 (нет совпадения) и по реторну присваивается 2-му ордеру magic = 2.
С третим должно было быть также...
Хотел запринтовать весь процесс, но что-то пошло не так:
Первому ордеру по умолчанию даётся маджик = 1. Далее включается в работу цикл:
Начало итерации magic = 1 unique = 0, в конце (когда уже есть один ордер с маджиком = 1 ) magic всё ещё 1, а unique = 0
Вторая итерация magic = 2 unique = 0, в конце, magic = 2, а unique = 1 (нет совпадения) и по реторну присваивается 2-му ордеру magic = 2.
С третим должно было быть также...
Хотел запринтовать весь процесс, но что-то пошло не так:
Замахивайтесь на большее - ВСЕ языки программирования.
Всё просто - в языках программирования отсчёт начинается с нуля. Первая ячейка массива будет иметь индекс 0. Поэтому нужно делать обратный цикл ДО нуля ВКЛЮЧАЯ его. Т.е. >=0
OrdersTotal() выдаёт, например, 10. И вы начинаете цикл от 10. А у массива последний индекс 9 (помните, что от нуля отсчёт ведём?). И что будет при обращении к несуществующей ячейке массива? Правильно - вылет программы по критической ошибке, так как вы полезли в нераспределённую под массив область памяти - за его пределы.
Вот это точно сплошные костыли. Читайте, учитесь, и всё к вам придёт.
есть тьма бесплатных и неплохих курсов по C/C++.
Mql к ним близок и можно невозбранно учиться. Благо что глубоких познаний не потребуется. Но хотя-бы синтаксис языка и базовые основы алгоритмов.
Иначе какая-то ерунда в топике получается, вместо консультаций по платформе и алгоритмам, диалоги на уровне начальной школы - где поставить ; что такое цикл и почему индексы с 0
есть например сайт intuit.ru - там есть курсы по C и алгоритмам, потратьте своё время, пару недель от силы. Заодно бумажку можно получить :-)
есть тьма бесплатных и неплохих курсов по C/C++.
Mql к ним близок и можно невозбранно учиться. Благо что глубоких познаний не потребуется. Но хотя-бы синтаксис языка и базовые основы алгоритмов.
Иначе какая-то ерунда в топике получается, вместо консультаций по платформе и алгоритмам, диалоги на уровне начальной школы - где поставить ; что такое цикл и почему индексы с 0
есть например сайт intuit.ru - там есть курсы по C и алгоритмам, потратьте своё время, пару недель от силы. Заодно бумажку можно получить :-)
Такую?
OrdersTotal() выдаёт, например, 10. И вы начинаете цикл от 10. А у массива последний индекс 9 (помните, что от нуля отсчёт ведём?). И что будет при обращении к несуществующей ячейке массива? Правильно - вылет программы по критической ошибке, так как вы полезли в нераспределённую под массив область памяти - за его пределы.
Немного поправлю.. Критической ошибки не будет, просто булевая OrderSelect вернет false.. и все.. Но конечно лучше избегать.. Ибо при некорректном использовании возможностей кода сложно предсказать возможные косяки..
Первому ордеру по умолчанию даётся маджик = 1. Далее включается в работу цикл:
Начало итерации magic = 1 unique = 0, в конце (когда уже есть один ордер с маджиком = 1 ) magic всё ещё 1, а unique = 0
Вторая итерация magic = 2 unique = 0, в конце, magic = 2, а unique = 1 (нет совпадения) и по реторну присваивается 2-му ордеру magic = 2.
С третим должно было быть также...
Я просто вижу, что заполнение unique идет очень быстрыми темпами и достигает предела, а magic растет еле-еле.. Вообще не правильно было использовать одну и ту же переменную и для управление циклом и для логики внутри цикла, где эту переменную раздувает..
Принтуйте чтобы найти решение в этом контексте, но я бы посоветовал просто переформулировать задачу.. Например найти циклом максимальный магик у ордеров и вернуть его с +1, вот и будет верное простое решение.
Можно так, код вызывается по необходимости, так что его вес не создаёт проблем
Для теста использовал Buy/Sell
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Vitaly Muzichenko, 2021.10.19 23:08
Немного поправлю.. Критической ошибки не будет, просто булевая OrderSelect вернет false.. и все.. Но конечно лучше избегать.. Ибо при некорректном использовании возможностей кода сложно предсказать возможные косяки..
Я просто вижу, что заполнение unique идет очень быстрыми темпами и достигает предела, а magic растет еле-еле.. Вообще не правильно было использовать одну и ту же переменную и для управление циклом и для логики внутри цикла, где эту переменную раздувает..
Принтуйте чтобы найти решение в этом контексте, но я бы посоветовал просто переформулировать задачу.. Например найти циклом максимальный магик у ордеров и вернуть его с +1, вот и будет верное простое решение.
Можно так, код вызывается по необходимости, так что его вес не создаёт проблем
Для теста использовал Buy/Sell