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

 
Alexey Viktorov:

La pregunta parece ser sobre MT5. La respuesta es: no de forma programada. La pregunta puede cerrarse.

Gracias

 

Buenas tardes a todos, como prometí estoy de vuelta con más tutorialesЈ ;-) Por supuesto que tengo la máquina del grial funcionando, pero ha sido lenta en las pruebas, así que he estado buscando la manera de ejecutar el código dentro de ella sólo cuando llega una nueva barra. Encontré la siguiente opción. A nivel global, se define una variable

int intBars;// ГЛОБАЛЬНО ОПРЕДЕЛЁННАЯ ПЕРЕМЕННАЯ ДЛЯ ОПРЕДЕЛЕНИЯ НАСТУПЛЕНИЯ

Entonces escribí una función que comprueba si se ha producido una nueva barra - esto es una obra maestra


bool f_IsNewBar()
{
   if(intBars != Bars) 
   {
      intBars = Bars;
      return(true);
   } 
return(false);
}

Cuando encontré esta variante, dicen que debo crear una función con toda la lógica del on-tick. No me gusta este enfoque con las funciones, francamente hablando, así que simplemente compruebo si hay una nueva barra y si es cierto, ejecutaré código en el on-tick. En forma simplificada - sin ningún trabajo real - se ve así

void OnTick()
{//НАЧАЛО ОН ТИК
   // если появился новый бар:
   if(f_IsNewBar()) // ЕСЛИ ПОЯВИЛСЯ НОВЫЙ БАР
    {// ВЫПОЛНЯЕМ ВЕСЬ КОД В ОН ТИК
/*
МНОГО МНОГО СЕКРЕТНОГО ГРААЛЬНОГО КОДА😃😃😃
*/

    }
}// КОНЕЦ ОН ТИК

Tengo una pregunta diferente. El grial, por supuesto, funcionará en el caso real. Entonces, ¿este chequeo debe ser eliminado en la versión del grial que no se probará en el tester sino que se ejecutará en el tick real, para que el EA opere en cada tick, o debemos dejar este chequeo para el tick real también? Si esta comprobación se incluye también en la versión de la cuenta real, ¿cómo debemos planificar un segundo intento de abrir órdenes si no se abrieron la primera vez?

 
DanilaMactep:

Buenas tardes a todos, como prometí estoy de vuelta con más tutorialesЈ ;-) Por supuesto que tengo la máquina del grial funcionando, pero ha sido lenta en las pruebas, así que he estado buscando la manera de ejecutar el código dentro de ella sólo cuando llega una nueva barra. Encontré la siguiente opción. A nivel global, se define una variable

Entonces escribí una función que comprueba si se ha producido una nueva barra - esto es una obra maestra


Cuando encontré esta variante, dicen que debo crear una función con toda la lógica del on-tick. No me gusta este enfoque con las funciones, francamente hablando, así que sólo compruebo si hay una nueva barra y si es cierto, ejecutaré código en el on-tick. En forma simplificada - sin ningún trabajo real - se ve así

Tengo una pregunta diferente. El grial, por supuesto, funcionará en el caso real. Entonces, en la versión del grial que no se probará en el tester pero que funcionará en la cuenta real, ¿debemos eliminar esta comprobación para que el EA funcione en cada tick o debemos dejarla también para la cuenta real? Si esta comprobación se incluye también en la versión de la cuenta real, ¿cómo debemos planificar un segundo intento de abrir órdenes si no se abrieron la primera vez?

Si los cálculos se realizan sobre los valores de barra de OPT, HIGH, LOW, CLOSE, no necesitamos contar en cada tick. Pero es correcto controlar el precio en cada tick. Se trata de cálculos o comprobaciones de estado por separado.

La nueva barra también es rastreada por el tiempo de apertura de la barra cero.

FlagNewBar=false;   // глобальная или статик булева переменная
   if(BarTime!=Time[0])
     {
      BarTime=Time[0];
      FlagNewBar=true;
     }
 
Artyom Trishkin:

En este hilo quiero empezar a ayudar a aquellos que realmente quieren entender y aprender a programar en el nuevo MQL4 y quieren cambiar fácilmente a MQL5 - los lenguajes son muy similares.

Este blog será un buen lugar para discutir los problemas, los algoritmos de su solución y cualquier otra cuestión relacionada con la programación de MT de una manera u otra.

Espero que otros miembros experimentados de nuestro foro se unan a la discusión y la rama sea interesante para todos.

MQL4 Tareas: Determinar el número de posición de una letra mayúscula en una cadena. Gracias.

 
Mikhail Nazarenko:

MQL4 Tarea: Determinar el número de posición de una letra mayúscula en una cadena. Gracias.

string str="preved mEdved";
string uppercase="ABCDEF.....ZАБВГД....Я";

int finish=StringLen(str)-1;
int pos=-1;
for(int i=0; i<=finish; i++)
   {
   pos=StringFind(uppercase,StringSubstr(str,i,1));
   if(pos>=0) break;
   }
printf(pos);
 
Aleksei Stepanenko:

Gracias.

 
Mikhail Nazarenko:

Gracias.

Error, no es el resultado de StringFind lo que queremos, es el i.

Sí:

string str="preved mEdved";
string uppercase="ABCDEF.....ZАБВГД....Я";

int finish=StringLen(str)-1;
int pos=-1;
for(int i=0; i<=finish; i++)
   {
   if(StringFind(uppercase,StringSubstr(str,i,1))>=0)
      {
      pos=i;
      break;
      }
   }
printf(pos);
 
Mikhail Nazarenko:

MQL4 Tarea: Determinar el número de posición de una letra mayúscula en una cadena. Gracias.

Puedes usar StringGetCharacter() El carácter "A" es 65 y "a" es 32 más - 97. Y también todos los personajes. Por lo tanto, si un código de carácter es > 90 y <= 122, es un carácter latino en minúscula. Los caracteres cirílicos también difieren en 32

 
Alexey Viktorov:

Puedes

Exactamente, una buena opción.

 
Hola. ¿Cómo puedo hacer una cuenta de liderazgo aquí?
Razón de la queja: