Shiko Опубликовано 23 октября, 2007 Жалоба Поделиться Опубликовано 23 октября, 2007 Вопрос ко всем, кто разбирается в написании советников в MQL.Запустил советник на демо, по нескольким валютным парам - пыхтит, депозит увеличивает Позже обнаружил, что часть ордеров, которые советник должен был закрыть по получению сигнала - открыты. Разбираюсь, оказывается в журнале есть записи о том, что советник то ордера закрывал, а Альпари их не приняло. Пишет что-то, типа "Торговый поток занят". Ну занят - так занят. А советник то продолжает торговать дальше, в минус. У него то, бары сменились и сигнала на закрытие он не помнит... Плиз, кто может помочь в этом вопросе - подскажите что надо сделать. Может можно что то в коде советника прописать на этот случай... Ссылка на комментарий Поделиться на другие сайты Поделиться
ceva Опубликовано 23 октября, 2007 Жалоба Поделиться Опубликовано 23 октября, 2007 Один из вариантов перезагрузи комп Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 23 октября, 2007 Жалоба Поделиться Опубликовано 23 октября, 2007 Нужно создать статик массив, куда заносить номера ордеров, если они не были закрыты и каждый раз проверять закрытие этих ордеров. Разумеется, после закрытия - удалять из массива. Ссылка на комментарий Поделиться на другие сайты Поделиться
Shu Опубликовано 23 октября, 2007 Жалоба Поделиться Опубликовано 23 октября, 2007 А советник то продолжает торговать дальше, в минус. У него то, бары сменились и сигнала на закрытие он не помнит... кстати, очень желательно, чтобы советник помнил о том, что он должен сделать, но не сделал. случаи разные бывают, ДЦ тоже не ангелы, лучше страховаться! не забывать и о том, что не сработавшие сигналы нельзя "тупо" выполнять, лучше делать анализ - и в том случае, если они остались актуальны, исполнять. Ссылка на комментарий Поделиться на другие сайты Поделиться
alexgomel Опубликовано 23 октября, 2007 Жалоба Поделиться Опубликовано 23 октября, 2007 Ну вообще глобально есть как минимум 2 пути. 1. Как выше подсказывалось - создаешь массив, который будет хранить информацию о том - надо ли закрывать ордер(а) или нет. Т.е. если условие на закрытие истинно, то не закрывать ордер - а менять в массиве соответствующую переменную - что надо закрыть ордер. А в блоке что закрывает ордера - при каждом тике проверять массив - и закрывать ордер согласно массива.... 2. При каждом новом тике (т.е. при вызове start() ) проверять необходимость закрытия ордера - ну и закрывать. Кстати судя по всему ты используешь кучу ордеров которые сразу пытаешься менять. Там у метаквокеров существует правило 2-х секунд - ордера чаще меняться (закрываться не могут - кроме как по тейку или стопу). Т.е. команды ордеров надо давать не чаще 1-й в 2 секунды. Ссылка на комментарий Поделиться на другие сайты Поделиться
Shu Опубликовано 24 октября, 2007 Жалоба Поделиться Опубликовано 24 октября, 2007 Ну вообще глобально есть как минимум 2 пути. 1. Как выше подсказывалось - создаешь массив, который будет хранить информацию о том - надо ли закрывать ордер(а) или нет. Т.е. если условие на закрытие истинно, то не закрывать ордер - а менять в массиве соответствующую переменную - что надо закрыть ордер. А в блоке что закрывает ордера - при каждом тике проверять массив - и закрывать ордер согласно массива....самый удобный метод. здесь необходимо обязательно помнить о мелких форс-мажорах - закрытие терминала, снятие (случайное или нет) советника и восстановление работы его после этого и тому подобное. чтобы потеря сформированного на каком-то отрезке работы советника массива по закрытию (модификации) ордеров не привела к нарушению логики. 2. При каждом новом тике (т.е. при вызове start() ) проверять необходимость закрытия ордера - ну и закрывать.по возможности применяю этот метод. самый надёжный. если правила сопровождения ордеров сложны, то обычно формирую свой "слепок" ситуации, которую хочу иметь по ордерам. а потом отдельный блок "синхронизирует" моё видение мира с реальностью. вернее, подстраивает реальность под меня! Кстати судя по всему ты используешь кучу ордеров которые сразу пытаешься менять. Там у метаквокеров существует правило 2-х секунд - ордера чаще меняться (закрываться не могут - кроме как по тейку или стопу). Т.е. команды ордеров надо давать не чаще 1-й в 2 секунды.кстати, именно поэтому достаточно осторожно отношусь к советникам, которые совершают по 1 операции за тик. реализуется просто (я и сам такое делаю), но на мой взгляд не всегда оптимально. если не лениво и работаем с реалом, лучше реализовать свою логику посылки ордеров. кстати, для разных ДЦ может иметь смысл провести отдельную подстройку. Ссылка на комментарий Поделиться на другие сайты Поделиться
Shiko Опубликовано 24 октября, 2007 Автор Жалоба Поделиться Опубликовано 24 октября, 2007 Всем спасибо за проявленное участие в обсуждении. Однако вашими советами воспользоваться не могу, поскольку это для меня пока "высшая математика". Я только изучаю MQL.Если кто сможет помочь - могу выслать советник. P.S. Кстати, в нем совсем нет кучи ордеров, советник простенький, но (судя по тестам) довольно неплохой (если не вмешивается ДЦ ). Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 24 октября, 2007 Жалоба Поделиться Опубликовано 24 октября, 2007 А ДЦ всегда вмешивается!.... Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения