Mira cómo descargar robots gratis
¡Búscanos en Telegram!
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Librerías

TradeTransactions - librería para MetaTrader 5

Visualizaciones:
737
Ranking:
(30)
Publicado:
2018.10.26 13:46
\MQL5\Indicators\fxsaber\ \MQL5\Experts\fxsaber\ \MQL5\Include\fxsaber\TradeTransactions\
Resource.mqh (0.63 KB) ver
ResourceData.mqh (1.41 KB) ver
String.mqh (0.45 KB) ver
TradeRequest.mqh (2.12 KB) ver
TradeResult.mqh (1.15 KB) ver
\MQL5\Include\
TypeToBytes.mqh (20.54 KB) ver
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

Las órdenes comerciales asincrónicas disponen de una enorme ventaja, que consiste en la alta velocidad durante el envío masivo. No obstante, existe un cierto inconveniente que impide a la divulgación de este tipo de órdenes. Es que se puede ver los datos sobre los resultados de la orden exclusivamente en OnTradeTransaction.

Esta circunstancia hace construir al usuario un modelo de eventos de su sistema comercial si quiere conseguir el efecto de asincronismo. Pero no siempre resulta fácil hacer eso (Asesores Expertos), ya a veces, es incluso imposible (scripts).

Esta librería soluciona este problema. En cualquier momento abre el acceso a todas las transacciones en el terminal comercial (datos completos de OnTradeTransaction correspondientes) desde el momento del inicio del programa.

Eso le permite impartir fácilmente el asincronísmo a sus programas.

Ejemplos

La librería se acompaña con el siguiente ejemplo, cuyos comentarios permiten comprender el principio de su funcionamiento:

// Impresión de todas las transacciones sin OnTradeTransaction

#include <fxsaber\TradeTransactions\TradeTransactions.mqh> // Acceso a los datos de OnTradeTransaction en cualquier lugar del programa

TRADETRANSACTIONS Transactions; // Transacciones comerciales

const bool Init = EventSetMillisecondTimer(100);

void OnTimer()
{
  static uint Total = 0;
  const uint NewTotal = Transactions.Total(); // Número total de transacciones guardadas
  
  for (uint i = Total; i < NewTotal; i++) // Repasamos nuevas transacciones
  {
    MqlTradeTransaction Trans;
    MqlTradeRequest Request;
    MqlTradeResult Result;
    
    // Obtenemos todos los datos de la transacción correspondiente y los imprimimos.
    Print(TimeToString(Transactions[i].Get(Trans, Request, Result)) + "\n" + 
          ToString(Trans) + ToString(Request) + ToString(Result));        
  }
  Total = NewTotal;
}

Inicie este EA y trate de ejecutar las órdenes comerciales manualmente. El EA va a imprimir todos los detalles como si tuviera OnTradeTransaction. ¡Pero no lo tiene!

Puede haber muchos escenarios prácticos del uso de esta funcionalidad. Por ejemplo, trading con la cesta de símbolos. Por ejemplo, cuando hace falta abrir rápidamente varias posiciones dentro del código. Y si han abierto, hay que realizar operaciones comerciales adicionales sin tener que salir de la función On.

Puesto que una necesidad muy frecuente es la espera del resultado del envío masivo de las órdenes asincrónicas, la librerías tiene incorporada la posibilidad correspondiente, la que podemos evaluar gracias al siguiente ejemplo:

// Ejemplo de las órdenes asincrónicas masivas con la espera del resultado.

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006
#include <fxsaber\TradeTransactions\TradeTransactions.mqh> // Acceso a los datos de OnTradeTransaction en cualquier lugar del programa

TRADETRANSACTIONS Transactions; // Transacciones comerciales

// Abre las posiciones Amount lo más rápido posible. Devolución, cuando las posiciones están abiertas.
bool OpenPositions( const int Amount = 10 )
{
  uint RequestID[];
  
  for (int i = ArrayResize(RequestID, Amount) - 1; i >= 0; i--)
  {
    const string Symb = SymbolName(i, true);
    
    RequestID[i] = OrderSendAsync(Symb, OP_BUY, 1, SymbolInfoDouble(Symb, SYMBOL_ASK), 100, 0, 0); // Ha enviado una orden asincrónica
  }
  
  return(Transactions.Waiting(RequestID)); // La respuesta a todas las órdenes asincrónicas ha llegado
}

// Cierra todo lo más rápido posible. Devolución cuando la acción está confirmada.
bool CloseAll()
{
  uint RequestID[];
  
  for (int i = ArrayResize(RequestID, OrdersTotal()) - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS))
      // Hemos enviado una orden asincrónica
      RequestID[i] = (OrderType() <= OP_SELL) ? OrderCloseAsync(OrderTicket(), OrderLots(), OrderClosePrice(), 100) : OrderDeleteAsync(OrderTicket());
  
  return(Transactions.Waiting(RequestID)); // La respuesta a todas las órdenes asincrónicas ha llegado
}

void OnStart()
{
  if (OpenPositions())
    Print(CloseAll());
}

Pues sí, es un script, pero también se puede trabajar con las transacciones en él a través de la librería. Al iniciarlo, verá cómo se puede abrir y cerrar rápidamente varias posiciones/órdenes abiertas.

Particularidades

  • Para su funcionamiento, hay que compilar el código de Indicators\fxsaber\TradeTransactions.mq5.
  • Se utiliza la librería TypeToBytes.
  • En los originales de la librería hay una clase universal (ResourceData.mqh) que permite guardar/leer cómodamente los datos en/de los Recursos.

Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/22166

Skyscraper Skyscraper

Indicador de tendencia del tipo NRTR con una línea media adicional

XRSI_Candle_Vol_Zer_Alerts XRSI_Candle_Vol_Zer_Alerts

Indicador XRSI_Candle_Vol_Zer con posibilidad de saltar alertas, enviar email y notificaciones Push en el momento de la aparición de señales comerciales.

Easy Canvas Easy Canvas

Esta librería y la clase iCanvas simplificarán el desarrollo de programas a través de Canvas.

Previous Candle Breakdown 3 Previous Candle Breakdown 3

Asesor Experto «ruptura de la vela anterior».