Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 206

 
a.lxrn:

Esta es una pregunta de un principiante) condición en el código para un ejemplo, ayuda por favor.

Cómo hacer un mensaje en la condición verdadera fue la salida de una vez, es decir, el precio>ma salida de un mensaje (y no se multiplican), creo que usted sabe lo que quiero decir.

¿Cómo prescribir correctamente el contador?

if(Work==false) // Критическая ошибка
     {
      if(AlertWork==false)   // Если Алерта еще не было
        {  Alert("Критическая ошибка. Эксперт не работает."); AlertWork=true; }
      return;
     }                        

Cómo es eso, pero usted no tiene una vez necesidad de mostrar la alerta, respectivamente, la bandera tendrá que restablecer.

 

Hola, ¿podríais decirme cómo programar un indicador personalizado para que no se muestren las líneas extra (buffers) cuando el indicador se adjunta al gráfico?


 
Alexey Kazmin:

Hola, ¿podríais decirme cómo programar un indicador personalizado para que no se muestren las líneas extra (buffers) cuando el indicador se adjunta al gráfico?


utilizar estas propiedades

#property indicator_buffers 5
#property indicator_plots   1
 
Vitaly Muzichenko:


Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategia

FAQ de principiantes MQL4 MT4 MetaTrader 4

Vitaly Muzichenko, 2020.06.14 16:29

Funciona en MT5, pero tengo silencio en MT4 con la misma configuración

Construir 1260


Cosas extrañas. Ayer y hoy no me funcionaba el envío, pero justo ahora ha funcionado y el mensaje se ha enviado. No cambió ni reconstruyó nada en absoluto.

 
Igor Makanu:

utilizar estas propiedades

Gracias, lo intentaré.

 
Estoy confundido con los objetos gráficos, no puedo averiguar cómo obtener las coordenadas X Y High[0] en píxeles de CORNER_RIGHT_UPPER? ¿Cuáles serían las funciones para calcular int X e int Y?
 
Valeriy Yastremskiy:

De alguna manera, pero tiene que mostrar la alerta más de una vez, por lo que la bandera tendrá que ser restablecida.

   if(sizeBar && maxmin)
     {
      
                   while(true)
                   {
                         int ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 5, sl, tp);
                         if(ticket>0) break;                        
                   }      
             
     }

Todavía no entiendo

Supongamos que hay una condición para abrir una posición, digamos que el precio debe estar por encima de la muñeca y se abre una orden de compra.

Esta condición se cumplirá durante mucho tiempo y en cada iteración se abrirá una orden mediante este código

¿Cómo hago para que se abra una orden por esta condición y ya está?

 
a.lxrn:

No lo entiendo.

Supongamos que hay una condición para abrir una posición, supongamos que el precio debe ser mayor que la muñeca y se abrirá una orden de compra.

Esta condición se cumplirá durante mucho tiempo y en cada iteración se abrirá una orden mediante este código

¿Cómo hago para que se abra una orden por esta condición y ya está?

Si la condición de orden abierta es verdadera y la bandera de orden abierta es falsa, entonces abra una orden y establezca la bandera de orden abierta como verdadera.
 
a.lxrn:

No lo entiendo.

Supongamos que hay una condición para abrir una posición, supongamos que el precio debe ser mayor que la muñeca y se abrirá una orden de compra.

Esta condición se cumplirá durante mucho tiempo y en cada iteración se abrirá una orden mediante este código

¿Cómo hago para que se abra una orden por esta condición y ya está?

Si la condición de orden abierta es verdadera y la bandera de orden abierta es falsa, entonces abra una orden y establezca la bandera de orden abierta como verdadera.
 

OrderDelete

Por favor, ayúdenme a encontrar un error en el código. Ni el compilador ni el probador muestran un error, pero los límites no se borran...

void OnTick()
            
      if (Low[1] < val2 && BUY() == 0 && BUYLIMIT1() == 0 && BUYLIMIT2() == 0)

      {
      
      SL = NormalizeDouble(Ask - StopLoss*Point, 5);
      TP = NormalizeDouble(Ask + TakeProfit*Point, 5); 
          
      ticket = OrderSend(Symbol(), OP_BUY, Lots, price, 3, SL, TP, "EU buy", Magic, 0, Red);
      
      if(ticket<0)
         Print("Не удалось открыть ордер");
      }
            
      {
      if (BUY() == 1 && BUYLIMIT1() == 0 && BUYLIMIT2() == 0)
      {
      
      SL = NormalizeDouble(price1 - StopLoss1*Point, 5);
      TP = NormalizeDouble(price1 + TakeProfit1*Point, 5); 
     
      ticket1 = OrderSend(Symbol(), OP_BUYLIMIT, Lots1, price1, 3, SL, TP, "EU buy", Magic1, 0, Red);
      

            {
            if (BUY() == 0 && BUYLIMIT1() == 1)
            {
            for(int i=OrdersTotal()-1; i>=X; i--)
            if(OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES)&&
               OrderType() == OP_BUYLIMIT &&
               OrderMagicNumber()==Magic1)
               {
            res=OrderDelete(OrderTicket(),clrWhite);
               Print("OrderDelete error ",GetLastError());
               }
              return;}
      } } }
      
      {
      if (BUYLIMIT1() == 1 && BUYLIMIT2() == 0)
      {
      
      SL = NormalizeDouble(price2 - StopLoss2*Point, 5);
      TP = NormalizeDouble(price2 + TakeProfit2*Point, 5); 

      ticket2 = OrderSend(Symbol(), OP_BUYLIMIT, Lots2, price2, 3, SL, TP, "GU buy", Magic2, 0, Red);
      

            {
            if (BUY1() == 0 && BUYLIMIT2() == 1)
            {
            for(int i=OrdersTotal()-1; i>=X; i--)
            if(OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES)&&
               OrderType() == OP_BUYLIMIT &&
               OrderMagicNumber()==Magic2)
               {
            res=OrderDelete(OrderTicket(),clrWhite);
               Print("OrderDelete error ",GetLastError());
               }
              return;}
      } } }     
      
                               
}


//+------------------------------------------------------------------+
int BUY()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic &&
         OrderType() == OP_BUY)
         {
         count++;
         }

     }
     return(count);
}

//+------------------------------------------------------------------+
int BUYLIMIT1()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic1 &&
         OrderType() == OP_BUYLIMIT)
         {
         count++;
         } 
     }
     return(count);
}

//+------------------------------------------------------------------+
int BUY1()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic1 &&
         OrderType() != OP_BUYLIMIT)
         {
         count++;
         } 
     }
     return(count);
}

//+------------------------------------------------------------------+
int BUYLIMIT2()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic2 &&
         OrderType() == OP_BUYLIMIT)
         {
         count++;
         }
     }
     return(count);
}

//+------------------------------------------------------------------+
int BUY2()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic2 &&
         OrderType() != OP_BUYLIMIT)
         {
         count++;
         }
     }
     return(count);
}
Razón de la queja: