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

 
Jenya77769:

Hola! Los dos números menos q y w se comparan incorrectamente, cuando son iguales, el operador if piensa que uno es mayor que el otro.¿Cuál es el error? Cuando q = -0,0002 y w es también -0,0002, res12=falso, ¿por qué?

porque es un doble y no son exactamente iguales.

FIGURA : comparar los valores normalizados

 
Jenya77769:

Hola! Los dos números menos q y w se comparan incorrectamente, cuando son iguales, el operador if piensa que uno es mayor que el otro.¿Cuál es el error? Cuando q = -0,0002 y w es también -0,0002, res12=falso, ¿por qué?


Compara su diferencia con el cero, esto es más correcto y funciona para números de cualquier tipo.

 

Gente, aquí hay una pregunta -

Hay una línea horizontal, de un día de duración.

Tiene una etiqueta de texto, un objeto etiqueta.

¿Cómo puedo hacer que esta etiqueta de texto esté siempre en el centro de la línea (en el centro del día), en cualquier zoom del gráfico?

 
John Smith:

Gente, aquí hay una pregunta -

Hay una línea horizontal, de un día de duración.

Tiene una etiqueta de texto, un objeto etiqueta.

¿Cómo puedo hacer que esta etiqueta de texto esté siempre en el centro de la línea (en el centro del día), en cualquier zoom del gráfico?

Cambiar la coordenada X de la etiqueta, es decir, calcularla como el centro de la línea
 
Renat Akhtyamov:
Cambiar la coordenada X del marcador, es decir, calcularlo como el centro de la línea

Es comprensible, pero ¿cómo lo hago?


Tenía una segunda opción - con el marcador atado al principio del día, usando una variable de texto para insertar espacios antes del valor del marcador, dependiendo del zoom del gráfico.

En esencia, quiero que la etiqueta esté en el lado izquierdo en el zoom de cerca, y en el zoom de fuera la etiqueta debe ser movida al centro. Como los niveles de zoom en mt4 son estándar, entonces para cada nivel de zoom no es tan difícil encontrar el número correcto de espacios. Pero aquí hay una pregunta: ¿tiene mql4 una función de este tipo que determine el nivel de zoom del gráfico actual?

Entonces todo será sencillo, algo así: "si chartzoom = 50% entonces spacesnumber = 10", etc.

Donde spacesnumber es una variable de cadena que define el número de espacios antes del texto de la etiqueta, como __________1.23456 - hay 10 espacios con el signo _.

 
John Smith:

Es comprensible, pero ¿cómo lo hago?


Tenía una segunda opción - con el marcador atado al principio del día, usando una variable de texto para insertar espacios antes del valor del marcador, dependiendo del zoom del gráfico.

En esencia, quiero que la etiqueta esté a la izquierda en el zoom de cerca, y en el zoom de alejamiento la etiqueta debe moverse al centro. Como los niveles de zoom en mt4 son estándar, entonces para cada nivel de zoom no es tan difícil encontrar el número correcto de espacios. Pero aquí hay una pregunta: ¿tiene mql4 una función de este tipo que determine el nivel de zoom del gráfico actual?

Entonces todo será sencillo, algo así: "si chartzoom = 50% entonces spacesnumber = 10", etc.

Donde spacesnumber es una variable de cadena que define el número de espacios antes del texto de la etiqueta, como __________1.23456 - hay 10 espacios con el signo _.

Lea mis comentariosaquí
 

Hola a todos! Necesito ayuda de nuevo. No puedo averiguar cuál es el error. Vuelve a arrastrarte. Arrastre por MA. Tengo que buscar en varios pedidos. Puede haber bucles. Mientras haya una orden abierta, todo funciona perfectamente. En cuanto se abre una orden más, comienza la bacanal: modificación constante (con un mismo parámetro) de la primera orden (no se muestra el error 1). En este caso, el segundo orden se modifica como es debido, cuando se cumplen las condiciones adecuadas (el primer orden, cuando las condiciones cambian, cambia sus parámetros y continúa la modificación constante con otros nuevos). No puedo encontrar la razón. ¿Quién podría darme una pista?

void TrailingStop()
{
   int i;
   int k          = OrdersTotal(); 
   double Ma      = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 1); 
   int MinDistans = int(MarketInfo(Symbol(), MODE_STOPLEVEL));
   
   double lips1  = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 1); 
   double lips2  = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 2);
   double teeth1 = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, 1);
   double teeth2 = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, 2);
   double jaw1   = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW , 1);
   double jaw2   = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW , 2);
   
   for (i = 0; i < k; i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         {
            if(OrderType() == OP_BUY)
            {
               if(lips2 < teeth2 && teeth2 < jaw2 && lips1 < teeth1 && teeth1 < jaw1)
                  break;
               
               if(lips2 > teeth2 && teeth2 > jaw2 && lips1 > teeth1 && teeth1 > jaw1)
               {   
                  if((OrderStopLoss() + TrailingStep*Point) < Ma)
                  {
                     double Sl = NormalizeDouble(Ma, Digits);                 
                     
                     if((Bid - MinDistans) > Sl && (OrderStopLoss() + TrailingStep*Point) < Sl)
                     { 
                        OrderModifyX(OrderTicket(), OrderOpenPrice(), Sl, OrderTakeProfit(), OrderExpiration(), 0);
                     }
                  }
               }
            }
         }
      }     
 
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))  
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         {
            if(OrderType() == OP_SELL)
            {
               if(lips2 > teeth2 && teeth2 > jaw2 && lips1 > teeth1 && teeth1 > jaw1)
                  break;
                  
               if(lips2 < teeth2 && teeth2 < jaw2 && lips1 < teeth1 && teeth1 < jaw1)
               {
                  if(MathAbs(OrderStopLoss() - TrailingOpen*Point) > Ma)
                  {
                     double Sl = NormalizeDouble(Ma, Digits);
                 
                     if((Ask + MinDistans) < Sl && (OrderStopLoss() - TrailingStep*Point) > Sl)
                     {
                        OrderModifyX(OrderTicket(), OrderOpenPrice(), Sl, OrderTakeProfit(), OrderExpiration(), 0);
                     }
                  }
               }
            }
         }
      }
   }
}



 
Youri Lazurenko:

Hola a todos! Necesito ayuda de nuevo. No puedo averiguar cuál es el error. Vuelve a arrastrarte. Arrastre por MA. Tengo que buscar en varios pedidos. Puede haber bucles. Mientras haya una orden abierta, todo funciona perfectamente. En cuanto se abre una orden más, comienza la bacanal: modificación constante (con un mismo parámetro) de la primera orden (no se muestra el error 1). En este caso, el segundo orden se modifica como es debido, cuando se cumplen las condiciones adecuadas (el primer orden, cuando las condiciones cambian, cambia sus parámetros y continúa la modificación constante con otros nuevos). No puedo encontrar la razón. ¿Quién puede ayudarme?


1. El ciclo debería invertirse.

2. ¿Para qué sirve el descanso?

 
Artyom Trishkin:

1. El ciclo debe invertirse.

2. ¿para qué sirve el descanso?


Hola.

1 - "El bucle debe ser inverso" - ¿se refiere a for(i = k; i > 0; i--)?

2. "¿Para qué es el descanso?" - Para salir. Generalmente, al principio, después de seleccionar el tipo de orden y si es contra la ruptura de la tendencia. A continuación, volvemos a seleccionar el tipo de orden y, si es tendencial, lo modificamos.

Esta variante de ruptura me ayudó antes. Cuando sugirió una solución de arrastre por MA. Si, por ejemplo, en una operación de compra, el stop estaba por encima de la MA, obtenía el error 1 hasta que la MA estaba por encima del stop, después de lo cual el error desaparecía. Cuando introduje la condición de que si el stop está por encima de la MA, entonces romper, todo volvió a la normalidad.

 
Youri Lazurenko:

Hola.

1 - "El bucle debe invertirse" - ¿se refiere a for(i = k; i > 0; i--)?

2. "¿Para qué es el descanso?" - Para salir. Generalmente, al principio, después de seleccionar el tipo de orden y si es contra la ruptura de la tendencia. A continuación, volvemos a seleccionar el tipo de orden y, si es tendencial, lo modificamos.

Esta variante de ruptura me ayudó antes. Cuando sugirió una solución de arrastre por MA. Si, por ejemplo, en una operación de compra, el stop estaba por encima de la MA, obtenía el error 1 hasta que la MA estaba por encima del stop, después de lo cual el error desaparecía. Cuando pongo la condición de que si el stop está por encima de la MA, todo se ha normalizado.

romper completa el bucle. ¿Qué pasa entonces con el resto de los puestos?
Compruebe dónde está el tope en relación con su nuevo nivel.
El bucle inverso de OrdersTotal()-1 a >=0