Обсуждение статьи "Какие проверки должен пройти торговый робот перед публикацией в Маркете" - страница 13

 
Alexey Viktorov #:

Котировки идут, но тики отсутствуют. OnTick() работает только если есть очередной тик.

Уточняю: 
- речь о тестере
- открытие сессии CFD происходит, как правило, с меньшим или большим, но гепом, т.е. цена открытия рассчитанная роботом находится на уровне "открыть вчера"
- по первому тику, ровно в 16:30:00,  робот пытается открыть сделку.

Вот тут и происходит неприятность: - ровно в 16:30:00  рынок еще закрыт. Возможно на доли секунды. Но тестер в это время валит простыню ошибок, пока не переполнится стек. График при этом стоит на том самом первом тике.

Я решил эту проблему следующим образом:
- установил дистанцию от текущей цены до цены открытия.
- при ошибке обнуляю переменную цены открытия. Она опять получает значение, но уже на 50-100 пунктов от текущей цены.
- проходит только одна ошибка, далее торгует нормально.

Но этот как бы окольное решение. Есть еще пара вариантов:
 - добавить в менюшку время открытия сессии и начинать торговлю с задержкой 5-10 минут
- контролировать время между закрытием первого бара и открытием нулевого. Если есть разрыв - делать задержку.
В этом случае это как бы помогает избежать множества ошибок. Но не решает "проблему полуночи". Брокеры закрывают торговлю на 10-15 минут, но котировки при этом идут, робот пытается торговать и многократно выдает ошибку "Рынок закрыт".
Предотвратить это имеющимися средствами нельзя.
Если бы была функция детектирующая реальную доступность рынка - никаких проблем не возникало бы.

ЗЫ
Ах, да, насчет OnTick. Верно говорите, но...
Из OnTick я вызываю функцию Trade() только один раз в минуту на открытии нового бара, а далее по коду вместо return; у меня идет повторный вызов Trade(), не всегда все что нужно выполняется за один тик, т.е. в моем варианте после открытия или закрытия сделки код прокручивается еще минимум 1 раз. По-видимому именно из-за этого и зацикливается на ошибке "Рынок закрыт"



 
Vasyl Temchenko #:

Уточняю: 
- речь о тестере
- открытие сессии CFD происходит, как правило, с меньшим или большим, но гепом, т.е. цена открытия рассчитанная роботом находится на уровне "открыть вчера"
- по первому тику, ровно в 16:00,  робот пытается открыть сделку.

Может лучше посмотреть спецификацию?


Откуда первый тик в 16:00 если время первого тика в 16:30

 
Alexey Viktorov #:

Может лучше посмотреть спецификацию?
Откуда первый тик в 16:00 если время первого тика в 16:30

Да, конечно же 16:30
Спасибо что заметили очепятку - поправил текст.
Дописал с OnTick() строку

   if(iTime(NULL,PERIOD_M5,0)-iTime(NULL,PERIOD_M5,1) > 360) return;  

Эту конкретную проблему решило - завел счетчик ошибок в функцию открытия сделок, на годовом прогоне ошибок ноль.
А это значит что дело как раз в этих долях секунды (или секундах/минутах) при открытии сессии.
Но функцию информирующую о доступности рынка все же хотелось бы поиметь.

 

мне вот интересно, а люди которые мучительно преодолевают проблемы авто-тестера,

они своих роботов вообще используют ? 

просто подчас разбираются ошибки которые и в реале будут вызывать как минимум ругань в журналах

могу понять когда авто-тест подсовывает хитрости про странные лоты/шаги/пункты/баланс_в_1 цент..

...но вещь на которую робот обязан был наступить и в обычной эксплуатации - попытки чё-то делать вне торговой сессии, или флаг торговля_запрещена это как  ? 

вы вообще своего робота кроме локального тестера ни разу не запускали ???

 
Это все бесценный опыт.
И разная цель написания.... 
Для кого-то это просто Pop It
А для кого-то старания.... 
 
Maxim Kuznetsov #:

вы вообще своего робота кроме локального тестера ни разу не запускали ???

Торгую только с роботами. Без них я чувствую себя голым, т.к. мои роботы прежде всего выдают полную инфу как по текущей паре, так и по счету, а также основные параметры пары (маржа на лот, калькулятор "сколько можно открыть на х% и по максимуму", мин-лот, лот-степ, комиссия на лот и ее пересчет в пипсы, стоимость спред*лот и т.п. ). 
 Режим - полуавтомат, изменяю при необходимости базовые настройки. 
Но вы, кажется, совсем не поняли о ЧЕМ я писал.
По последнему обновлению МТ5 перерисовали все без исключения иконки. Какие-то стали лучше, какие-то хуже.
Но!
Флага доступности торговли как не было, так и нет. А такая функция реально намного нужнее обновления дизайна.

 
Vasyl Temchenko #:


Флага доступности торговли как не было, так и нет. А такая функция реально намного нужнее обновления дизайна.

Подсказываю ещё раз. Ищите и найдёте

10018

TRADE_RETCODE_MARKET_CLOSED

Рынок закрыт

 
Alexey Viktorov #:

Подсказываю ещё раз. Ищите и найдёте

10018

TRADE_RETCODE_MARKET_CLOSED

Рынок закрыт

Да не нужно мне это показывать - это ошибка, возвращаемая сервером при олупе торгового запроса. Именно по поводу этой ошибки я и поднял тему.
Зачем ломиться в закрытую дверь?  Я бы хотел чтобы на закрытой двери висела табличка "Closed".   

Есть:  AccountInfoInteger(ACCOUNT_TRADE_ALLOWED);

 Покажите аналогичное в ENUM_SYMBOL_INFO_INTEGER и я посыплю голову пеплом. 
 
Vasyl Temchenko #:

Да не нужно мне это показывать - это ошибка, возвращаемая сервером при олупе торгового запроса. Именно по поводу этой ошибки я и поднял тему.
Зачем ломиться в закрытую дверь?  Я бы хотел чтобы на закрытой двери висела табличка "Closed".   

Есть:  AccountInfoInteger(ACCOUNT_TRADE_ALLOWED);

 Покажите аналогичное в ENUM_SYMBOL_INFO_INTEGER и я посыплю голову пеплом. 

Ищите и найдёте. Последняя подсказка: проверка ордера.

 
Alexey Viktorov #:

Ищите и найдёте. Последняя подсказка: проверка ордера.

Имеется в виду функция OrderCheck()? В документации написано, что она проверяет достаточность средств для совершения операции. Тоже хотелось бы функцию проверки закрытия рынка, в т.ч. для MT4

Причина обращения: