Asesores Expertos: Ejemplos del libro "Redes neuronales en el trading algorítmico en MQL5" - página 2

 

Buenas tardes,

Estoy intentando ejecutar el primer script del libro, que genera un archivo csv.

Se llama datos_iniciales.mq5.

Al ejecutar el script en el primer paso:

If(CopyClose(_Symbol, PERIOD_M5, Start, End, close) <= 0 ||

CopyOpen(_Símbolo, PERIOD_M5, Inicio, Fin, abrir) <= 0 ||

CopyHigh(_Símbolo, PERIOD_M5, Inicio, Fin, high) <= 0 ||| CopyLow(_Símbolo, PERIOD_M5, Inicio, Fin, close) <= 0

CopyLow(_Símbolo, PERIOD_M5, Inicio, Fin, low) <= 0)

devolver;

CopyClose es siempre igual a -1

y el script se bloquea, las repeticiones no ayudan y según leo en los comentarios

esto es una situación normal y significa que no hay datos del servidor.

Sin embargo, no entiendo muy bien cómo se escribe la ruta a los archivos de datos en este script.

Está escrito en la documentación de MQL5:


Por ejemplo, los datos de los símbolos EURUSD del servidor de comercio MetaQuotes-Demo estarán ubicados en la carpetaterminal_directory\bases\MetaQuotes-Demo\history\EURUSD\.


Y tengo archivos con resolución .hcc y un subdirectorio \cache con archivos como H4.hc en él


Pero en el script initial_data.mq5, sólo hay un lugar donde se escribe la ruta.

PrintFormat("Coeficientes de correlación guardados en el archivo %s\\\\Files\\\\%s",

TerminalInfoString(TERMINAL_DATA_PATH), FileName);


I salida TERMINAL_DATA_PATH

2024.06.16 22:53:39.982 ruta (EURUSD,M5) dataPath =C:\Users\HPAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075


¿Qué debo hacer para especificar correctamente la ruta a estos archivos o debe engancharlos automáticamente desde el directorio del terminal según la lógica MQL5?

¿Cómo descargar datos a un archivo csv?


 
bobozel1 #:

Foro sobre negociación, sistemas automatizados de negociación y ensayo de estrategias de negociación

Cualquier pregunta de principiantes sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos

Aleksey Vyazmikin, 2024.06.18 06:28 pm

#define FileName  "correlation.csv"
//+------------------------------------------------------------------+
//| Parámetros externos|
//+------------------------------------------------------------------+
input datetime Start = D'2015.01.01 00:00:00';  // Comienzo del periodo
input datetime End = D'2020.12.31 23:59:00';    // Fin de periodo
//--- Abrir el archivo para escribir datos
   int handle = FileOpen(FileName, FILE_WRITE | FILE_CSV | FILE_ANSI, "\t", CP_UTF8);
   if(handle == INVALID_HANDLE)
     {
      PrintFormat("Error of open file %s: %d", FileName, GetLastError());
      return;
     }
FileOpen

Parámetros

banderas_abrir

[in] combinación de banderas que definen el modo de trabajo con el archivo. Las banderas se definen como sigue:
FILE_READ archivo se abre para lectura
FILE_WRITEarchivo se abre para escritura
FILE_BINbinario modo lectura-escritura (sin conversión de y a cadena)
FILE_CSVarchivo de tipo csv (todos los elementos escritos se convierten en cadenas del tipo apropiado, unicode o ansi, y se separan por un delimitador )
FILE_TXTarchivo de texto plano (igual que csv, pero no se tiene en cuenta el separador)
FILE_ANSIcadenas de tipo ANSI (caracteres de un byte)
FILE_UNICODEcadenas de tipo UNICODE (caracteres de doble byte)
FILE_SHARE_READacceso de lectura compartido por varios programas
FILE_SHARE_WRITEacceso de escritura compartido por varios programas
FILE_COMMONubicación del archivo en la carpeta común de todos los terminales cliente \Terminal\Common\Files.

FileOpen

Nota

Por razones de seguridad, el trabajo con archivos está estrictamente controlado en el lenguaje MQL5. Los archivos, que se utilizan para las operaciones de archivo utilizando herramientas de lenguaje MQL5, no pueden ser localizados fuera de la "caja de arena" de archivos.

Si es necesario leer un archivo en una determinada codificación (se especifica el parámetro codepage con el valor codepage), se debe establecer la bandera FILE_ANSI. Sin especificar la bandera FILE_ANSI, el archivo de texto se leerá en Unicode sin ninguna conversión.

El archivo se abre en la carpeta del terminal cliente en la subcarpeta MQL5\Files (o en el directorio agent_agent\MQL5\Files en caso de pruebas). Si se especifica FILE_COMMON entre las banderas, el archivo se abre en la carpeta común de todos los terminales cliente \Terminal\Common\Files.

Puede abrir "canales con nombre" de acuerdo con las siguientes reglas:

  • El nombre del canal es una cadena que debe tener la forma: "\servername\pipe\pipename", donde servername es el nombre del servidor en la red y pipename es el nombre del canal. Si los canales se utilizan en el mismo ordenador, se puede omitir el nombre del servidor, pero en su lugar se debe utilizar un punto: "\\.\pipe\pipename". El cliente que intenta conectarse al canal debe conocer el nombre del canal.
  • FileFlush() y FileSeek() deben ser llamados al principio del fichero entre las sucesivas operaciones de lectura del canal y escritura en el canal.

En las lineas anteriores se utiliza el caracter especial de barra invertida '\', por lo que al escribir el nombre en el programa MQL5 se debe duplicar '\', es decir, el ejemplo anterior se debe escribir en el codigo como "\\\\servername\pipe\\\pipename".

Para más detalles sobre el trabajo con canales con nombre, por favor lea el artículo "Comunicación con MetaTrader 5 a través de canales con nombre sin DLL"


 
Aleksey Vyazmikin #

Sinceramente, no he entendido nada de la respuesta, como si escribiera un robot. Se donde se escribe el archivo a crear, pero no se crea.

Tengo una pregunta concreta, ¿cómo tomar los datos de los archivos .hcc y .hc para escribirlos en .csv?

Ejecutando el script initial_data.mq5 del libro como resultado:

CopyClose es siempre -1. ¿Cómo solucionarlo?

Tengo la sospecha de que no ve estos archivos porque la ruta a los archivos de datos no está escrita correctamente.

¿Cómo escribo correctamente la ruta a los archivos de datos?

En mi caso, los archivos de datos están en la carpeta terminal_directory\bases\MetaQuotes-Demo\history\EURUSD\ dentro de la caja de arena.

Llevo una semana luchando con esto, he leído de todo, pero no he encontrado una solución. Por favor, ayúdenme.

 
bobozel1 #:

Sinceramente, no he entendido nada de la respuesta, como si escribiera un robot. Sé donde se escribe el archivo a crear, pero no se crea.

Tengo una pregunta específica, ¿cómo tomar los datos de los archivos .hcc y .hc para escribir en .csv?

Ejecutando el script initial_data.mq5 del libro como resultado:

CopyClose es siempre -1. ¿Cómo arreglar esto?

Tengo la sospecha de que simplemente no ve estos archivos, porque la ruta a los archivos de datos no está escrita correctamente.

¿Cómo especificar correctamente la ruta a los archivos de datos?

En mi caso, los archivos de datos se encuentran en el terminal_terminal_directory\bases\MetaQuotes-Demo\history\EURUSD\ carpeta dentro de la caja de arena.

Llevo una semana luchando con esto, he leído de todo, pero no he encontrado una solución. Por favor, ayúdenme.

Todos los datos se toman de la plataforma, al usuario no le importa de dónde los obtiene el terminal, de qué archivo.

El script trabaja con los datos que se reflejan en el gráfico.

Comprueba si en el gráfico hay fechas para las que solicitas cotizaciones.

 
Aleksey Vyazmikin #:

Todos los datos se toman de la plataforma, al usuario no le importa de dónde los obtiene el terminal, de qué archivo.

El script trabaja con los datos reflejados en el gráfico.

Compruebe si en el gráfico hay fechas para las que solicita cotizaciones.

Por favor, explique qué significa esto.

En el script hay un rango

input datetime Start = D'2015.01.01.01 00:00:00'; // Comienzo del periodo

input datetime End = D'2020.12.31 23:59:00'; // Fin del periodo

en M5

¿Debo tomar el gráfico EURUSD en M5, desplácese hasta 2015.01.01 y luego ejecutar la secuencia de comandos en él?

¿O puedo ejecutar el script en MN? ¿Y con nuevos ticks vuelve al principio?
 
bobozel1 #:

¿Puede explicar qué significa eso?

En el script hay un rango

input datetime Start = D'2015.01.01.01 00:00:00'; // Comienzo del periodo

input datetime End = D'2020.12.31 23:59:00'; // Fin del periodo

en M5

¿Tengo que tomar el gráfico EURUSD en M5, desplácese hasta 2015.01.01 y luego ejecutar la secuencia de comandos en él?

¿O puedo ejecutar el script en MN? ¿Y con nuevos ticks se desplaza al principio de nuevo?

Lee la ayuda del terminal. Y aquí hay otra cosa.

Usted encontrará que hay un ajuste de la profundidad de la historia a través del número máximo de barras en la ventana. Es necesario recargar el terminal para que los cambios surtan efecto.

Por lo tanto, es necesario establecer la profundidad máxima de la historia para todos los TFs a la vez por el TF más pequeño que se requiere para el trabajo.

Está claro que 100 barras para días y 100 barras para minutos darán la misma profundidad en barras, pero no en fechas.

Cuando establezca el valor requerido o "Ilimitado" y recargue el terminal, si el historial está disponible para el periodo requerido, podrá ejecutar el script en el TF mensual.


 
Aleksey Vyazmikin #:

Lee la ayuda del terminal. Y aquí hay otra.

Usted aprenderá que hay un ajuste de la profundidad de la historia a través del número máximo de barras en la ventana. Para que los cambios surtan efecto, necesitas recargar la terminal.

Por lo tanto, es necesario establecer la profundidad máxima de la historia para todos los TF a la vez por el TF más pequeño, que se requiere para el trabajo.

Está claro que 100 barras para días y 100 barras para minutos darán la misma profundidad en barras, pero no en fechas.

Cuando establezca el valor requerido o "Ilimitado" y recargue el terminal, si el historial está disponible para el periodo requerido, puede ejecutar el script en el TF mensual.


Gracias. Todo funcionó.
 
bobozel1 #:
Gracias. Funcionó.

De nada.

 
Lo más problemático no es eso. Lo más problemático es que después de optimizar los parámetros, sólo puedes ganar durante un año. Cámbialo por otro año, y no volverá a funcionar. Eso significa que el autor esto no es factible. Los parámetros pueden variar mucho de un año a otro. Quizá no exista un conjunto de parámetros que pueda ser rentable todos los años.
 

Gracias Dmitry por todos tus esfuerzos en este libro. Es realmente útil.

En neuronbase.mqh implementas el método de Regularización de ElasticNet como sigue sin explicación en tu libro.

m_cWeights.m_mMatrix -= m_cWeights.m_mMatrix * Lambda[1] + Lambda[0]

Pero es diferente de la fórmula básica (+) o del código fuente de Keras (+) por ejemplo.

Por favor, explique acerca de su método de implementación. Por qué sólo usas lambdas en lugar de la fórmula completa y por qué multiplicas pesos con una de ellas y sumas con otra.

Dmitriy Gizlyk
Dmitriy Gizlyk
  • 2024.07.15
  • www.mql5.com
Trader's profile