Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 938

 
Konstantin Nikitin:

Так вытащите нужный функционал из класса и пропишите к себе.

Спасибо. Мой вопрос намного проще - открыл ордер через OrderSend(request,result) и хочу сразу оперировать его параметрами - к примеру, вывести их на печать. Вот так:
 //============================================================
        //--- declare and initialize the trade request and result of trade request
        MqlTradeRequest request={0};
        MqlTradeResult  result={0};
        //--- parameters of request
        request.action   = TRADE_ACTION_DEAL;    // type of trade operation
        request.symbol   = Pair1;                // symbol
        request.volume   = lots;                 // volume of lot
        request.type     = oper;                 // order type
        request.price    = priceOpen;            // price for opening
        request.deviation= Slippage;             // allowed deviation from the price
        request.magic    = magic;   
  //===================================      
        if(OrderSend(request,result))
                
        Print ("retcode = " + retcode + "; ");        
        Print ("deal = " + deal + "; ");
        Print ("order = " + order + "; "); 
        Print ("volume = " + volume + "; ");  
        Print ("price = " + price + "; ")
Часть параметров, такие как retcode, order и volume выводятся, а deal и price нет.
Особенно интересует price. Все результаты есть в MqlTradeResult. На печать вывожу их одинаково, но что-то выводится, а что-то нет.  Вопрос - почему одни параметры выводятся, а другие нет?
 

Как объединить массивы?

string eData[][50][3];
string bData[][20][5];
 ArrayCopy(eData,bData,ArraySize(eData)); // error: incompatible 3 arrays ranges for ArrayCopy function (50 and 20)

Я так понимаю, что ArrayCopy копирует только одномерные массивы?

 
Vitaly Muzichenko:

Как объединить массивы?

Я так понимаю, что ArrayCopy копирует только одномерные массивы?

Нет, ArrayCopy копирует любые массивы которые допустимы в mql5\4. Но для копирования они должны быть одинаковы. У вас получается во втором измерении первого массива 50 а второго массива только 20. Так-же и с третьим измерением.
 
Algotrader18:
Спасибо. Мой вопрос намного проще - открыл ордер через OrderSend(request,result) и хочу сразу оперировать его параметрами - к примеру, вывести их на печать. Вот так:Часть параметров, такие как retcode, order и volume выводятся, а deal и price нет.
Особенно интересует price. Все результаты есть в MqlTradeResult. На печать вывожу их одинаково, но что-то выводится, а что-то нет.  Вопрос - почему одни параметры выводятся, а другие нет?
 //============================================================
        //--- declare and initialize the trade request and result of trade request
        MqlTradeRequest request={0};
        MqlTradeResult  result={0};
        //--- parameters of request
        request.action   = TRADE_ACTION_DEAL;    // type of trade operation
        request.symbol   = Pair1;                // symbol
        request.volume   = lots;                 // volume of lot
        request.type     = oper;                 // order type
        request.price    = priceOpen;            // price for opening
        request.deviation= Slippage;             // allowed deviation from the price
        request.magic    = magic;   
  //===================================      
        if(!OrderSend(request,result))
          return;
                
        Print ("retcode = " + result.retcode + "; ");        
        Print ("deal = " + result.deal + "; ");
        Print ("order = " + result.order + "; "); 
        Print ("volume = " + result.volume + "; ");  
        Print ("price = " + result.price + "; ");
 
Konstantin Nikitin:

Изначально так и было

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Вопросы от начинающих MQL5 MT5 MetaTrader 5

Algotrader18, 2018.10.25 07:39

Добрый день!

Открываю позицию и хочу вывести на печать содержание MqlTradeResult вот так:


   //--- declare and initialize the trade request and result of trade request
        MqlTradeRequest request={0};
        MqlTradeResult  result={0};
        //--- parameters of request
        request.action   = TRADE_ACTION_DEAL;    // type of trade operation
        request.symbol   = Pair1;                // symbol
        request.volume   = lots;                 // volume of lot
        request.type     = oper;                 // order type
        request.price    = priceOpen;            // price for opening
        request.deviation= Slippage;             // allowed deviation from the price
        request.magic    = magic;   
 //============================================================     
        if(OrderSend(request,result))       
        Print ("result.retcode = " + result.retcode + "; ");        
        Print ("deal = " + result.deal + "; ");
        Print ("order = " + result.order + "; "); 
        Print ("volume = " + result.volume + "; ");  
        Print ("price = " + result.price + "; ");

result.retcode, order и volume выводятся, а deal и price всегда нули.
Подскажите, пожалуйста, что делаю не так?

почему потерялось в следующем коде... вопрос...

А вот return на мой взгляд неприемлем. Это ведь печать будет уже на следующем тике.

 
Alexey Viktorov:
А вот return на мой взгляд неприемлем. Это ведь печать будет уже на следующем тике.

Изучаем OrderSend

Возвращаемое значение

В случае успешной базовой проверки структур (проверка указателей) возвращается true - это не свидетельствует об успешном выполнении торговой операции. Для получения более подробного описания результата выполнения функции следует анализировать поля структуры result.

Если прошла базовая проверка, то только тогда выводим на печать. Все на одном тике. Поэтому и написал
        if(!OrderSend(request,result))
          return;
 
Konstantin Nikitin:

Изучаем OrderSend

Если прошла базовая проверка, то только тогда выводим на печать. Все на одном тике. Поэтому и написал
Ага. А вот ! я не увидел. Каюсь...
 
Alexey Viktorov:

Изначально так и было

почему потерялось в следующем коде... вопрос...

А вот return на мой взгляд неприемлем. Это ведь печать будет уже на следующем тике.

Пробовал разные варианты и вот такой в том числе:

        ulong  deal;
        ulong  order;
        double volume;
        double price;    
          
 //============================================================
        //--- declare and initialize the trade request and result of trade request
        MqlTradeRequest request={0};
        MqlTradeResult  result={0};
        //--- parameters of request
        request.action   = TRADE_ACTION_DEAL;    // type of trade operation
        request.symbol   = Pair1;                // symbol
        request.volume   = lots;                 // volume of lot
        request.type     = oper;                 // order type
        request.price    = priceOpen;            // price for opening
        request.deviation= Slippage;             // allowed deviation from the price
        request.magic    = magic;   
  //===================================      
        if(OrderSend(request,result))

        retcode = result.retcode;
        deal = result.deal;
        order = result.order;
        volume = result.volume;
        price = result.price;
       
      
        Print ("retcode = " + retcode + "; ");        
        Print ("deal = " + deal + "; ");
        Print ("order = " + order + "; "); 
        Print ("volume = " + volume + "; ");  
        Print ("price = " + price + "; ");

и скопировал в вопрос не всё по ошибке...

 
Algotrader18:

Пробовал разные варианты и вот такой в том числе:

и скопировал в вопрос не всё по ошибке...

Попробуй поискать, fxsaber когда-то бился над этой проблемой. Что получилось я не знаю, не интересовался. Мне проще получить все эти параметры в OnTradeTransaction
 
Rustam Esedulaev:
Всем привет!
В mql 4 есть такая поверка как IsTradeContedtBusy
Есть ли в mql 5 что-нибудь подобное?
Спасибо!

Нет ничего подобного. МТ5 многопоточен

Причина обращения: