Скачать MetaTrader 5

Не возвращается тикет сделки

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Как заработать на MQL5.community? Зайди и узнай!
Vladislav Andruschenko
92083
Vladislav Andruschenko 2015.10.23 11:33 

Есть код открытия сделки:

 

long OPs(string sy,long op,double ll,double sl=0,double tp=0,long mn=0,string coomment="",double sootnowenie=1)
  {
   ZeroMemory(request);
   ZeroMemory(result);

   color    clOpen;
   datetime ot;
   double   pp,pa,pb;
   long      dg,err,it,ticket=0;
   string   lsComm="";
   if(sy=="" || sy=="0") sy=Symbol();
   if(op==OP_BUY) clOpen=Red; else clOpen=Green;
   for(it=1;it<=1;it++)

     {
      Print(TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS)+" Try to open position :"+" from master ticket :"+coomment);

      dg=MarketInfo(sy, MODE_DIGITS);
      pa=MarketInfo(sy, MODE_ASK);
      pb=MarketInfo(sy, MODE_BID);
      if(op==OP_BUY) pp=pa; else pp=pb;
      pp=NormalizeDouble(pp, dg);
      ot=TimeCurrent();

      if(op==OP_BUY)
        {
         if(My_STOPLOSS!=0)
            sl=MarketInfo(sy,MODE_BID)-My_STOPLOSS*MarketInfo(sy,MODE_POINT);
         if(My_TAKEPROFIT!=0)
            tp=MarketInfo(sy,MODE_ASK)+My_TAKEPROFIT*MarketInfo(sy,MODE_POINT);
        }

      if(op==OP_SELL)
        {
         if(My_STOPLOSS!=0)
            sl=MarketInfo(sy,MODE_ASK)+My_STOPLOSS*MarketInfo(sy,MODE_POINT);
         if(My_TAKEPROFIT!=0)
            tp=MarketInfo(sy,MODE_BID)-My_TAKEPROFIT*MarketInfo(sy,MODE_POINT);
        }

      if(coomment!="" && coomment!="0")

        {

         request.magic=mn;
         request.comment= coomment;
         request.symbol = sy;
         request.volume = ll;
         request.action=TRADE_ACTION_DEAL; // операция с рынка
         request.type_filling=(ENUM_ORDER_TYPE_FILLING)TypeFilling; // операция с рынка
         if(SymbolInfoDouble(sy,SYMBOL_POINT)!=0)
            request.deviation=(ulong)((SymbolInfoDouble(sy,SYMBOL_ASK)-SymbolInfoDouble(sy,SYMBOL_BID))/SymbolInfoDouble(sy,SYMBOL_POINT))*2; // по спреду 
         // request.type_filling=ORDER_FILLING_CANCEL;
         request.type=op;
         if(op==1)request.price=SymbolInfoDouble(sy,SYMBOL_ASK);
         if(op==0)request.price=SymbolInfoDouble(sy,SYMBOL_BID);
         bool sender=OrderSend(request,result);
         if(result.retcode==TRADE_RETCODE_DONE || result.retcode==TRADE_RETCODE_PLACED)
           {
            if(Sounds)PlaySound("ok.wav"); Print("OK   Result = "+(string)result.retcode+
               " symbol "+(string)request.symbol+" volume "+(string)request.volume+" action "+(string)request.action+" tp "+(string)request.tp+" sl "
               +(string)request.sl+" type "+(string)request.type+" price "+(string)request.price+"   ");
           }
         else if(Sounds)PlaySound("stops.wav");

        }
      int ticket=result.deal;
      if(ticket>0)
        {
         GlobalVariableSet("COPYLOT"+DoubleToString(ticket,0),StringToDouble(coomment));
         Print(TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS)+"Open positions ticket:"+ticket+" for master ticket:"+coomment);
         SetLabelTicketToGraph(DoubleToString(ticket,0),sootnowenie);
         SetLabelTicketToGraph(coomment,DoubleToString(ticket,0));
         if(Sounds)PlaySound("alert.wav");
         Sleep(500);
         ModifyOrder(0,sl,tp,sy);

         break;
        }
      else
        {
         err=GetLastError();
         Print("ERROR "+ticket+" Result = "+(string)result.retcode+
               " symbol "+(string)request.symbol+" volume "+(string)request.volume+" action "+(string)request.action+" tp "+(string)request.tp+" sl "
               +(string)request.sl+" type "+(string)request.type+" price "+(string)request.price+"   "+ErrorDescription(result.retcode));
         if(pa==0 && pb==0) Print("Check this on MarketWatch "+sy);
        }
     }
   return(ticket);
  }

 так вот при октрытии сделки не всегда возвращается ее тикет  int ticket=result.deal;  , и это происходит только на брокере BCS не могу понять почему 

 

 

в логах пишет:

LL 0 10:02:25.651 EXP5 _ COPYLOT_Client_market15  TEST (ED-12.15,M5) 2015.10.23 10:02:12 Try to open position : from master ticket :6474200

LM 0 10:02:25.714 EXP5 _ COPYLOT_Client_market15  TEST (ED-12.15,M5) OK   Result = 10008 symbol ED-12.15 volume 1 action 1 tp 0 sl 0 type 1 price 1.1115   

MR 0 10:02:25.714 EXP5 _ COPYLOT_Client_market15  TEST (ED-12.15,M5) ERROR 0 Result = 10008 symbol ED-12.15 volume 1 action 1 tp 0 sl 0 type 1 price 1.1115   Order placed

 

 ERROR 0 Result тоесть тикет = 0 и он возвращает ошибку. почему? кто сталкивался? 

 

на сервере MetaQuotes все ок 

Alexey Volchanskiy
16683
Alexey Volchanskiy 2015.10.23 12:33  
Vladislav Andruschenko:

Есть код открытия сделки:

 

 так вот при октрытии сделки не всегда возвращается ее тикет  int ticket=result.deal;  , и это происходит только на брокере BCS не могу понять почему 

 

 

в логах пишет:

LL 0 10:02:25.651 EXP5 _ COPYLOT_Client_market15  TEST (ED-12.15,M5) 2015.10.23 10:02:12 Try to open position : from master ticket :6474200

LM 0 10:02:25.714 EXP5 _ COPYLOT_Client_market15  TEST (ED-12.15,M5) OK   Result = 10008 symbol ED-12.15 volume 1 action 1 tp 0 sl 0 type 1 price 1.1115   

MR 0 10:02:25.714 EXP5 _ COPYLOT_Client_market15  TEST (ED-12.15,M5) ERROR 0 Result = 10008 symbol ED-12.15 volume 1 action 1 tp 0 sl 0 type 1 price 1.1115   Order placed

 

 ERROR 0 Result тоесть тикет = 0 и он возвращает ошибку. почему? кто сталкивался? 

 

на сервере MetaQuotes все ок 

Что-то с брокером не так?

----------------

При успешном выполнении функции в переменной result код ответа содержит значение TRADE_RETCODE_PLACED (код 10008) – "ордер размещен". Успешное выполнение означает только факт отсылки, но не даёт никакой гарантии, что запрос дошел до торгового сервера и был принят для обработки. Торговый сервер при обработке полученного запроса отправляет клиентскому терминалу ответное сообщение об изменении текущего состояния позиций, ордеров и сделок, которое приводит к генерации события Trade.

Vladislav Andruschenko
92083
Vladislav Andruschenko 2015.10.23 12:38  

в том то и дело что не гарантирует но сделку открывает, а вот тикет не возвращает.

Alexey Volchanskiy
16683
Alexey Volchanskiy 2015.10.24 00:20  
Vladislav Andruschenko:

в том то и дело что не гарантирует но сделку открывает, а вот тикет не возвращает.

Вы в терминале видете, что открывает? В принципе можно тикет через OrderGetTicket добыть.
Vladislav Andruschenko
92083
Vladislav Andruschenko 2015.10.24 08:28  

да сделка открывается,даже результат возвращает типо ордер установлен, а вот тикет не возвращает.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий