Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
В сервисе Фриланс участвуют тысячи разработчиков. Присоединяйся!
3172552
116
3172552 2006.01.14 14:16 
int err; int try; int MaxTries=5; ...... for(try=1;try<MaxTries;try++) { OrderSend(Symbol(),OP_BUYSTOP,1,buyprice,3,buyprice-loss*Point,buyprice+profit*Point,"",0,0,Blue); Sleep(1000); err=GetLastError(); if (err>0) { Print("OrderSend failed with error #",err," : ",ErrorDescription(err),"Trying again #",try); RefreshRates(); } else {break;} }
Rashid Umarov
Админ
11713
Rashid Umarov 2006.01.14 14:40  
RefreshRates(); я бы ставил непосредственно перед торговой операцией (на всякий случай).
Код вроде работать должен, только ошибку надо анализировать более детально:
Коды ошибок, возвращаемые торговым сервером.

Константа Значение Описание
ERR_NO_ERROR 0 Нет ошибки.
ERR_NO_RESULT 1 Нет ошибки, но результат неизвестен.
3172552
116
3172552 2006.01.14 15:45  
То есть так надо?
int err; int try; int MaxTries=5; bool order; ..................... void start() { int Pause=1000; ........................ for(try=1;try<MaxTries;try++) { RefreshRates(); order=OrderSend(Symbol(),OP_BUYSTOP,1,buyprice,3,buyprice-loss*Point,buyprice+profit*Point,"",0,0,Blue); Sleep(Pause); err=GetLastError(); if (order==false) { Print("OrderSend failed with error #",err," : ",ErrorDescription(err),"Trying again #",try); Pause=Pause*2; } else {break;} }
Rashid Umarov
Админ
11713
Rashid Umarov 2006.01.14 16:16  
Да, так гораздо лучше. По крайней мере, я стараюсь так делать.
3172552
116
3172552 2006.01.14 16:24  
Спасибо. А что скажут разработчики? И ещё 1 вопрос- правда ли, что отложенные приказы серверу легче обрабатывать, соответственно, больше вероятность, что приказ пройдёт без проблем? Или тип ордера не имеет значения
Igor Kim
2739
Igor Kim 2006.01.14 18:27  
а я так делаю
//+------------------------------------------------------------------+ //| Установка ордера | //| Параметры: | //| op - операция | //| pp - цена | //| ldStop - уровень стоп | //| ldTake - уровень тейк | //+------------------------------------------------------------------+ void SetOrder(int op, double pp, double ldStop, double ldTake) { color clOpen; int err, it, ticket; string lsComm=GetCommentForOrder(); if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell; Lots=GetSizeLot(); for (it=1; it<=NumberOfTry; it++) { while (!IsTradeAllowed()) Sleep(5000); RefreshRates(); ticket=OrderSend(Symbol(),op,Lots,pp,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpen); if (ticket>0) { if (UseSound) PlaySound(NameFileSound); break; } else { err=GetLastError(); Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it); Sleep(1000*PauseAfterError); } } }
Rashid Umarov
Админ
11713
Rashid Umarov 2006.01.14 18:30  
Да, у 3172552 я не заметил одну ошибку, после твоего поста увидел.
Igor Kim
2739
Igor Kim 2006.01.14 18:47  
Rosh:
Да, у 3172552 я не заметил одну ошибку, после твоего поста увидел.
эта?
bool order=OrderSend(.......
Rashid Umarov
Админ
11713
Rashid Umarov 2006.01.14 19:18  
Угу
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().
....
Andrey Khatimlianskii
55861
Andrey Khatimlianskii 2006.01.15 11:43  
Для отлоденых ордеров я бы делал ещё проверку - не близко ли к текущей цене OpenPrice.
и вместо if (order==false) я бы сделал if ( order < 0 || err > 0 )

а вообще об этом много говорили, только разбросано всё по разным веткам-форумам....
3172552
116
3172552 2006.01.16 02:50  
Большое всем спасибо. Вот, переписал код. На ресте выскаквает такая строчка-
2006.01.16 02:45:25 2005.11.30 09:00 nnt-simple EURUSD,H1: unknown ticket 358 for OrderClose function
Подскажете почему? Код работает вроде ок, прикрепил.


Уже устранил, вот исправленный вариант. Но с трудом понимаю почему была ошибка...
Файлы:
/ /123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий