Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1578

 
MakarFX:

Compruébalo (no lo he conseguido)

Gracias, lo comprobaré más tarde.

 
Eugen8519:



Por favor, ayúdenme a colocar la función correctamente

...

Pero cómo y dónde insertar

¿Para enviar un mensaje cuando se alcanza un stop loss otake profit?


MakarFX:

¿Estamos hablando de lo mismo?

He encontrado un ejemplo que sigue la salida de SL conOnTradeTransaction:https://www.mql5.com/ru/code/21147.

Candle shadows v1
Candle shadows v1
  • www.mql5.com
Анализ размера свечи и тени свечи. В OnTradeTransaction отлавливаем открытие (DEAL_ENTRY_IN) и закрытие позиций (DEAL_ENTRY_OUT), а также закрытие по Stop loss (DEAL_REASON_SL).
 

El mismo EA en dos instrumentos diferentes

¡Hola! ¿Podríais ayudarme, por favor?

Tengo un EA que funciona en el gráfico en el que ha sido arrastrado (el valor Symbol( ) se toma como el nombre del símbolo).

Pero este EA también tiene una variable ticket_exist que contiene un ticket del orden establecido y el EA entiende que si el ticket_exist no es igual a cero,el orden se establece aquí.

Pregunta: Si abro un EA de este tipo en dos instrumentos diferentes y la variable ticket_exist no es igual a cero en un instrumento, ¿la variable con el mismo nombre seguirá siendo igual a cero en el otro instrumento?

SU.

 
Mihail Nefedov:

El mismo EA en dos instrumentos diferentes

¡Hola! ¿Podríais ayudarme, por favor?

Tengo un EA que funciona en el gráfico en el que ha sido arrastrado (el valor Symbol( ) se toma como el nombre del símbolo).

Pero este EA también tiene una variable ticket_exist que contiene un ticket del orden establecido y el EA entiende que si el ticket_exist no es igual a cero,el orden se establece aquí.

Pregunta: Si abro un EA de este tipo en dos instrumentos diferentes y la variable ticket_exist no es igual a cero en un instrumento, ¿la variable con el mismo nombre seguirá siendo igual a cero en el otro instrumento?

SU.

El valor de la variable en un EA no está disponible para otro EA. Lo principal es que los símbolos, o los magos, o ambos son diferentes.

 

¿Puede decirme qué hora es en ticks? ¿Hora del servidor o UTC?

Recuerdo haber leído en alguna parte, pero no recuerdo dónde...

 
Alexey Viktorov:

El valor de una variable en un EA no está disponible para otro EA. Lo principal es que o bien los símbolos, o bien las magias, o bien ambas cosas deben ser diferentes.

Silo he entendido bien, entonces para conseguir que un conflicto de EAs (dos absolutamente idénticos) trabajen con símbolos diferentes, sus variables deben ser configuradas como globales (para todo el terminal) o, por ejemplo, se debe acceder a una orden por su número de secuencia o simplemente por el hecho de su existencia?

 
MakarFX:

Prueba esto (no lo he probado)

No funciona, da errores de compilación.


Lo he probado así y compila sin problemas pero no puedo probarlo con la pista cerrada

Volveré a trabajar mañana.

  void OnTradeTransaction(const MqlTradeTransaction &trans,
                          const MqlTradeRequest &request,
                          const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_entry        =0;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      long     deal_reason       =-1;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason=HistoryDealGetInteger(trans.deal,DEAL_REASON);
        }
      else
         return;

      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
         if(deal_entry==DEAL_ENTRY_OUT)
           {
            if(deal_reason==DEAL_REASON_SL)
               SendNotification ("Закрыл  позицию > StopLoss");

            if(deal_reason==DEAL_REASON_TP)
               SendNotification ("Закрыл  позицию > TakeProfit");
           }
       }
  }
Archivos adjuntos:
x4.PNG  11 kb
 
Eugen8519:

no funciona, da errores de compilación


Lo he probado así, compila sin problemas, pero cuando la pista está cerrada no puedo probarlo

Lo terminaré mañana.

¡no has puesto el código correctamente!

Lo he arreglado un poco y ya funciona.

  datetime lastclouse; 
//+------------------------------------------------------------------+
int OnInit()
  {
   lastclouse=TimeCurrent();
   .....
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if(LastClouseProfit()!=EMPTY_VALUE)
     {
      SendNotification (LastClouseProfit()); lastclouse=TimeCurrent();
     }
   .....   
  }
//+------------------------------------------------------------------+
double LastClouseProfit()
  {
   ulong ticket=0;
   double profit=EMPTY_VALUE;
   HistorySelect(lastclouse,TimeCurrent());
   uint total=HistoryDealsTotal(); 
   for(uint i=0;i<total;i++) 
     { 
      if((ticket=HistoryDealGetTicket(i))>0) 
        { 
         profit+=HistoryDealGetDouble(ticket,DEAL_PROFIT); 
        }
     } 
   return(profit);
  }
//+------------------------------------------------------------------+
 
MakarFX:

¡no has puesto el código correctamente!

Lo he corregido un poco, funciona (lo he comprobado).

En este caso, tenemos que rastrear el hecho de que el acuerdo se cerró exactamente por SL o TP. Y utilizandoOnTradeTransaction obtenemos datos listos justo después del cierre de la transacción.

double LastClouseProfit()
  {
   ulong ticket=0;
   double profit=EMPTY_VALUE;
   HistorySelect(lastclouse,TimeCurrent());
   uint total=HistoryDealsTotal(); 
   for(uint i=0;i<total;i++) 
     { 
      if((ticket=HistoryDealGetTicket(i))>0) 
        { 
         profit=HistoryDealGetDouble(ticket,DEAL_PROFIT); 
        }
     } 
   return(profit);
  }

Si hay más de una operación cerrada en TimeCurrent, ¿qué resultado debe devolverse? Y la presencia de un beneficio no significa que la operación haya sido cerrada por el SL o el TP. Hay que hacer un seguimiento de esto, como he dicho antes. ¡Por lo tanto, el uso deOnTradeTransaction, es la solución más fácil!

 
Mihail Matkovskij:

Aquí, también necesitamos rastrear que la operación se cerró exactamente en el SL o TP.

Lo entendí como una notificación de cierre de trato, quizás lo entendí mal...

Mihail Matkovskij:

Si se cierra más de una operación en TimeCurrent, ¿qué resultado debería obtener?

no lo sé, tengo que comprobarlo