Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1400
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Как в тестере автоматизировать проход по нескольким парам?
Например, надо пройти по 20 парам. Сейчас перезапускаю тестер для каждой пары.
Не могу сообразить как сделать symbol переменной.
Есть какие то решения?
мультитестер сабера решение, там и по инструментам и по настройкам можно задать проходы.
Если сделать так, что пара будет определяться параметром советника, который может меняться при оптимизации, то, чтобы запустить проход по нескольким парам, просто запускаем оптимизацию по этому параметру.
Этот параметр нельзя сделать типа string, но можно сделать int или enum.
По этому параметру при инициализации советника мы присваиваем другой своей строковой переменной имя нужного символа, соответствующего значению параметра.
В коде советника придется всюду, где используется Symbol() или _Symbol заменить её на свою переменную с именем пары.
Принцип понятен или нужен пример кода?
Супер! Перебирать оптимизатором мне в голову не пришло.
Если сделать так, что пара будет определяться параметром советника, который может меняться при оптимизации, то, чтобы запустить проход по нескольким парам, просто запускаем оптимизацию по этому параметру.
Этот параметр нельзя сделать типа string, но можно сделать int или enum.
По этому параметру при инициализации советника мы присваиваем другой своей строковой переменной имя нужного символа, соответствующего значению параметра.
В коде советника придется всюду, где используется Symbol() или _Symbol заменить её на свою переменную с именем пары.
Принцип понятен или нужен пример кода?
А как быть с OnTick() ?
Везде могу подставить свой символ, но OnTick() всегда будет браться из символа на котором запущен тестер.
Из справки: "Событие OnTick() генерируется ... при поступлении нового тика по символу, к графику которого прикреплен эксперт".
Тут не может возникнуть конфликта? Например, форекс остановился на выходные, а крипта нет.
Здравствуйте,
Я пытаюсь сделать очень простой советник, который сравнивает две цены закрытия и на основе этого открывает ордер на покупку или продажу.
На первом ордере все идет хорошо, но как только условие переключается с продажи на покупку, он выставляет сразу несколько ордеров.
m_trade - это объект Ctrade.
Вы забыли, что время 'startTime' должно быть сброшено.
Вы забыли, что время 'startTime' должно быть сброшено.
Спасибо, Владимир, я постараюсь исправить это, основываясь на вашей подсказке.
Тем не менее, я все еще удивлен. Потому что в операторе if для входа в сделку мы проверяем наличие существующего размещения ордера того же типа. Если это так, то ордер не должен быть размещен. Поэтому я подумал, что с помощью этого оператора можно одновременно ввести только 1 тип ордера.
Является ли эта мысль неверной?
Спасибо, Владимир, я попробую исправить это, основываясь на вашей подсказке.
Тем не менее, я все еще удивлен. Потому что в операторе if для входа в сделку мы проверяем наличие существующего размещения ордера того же типа. Если это так, то ордер не должен быть размещен. Поэтому я подумал, что с помощью этого оператора можно одновременно ввести только 1 тип ордера.
Является ли эта мысль неверной?
Вы никак не контролируете ОРДЕРЫ, вы проверяете номер и тип ПОЗИЦИИ в коде. Кроме того - вы неправильно работаете с ПОЗИЦИЯМИ (ошибка в использовании 'PositionSelect(_Symbol)', если тип вашего счета - хеджирование). В вашем алгоритме есть серьезные ошибки проектирования.
Что вы должны сделать:
1. Работать ИСКЛЮЧИТЕЛЬНО в момент рождения нового бара. Если нового бара нет - ничего не делайте, не совершайте лишних движений.
2. Этот пункт будет раскрыт после выполнения пункта 1.
Здравствуйте. Не подскажите Comment в void OnTick() может замедлять работу советника. Поставил в int OnInit() намного быстрее работает.
Да, в МТ5 он значительно замедляет работу.
В OnInit он отрабатывает только 1 раз при инициализации и больше не работает.