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

 
Alexey Viktorov:

Artyom, no empecé mi respuesta con las palabras


La parabólica tiene una alternancia estricta, dos señales en una dirección incluso en barras diferentes son imposibles. Y no hay que inventar nada para ello, no traquetea ni en barra cero, como el MA.

Traqueteo - Lo he notado más de una vez. Tal vez algo ha cambiado desde entonces, pero el punto de la barra de cero puede desaparecer - era.

Estoy partiendo como siempre de la situación de que más adelante se puede cambiar el indicador por otro - y este bloque de código ya funcionará independientemente - costumbre ...

 
Artyom Trishkin:
¿Ayudaría? He publicado allí una plantilla, a partir de la cual puedes hacer tú mismo lo que quieras.

Gracias, lo he aplicado a grandes rasgos, pero sigue pareciendo que a veces cambia el SL inmediatamente cuando se abre una operación.
 
AlGuru:

Gracias, lo he aplicado de forma aproximada, pero sigo teniendo la sensación de que a veces cambia el SL inmediatamente cuando se abre una operación.
Entonces necesitas desenrollar los valores de SL y poner Print() dentro de la red de arrastre también, para que informe sobre su trabajo y los valores que alcanza - de lo contrario la sensación es sólo una sensación ;)
 
Ha surgido una pregunta, chicos. ¿Existe un límite en el número de dígitos de un número mágico? ¿Cuántos dígitos debe haber?
 
Rustam Bikbulatov:
Aquí hay una pregunta para ustedes. ¿Existe un límite en el número de dígitos del número mágico? ¿Cuántos dígitos debe haber?


Un magik suele estar definido por un tipo int entero.

int

El tipo entero int tiene un tamaño de 4 bytes (32 bits). El valor mínimo es -2.147.483.648, el valor máximo es 2.147.483.647.

Así.

 
Alekseu Fedotov:


Una magia suele estar definida por el tipo entero int.

int

El tipo entero int tiene un tamaño de 4 bytes (32 bits). El valor mínimo es -2.147.483.648, el valor máximo es 2.147.483.647.

Así.


¡Muchas gracias!
 

Hola a todos, he escrito un EA y no consigo descifrar el código. Necesito que la función se ejecute con cada tick y cada segundo del servidor. Acabo de llamar a mi función 2 veces, a través deOnTick y luego a través deOnTimer parece haber hecho todo correctamente, pero todavía a menudo se pierde un segundo y debido a esto a veces no funciona en el momento adecuado. La ayuda, quién sabe, estaría muy agradecida). ¿Tal vez por una interrupción de la conexión con el servidor deja de funcionar? ¿Es posible hacer que se ejecute cada segundo, aunque haya una interrupción de la conexión, y que los segundos estén estrictamente sincronizados con la hora del servidor?


int OnInit()

  {

   EventSetTimer(1);

   return(INIT_SUCCEEDED);

  }

void OnTick()

{

Clicker (); //-- старт каждый тик

}

void OnTimer()

{

Clicker (); //-- старт каждую секунду

}

void Clicker()

  {

//--- тут идёт порядка 30 строк кода, вырезал чтобы никого не грузить

   Comment("Sek = " + (Seconds()));

   return;                                      // Выход из start()  

  }

 
Amigos, por favor, ayuden a un programador principiante de MQL4 con algún consejo.
He escrito un código que debería determinar el precio máximo de apertura de la base para las últimas n barras, pero por alguna razón el EA considera el precio máximo de apertura de todas las barras del gráfico.

void OnTick()
{
   for (int i = 1; i <= BarTotal; i++)
   {
      double High_Open = iOpen(Symbol(), PERIOD_H1, i); 
      if (High_Open >= Current_High)
      {
         Current_High = High_Open;
         Print (Current_High); 
      }
   }
}

Gracias)

 
ivan-baaton:
Amigos, por favor ayuden a un programador principiante de MQL4 con algún consejo.
He escrito un código que debería determinar el precio máximo de apertura de la base para las últimas n barras, pero el EA por alguna razón considera el precio máximo de apertura de todas las barras del gráfico.

...

Gracias)

Prueba con una función como ésta:

//+------------------------------------------------------------------+
double GetMaxOpen(const string symbol_name,const ENUM_TIMEFRAMES timeframe,uint start_pos,const uint count){
   double array[];
   ResetLastError();
   if(CopyOpen(symbol_name,timeframe,start_pos,count,array)==count) return(array[ArrayMaximum(array)]);
   Print(__FUNCTION__," > Ошибка копирования в массив: ",GetLastError());
   return(WRONG_VALUE);
}
//+------------------------------------------------------------------+

No lo he mirado, prácticamente lo he escrito por mi cuenta, así que puede que se me haya escapado algo.

 

He comprendido mi error, pero no he entendido cómo resolverlo. La tarea se inicia normalmente cada segundo, pero el tiempo desde el inicio de la vela actual no se cuenta correctamente.

La función Seconds() da salida a los segundos a partir de los datos del último tick conocido, pero necesito contar de alguna manera el número real de segundos desde la apertura de la vela de minutos en el momento en que se llama a la función, incluso si no hubo ningún tick en los últimos segundos.

TimeSeconds (TimeLocal()) o ( TimeLocal() - Time[0]) tampoco funcionará, porque la hora local puede diferir del servidor en varios segundos. ¿Cómo resolver el problema?