Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 245
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В скрипте сделал вот такую штуку:
time=0
SymbolInfoTick в понедельник проверю
Проверить можно вот таким кодом:
Но нужны тики по символу.
Проверить можно вот таким кодом:
Но нужны тики по символу.
Да, "SymbolInfoTick", сегодня не проверить.
Пробовал, пока тики не пойдут ничего не получится
iask=0Да, "SymbolInfoTick", сегодня не проверить.
Пробовал, пока тики не пойдут ничего не получится
iask=0Эта функция работает слишком быстро.
Для замера быстродействия надо применить многократные вызовы в цикле с большим количеством итераций и замерить общее время выполнения.
Тем более интересно, пример кода есть. Ждем результата.
Для проверки нового бара в советнике использовал функции на основе «CopyTime», «CopyRates», что находил на форумах. Пришел к выводу, что их расчет занимает много времени.
Вот данные проверки (примечательно, что вызов индикатора занимает 171 мс):
И тут задался мыслью, что если попробовать, что-то другое. Например «TimeCurrent»
Сделал следующий код для оптимизации:
Сделал следующий код для оптимизации в советнике:
Результат в одиночном прогоне без проверки нового бара, когда значения индикатора получаются на каждом тике: 817 196 мс
С проверкой нового бара:735 904 мс
Разница не особо впечатляет, есть улучшения, но этого мало.
Индикатор получаю следующим образом:
Пробовал поместить код с вызовом хендлов в блок где происходит проверка нового бара, выходит ошибка, если в этой строке
ставлю, что return ничего не возвращает ошибок нет, но советник не работает.
Предполагаю, что вызов хендлов, если это возможно и вообще весь основной код кроме статической переменной, необходимо поместить внутрь условного оператора проверки нового бара.
Если не ошибаюсь, читал где-то, что даже если вызываем хендл, но не запрашиваем индикатор в буфферах то он все равно расчитывается.
Кто может подсказать как сделать индикатор по выводу результатов одной лишь формулы buffer[i] = (1.3747-(MarketInfo("EURUSD", MODE_BID))+0.8835-(MarketInfo("USDCHF", MODE_BID)))*10000;
Вам нужно написать пользовательский индикатор. Для облегчения процесса - взять один из самых простых индикаторов - iMa и переписать немного. Вот еще тема, где говорится о MarketInfo. Пишите код, спрашивайте, если что не получится.
А что случилось со статическими переменными? Сегодня обновил старый билд терминала и сейчас при компиляции ошибки:
Теперь статические члены-данные класса необходимо размещать: