Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 763
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вроде так в циклах, и можно обойтись без функции
Спасибо.
Однако убрал функцию - тормоза остались.... проклятье.
Спасибо.
Однако убрал функцию - тормоза остались.... проклятье.
Я как-то начал переписывать программу с 4=>5, потом в 4-ке заменил все конструкции типа Low[1], Time[0] и прочие на современные, то есть на CopyLow, CopyTime, программа даже в 4-ке стала работать быстрее. Сейчас не применяю старые конструкции, а только новые. Таким образом код легко переносим на 5-ю платформу, нужно только сменить торговые функции
Я как-то начал переписывать программу с 4=>5, потом в 4-ке заменил все конструкции типа Low[1], Time[0] и прочие на современные, то есть на CopyLow, CopyTime, программа даже в 4-ке стала работать быстрее. Сейчас не применяю старые конструкции, а только новые. Таким образом код легко переносим на 5-ю платформу, нужно только сменить торговые функции
Заполнение массива при каждом чихе разве не потребляет ресурсы?
Может, есть смысл копировать информацию в массив при открытии бара и потом уже походу кода оттуда брать её? Торгую по открытию бара.
Заполнение массива при каждом чихе разве не потребляет ресурсы?
Может, есть смысл копировать информацию в массив при открытии бара и потом уже походу кода оттуда брать её? Торгую по открытию бара.
Массив можно заполнять на новом баре, так меньше уйдёт ресурсов. Если работа например с iLow[1] в нескольких местах, то желательно её один раз занести в переменную, и читать уже переменную, а не массив.
Предположим так
Далее работаем с переменной TIME_0 и TIME_1, а не TM[0] и TM[1]Массив можно заполнять на новом баре, так меньше уйдёт ресурсов. Если работа например с iLow[1] в нескольких местах, то желательно её один раз занести в переменную, и читать уже переменную, а не массив.
Предположим так
И всё ж таки , MT4 на порядок быстрей получается - я разочарован.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
Aleksey Vyazmikin, 2017.07.21 15:07
Зачем Вы фантазируете? Я понял Вашу идею, и подтвердил, что она рабочая, и даст эффект, если запрос будет происходить один раз и если известно, сколько понадобиться баров для работы советника.
Или Вы как то по другому предлагали использовать структуру? Тогда прошу пояснить, а не обижаться!
Никаких фантазий. Если надо получить 2 или более параметра одной свечи, то пользуясь функциями из ваших сообщений/вопросов надо будет вызывать эти функции отдельно для каждого параметра свечи. То-есть 2 и более раз производить Copy***(), но используя CopyRates() понадобится только один вызов копирования.
Что касается количества для копирования, так это совсем другой вопрос. Может надо сначала посчитать на каком баре есть нужное значение индикатора, а потом только его и копировать??? Если я правильно помню было сказано о неизвестном количестве для копирования. О каких фантазиях речь?
Да и на крайний случай можно копировать по, скажем, 10 баров и среди них искать, если не нашёл копируем ещё 10. Копирование затратная операция, дешевле перебрать массив.
В общем вариантов масса. Всё это невозможно написать в документацию, да и это уже не документация будет. Этому учат на уроках программирования. Но, к сожалению, не все преподаватели это умеют и не все ученики хотят это понять на уроках. А самое, самое начало закладывается на уроках арифметики во 2-5 классах когда учитель требует подробного объяснения к задаче. Но тут те-же проблемы.
Никаких фантазий. Если надо получить 2 или более параметра одной свечи, то пользуясь функциями из ваших сообщений/вопросов надо будет вызывать эти функции отдельно для каждого параметра свечи. То-есть 2 и более раз производить Copy***(), но используя CopyRates() понадобится только один вызов копирования.
Что касается количества для копирования, так это совсем другой вопрос. Может надо сначала посчитать на каком баре есть нужное значение индикатора, а потом только его и копировать??? Если я правильно помню было сказано о неизвестном количестве для копирования. О каких фантазиях речь?
Да и на крайний случай можно копировать по, скажем, 10 баров и среди них искать, если не нашёл копируем ещё 10. Копирование затратная операция, дешевле перебрать массив.
В общем вариантов масса. Всё это невозможно написать в документацию, да и это уже не документация будет. Этому учат на уроках программирования. Но, к сожалению, не все преподаватели это умеют и не все ученики хотят это понять на уроках. А самое, самое начало закладывается на уроках арифметики во 2-5 классах когда учитель требует подробного объяснения к задаче. Но тут те-же проблемы.
Про фантазию - был ответ на Ваше высказывание "Вместо попытки понять что сказано, разобраться что получится, выкатываются какие-то неимоверные возражения.", а не на то, что предложенный Вами вариант из области фантазий.
Я прекрасно понимаю Вашу концепцию, и это было заложено в ответе Вам.
Однако, не совсем понял, как Вы предлагаете работать с неизвестным объемом данных - можете привести пример в виде кода?
Прошу помощи в аудите и оптимизации индикатора по этой ссылки https://www.mql5.com/ru/code/16805 - беда в том, что индикатор начинает сильно тормозить при появлении большого числа баров - проявляется при тестировании.
И, как сделать, что б он рассчитывался не на каждом тике, а только по открытию бара? Метод из советника не подошел - после первого тика исчезают все значения и появляются только на следующем баре...
Про фантазию - был ответ на Ваше высказывание "Вместо попытки понять что сказано, разобраться что получится, выкатываются какие-то неимоверные возражения.", а не на то, что предложенный Вами вариант из области фантазий.
Я прекрасно понимаю Вашу концепцию, и это было заложено в ответе Вам.
Однако, не совсем понял, как Вы предлагаете работать с неизвестным объемом данных - можете привести пример в виде кода?
Ответ был дан до того как...
Alexey Viktorov:
Да и на крайний случай можно копировать по, скажем, 10 баров и среди них искать, если не нашёл копируем ещё 10. Копирование затратная операция, дешевле перебрать массив.
Но лучше не от-фонаря количество, а примерно максимальное чтобы постараться обойтись одним копированием.
Пример кода я писать не буду. Нормальному программисту нужна только подсказка. Вот примерный алгоритм:
Таким образом за одно копирование и один цикл можно при необходимости найти два пересечения. Даже нет необходимости в ArraySetAsSeries() поскольку при нахождении пересечения можно и, на мой взгляд, лучше запоминать не номер бара, а его время. Хотя зная время бара нет никакого труда определить его номер.
Внимание вопрос: Что будет быстрей работать, цикл с копированием буфера индикатора по 1 значению и копирование high бара по 1 и сравнивание этих значений, или одноразовое копирование определённого количества и сравнивание значений двух массивов между собой?
Вот только вчера написал:
Задача:
на каждом тике получить "InpCountCopy" элементов open, high, low, close и time.
Реализация:
Возможности:
можно выбирать как проверять: в OnTick или в OnTimer (1 секунда).