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

 
Люди помогите. Пытаюсь получить цену по которой открылась сделка. Сначала торговал через CTrade но trade.resultprice был равен нулю. Начал делать через MqlTrade, в тестере result.price показывал нормально но в лайве стал равен нулю. Сделал через OnTradeTransaction но в лайве при очень быстрых сделках он тупит показывая ноль, а при остановке авто-торговли показывает цену последней сделки. Какие есть способы получить цену по которой прошла buy сделка? 
 
mikhail_shmakov:
Люди помогите. Пытаюсь получить цену по которой открылась сделка. Сначала торговал через CTrade но trade.resultprice был равен нулю. Начал делать через MqlTrade, в тестере result.price показывал нормально но в лайве стал равен нулю. Сделал через OnTradeTransaction но в лайве при очень быстрых сделках он тупит показывая ноль, а при остановке авто-торговли показывает цену последней сделки. Какие есть способы получить цену по которой прошла buy сделка? 
struct MqlTradeTransaction 
  { 
   ulong                         deal;             // Тикет сделки 
   ulong                         order;            // Тикет ордера 
   string                        symbol;           // Имя торгового инструмента 
   ENUM_TRADE_TRANSACTION_TYPE   type;             // Тип торговой транзакции 
   ENUM_ORDER_TYPE               order_type;       // Тип ордера 
   ENUM_ORDER_STATE              order_state;      // Состояние ордера 
   ENUM_DEAL_TYPE                deal_type;        // Тип сделки 
   ENUM_ORDER_TYPE_TIME          time_type;        // Тип ордера по времени действия 
   datetime                      time_expiration;  // Срок истечения ордера 
   double                        price;            // Цена  
   double                        price_trigger;    // Цена срабатывания стоп-лимитного ордера 
   double                        price_sl;         // Уровень Stop Loss 
   double                        price_tp;         // Уровень Take Profit 
   double                        volume;           // Объем в лотах 
   ulong                         position;         // Тикет позиции 
   ulong                         position_by;      // Тикет встречной позиции 
  };
Что значит "при очень быстрых сделках"? OnTradeTransaction отрабатывает при каждом трейде. Только надо отделить тип транзакции и цену брать при TRADE_TRANSACTION_DEAL_ADD
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
  • www.mql5.com
Например, при отсылке рыночного ордера на покупку он обрабатывается, для счета создается соответствующий ордер на покупку, происходит исполнение ордера, его удаление из списка открытых, добавление в историю ордеров, далее добавляется соответствующая сделка в историю и создается новая позиция. Все эти действия являются торговыми транзакциями...
 

//+------------------------------------------------------------------+ 
//| Получает текущее количество отложенных ордеров с указанным ORDER_MAGIC      | 
//+------------------------------------------------------------------+ 
int GetOrdersTotalByMagic(long const magic_number) 
  { 
   ulong order_ticket; 
   int total=0; 
//--- пройдем по всем отложенным ордерам 
   for(int i=0;i<OrdersTotal();i++) 
      if((order_ticket=OrderGetTicket(i))>0) 
         if(magic_number==OrderGetInteger(ORDER_MAGIC)) total++; 
//--- 
   return(total); 
  }
Здравствуйте товарищи программисты. Помогите переделать функцию пожалуйста. Функция представленная выше из справочника MQL5 Как сделать так чтобы она считала кол-во всех открытых позиций по заданному Magic ?
 
Kolya32:
Здравствуйте товарищи программисты. Помогите переделать функцию пожалуйста. Функция представленная выше из справочника MQL5 Как сделать так чтобы она считала кол-во всех открытых позиций по заданному Magic ?
Как минимум везде поменять Orders*** на Positions*** а дальше надо проверять.
 
Alexey Viktorov:
Как минимум везде поменять Orders*** на Positions*** а дальше надо проверять.

Вроде работает) можно добавлять и эту функцию в справочник MQL5)) Хотя наверно рановато, еще по тестирую)

//+------------------------------------------------------------------+ 
//| Получает текущее количество открытых позиций с указанным ORDER_MAGIC      | 
//+------------------------------------------------------------------+ 

int GetPositionsTotalByMagic(long const magic_number)  
  { 
   ulong position_ticket; 
   int total=0; 
//--- пройдем по всем открытым позициям 
   for(int i=0;i<PositionsTotal();i++) 
      if((position_ticket=PositionGetTicket(i))>0) 
         if(magic_number==PositionGetInteger(POSITION_MAGIC)) total++; 
//--- 
   return(total); 
  } 
 
Kolya32:

Вроде работает) можно добавлять и эту функцию в справочник MQL5)) Хотя наверно рановато, еще по тестирую)

Если каждую такую мелочь добавлять в справочник, то справочник превратится в отхожее место. Извините, это не о качестве внесённых вами изменений.
 
mikhail_shmakov:
Люди помогите. Пытаюсь получить цену по которой открылась сделка. Сначала торговал через CTrade но trade.resultprice был равен нулю. Начал делать через MqlTrade, в тестере result.price показывал нормально но в лайве стал равен нулю. Сделал через OnTradeTransaction но в лайве при очень быстрых сделках он тупит показывая ноль, а при остановке авто-торговли показывает цену последней сделки. Какие есть способы получить цену по которой прошла buy сделка? 

OrderSend отправляет ордер. Затем нужно дождаться его исполнения и появления соответствующей сделки в истории.

Чтобы все это корректно проделать, нужно либо хорошо владеть OnTradeTransaction, либо один раз написать довольно тяжелый код для OrderSend.

Во втором случае станет работать и CTrade, как того желаете.

 

Какой аналог для Digits, что бы возвращал количество десятичных знаков после запятой, определяющее точность измерения цены выбранного символа графика?

 
Aleksey Vyazmikin:

Какой аналог для Digits, что бы возвращал количество десятичных знаков после запятой, определяющее точность измерения цены выбранного символа графика?

SymbolInfoInteger("XXXYYY",SYMBOL_DIGITS);
 
Artyom Trishkin:

Спасибо!

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