две ошибки,
1- перебирать нужно от ОрдерТотал к нулю
2-нет торгового таймаута (сначала слип, затем рефреш в каждом цикле)
1- перебирать нужно от ОрдерТотал к нулю
2-нет торгового таймаута (сначала слип, затем рефреш в каждом цикле)
две ошибки,
1- перебирать нужно от ОрдерТотал к нулю
2-нет торгового таймаута (сначала слип, затем рефреш в каждом цикле)
1- перебирать нужно от ОрдерТотал к нулю
2-нет торгового таймаута (сначала слип, затем рефреш в каждом цикле)
1. Вовсе необязательно. Просто нужно делать рефреш после каждой попытки закрытия. А также x-- в случае УСПЕШНОГО закрытия
2. Пауза тоже в принципе не нужна. Зачем? Просто для приличия? :)
А вот учёт возникших ошибок как-раз желателен! И в случае некоторых из них возможно как-раз и понадобится пауза, а может даже и прекращение цикла
Да, вопрос требует тщательно проверенного кода поскольку при разных ошибках необходимо выполнять разные действия,
В качестве наброска... не более того:
В качестве наброска... не более того:
for(int i=0; i<number_try; i++)// делаем 3 попытки выставления ордера { // пытаемся выставить ордера пока не получили полож. результата или ошибку - Слишком много запросов или что Ордер уже обрабатывается if(условие BUY) {ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,0,0,"gs_Trade_GEP",magic,0,Blue); OpenBuy=false;} if(условие SELL) {ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,slippage,0,0,"gs_Trade_GEP",magic,0,Red); OpenSell=false;} if(ticket>1) {Comment("\n\nOrder is execute"); return(0);} //ордер выставлен - выходим return(0); break; else { int error=GetLastError(); if(error==129 || error==135 || error==138) { continue; i--;} //цена изменилась, вызываем начало следующей итерации, т.е. продолжаем заново без учета попытки if(error==141) {Comment("\n\nTry Offen!!! Exit! "); return(0);} //Слишком много запросов - выходим без выставленного ордера if(error==139)// ERR_ORDER_LOCKED 139 Ордер заблокирован и уже обрабатывается, поэтому проверяем исполнение после небольшой паузы { Sleep(250); total=OrdersTotal(); for(int cnt=0; cnt<total; cnt++) // проверяем принят ли ордер { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol() && OrderMagicNumber()==magic) {Comment("\n\nOrder is execute"); return(0);}//ордер выставлен - выходим // если нет - делаем следующуюю попытку } } } }
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Почему она закрывает не все открытые покупки????
Подскажите пожалуйста как закрыть все открытые покупки.