Обсуждение статьи "Какие проверки должен пройти торговый робот перед публикацией в Маркете" - страница 13
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Котировки идут, но тики отсутствуют. OnTick() работает только если есть очередной тик.
Уточняю:
- речь о тестере
- открытие сессии CFD происходит, как правило, с меньшим или большим, но гепом, т.е. цена открытия рассчитанная роботом находится на уровне "открыть вчера"
- по первому тику, ровно в 16:30:00, робот пытается открыть сделку.
Вот тут и происходит неприятность: - ровно в 16:30:00 рынок еще закрыт. Возможно на доли секунды. Но тестер в это время валит простыню ошибок, пока не переполнится стек. График при этом стоит на том самом первом тике.
Я решил эту проблему следующим образом:
- установил дистанцию от текущей цены до цены открытия.
- при ошибке обнуляю переменную цены открытия. Она опять получает значение, но уже на 50-100 пунктов от текущей цены.
- проходит только одна ошибка, далее торгует нормально.
Но этот как бы окольное решение. Есть еще пара вариантов:
- добавить в менюшку время открытия сессии и начинать торговлю с задержкой 5-10 минут
- контролировать время между закрытием первого бара и открытием нулевого. Если есть разрыв - делать задержку.
В этом случае это как бы помогает избежать множества ошибок. Но не решает "проблему полуночи". Брокеры закрывают торговлю на 10-15 минут, но котировки при этом идут, робот пытается торговать и многократно выдает ошибку "Рынок закрыт".
Предотвратить это имеющимися средствами нельзя.
Если бы была функция детектирующая реальную доступность рынка - никаких проблем не возникало бы.
ЗЫ
Ах, да, насчет OnTick. Верно говорите, но...
Из OnTick я вызываю функцию Trade() только один раз в минуту на открытии нового бара, а далее по коду вместо return; у меня идет повторный вызов Trade(), не всегда все что нужно выполняется за один тик, т.е. в моем варианте после открытия или закрытия сделки код прокручивается еще минимум 1 раз. По-видимому именно из-за этого и зацикливается на ошибке "Рынок закрыт"
Уточняю:
- речь о тестере
- открытие сессии CFD происходит, как правило, с меньшим или большим, но гепом, т.е. цена открытия рассчитанная роботом находится на уровне "открыть вчера"
- по первому тику, ровно в 16:00, робот пытается открыть сделку.
Может лучше посмотреть спецификацию?
Откуда первый тик в 16:00 если время первого тика в 16:30
Может лучше посмотреть спецификацию?
Откуда первый тик в 16:00 если время первого тика в 16:30
Да, конечно же 16:30
Спасибо что заметили очепятку - поправил текст.
Дописал с OnTick() строку
Эту конкретную проблему решило - завел счетчик ошибок в функцию открытия сделок, на годовом прогоне ошибок ноль.
А это значит что дело как раз в этих долях секунды (или секундах/минутах) при открытии сессии.
Но функцию информирующую о доступности рынка все же хотелось бы поиметь.
мне вот интересно, а люди которые мучительно преодолевают проблемы авто-тестера,
они своих роботов вообще используют ?
просто подчас разбираются ошибки которые и в реале будут вызывать как минимум ругань в журналах
могу понять когда авто-тест подсовывает хитрости про странные лоты/шаги/пункты/баланс_в_1 цент..
...но вещь на которую робот обязан был наступить и в обычной эксплуатации - попытки чё-то делать вне торговой сессии, или флаг торговля_запрещена это как ?
вы вообще своего робота кроме локального тестера ни разу не запускали ???
вы вообще своего робота кроме локального тестера ни разу не запускали ???
Торгую только с роботами. Без них я чувствую себя голым, т.к. мои роботы прежде всего выдают полную инфу как по текущей паре, так и по счету, а также основные параметры пары (маржа на лот, калькулятор "сколько можно открыть на х% и по максимуму", мин-лот, лот-степ, комиссия на лот и ее пересчет в пипсы, стоимость спред*лот и т.п. ).
Режим - полуавтомат, изменяю при необходимости базовые настройки.
Но вы, кажется, совсем не поняли о ЧЕМ я писал.
По последнему обновлению МТ5 перерисовали все без исключения иконки. Какие-то стали лучше, какие-то хуже.
Но!
Флага доступности торговли как не было, так и нет. А такая функция реально намного нужнее обновления дизайна.
Флага доступности торговли как не было, так и нет. А такая функция реально намного нужнее обновления дизайна.
Подсказываю ещё раз. Ищите и найдёте
10018
TRADE_RETCODE_MARKET_CLOSED
Рынок закрыт
Подсказываю ещё раз. Ищите и найдёте
10018
TRADE_RETCODE_MARKET_CLOSED
Рынок закрыт
Да не нужно мне это показывать - это ошибка, возвращаемая сервером при олупе торгового запроса. Именно по поводу этой ошибки я и поднял тему.
Зачем ломиться в закрытую дверь? Я бы хотел чтобы на закрытой двери висела табличка "Closed".
Есть: AccountInfoInteger(ACCOUNT_TRADE_ALLOWED);
Да не нужно мне это показывать - это ошибка, возвращаемая сервером при олупе торгового запроса. Именно по поводу этой ошибки я и поднял тему.
Зачем ломиться в закрытую дверь? Я бы хотел чтобы на закрытой двери висела табличка "Closed".
Есть: AccountInfoInteger(ACCOUNT_TRADE_ALLOWED);
Ищите и найдёте. Последняя подсказка: проверка ордера.
Ищите и найдёте. Последняя подсказка: проверка ордера.
Имеется в виду функция OrderCheck()? В документации написано, что она проверяет достаточность средств для совершения операции. Тоже хотелось бы функцию проверки закрытия рынка, в т.ч. для MT4