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

 
Artyom Trishkin:

Ya te he contestado:

Toma el último pedido de la lista:

Y primero hay que averiguar cuánto ha cambiado el estado de la lista de pedidos. Era 12, se convirtió en 8 - ha cambiado en 4 órdenes. En consecuencia, debe imprimir los cuatro pedidos. Y siempre se imprime sólo el último de la lista.

¿Cómo sabe cuánto ha cambiado? Al iniciar el EA, debe escribir el número de órdenes en una variable, por ejemplo, int last_total. Luego, en cada tick, compara el OrdersTotal() con last_total. Si NO son iguales, eso es un cambio. Escribe la diferencia entre OrdersTotal() y last_total en una variable, por ejemplo, num_changes y guarda el nuevo estado de OrdersTotal() en last_total.
Aquí puede haber algunas sutilezas, por ejemplo, cuando se activa una orden pendiente. Pero por ahora, debes hacer lo que necesitas hacer primero.
Sabiendo el número de órdenes pendientes, puede buscarlas en el historial. Sin embargo, también se puede limitar el seguimiento de las órdenes de la lista histórica: hacer todo lo anterior para la lista de órdenes históricas, y no para la lista de órdenes de mercado. La diferencia entre lo que era y lo que ha llegado a ser: esta es la cantidad de órdenes que hay que analizar. Siempre se analiza sólo la última orden de la lista.

Sin embargo, esto no puede garantizar que el último pedido de la lista del historial sea el último pedido cerrado. Este es también un matiz que hay que tener en cuenta. Pero entonces.

Muchas gracias. Eso lo hace mucho más claro. Palabras clave: debe imprimir no sólo uno, sino 4 pedidos a la vez. Si me lo hubieras dicho en el primer post no te habría torturado.

 
ANDREY:

Muchas gracias. Eso tiene mucho más sentido. Las palabras clave son imprimir no uno sino 4 pedidos a la vez. Si me lo hubieras dicho en el primer post no te habría torturado.

De nada. Hasta que no aprendas por ti mismo a hacer lógica tal o cual acción, no te moverás del punto muerto - preguntarás en el foro. Se harán preguntas en el foro. No tiene que estar vinculado a los pedidos/listas/boletos, etc...

Creo que si se utilizaran manzanas, se podría crear fácilmente un algoritmo para llevar la cuenta de cuántas manzanas hay en la mesa, luego se sale a fumar y se vuelve, hay menos manzanas...
¿Cómo lo sabes? Fácil - 5 manzanas, 3 manzanas. Faltan dos. El gato debe tener... O había cinco y ahora hay seis. Salió uno. Por la humedad, tal vez... En cualquier caso, contaste la diferencia en tu cabeza.

Entonces, ¿en qué se diferencia la misma acción de contar órdenes? Las mismas manzanas... En lugar de "en mente" escribe "en función"

 

por favor, aconsejar cómo eliminar la función del código(descomposición), si ya hay más de 200 líneas de código y es inconveniente para navegar por todo. Me interesa la "mecánica": cómo se "descompone" la función, dónde se escribe, para llamarla después en el código principal.

Si tienes un ejemplo con una descripción, te agradecería un enlace
 
Alexey Kolybelnikov:

por favor, aconseja cómo eliminar la función del código(descomposición), si ya hay más de 200 líneas de código y es inconveniente recorrerlo todo. Me interesa la "mecánica": cómo se "descompone" la función, dónde se escribe, para llamarla después en el código principal.

Si hay un ejemplo con una descripción, agradecería un enlace

Solía serlo:

double a = (b + c) / (d - e);


Se convirtió:

double a = Add(b,c) / Sub(d,e);

//---------

Add(const double v1,const double v2) { return v1 + v2; }

Sub(const double v1,const double v2) { return v1 - v2; }
 
Artyom Trishkin:

De nada. Hasta que no aprendas a formular la lógica de una acción, no te moverás del punto muerto: estarás haciendo preguntas en el foro. Y la lógica no puede ser más fácil: se puede juntar en simples palabras. No tiene por qué estar vinculado a las órdenes/listas/boletos, etc.

Creo que con las manzanas se puede crear fácilmente un algoritmo para seguir su cantidad - todo es como en la vida real: recuerdas cuántas manzanas hay en la mesa, sales a fumar y cuando vuelves hay menos manzanas...
¿Cómo lo sabes? Fácil - 5 manzanas, 3 manzanas. Faltan dos. El gato debe tener... O había cinco y ahora hay seis. Salió uno. Por la humedad, tal vez... En cualquier caso, contaste la diferencia en tu mente.

Entonces, ¿en qué se diferencia la misma acción de contar órdenes? Las mismas manzanas... En lugar de "en la mente" escribe "en la función"

Entendido, gracias por la aclaración. La misma pregunta me ronda por la cabeza desde hace mucho tiempo.... Mi código asume quela función Print() se imprimirá en el diario con frecuencia. Automáticamente en el diario se imprimirá cada orden abierta y cada cierre de cada orden. Tengo muchos pedidos. En consecuencia, habría muchos registros sobre los pedidos. Estos registros a menudo me molestan al mirar los datos en la función Print(), que también pueden ser numerosos.

Q: .

Cómo puedo hacer para que, cuando lo necesite, la información sobre las órdenes abiertas y cerradas no se muestre en el diario, sino que sólo se muestre en la función Print().

¿Se puede hacer con la ayuda de alguna función de MQL4 o debo cambiar el código del terminal MT4?

Gracias.
 
ANDREY:

Entendido. Gracias por la aclaración. La misma pregunta me ronda por la cabeza desde hace mucho tiempo.... Mi código asume que la función Print() se imprimirá en el diario con frecuencia. Automáticamente en el diario se imprimirá cada orden abierta y cada cierre de cada orden. Tengo muchos pedidos. En consecuencia, habría muchos registros sobre los pedidos. Estos registros a menudo me impiden obtener datos de la función Print(), que también puede ser muy numerosa.

Q: .

Cómo puedo hacer para que, cuando lo necesite, la información sobre las órdenes abiertas y cerradas no se muestre en el diario, sino que sólo se muestre en la función Print().

¿Se puede hacer usando alguna función de MQL4, o requiere cambios en el código del terminal MT4?

Gracias.

Si haces la investigación, es mejor que la escribas en un archivo. No sé cómo mostrar las acciones con las órdenes en el archivo de registro y creo que no hay tal cosa. Este es el nivel de las entradas del principio y el final de la operación de EA. Se trata de entradas de archivos de registro. El archivo contendrá sólo lo que usted quiera, el registro contendrá los registros del terminal además de los suyos. Puedes hacer cambios en el terminal, incluso puedes escribir los tuyos)) pero ¿cuánto te costará?

 
Alexey Kolybelnikov:

por favor, aconsejar cómo eliminar la función del código(descomposición), si ya hay más de 200 líneas de código y es inconveniente para navegar por todo. Me interesa la "mecánica": cómo se "descompone" la función, dónde se escribe, para llamarla después en el código principal.

Si hay un ejemplo con una descripción, le agradecería un enlace

https://www.mql5.com/ru/docs/runtime/imports

https://www.mql5.com/ru/docs/basis/preprosessor/include

y más allá en los enlaces... En general: pon todo lo "extra" en la librería *.mqh, al principio del código principal. El compilador lo "pegará"

Pero en general, 200 líneas no es demasiado - usando los botones de puedes sentirte cómodo con más de mil líneas.

 
Valeriy Yastremskiy:

Si estás haciendo una investigación es mejor escribir en un archivo. No sé cómo mostrar las acciones de la orden en el archivo de registro y no creo que haya uno, este es el nivel de los registros de inicio y fin de la EA. Se trata de entradas de archivos de registro. El archivo contendrá sólo lo que usted quiera, además de sus entradas, el registro contendrá las entradas del terminal. Puedes hacer cambios en el terminal, incluso puedes escribir los tuyos)) pero ¿cuánto te costará?

Gracias por el consejo. Pero creo que nunca he escrito un EA en un archivo. Siempre he escrito EAs en MetaEditor 4. Para ver la salida de Pront() para todo el período de prueba, elijo Log - Pestaña abierta. Se abre un archivo en el Bloc de notas con el mismo contenido que en la pestaña Log. A mí me parece un archivo de registro.
Pero me parece que no puedo eliminar todas las órdenes abiertas y cerradas de este archivo en el Bloc de notas. Para ser más precisos, sí. Pero es un trabajo muy tedioso y que requiere mucho tiempo.
Te agradecería mucho que me dijeras el secreto de cómo hacer que mi código abriera y cerrara las órdenes, pero en el archivo, la información sobre la apertura y el cierre de todas las órdenes no estaba, sino sólo un registro de la función Pront().
Gracias por la ayuda.

 
ANDREY:


¿Sabes dónde puedo leer más sobre las últimas actualizaciones de MQL4? Hay mucha información, pero es difícil encontrar lo que necesitas.

https://www.mql5.com/ru/forum/160683/page1109#comment_15711102

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2020.03.31
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
ANDREY:

Gracias por el consejo. Pero creo que nunca escribí EA en un archivo. Siempre he escrito EA en MetaEditor 4. Para ver la salida de la función Pront() para todo el período de prueba, selecciono Log - pestaña Abrir. Se abre un archivo en el Bloc de notas con el mismo contenido que en la pestaña Log. A mí me parece un archivo de registro.
Pero me parece que no puedo borrar todas las órdenes abiertas y cerradas de este archivo del bloc de notas. Para ser más precisos, sí. Pero es un trabajo muy tedioso y que requiere mucho tiempo.
Te agradecería mucho que me dijeras el secreto de cómo hacer que mi código abriera y cerrara las órdenes, pero en el archivo, la información sobre la apertura y el cierre de todas las órdenes no estaba, y sólo había entradas de la función Pront().
Gracias por la ayuda.

int OnInit()
  {   
//----------
   FileTest() // функция открытия файла записи данных
   point = 1/Point; // чтобы не делить на пойнт
   tx=TimeCurrent();// задание времени начала работы советника
//--- create timer
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {

   FileClose( Handle );                // Закрываем файл
   Alert("Файл ",File_Name," закрыт.");// Сообщение
     
//--- destroy timer
   EventKillTimer();

  }

void OnTick()    // Функция start() раньше называлась
  {
.................
 Qnt_Symb=FileWrite(Handle,Symbol()," ТФ ",Period(),"Открыт ордер Buy по цене ",Ask,
            "Ticket = ",Ticket," ProfB=",ProfB," MxProfB=",MxProfB, " ProfS=",ProfS," MxProfS=",MxProfS);//Запись в файл
            if(Qnt_Symb<=0) // Если не получилось
              {
               Alert("Ошибка записи в файл ",GetLastError());// Сообщение
              };
.................
}
//-------------------------------------------------------------- 12 --

int FileTest()
  {
   Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";");//Открытие файла
   if(Handle==-1) // Неудача при открытии файла
     {
      Alert("Ошибка при открытии файла. ",// Сообщение об ошибке
            "Возможно, файл занят другим приложением");

     }

   return(Handle);
  }
//+------------------------------------------------------------------+

En el probador, el archivo estará en la carpeta \tester\files, y si lo pones en la ventana, estará en la carpeta \MQL4\Files. Y Kovalev lo tiene en detalle.

Razón de la queja: