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

 
Gracias, chicos.
 
A.Vakutin:

Por favor, comparta, ¿quién conoce y sabe cómo prohibir que un EA venda después de que se dispare un stop?

// Оставанивливает работу всех советников, если сработал SL.

#include <MT4Orders.mqh>      // https://www.mql5.com/ru/code/16006
#include <fxsaber\Expert.mqh> // https://www.mql5.com/ru/code/19003

void OnTrade()
{
  static int PrevTotal = OrdersHistoryTotal();
  const int Total = OrdersHistoryTotal();
  
  for (int i = Total - 1; i >= PrevTotal; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderCloseReason() == DEAL_REASON_SL))
    {
      long Chart = ChartFirst();
  
      while (Chart != -1)
      {
        if ((Chart != ChartID()) && EXPERT::Is(Chart))
          EXPERT::Remove(Chart);
  
        Chart = ChartNext(Chart);
      }

      break;
    }        
    
  PrevTotal = Total;
}
 

¡Buenas noches, usuarios del foro!

Ha surgido un dilema.

Tenía una transacción y la almacenaba en una variable

datetime now=TimeCurrent();

Algún tiempo después, se produjo un evento y almaceno la hora en una variable

datetime now2=TimeCurrent();

¿Cómo puedo comprobar si han pasado 15 minutos entre estos eventos?

Pensaba que tenía dos variables ahora y ahora2 establecidas en segundos, traté de tomar la diferencia y debe ser más de 700 segundos

 if(now2-now>700)

PERO no funciona((

¡Pido ayuda a la comunidad!

 
ISL:

¡Buenas noches, usuarios del foro!

Ha surgido un dilema.

Tenía una transacción y la almacenaba en una variable

Algún tiempo después, se produjo un evento y almaceno la hora en una variable

¿Cómo puedo comprobar si han pasado 15 minutos entre estos eventos?

Pensaba que tenía dos variables ahora y ahora2 establecidas en segundos, traté de tomar la diferencia y debe ser más de 700 segundos

PERO no funciona((

Por favor, ¡ayuda de la comunidad!

La variable datetime se representa como fecha y hora. Se puede resolver el problema de otra manera, por ejemplo para representar 700 (aunque 15 minutos son 900 segundos) en tipo datetime

if(now2-now>(datetime)700)

o viceversa representar las variables como de tipo int

if(int(now2-now)>700)

o así

if((int)now2-(int)now>700)
De todos modos, tenemos que comprobar...
 
Alexey Viktorov:

La variable datetime se representa como fecha y hora. Se puede resolver el problema de diferentes maneras, por ejemplo, representando 700 (aunque 15 minutos son 900 segundos) como datetime


La noche se acerca)))

 
ISL:

La noche se hace sentir)))

Sí... Me llevó una hora y media conectar la función del inluder...

 
Vladimir Karputov:

Conecte la clase de comercio estándar CTrade
(viene de serie con el terminal)

y llamar a dos métodos:

SetTypeFillingBySymbol

Establece el tipo de orden según el símbolo especificado

SetMarginMode

Establece el modo de cálculo del margen según la configuración actual de la cuenta

Vladimir, buenas noches, podrías aconsejarme por favor hacer una función que calcule el porcentaje de ganancia quiero calcular el volumen negociado pero no lo consigo, creo que necesito identificar la orden con la dirección de salida y usarlas para calcular el volumen

double ALL_PROFIT(int rezult)
  {
   HistorySelect(0,TimeCurrent());
   double   rez=0.0;
   double   alprof=0.0;
   uint     total=HistoryDealsTotal();
   for(uint i=0;i<=total;i++) 
     {
      if(m_ticket.SelectByIndex(i))
        {
         if(m_ticket.Magic()==Mg)
           {
            alprof+=(m_ticket.Profit()+m_ticket.Swap()+m_ticket.Commission());
            rez=alprof;
            if(rezult==1 && alprof!=0.00){rez=alprof/(AccountInfoDouble(ACCOUNT_BALANCE)-alprof)*100;}
            if(rezult==2){rez+=m_ticket.Volume();}      
           }
        }
     }
   return(NormalizeDouble(rez,2)); 
  }
por cierto, el número de posiciones cerradas también es un problema para saber cuántas de ellas han operado
 
TYRBO:

Vladimir, buenas noches, podrías aconsejarme como hacer una función que calcule el porcentaje de ganancia quiero calcular el volumen negociado y no funciona correctamente creo que necesito identificar la orden con la dirección hacia fuera y con ellas calcular el volumen

No entiendo nada, todas las cartas están amontonadas. Pase su código por el estilizador de código.

 
TYRBO:

Vladimir, buenas noches, podrías sugerir una función que calcule el porcentaje de ganancia, quiero calcular el volumen negociado y no funciona correctamente, creo que necesito identificar la orden con la dirección de salida y con ellos calcular el volumen.


por cierto, también es un problema el número de posiciones cerradas

Por favor, envíe el código correctamente. Ya te he corregido una vez y he puesto el código correctamente.

 
TYRBO:

Vladimir, buenas noches, podrías sugerir una función que calcule el porcentaje de ganancia, quiero calcular el volumen negociado y no funciona correctamente, creo que necesito identificar la orden con la dirección de salida y con ellos calcular el volumen.

por cierto, el número de posiciones cerradas también es un problema

He enviado su código correctamente por tercera vez. Me pregunto cuántos intentos más tendremos que hacer. :)