Sustitución de las funciones de los archivos de MT4. - página 10

 

Sustitución de archivos

Quiero probar un EA que hace uso de señales externas en el Probador de Estrategias y en el hilo se indica que el filehandling nativo no funciona en el probador de estrategias. Así que he intentado utilizar la dll suministrada en este hilo. La entrada que quiero procesar está en un archivo con el siguiente aspecto

2007-01-02;EURUSD;2.InstPipDown;;Yes

2007-01-02;USDJPY;1.InstPipUp;;Yes

2007-01-02;USDCHF;1.InstPipUp;;Yes

2007-01-03;EURUSD;2.InstPipDown;;Yes

2007-01-03;EURUSD;4.PipMax1Down;;Yes

2007-01-03;GBPUSD;4.PipMax1Down;;Yes

2007-01-04;USDJPY;8.PipRevBear;;Yes

2007-01-05;EURUSD;5.PipMax2Up;;Yes

2007-01-05;USDJPY;1.InstPipUp;;Yes

Yo mismo creo el archivo para poder utilizar otros tipos de delimitadores.

¿Cómo puedo utilizar la dll para obtener un "registro" a la vez? Puedo hacer el análisis sintáctico de los campos individuales.

¿Cómo puedo saber cuándo he alcanzado el EOF?

He probado algunas variaciones pero obtengo resultados inconsistentes y a veces basura. Escribir datos como en el ejemplo funciona bien pero quiero leer datos.

 

Bueno, ¡la perseverancia manda!

Después de varias horas he descubierto esto:

El manejador de archivos se niega a abrir un archivo que he creado con otro programa. El programa de apertura devuelve -1. Si utilizo el archivo que fue creado por la demo (mt4.log) y copio mi contenido en él, abrir funciona. No puedo entender por qué. Extraño

Hice mis "registros" de longitud fija y leer la longitud del "registro" más 2 para acomodar para "CRLF" al final de cada registro. Obtuve la longitud del archivo, la dividí por la longitud del registro y la puse en bucle para obtener todos mis registros en una matriz:

Este es el código:

int init()

{

string inArr[500];

int archivo;

int filesize;

int registros;

int i;

file = gFileOpen("c:\mt4.log",READ);

// Print(archivo);

filesize = gFileSize(file);

// Print(filesize);

records = filesize/25;

// Print(records);

for(i=1;i<=registros;i++)

{

inArr = gFileRead(file,25);

}

gFileClose(archivo);

Print(inArr[filesize-1]); //Comprueba el último

return(0);

}

 

indicador con fileoutput

hola traders y programadores.

necesito ayuda con un codigo de salida para un nuevo indicador.

el indicador debe ser capaz de escribir un archivo con información relevante, pero sólo debe escribir después de abrir una nueva vela. no cada tick.

¿Cómo se puede hacer esto? lo que intento hacer es, en cada nueva vela escribir OHCL de las últimas 1000 barras para entrenar un PNN. esto debe hacerse fuera con RAPID-I.

y con algunas otras informaciones para aprender cual es la probabilidad de que el cierre de una vela pueda ser.

Por favor, ayuda. sería un gran proyecto, pero cosas tan simples que soy demasiado estúpido (o perezoso) para hacer :-)

PriNova

 

datetime timeprev=0; antes de init()

y

if(timeprev==Time[0])

return(0);

timeprev=Time[0]; justo debajo de start()

y eso es todo.

 

muy buena esta fue una respuesta muy rápida.

gracias elitecamper

 

¿Por qué se ha eliminado la función de movimiento de la biblioteca?

CodersGuru,

No puedo decirte lo valioso que eres para mí, te mereces gran parte de los elogios que recibo de mis clientes, ya que sin ti no sería capaz de hacer mi trabajo en apoyo de ellos.

¿Hay alguna razón por la que la función Mover no se implementó como se hace referencia en su tutorial.

Muchas gracias de nuevo por su servicio

John McGlaughlin

 

gFileRead

Hola,

Mirando el código fuente de mtguru1.dll he encontrado que la función gFileRead() no debería funcionar. ¿Estoy equivocado?

gFileRead() utiliza una variable local para almacenar la cadena leída del archivo. Cuando la función retorna, devuelve un puntero a esa variable, pero este puntero puede ser válido porque la variable local pbuffer sale del ámbito.

Por lo tanto, desde un EA MQL4, una instrucción como esta debería fallar :

string buffer = gFileRead( handle, 50 );

y si funciona es extraño ...

P.D.: He publicado esto en el hilo equivocado, antes. https://www.mql5.com/en/forum/172885.

 

Errata Corrige:

.... pero este puntero puede ser uno válido ....

pero este puntero NO PUEDE ser válido

 

Ejecutar un archivo exe

Hola,

Quiero hacer una cosa simple (así lo pensé). Quiero simplemente abrir (lanzar) un programa externo desde un EA. (no en el EA)

Así que sólo para fines de ejemplo. Digamos que quiero abrir Microsoft Word cuando una cosa determinada sucede en el EA.

He hecho esto antes pero no puedo encontrar el script, he pasado 2 horas buscando en la web. La próxima vez guardaré el código en un lugar seguro.

 

¿alguna pregunta?

Tengo este error "2008.10.21 01:54:34 Fundamental Trader DailyFX_MQL4 v0.02: handle 2 does not exist in FileClose"

¿Cómo puedo hacer?