Bibliotecas: MT4Orders - página 3

 
Alexey Volchanskiy:

Wo, y fxsaber está molesto porque yo soy el único que se dio cuenta de este error, por lo que nadie necesita la lib )). Es que nuestra gente es muy observadora.

Una anécdota de la vida - Yo estaba conduciendo un webinar, repetí 10 veces que habrá una grabación. Al final vuelvo a decir, la grabación será mañana, si tienen preguntas - pregunten. Y ahora adivina la primera pregunta ))))

Y leer A. Galich. "Cómo hablé en un mitin en defensa de la paz". (Espero recordar bien el título).
 
// Lista de cambios:
// 03.08.2016:
// Release - escrito y probado en probador fuera de línea solamente.
// 29.09.2016:
// Añadir: posibilidad de trabajar en la bolsa (SYMBOL_TRADE_EXECUTION_EXCHANGE). Tenga en cuenta que el intercambio es Netto(no Hedge)-modo.
// Añadir: Requisito "si hay #include <Trade/Trade.mqh>, inserte esta línea DESPUÉS".
// sustituido por "si hay #include <Expert/Expert.mqh>, inserte esta línea DESPUÉS".
// Fix: OrderSend de órdenes de mercado devuelve posiciones de entradas, no transacciones.
 
Este comportamiento no está implementado en la biblioteca

Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading

Como trabajar correctamente en MT5 con OrderSend

fxsaber, 2016.10.13 07:10

Autoescrito muy simple sobrecarga OrderSend: hasta OnTrade devuelve una respuesta, todos los OrderSends posteriores devuelven false. A medida que se recibe la respuesta - false forzado se cancela.

ZY Si quieres tener todas las funciones (no para SB), debes llamar OnTrade OnTick y OnTimer independientemente cuando llegue la sincronización correspondiente.

Tenga en cuenta esta circunstancia en MT5 cuando trabaje con las funciones habituales de MT4-Order: OrderSend, OrderModify, OrderClose, OrderDelete.

Es posible añadir la sincronización garantizada (como en MT4) del historial después de las órdenes comerciales a MT5 por usted mismo utilizando el algoritmo en la cita.

[Eliminado]  
La idea es interesante. Sin embargo, convertido MT4 Asesor Experto en MT5 funciona lentamente
 
Aliaksandr Kryvanos:
La idea es interesante. Sin embargo, convertido MT4 Expert Advisor en MT5 funciona lentamente.

Sólo la implementación de OrderSelect(index, SELECT_BY_POS, MODE_HISTORY) es lenta. Podría ser más rápido, pero entonces no habría una cierta clasificación de la historia, que está disponible en MT4 y que algunas personas utilizan. Si no se utiliza, sería posible hacer que este modo no funcione más lento que en MT4. Todo lo demás definitivamente no es más lento. Así que si no usas el mencionado modo OrderSelect, busca frenos fuera de MT4Orders.

En cuanto a las series de tiempo y otras cosas, este tema se hace hincapié en la descripción - no se ha tocado. Lo más probable es que usted tiene frenos allí.

 
Hay un error en MT5 build 1455

ENUM_ORDER_TYPE_FILLING::ORDER_FILLING_RETURN.

Por lo tanto, si en OrderModify el llenado se establece a través de COrderInfo::TypeFilling(), entonces en el mismo RoboForexEU-MetaTrader 5 habrá un error lógico [Unsupported filling mode]. Sin embargo, este error no se produce en MetaQuotes-Demo - ¿está mal configurado el servidor del desarrollador?


Esto puede causar el error [Unsupported filling mode] en algunos servidores de trading al intentar modificar órdenes pendientes a través de OrderModify.

Si se ha encontrado con este problema, puede evitar este error de la siguiente manera

  1. Encuentre la línea en MT4Orders.mqh
          Request.type_filling = (ENUM_ORDER_TYPE_FILLING)::OrderGetInteger(ORDER_TYPE_FILLING);

  2. Sustitúyala por estas líneas
          Request.symbol = ::OrderGetString(ORDER_SYMBOL);
          
          // https://www.mql5.com/ru/forum/1111/page1759#comment_2906850
          if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)      
            Request.type_filling = (ENUM_ORDER_TYPE_FILLING)::OrderGetInteger(ORDER_TYPE_FILLING);

 
Biblioteca estándar MT5 VS multiplataforma MT4-OSS

biblioteca estándar y escribió un EA de prueba

#define SLTP (10 * _Point)

#include <Trade\Trade.mqh>;
#include <Trade\OrderInfo.mqh>

// Vía MT5-Standard Library - sólo MT5
// Establece SellLimit y luego establece su SL/TP
void MT5Order( const double Price )
{
  CTrade Trade;
  
  if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
    Trade.SetTypeFilling(ORDER_FILLING_RETURN);

  Trade.OrderOpen(_Symbol, ORDER_TYPE_SELL_LIMIT, 1, 0, Price, 0, 0, ORDER_TIME_GTC, 0, __FUNCTION__);

  const ulong Ticket = Trade.ResultOrder();
  
  if (Ticket > 0)
  {
    COrderInfo Order;
    
    if (Order.Select(Ticket))
      Trade.OrderModify(Order.Ticket(), Order.PriceOpen(), Order.PriceOpen() + SLTP, Order.PriceOpen() - SLTP, Order.TypeTime(), Order.TimeExpiration());
  }      
}

#include <MT4Orders.mqh> // https://www.mql5.com/es/code/16006

// A través de MT4-OSJS - variante multiplataforma (MT4/5)
// Establece SellLimit y luego establece su SL/TP
void MT4Order( const double Price )
{
  const int Ticket = OrderSend(_Symbol, OP_SELLLIMIT, 1, Price, 0, 0, 0, __FUNCTION__);
  
  if ((Ticket > 0) && OrderSelect(Ticket, SELECT_BY_TICKET))
    OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() + SLTP, OrderOpenPrice() - SLTP, OrderExpiration(), clrNONE);
}

void OnTick()
{
  static bool FirstRun = true;
  
  if (FirstRun)
  {
    const double Price = SymbolInfoDouble(_Symbol, SYMBOL_BID) + 100 * _Point;
    
    MT5Order(Price); // Vía MT5-Standard Library - sólo MT5
    MT4Order(Price); // A través de MT4-OSJS - variante multiplataforma (MT4/5)
    
    FirstRun = false;
  }
}

puedes comparar el código de las funciones MT4Order y MT5Order.


[Eliminado]  
Sí, tienes razón, el bajo rendimiento se debe a OrdersHistoryTotal()
 
Aliaksandr Kryvanos:
Sí, tienes razón, la lentitud se debe a OrdersHistoryTotal()

Podría valer la pena hacer una versión más rápida de esta función. Funcionará sin lentitud, pero no es 100% compatible con MT4.

Mirado el código ahora. Hay varias maneras de acelerarlo. Por ejemplo, en el tester puede dar un poco de sincronización con MT5-historia, ya que todo es sencillo en el tester.

Pero, para ser sincero, ni en el tester ni en el trading real me he encontrado nunca con tareas en las que el TS necesitara analizar el historial.

Por lo tanto, dudo que haga tal aceleración.

 
fxsaber:

Podría valer la pena hacer una versión más rápida de esta función. Funcionará sin ningún retraso, pero no es 100% compatible con MT4.

Eché un vistazo al código ahora. Hay varias maneras de acelerarlo. Por ejemplo, en el tester puede importarte un bledo la sincronización con el historial de MT5, ya que todo es sencillo en el tester.

Pero, para ser sincero, ni en el tester ni en el trading real me he encontrado nunca con tareas en las que el TS necesitara analizar el historial.

Por eso dudo que haga tal aceleración.

Yo utilizo el análisis del historial, mi MM implica operar una situación, durante la cual tiene lugar el cierre y la apertura de posiciones, y el riesgo se tiene en cuenta utilizando el resultado financiero desde el inicio de la situación.

En la situación podemos imaginar que se identifica una tendencia - el trabajo en su desarrollo hasta su finalización es diferente - apertura y cierre de posiciones, pero es importante saber lo que puede arriesgar, porque cuanto más tiempo se ejecuta la tendencia, mayor es la probabilidad de su finalización - de ahí el diferente volumen de órdenes abiertas y puntos de salida.