[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 53

 

Parece que algo se está aclarando.... La situación es la siguiente: se declara la variable global double Delete_Level. En el cuerpo de la sentencia if, se le asigna un nuevo valor:

Delete_Level = MA3

Y al salir del cuerpo, el valor global de Delete_Level no cambia. Pregunta: ¿cómo puedo cambiar el valor de la variable global Delete_Level cuando salgo del cuerpo de la sentencia if?

 
vovan-gogan:

Lo siento, pero ¿podrías tomarlo con calma?) Ayúdame a entender el error en


El hecho de que NUNCA habrá una igualdad perfecta - este es el mundo real, el mundo real, en el que hay algunas incertidumbres y tolerancias para tal o cual proceso, operación, etc. Aprenda los "fundamentos"... :-P No puede ser más sencillo. Haz lo que te he recomendado y dime si la condición funciona, ¿funciona? A mí también me interesa. Gracias.


 
vovan-gogan:

Parece que algo se está aclarando.... La situación es la siguiente: se declara la variable global double Delete_Level. En el cuerpo de la sentencia if, se le asigna un nuevo valor:

Y al salir del cuerpo, el valor global de Delete_Level no cambia. Pregunta: ¿cómo puedo cambiar el valor de la variable global Delete_Level cuando salgo del cuerpo de la sentencia if?


¿Cómo es que no cambia? Por supuesto que cambia. Imprime el código y mira la pestaña Log, con F12 - prueba paso a paso en modo de visualización.
 
sergeev:

¿cuál es la fecha que usted y MQL entienden?
Me gustaría hacer una comprobación antes de hacer un pedido. Supongamos que una sesión comienza a las 10-30, entonces a las 10-35 se cumplen todas las condiciones para abrir una orden de compra, pero no debe colocarse hasta que la hora actual sea mayor o igual a las 10-45.
 
Roman.:

¿Cómo es que no cambia? Por supuesto, cambia.


Es así. Por ejemplo, en mi EA, primero declaro una variable global int Orders, y luego en caso de que se coloque una orden pendiente, el valor de int Orders debe cambiar como se muestra a continuación:

int Orders;
if (MA2_2<MA1_2 && MA2_1>MA1_1)//пересечение МА
{
   if (OrdersTotal()>= 1)
   {
   return;
   }
         SL = 30;
         TP = 12;
         S_Price = Low[1] - 1* Point;
         if (OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic)>0)
            {
               Orders++;
               Alert ("Ордер выставлен. Orders=",Orders );
            }
}           

Pero esto no cambiará en las Órdenes. Cada vez que recibimos un mensaje de que "Elpedido está fijado. Pedidos=1"

 
vovan-gogan:


Es así. Por ejemplo, en un EA, primero declaro una variable global int orders y luego en caso de que se coloque una orden pendiente, el valor de int orders debe cambiar como se muestra a continuación:

Pero no hay cambio de órdenes. Cada vez que recibo un mensaje que dice "El pedido está hecho. Pedidos=1"


No necesitas una variable global, sino una variable local de la función de inicio. Así que, por favor, intente

int start()                            // Спец. функция start
  {
    int Orders=0;
     if (MA2_2<MA1_2 && MA2_1>MA1_1)  //пересечение МА
        {
          if (OrdersTotal()>= 1) return(0);   
          SL = 30;
          TP = 12;
          S_Price = Low[1] - 1* Point;
          if (OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic)>0)
            {
               Orders++;
               Alert ("Ордер выставлен.Orders = ",Orders );
            }
        }   
       Alert ("Ордеров нет. Orders = ",Orders );    
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }
 
Roman.:


Ahí no necesitas una variable global, sino una variable local para la función de inicio. Por lo tanto, intente


¿No es lo mismo en mi ejemplo? ¿En qué se diferencia? Excepto que no he añadido una función de inicio.
 
vovan-gogan:

¿No es lo mismo en mi ejemplo? ¿En qué se diferencia? Excepto que no he añadido una función de inicio.

Deberías probar mi ejemplo.
 
Roman.:

Prueba mi versión.

Pero no veo la diferencia para intentarlo. Por favor, dígame qué he hecho mal.
 
Dime por qué cuando abro un gráfico (en tiempo real) con Plazo de la M30 y aplico el indicador con el parámetro int shift=iBarShift(NULL,PERIOD_M5,some_time); el shift será como debe ser, pero cuando paso el mismo indicador por el tester con el periodo M30 el shift no se calcula?