Bibliotecas: MT4Orders - página 5

 
-Aleks-:

Lo tengo - gracias - los errores casi han desaparecido, pero queda uno:

'OrderCloseBy' - función no definida cPoza13-1.mqh 1885 8

 //+------------------------------------------------------------------------------------------------------------------------------------+
//| Возвращает TRUE, если один ордер закрылся другим
//+------------------------------------------------------------------------------------------------------------------------------------+
bool cPoza::closeBy(int ticketB, int ticketA)
{
  if(ticketB > 0 && ticketA > 0)
  {
    if(OrderCloseBy(ticketB, ticketA)) return true;
    else Print("Magic=", mMagic, " ",__FUNCTION__, " Встречное закрытие не вышло ticketB=", ticketB, " ticketA=", ticketA, " вызвало ошибку-", _LastError);
  }
  else return false;
 
  return false;
}

// Lo que no se realiza:
// CloseBy momentos - No he tenido tiempo de hacerlo todavía. Tal vez en el futuro, cuando sea necesario.
// Determinar TP y SL de posiciones cerradas - actualmente (build 1368) MQL5 no sabe como hacer esto.

Escribí la librería para mí, y no uso CloseBy. Por eso no lo he implementado. Tal vez, lo agregue con rapidez.

Como solución temporal, añade estas líneas antes de incluir tu librería

#ifdef __MQL5__
  bool OrderCloseBy( const int Ticket, const int Opposite, const color Arrow_Color = clrNONE )
  {
    return(false);
  }  
#endif
 
fxsaber:

Es posible, por supuesto. No vi la necesidad.

Al parecer, se debe hacer.

También tengo que trabajar activamente con la historia al construir rejillas con promedios, el hecho es que el DC limita el número máximo de órdenes, y si la cuenta tiene 15-20 Asesores Expertos con rejillas, la solución es minimizar algunas de las rejillas en el momento de acercarse al límite de órdenes, respectivamente, tenemos que cavar en la historia para entender el resultado financiero real de la posición.

 
fxsaber:
// Lo que no se realiza:
// CloseBy momentos - No he tenido tiempo de hacerlo todavía. Tal vez en el futuro, cuando sea necesario.
// Determinar TP y SL de posiciones cerradas - actualmente (build 1368) MQL5 no sabe como hacer esto.
Escribí la librería para mí, y no uso CloseBy. Por eso no lo he implementado. Quizás con la aceleración lo añada también.

Sería muy bueno, gracias. CloseBy es una cosa útil para fijar una parte de una posición en un punto calculado.

 
-Aleks-:

También tenemos que trabajar activamente con el historial al construir rejillas con promedios, el hecho es que el CC limita el número máximo de órdenes, y si la cuenta tiene 15-20 Asesores Expertos con rejillas, la solución se ve como el colapso de parte de las rejillas en el momento de acercarse al límite de órdenes, respectivamente, tenemos que cavar en el historial para entender el resultado financiero real de la posición.

Voy a añadir CloseBy y la aceleración de la historia en la próxima versión. Simplemente no entiendo si es en la demanda (la biblioteca se utiliza) o es una recomendación por si acaso.
 
fxsaber:
// Lo que no se realiza:
// CloseBy momentos - No he tenido tiempo de hacerlo todavía. Tal vez en el futuro, cuando sea necesario.
// Determinar TP y SL de posiciones cerradas - actualmente (build 1368) MQL5 no sabe como hacer esto.

Escribí la librería para mí, y no uso CloseBy. Por eso no lo he implementado. Quizás lo añada en cuanto me ponga al día.

Como solución temporal, añade estas líneas antes de habilitar tu librería

#ifdef __MQL5__
  bool OrderCloseBy( const int Ticket, const int Opposite, const color Arrow_Color = clrNONE )
  {
    return(false);
  }  
#endif

Gracias - ¡la compilación tuvo éxito en la parte de trabajar con órdenes! Ahora voy a solucionar el resto de los errores - causados por la incompatibilidad de idiomas...

 
fxsaber:
Voy a añadir CloseBy y la aceleración de la historia en la próxima versión. Simplemente no entiendo si esto es en la demanda (biblioteca se utiliza) o simplemente una recomendación por si acaso.

Yo lo uso, hay resultados muy interesantes, pero no lo he usado (la función) en una cuenta real todavía - pronto.


 
fxsaber:
¡Funcionará! Hago todo en el mercado de valores a través de MT4Orders. No me limito por el número de posiciones abiertas.
Pero no recomiendo trabajar con la historia en la bolsa de valores a través de MT4Orders. Es decir, MODE_TRADE - no hay problema, MODE_HISTORY - no es necesario en la Bolsa.
 

no puede establecer un stop-loss en la bolsa, pero abre operaciones.

2016.11.07 10:41:20.468 Trades  '4974': failed modify  buy 0.00  sl: 0.00000, tp: 0.00000 -> sl: 10407.00000, tp: 0.00000 [Invalid request]

Y en mi opinión, no lo tienes en lib para modificarlo.

if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
      Request.type_filling = ORDER_FILLING_RETURN;

Entiendo que hay que añadirlo aquí:

static bool MT4OrderModify( const int Ticket, const double Price, const double SL, const double TP, const datetime Expiration, const color Arrow_Color = clrNONE )
  {
    MqlTradeRequest Request = {0};

               // Se tiene en cuenta el caso en que existe una orden y una posición con el mismo ticket
    bool Res = ((Ticket != MT4ORDERS::Order.Ticket) || (MT4ORDERS::Order.Ticket <= OP_SELL)) ?
               (MT4ORDERS::ModifyPosition(Ticket, Request) ? true : MT4ORDERS::ModifyOrder(Ticket, Price, Expiration, Request)) :
               (MT4ORDERS::ModifyOrder(Ticket, Price, Expiration, Request) ? true : MT4ORDERS::ModifyPosition(Ticket, Request));

    if (Res)
    {
      Request.tp = TP;
      Request.sl = SL;
      if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
      Request.type_filling = ORDER_FILLING_RETURN;

      
      Res = MT4ORDERS::NewOrderSend(Request);
    }

    return(Res);
  }
sigue sin funcionar.
 
Maxim Dmitrievsky:

no puede fijar un stop-loss en bolsa, pero abre operaciones.

2016.11.07 10:41:20.468 Trades  '4974': failed modify  buy 0.00  sl: 0.00000, tp: 0.00000 -> sl: 10407.00000, tp: 0.00000 [Invalid request]

De hecho, esto es casi un bug de los desarrolladores. Añada esta línea

  static bool ModifyPosition( const int Ticket, MqlTradeRequest &Request )
  {
    const bool Res = ::PositionSelectByTicket(Ticket);

    if (Res)
    {
      Request.action = TRADE_ACTION_SLTP;
      
      Request.position = Ticket;
      Request.symbol = ::PositionGetString(POSITION_SYMBOL); // ¡no basta con especificar un billete!
    }

    return(Res);
  }

Y en mi opinión, en lib no se especifica para su modificación.

Está todo ahí.
 
fxsaber:

De hecho, es casi un error de desarrollo. Añade esta línea

  static bool ModifyPosition( const int Ticket, MqlTradeRequest &Request )
  {
    const bool Res = ::PositionSelectByTicket(Ticket);

    if (Res)
    {
      Request.action = TRADE_ACTION_SLTP;
      
      Request.position = Ticket;
      Request.symbol = ::PositionGetString(POSITION_SYMBOL); // ¡no basta con especificar un billete!
    }

    return(Res);
  }

Ahí está todo correcto.
Sí, funciona así, gracias... y el order picking se ralentiza, sí... pero no he notado ningún otro bug hasta ahora.... Es una buena lib, la verdad, tiene sentido para agilizar la preparación de pedidos, creo yo.