Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 996

 
La gente ayuda. Intentando obtener el precio al que se abrió una operación. Al principio operé a través de CTrade pero trade.resultprice era igual a cero. Comencé a operar a través de MqlTrade y result.price mostraba buenos resultados en Strategy Tester, pero era igual a cero en Live. Lo probé con OnTradeTransaction, pero es demasiado lento en el comercio en vivo y muestra cero cuando se detiene el comercio automático. ¿Cuáles son las formas de obtener el precio al que pasó la operación de compra?
 
mikhail_shmakov:
La gente ayuda. Intentando obtener el precio al que se abrió una operación. Al principio operé a través de CTrade pero trade.resultprice era igual a cero. Comencé a operar a través de MqlTrade y result.price se mostraba bien en el Probador de Estrategias, pero era igual a cero en Live. Lo probé con OnTradeTransaction, pero es demasiado lento en el comercio en vivo y muestra cero cuando se detiene el comercio automático. ¿Qué formas hay de obtener el precio al que se realizó la operación de compra?
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;      // Тикет встречной позиции 
  };
¿Qué quiere decir con "en operaciones muy rápidas"? OnTradeTransaction funciona para todas las operaciones. Sólo hay que separar el tipo de transacción y tomar el precio en 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); 
  }
Hola compañeros programadores. Por favor, ayúdenme a modificar esta función. La función de MQL5 Reference anterior. ¿Cómo hacer que calcule el número de todas las posiciones abiertas para un Magic dado?
 
Kolya32:
Hola compañeros programadores. Por favor, ayúdenme a modificar esta función. Ya he introducido esta función en MQL5 Reference. ¿Qué debo hacer para que calcule el número de posiciones abiertas para Magic?
Al menos deberíamos cambiar Órdenes*** por Posiciones*** y luego comprobarlo.
 
Alexey Viktorov:
Por lo menos cambie Órdenes*** por Posiciones*** en todas partes y luego compruebe.

Parece que funciona)) Podemos añadir esta función a MQL5)) Aunque probablemente sea demasiado pronto, lo probaré)

//+------------------------------------------------------------------+ 
//| Получает текущее количество открытых позиций с указанным 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:

Parece que funciona)) Puedes añadir esta función al manual de MQL5)) Aunque probablemente sea demasiado pronto, todavía estoy probando)

Si se añaden todas estas cosas al manual, éste se convertirá en un vertedero. Lo siento, no se trata de la calidad de los cambios que hiciste.
 
mikhail_shmakov:
La gente ayuda. Estoy tratando de obtener el precio al que se abrió una operación. Al principio usé CTrade, pero trade.resultprice era igual a cero. Comencé a operar a través de MqlTrade y result.price mostraba buenos resultados en Strategy Tester, pero era igual a cero en Live. Lo probé con OnTradeTransaction, pero es demasiado lento en el comercio en vivo mostrando cero y muestra el último precio de comercio cuando se detiene el comercio automático. ¿Qué formas hay de obtener el precio al que se realizó la operación de compra?

OrderSend envía un pedido. Luego hay que esperar a que se ejecute y a que aparezca la operación correspondiente en el historial.

Para hacer todo esto correctamente, uno debe ser bueno en OnTradeTransaction o escribir un código bastante pesado para OrderSend una vez.

En el segundo caso, CTrade también funcionará como se desea.

 

¿Cuál es el análogo de Dígitos que devolvería el número de decimales después del punto decimal que determina la precisión de la medición del precio del símbolo gráfico seleccionado ?

 
Aleksey Vyazmikin:

¿Cuál es el análogo de Dígitos que devolvería el número de decimales después del punto decimal que determina la precisión de la medición del precio del símbolo gráfico seleccionado ?

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

Gracias.

Razón de la queja: