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

 

Hola.

Quiero hacer un archivo de inclusión universal que pueda ser incluido con cualquier EA. Y debería limitarse a una inclusión sin ningún código adicional.

El problema es que el archivo utiliza OnTimer() como punto de entrada.

¿Qué pasa si EA (al que se conecta mi archivo de inclusión) también utiliza OnTimer()? ¿Hay alguna solución?

 

Buenas tardes. Opero en el mercado de valores de Moex. Broker Otkritie. Si hay posiciones abiertas para varios instrumentos, el robot las confunde al enviar una solicitud para cerrarlas parcialmente (puede enviar una solicitud con el precio de las acciones de Sberbank para las acciones de Magnit, por ejemplo. Es decir, el instrumento en la solicitud se especifica para Magnit, pero los precios se especifican para Sberbank) o simplemente no envía la solicitud. Código del algoritmo de cierre de la posición larga (se ejecuta cuando el precio del instrumento alcanza Price_Close_1_Buy):

void Price_Close_1_Buy()
  {

   MqlTradeRequest arequest;
   MqlTradeResult aresult;
   ZeroMemory(arequest);
   ZeroMemory(aresult);

   for(int i=PositionsTotal()-1; i>=0; i--)
      {
       if(Symbol()==PositionGetSymbol(i))
      {
       arequest.action   = TRADE_ACTION_DEAL;
       arequest.position = PositionGetTicket(i);
       arequest.symbol   = Symbol();
       arequest.volume   = NormalizeDouble((Lots_Close_1/100*Lots_current()),0);
       arequest.price    = aposition.PriceCurrent();
       arequest.type_filling = ORDER_FILLING_FOK;
       arequest.type     = ORDER_TYPE_SELL;
       Price_Close_1_Buy_Request_Send = true;
      }
       OrderSend(arequest,aresult);
       Print("=================================================================================================== ");
       Print(asymbol.Name());
       Print("Price_Close_1_Buy_request() ",arequest.price);
       Print("Lots_Close_1_Buy_request() ",arequest.volume);
       Print("Result ", aresult.comment);
       Print("Retcode ",aresult.retcode);
      }
  }
 
leonerd #:

Hola.

Quiero hacer un archivo de inclusión universal que pueda ser incluido con cualquier EA. Y debería limitarse a una inclusión sin ningún código adicional.

El problema es que el archivo utiliza OnTimer() como punto de entrada.

¿Qué pasa si EA (al que se conecta mi archivo de inclusión) también utiliza OnTimer()? ¿Hay alguna solución?

Nunca hagas esto.

Sólo un consejo. No voy a cambiar de opinión.

 
Manter84 hay posiciones abiertas para varios instrumentos, el robot las confunde al enviar una solicitud para cerrarlas parcialmente (puede enviar una solicitud con el precio de las acciones del Sberbank para las acciones del Magnit, por ejemplo. Es decir, el instrumento en la solicitud se especifica para Magnit, pero los precios se especifican para Sberbank) o simplemente no envía la solicitud. Código del algoritmo de cierre de la posición larga (se ejecuta cuando se alcanza el precio del instrumento Price_Close_1_Buy):
Sobre el tema del precio - cavar
aposition.PriceCurrent()
 
Koldun Zloy #:

No lo hagas nunca.

Sólo un consejo. No voy a hacerte cambiar de opinión.

Estos son los requisitos del proyecto.

 

¿Cómo puedo anular la función predeterminada OrderSend()?

#define OrderSend(MqlTradeRequest,MqlTradeResult)  MyOrderSend(MqlTradeRequest,MqlTradeResult)

He añadido una línea en la parte superior.

En mi MyOrderSend() hago algunos cálculos y llamo de nuevo a OrderSend(). Quiero llamar a OrderSend() nativo, pero en su lugar obtengo recursión y MyOrderSend() es llamado de nuevo.

Y esta llamada tampoco ayuda ::OrderSend()
 
leonerd Heañadido unalínea más arriba.

En mi MyOrderSend() hago algunos cálculos y llamo de nuevo a OrderSend(). Quiero llamar a la función nativa OrderSend(), pero en su lugar obtengo una recursión y se vuelve a llamar a MyOrderSend().

Esto no funciona en absoluto. #define sustituye la primera (la llamada) por la segunda en el código del programa, ya que OrderSend(..) se sustituye por MyOrderSend(..) cada vez que ocurre.

 
Carl Schreiber #:

Esto no funciona en absoluto. #define sustituye la primera (llamada) por la segunda en el código del programa, ya que OrderSend(...) se sustituye por MyOrderSend(...) cada vez que ocurre.

Sí, y lo tengo funcionando... Yo #definir sólo ponerlo bajo mi MyOrderSend().

 

¿Pueden decirme cómo reescribir algunos métodos de clase de la biblioteca estándar?

En el buen sentido, debería hacerse a través de clases para niños. Pero no sé cómo usarlos.

Por ejemplo, necesito cambiar algo en Graphic.mqh

He creado mi clase CGraphicCustom : CGraphic y he reescrito algunos métodos virtuales, como CreateAxis(). Se define como virtual en el CGraphic original.

Ahora, por ejemplo, declaro CGraphicCustom en lugar de CGraphic en mi código. Pero entonces necesito llamar a otros métodos de CGraphic que no están definidos como virtuales:

CGraphicCustom *graphic=new CGraphicCustom();
graphic.BackgroundColor(::ColorToARGB(clrWhite));
graphic.IndentDown(0);
graphic.GapSize(1);
graphic.HistorySymbolSize(1);
graphic.HistoryNameWidth(1);

Y me da errores:

'CGraphic::BackgroundColor' - cannot access private member function

ver declaración de 'CGraphic::BackgroundColor' Graphic.mqh 162 22


 
¡Hola ! Por favor, ¿alguien sabe cómo ver sus estadísticas comerciales personales en mql5?
Razón de la queja: