Preguntas de un "tonto" - página 216

 
2 Yedelkin, ya te dije que el EA se duerme y deja de funcionar. La única forma de despertarlo es reiniciar el terminal y funciona.

2 sergeev, En MQL5, cuando el reloj se detiene, significa que se durmió.

 
Yedelkin: ... Y el pensamiento vuelve al bucle infinito de nuevo como el ejemplo más simple de manejo explícito de eventos retrasados.

Una pregunta: ¿qué función utilizas para enviar solicitudes de intercambio?

G001 : 2 Yedelkin, te dije que el Asesor Experto simplemente se duerme y deja de funcionar. Y sólo se despierta recargando el terminal y funciona.

Todo debe tener una razón y una explicación, incluido el fenómeno que parece "dejar de funcionar" por ahora.

 
G001:
2 Yedelkin, te dije que el Asesor Experto se duerme, deja de funcionar. La única forma de despertarlo es reiniciar el terminal y funciona.

2 sergeev, En MQL5, cuando el reloj se detiene, significa que se durmió.

¿En qué evento MQL (qué función en su EA) lo "atrapa cuando se duerme"?
 
Yedelkin:

Esta es una pregunta: ¿qué función utiliza para enviar solicitudes de comercio?

Debe haber una razón y una explicación para todo, incluido el fenómeno que hasta ahora parece haber "dejado de funcionar".

//+------------------------------------------------------------------+
//| Open Orders                                                      |
//+------------------------------------------------------------------+
// Perform analysis and open orders on new candle/bar 
  if((TradeNewBar != true)||(IsNewBar() == true))
  {
//----- Open BUY_STOP
    if(TrendDetection() == BULL && TotalBullStopOrders() < 1 && TotalBullPositions() < 1)
    {
      request.action = TRADE_ACTION_PENDING;
      request.magic = Magic;
      request.symbol = Symbol();
      request.volume = Volume();
      request.price=NormalizeDouble(Ask+OrderDrive*_Point,_Digits);
      request.sl = NormalizeDouble(request.price - StopLoss*_Point,_Digits);
      request.tp = NormalizeDouble(request.price + TakeProfit*_Point,_Digits);
      request.type=ORDER_TYPE_BUY_STOP;
      request.type_filling=ORDER_FILLING_RETURN;
      request.comment=Coments;
      int ResBull = -1;
      while(ResBull < 1)
      {
        if(OrderCheck(request,check))
        {
          ResBull = OrderSend(request,result);
        }
        if((MQL5InfoInteger(MQL5_TESTING)||MQL5InfoInteger(MQL5_OPTIMIZATION)))break;
      }
      Print("BuyStop Order Set ");
      if(UseSound == true){PlaySound(OrderSound);}
      Print(ResultRetcodeDescription(result.retcode));
    }
//----- Open SELL_STOP
    if(TrendDetection() == BEAR && TotalBearStopOrders() < 1 && TotalBearPositions() < 1)
    {
      request.action = TRADE_ACTION_PENDING;
      request.magic = Magic;
      request.symbol = Symbol();
      request.volume = Volume();
      request.price=NormalizeDouble(Bid-OrderDrive*_Point,_Digits);
      request.sl = NormalizeDouble(request.price + StopLoss*_Point,_Digits);
      request.tp = NormalizeDouble(request.price - TakeProfit*_Point,_Digits);
      request.type=ORDER_TYPE_SELL_STOP;
      request.type_filling=ORDER_FILLING_RETURN;
      request.comment=Coments;
      int ResBear = -1;
      while(ResBear < 1)
      {
        if(OrderCheck(request,check))
        {
          ResBear = OrderSend(request,result);
        }
        if((MQL5InfoInteger(MQL5_TESTING)||MQL5InfoInteger(MQL5_OPTIMIZATION)))break;
      }
      Print("SellStop Order Set ");
      if(UseSound == true){PlaySound(OrderSound);}
      Print(ResultRetcodeDescription(result.retcode));                             
    }
  }
 
sergeev:
¿En qué evento MQL (qué función en su EA) lo "atrapa cuando se va a dormir"?

Lo siento, no sé realmente lo que estás preguntando... :(

El reloj está justo después delvoid OnTick()

void OnTick()
{
  Comment("Local Time: "+TimeToString(TimeLocal(),TIME_MINUTES|TIME_SECONDS));
 
sergeev:
¿En qué evento MQL (qué función en su EA) lo "atrapa cuando se duerme"?
Sí, detecta visualmente que el Asesor Experto se ha "dormido". Compara el tiempo en los comentarios del gráfico con su propio tiempo. No utiliza ningún evento.
 

¿Alguien puede ayudar con una condición para un EA?

Quiero hacer un EA que después de cerrar una posición abra inmediatamente la misma con la posición contraria

Por ejemplo, sólo había abiertas 2 posiciones 1 de venta y 1 de compra. Una de ellas está cerrada, por ejemplo, la compra en el TP o el SL, me gustaría que el EA reabriera una posición de compra y una nueva posición de venta con ella

Hay 2 posiciones de venta y 1 de compra

Que alguien invente alguna fórmula que abra una posición cerrada con otra opuesta.

o cualquier otra forma... He intentado todo lo que sé(((( no funciona :, (

Archivos adjuntos:
SellBuY.mq4  3 kb
 
Yedelkin:
Sí, detecta visualmente que el experto se ha "dormido". Compara la hora del comentario en el gráfico con la hora de su ordenador. No utiliza ningún evento.
Sí. Esa era mi petición, cómo averiguar programáticamente cuando el EA deja de funcionar.
 

G001 ResBear = OrderSend(request,result);

Lo tengo. Se utiliza la funciónOrderSend(). La versión es que el retraso en el procesamiento del evento OnTick() por parte de la función NewTick() puede ser causado por la falta de respuesta del servidor, ya que la funciónOrderSend() debe esperar esta respuesta. Si es interesante, intenteutilizar su copia asíncrona en lugar de la funciónOrderSend() que no espera la respuesta del servidor. ¿Dejará de funcionar el Asesor Experto?
 
Yedelkin:
Lo tengo. Está utilizando la funciónOrderSend(). La versión es que el retraso puede deberse a que el servidor no responde, porque la funciónOrderSend() tiene que esperar esta respuesta. Si está interesado, intenteutilizar su copia asíncrona en lugar de la funciónOrderSend(), que no espera la respuesta del servidor.¿Se colgará también en este caso?

Gracias. También he pensado en utilizar la versión asíncrona, pero no sé si el broker no tendrá en cuenta las operaciones. Pero lo intentaré.
Razón de la queja: