Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Владислав, Вы можете конкретно назвать места ошибок и как их исправлять. Почему появляется ошибка 4051 ?
Это ошибка исполнения: приведите лог - у меня Ваш советник просто вешает терминал. И все-таки посмотрите как правильно работать с ордерами.
У меня та же картина, хотя я поменял условия на тикет из булевых на целочисельные. Почему виснет ?
У меня та же картина, хотя я поменял условия на тикет из булевых на целочисельные. Почему виснет ?
Поскольку нет отладчика - поставьте принты перед и после каждого логического блока или действия. Потом смотрим лог - место, где остановится будет видно.
ЗЫ Еще одно соображение while(true) - в данном случае не очень рациональная реализация. Возможно возникновение ситуаций, когда советник входит в бесконечный цикл, что похоже и происходит в Вашем случае.
Поскольку нет отладчика - поставьте принты перед и после каждого логического блока или действия. Потом смотрим лог - место, где остановится будет видно.
ЗЫ Еще одно соображение while(true) - в данном случае не очень рациональная реализация. Возможно возникновение ситуаций, когда советник входит в бесконечный цикл, что похоже и происходит в Вашем случае.
Владислав, помогите, пожалуйста, доработать советник, а то я в силу своей неопытности не понимаю, что нужно сделать
Владислав, помогите, пожалуйста, доработать советник, а то я в силу своей неопытности не понимаю, что нужно сделать
1. проверяем наличие ордеров открытых этим советником. *Для идентификации своих ордеров советники используют магикномер.
2. Проверяем текущее время
3. При наличии открытых ордеров проверяем время
3.1 День и время открытия ордера
3.2 Текущее время менее 00.00 дня, следующего за днем открытия ордера - выходим
3.3 Время равно или более 00.00 дня, следующего за днем открытия ордера - закрываем с текущей прибылью/убытком и переходим к п.4
4. Если нет открытых, проверяем время
4.1 Текущее время менее 15 часов дня - выходим
4.2 Текущее время более или равно 15 часов, но менее того периода, который Вы зададите как период для открытия ордеров - выставляем ордера, выходим.
Советник можно запускать каждый раз при формировании нового часового бара. Если сформировался новый часовой бар, то :
1. проверяем наличие ордеров открытых этим советником. *Для идентификации своих ордеров советники используют магикномер.
2. Проверяем текущее время
3. При наличии открытых ордеров проверяем время
3.1 День и время открытия ордера
3.2 Текущее время менее 00.00 дня, следующего за днем открытия ордера - выходим
3.3 Время равно или более 00.00 дня, следующего за днем открытия ордера - закрываем с текущей прибылью/убытком и переходим к п.4
4. Если нет открытых, проверяем время
4.1 Текущее время менее 15 часов дня - выходим
4.2 Текущее время более или равно 15 часов, но менее того периода, который Вы зададите как период для открытия ордеров - выставляем ордера, выходим.
я ведь по похожему алгоритму и делал но почему он тогда виснет ? Вы можете написать свой вариант кода ? Благодарю
я ведь по похожему алгоритму и делал но почему он тогда виснет ? Вы можете написать свой вариант кода ? Благодарю
Я то могу. Только думаю, лучше Вам самостоятельно справиться. По пунктам алгоритма:
1. Где у Вас проверка наличия ордеров, выставленных советником ?
Я то могу. Только думаю, лучше Вам самостоятельно справиться. По пунктам алгоритма:
1. Где у Вас проверка наличия ордеров, выставленных советником ?
А разве не OrdersTotal проверяет наличие ордера ? Ордер может быть только один
А разве не OrdersTotal проверяет наличие ордера ? Ордер может быть только один
Проверяет, но чуть-чуть...
Владислав, помогите, пожалуйста, доработать советник, а то я в силу своей неопытности не понимаю, что нужно сделать
ЗЫ Еще одно соображение while(true) - в данном случае не очень рациональная реализация. Возможно возникновение ситуаций, когда советник входит в бесконечный цикл, что похоже и происходит в Вашем случае.
...............................
1) Конечно - это же бесконечный цикл, так как из него нет выхода по break; поэтому и виснет.
while(выражение) . Если выражение истинно, то оператор выполняется до тех пор, пока выражение не станет ложным. Если выражение ложно, то управление передается следующему оператору.
2) if(ticket==false) это что такое при int tiket? Возможно это будет работать так- если тикет нечётный - if сработает, если чётный то нет.
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Основная функция, используемая для открытия позиции или установки отложенного ордера.
Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи. Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError().
3) Перед тем как закрывать ордера их нужно выбрать с помощью OrderSelect(tiket,SELECT_BY_TICKET),