Перейти к содержанию
Форекс Форум трейдеров Академии «MasterForex-V»

HELP!!! Торговый поток занят! Как с этим бороться?


Рекомендуемые сообщения

Вопрос ко всем, кто разбирается в написании советников в MQL.

Запустил советник на демо, по нескольким валютным парам - пыхтит, депозит увеличивает :wink:

Позже обнаружил, что часть ордеров, которые советник должен был закрыть по получению сигнала - открыты. Разбираюсь, оказывается в журнале есть записи о том, что советник то ордера закрывал, а Альпари их не приняло. Пишет что-то, типа "Торговый поток занят". Ну занят - так занят. А советник то продолжает торговать дальше, в минус. У него то, бары сменились и сигнала на закрытие он не помнит... :angry:

 

Плиз, кто может помочь в этом вопросе - подскажите что надо сделать. Может можно что то в коде советника прописать на этот случай...

Ссылка на комментарий
Поделиться на другие сайты

Нужно создать статик массив, куда заносить номера ордеров, если они не были закрыты и каждый раз проверять закрытие этих ордеров. Разумеется, после закрытия - удалять из массива.
Ссылка на комментарий
Поделиться на другие сайты

А советник то продолжает торговать дальше, в минус. У него то, бары сменились и сигнала на закрытие он не помнит... :angry:

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

 

не забывать и о том, что не сработавшие сигналы нельзя "тупо" выполнять, лучше делать анализ - и в том случае, если они остались актуальны, исполнять.

Ссылка на комментарий
Поделиться на другие сайты

Ну вообще глобально есть как минимум 2 пути.

 

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

 

2. При каждом новом тике (т.е. при вызове start() ) проверять необходимость закрытия ордера - ну и закрывать.

 

Кстати судя по всему ты используешь кучу ордеров которые сразу пытаешься менять. Там у метаквокеров существует правило 2-х секунд - ордера чаще меняться (закрываться не могут - кроме как по тейку или стопу). Т.е. команды ордеров надо давать не чаще 1-й в 2 секунды.

Ссылка на комментарий
Поделиться на другие сайты

Ну вообще глобально есть как минимум 2 пути.

 

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

самый удобный метод.

 

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

 

2. При каждом новом тике (т.е. при вызове start() ) проверять необходимость закрытия ордера - ну и закрывать.

по возможности применяю этот метод. самый надёжный.

 

если правила сопровождения ордеров сложны, то обычно формирую свой "слепок" ситуации, которую хочу иметь по ордерам. а потом отдельный блок "синхронизирует" моё видение мира с реальностью. вернее, подстраивает реальность под меня! :biggrin:

 

Кстати судя по всему ты используешь кучу ордеров которые сразу пытаешься менять. Там у метаквокеров существует правило 2-х секунд - ордера чаще меняться (закрываться не могут - кроме как по тейку или стопу). Т.е. команды ордеров надо давать не чаще 1-й в 2 секунды.

кстати, именно поэтому достаточно осторожно отношусь к советникам, которые совершают по 1 операции за тик. реализуется просто (я и сам такое делаю), но на мой взгляд не всегда оптимально. если не лениво и работаем с реалом, лучше реализовать свою логику посылки ордеров. кстати, для разных ДЦ может иметь смысл провести отдельную подстройку.

Ссылка на комментарий
Поделиться на другие сайты

Всем спасибо за проявленное участие в обсуждении. Однако вашими советами воспользоваться не могу, поскольку это для меня пока "высшая математика". Я только изучаю MQL.

Если кто сможет помочь - могу выслать советник.

 

P.S. Кстати, в нем совсем нет кучи ордеров, советник простенький, но (судя по тестам) довольно неплохой (если не вмешивается ДЦ :wink: ).

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...