Estoy completamente perdido - página 3

 
FMIC hay COSAS en esa documentación que no tienen NADA de sentido. Quienquiera que haya escrito esa cosa claramente lo hizo para un público que ni siquiera había escrito un programa en gwbasic o en pseudocódigo, y mucho menos estaba expuesto a conceptos de programación de alto nivel. O al menos la intención del autor era que fuera comprensible para esas personas, no necesariamente que estuviera dirigido exclusivamente a ellas. Me inclino a saltarme las partes sobre las sentencias if/else y los bucles for y lo que es una variable, por el amor de Dios, así que no, no lo leo de principio a fin. PERO cuando me salto esas partes, en las siguientes secciones, el autor no pudo verlo con éxito desde la perspectiva de un relativo principiante porque llega alguien como yo que tiene alguna experiencia limitada en programación y las piezas siguen sin encajar una vez que llega a cierto punto de la literatura. He aquí otro ejemplo. El tipo de datos datetime. Voy aquí: http://msdn.microsoft.com/en-us/library/system.datetime_members%28v=VS.90%29.aspx y veo que las variables datetime son por norma mucho más complicadas de lo que dice esta documentación. Por ejemplo, contiene información sobre los MILLISECONDS. Puede ser cualquier año hasta el 9999. Sin embargo, esta documentación SUGIERE que es diferente, pero no entra en suficiente detalle. ¿Quizás no es la variable datetime estándar de C++ sino algo específico de MQL4 entonces? El número de segundos desde el comienzo de 1970, válido hasta el final de 2037. Ahora bien, resulta que hay casi 2^31 segundos en ese intervalo de tiempo. Eso sugiere que es un entero largo con signo - ya que un entero largo sin signo llegaría al siglo XXII a partir de 1970. ¿Puedo utilizarlo en operaciones aritméticas como si fuera un entero largo con signo? No lo dice. Es ambiguo. PODRÍA ser una variable tipo cadena glorificada, sólo que con ciertas restricciones sobre lo que puede ser la cadena. También muestra algunas formas incompletas de utilizarla. Pero no es lo suficientemente explícito sobre todas las formas en que se puede acceder o manipular. ¿Puedo usarlo en aritmética de enteros junto a los ints? Si leo el índice de tiempo de una muestra, ¿puedo simplemente restar uno de un gráfico de 1 minuto de otro gráfico de 1 minuto y si son minutos consecutivos, esperar que difieran en 60 (posiblemente más o menos 1)?

Había otra cosa con la que ya tenía un problema: la descripción de ArrayCopySeries es ambigua. En algunas partes sugiere que el array [ ] se escribe en algunas partes, pero en otras partes, sugiere que no. Y lo miro por encima y no entiendo en absoluto el propósito de la función si NO copia los datos de la moneda en el array.

Aquí hay otra cosa que me gustaría saber. Dice que un EA puede tener 3 funciones principales. init, deinit, y start. init se ejecuta una vez cuando se ejecuta por primera vez, start se ejecuta cada vez que hay un nuevo tick, y no dice nada de deinit. El ejemplo aquí https://book.mql4.com/samples/expert ni siquiera TIENE un init. Tiene un start. Tiene algunas cosas complicadas para aparentemente manejar errores como Fun_Error lo que sea que haga todo eso. No tiene init. ¿Qué pasa con las variables? ¿Las variables definidas dentro del init siguen siendo válidas cuando éste termina y cuando se ejecuta el "start"? ¿O deben ser declaradas fuera de ambas variables? ¿Las variables declaradas dentro de start se borran cada vez que start se ejecuta de nuevo? ¿Las variables declaradas fuera de start son válidas? Espero que no. Ni siquiera estoy seguro de poder ALTERAR las variables que se declaran fuera de cualquier función. Parece que pueden ser todas variables estáticas globales por lo que he visto.

Por cierto, ¿se supone que los símbolos de divisas utilizados en funciones como iTime deben ir entre comillas simples o dobles. "USDCHF" o 'USDCHF'. Mil cositas como esta. Cualquiera de ellas seguro que hará que no se compile cuando llegue al final. Y con mil pequeñas cosas incidentales diferentes mal, habrá que depurarlas.

RaptorUK oh por supuesto que no tienes ninguna obligación de ayudarme. Y si tu idea de pasar un buen rato es trollear a la gente en los foros, burlándote de ellos por estar en un foro pidiendo ayuda cuando CLARAMENTE el propósito de entrar en cualquier foro en primer lugar es trollear a la gente, entonces veo que efectivamente estás disfrutando y cumpliendo con lo que crees que es el papel correcto de un usuario del foro. En cuanto a mí, si estuviera CALIFICADO para ayudar a alguien, respondiendo a una pregunta que pudiera contestar, hipotéticamente podría estar dispuesto a hacerlo. Sé mucho de matemáticas arcanas, no tanto de programación. Por ejemplo, si tuvieras una docena de indicadores que no fueran estadísticamente independientes, sé cómo combinarlos óptimamente en un indicador compuesto de forma que se compense el hecho de que sean estadísticamente dependientes. Por supuesto que ahora no voy a ayudarte con nada. Por cierto, si te viera con el pie atascado en las vías del tren, te diría "PODRÍA ayudarte, pero ¿qué gano YO?".

 
zortharg:
FMIC hay COSAS en esa documentación que no tienen TODO el sentido. ...

No me costó nada leer todo el libro de principio a fin, a pesar de estar bien versado en lenguajes de alto y bajo nivel.

Tengo 45 años y soy desarrollador de software de profesión desde 1986, además de tener una licenciatura en ingeniería (electrónica de baja intensidad). Domino los lenguajes C, C++, C#, Pascal, Cobol, Fortran, Perl y muchos otros que ya han desaparecido. También domino la programación en Assembler para x86, Z-80, Pics y muchas otras arquitecturas. De nuevo, digo, que no tuve ninguna dificultad para leer y aprender MQL4.

Por lo tanto, todo lo que puedo concluir es que su actitud alta y poderosa de criticar la documentación, en lugar de centrarse en el objetivo real de aprender MQL, sólo puede significar una cosa - Usted es realmente más estúpido que los no programadores para los que la documentación fue escrita.

Si usted piensa que MetaTrader y MQL está tan por debajo de usted, entonces ¿por qué estás aquí? En serio. ¿Por qué?

Hay muchas otras aplicaciones de comercio y sistemas algorítmicos por ahí. ¡Escoge uno y vete a molestarlos!

Por cierto, "RaptorUK" es un MODERADOR en el foro. ¡Tú eres el TROLL aquí!

¡Este es mi último mensaje en este hilo! No vale la pena el esfuerzo.

 
zortharg:

RaptorUK oh por supuesto que no tienes ninguna obligación de ayudarme. Y si tu idea de pasarlo bien es trollear a la gente en los foros, burlándote de ellos por estar en un foro pidiendo ayuda cuando CLARAMENTE el propósito de entrar en cualquier foro en primer lugar es trollear a la gente, entonces veo que efectivamente estás disfrutando y cumpliendo con lo que crees que es el papel correcto de un usuario del foro. En cuanto a mí, si estuviera CALIFICADO para ayudar a alguien, respondiendo a una pregunta que pudiera contestar, hipotéticamente podría estar dispuesto a hacerlo. Sé mucho de matemáticas arcanas, no tanto de programación. Por ejemplo, si tuvieras una docena de indicadores que no fueran estadísticamente independientes, sé cómo combinarlos óptimamente en un indicador compuesto de forma que se compense el hecho de que sean estadísticamente dependientes. Por supuesto que ahora no voy a ayudarte con nada. Por cierto, si te viera con el pie atascado en las vías del tren, te diría "PODRÍA ayudarte, pero ¿qué gano YO?".

¿Quizás deberías explicar este comentario tuyo?

¡La audacia de la gente de este foro!


Mucha gente en este foro da su tiempo libre para intentar ayudar . ¡. y tu vienes y esperas que te ayuden como si fuera un derecho ! Creo que todo el mundo estaría encantado de ayudarte hasta que demostraras tu actitud . . deberías mostrar un poco de humildad a la hora de pedir ayuda.

Puedes etiquetarme como quieras, realmente no me importa, sé por qué estoy aquí y algunos incluso me agradecen que intente ayudar . . . Supongo que eso te supera.

 
zortharg:

Entonces, ¿tengo que descargar los precios históricos de uno en uno con iclose? https://docs.mql4.com/series/iClose El problema con eso, tal como lo veo, es que los datos pueden actualizarse mientras estoy en medio de la descarga. Estaría muy bien descargarlo todo en bloque. Supongo que puedo descargar el tiempo con iTime y LUEGO usar iclose y LUEGO usar iTime de nuevo en el mismo índice y si ha cambiado, entonces ha comenzado un nuevo intervalo de tiempo de barra y tengo que retroceder un número de índice. ¿Estoy razonando correctamente o hay algo que no entiendo?


¿Por qué una función llamada ArrayCopySeries() requiere que copie la serie usted mismo?

Declaras el array pero no necesitas especificar el tamaño.

Cuando accedes al array, mql hace "magia" y (con suerte) sale el valor correcto en el lugar adecuado.

Hay un ejemplo en la página.

Dicho esto, la documentación en línea no está sincronizada en este momento, así que utilice la ayuda en el metaeditor como su principal referencia.

Mira el ejemplo hasta que tenga sentido.

 
zortharg:
El tipo de datos datetime. Voy aquí: http://msdn.microsoft.com/en-us/library/system.datetime_members%28v=VS.90%29.aspx y veo que las variables datetime son por norma mucho más complicadas de lo que dice esta documentación. Por ejemplo, contiene información sobre los MILLISEGUNDOS. Puede ser cualquier año hasta el 9999. Sin embargo, esta documentación SUGIERE que es diferente, pero no entra en suficiente detalle. ¿Quizás no es la variable datetime estándar de C++ sino algo específico de MQL4 entonces? El número de segundos desde el comienzo de 1970, válido hasta el final de 2037. Ahora bien, resulta que hay casi 2^31 segundos en ese intervalo de tiempo. Eso sugiere que es un entero largo con signo - ya que un entero largo sin signo llegaría al siglo XXII a partir de 1970. ¿Puedo utilizarlo en operaciones aritméticas como si fuera un entero largo con signo? No lo dice. Es ambiguo. PODRÍA ser una variable tipo cadena glorificada, sólo que con ciertas restricciones sobre lo que puede ser la cadena. También muestra algunas formas incompletas de utilizarla. Pero no es lo suficientemente explícito sobre todas las formas en que se puede acceder o manipular. ¿Puedo usarlo en aritmética de enteros junto a los ints? Si leo el índice de tiempo de una muestra, ¿puedo simplemente restar uno de un gráfico de 1 minuto de otro gráfico de 1 minuto y si son minutos consecutivos, esperar que difieran en 60 (posiblemente más o menos 1)?

Por qué tantas palabras para pedir una cosa tan sencilla :)

Antiguo MQL: https://docs.mql4.com/dateandtime Un grupo de funciones que permiten trabajar con datos de tipo datetime(número entero que representa la cantidad de segundos transcurridos desde la medianoche del 1 de enero de 1970).

Nuevo MQL: https://www.mql5.com/en/docs/basis/types/integer/datetime - El tipodatetime está destinado a almacenar la fecha y la hora como el número de segundos transcurridos desde el 01 de enero de 1970. Este tipo ocupa 8 bytes de memoria.

La mayoría de los lenguajes que usaban el antiguo entero de 32 bits para almacenar la hora, se han movido a 64 bits, para evitar la ruina cuando llegue el año 2038.

Solo hay que sumar y restar como se supone. Pero manténgalo como un tipo de dato datetime , y evite la tentación de almacenarlo en una variable larga .

 

¡GRACIAS ydrol!

Hmmmmm. No sé si static_cast existe en mql4, pero ¿puedo usar cualquier operación aritmética normal sobre datetimes entonces, siempre y cuando guarde el resultado en otro datetime? Por ejemplo, si X[] es un array de datetimes, y quiero trabajar con el número de minutos, podría tomar Y=(X[17]+30)/60 siempre que Y sea un datetime y no un long? ¿No es así? O más bien, podría tomar Y=(X[17]-X[16]+30)/60 porque sería malo que X[17] fuera 29 mod 60 y X[16] fuera 30 mod 60, pensaría que están a 2 minutos de distancia si lo hiciera de la primera manera.

Oh tío, el código que he hecho hasta ahora es larguísimo ya, y lo único que se hace es leer los datos y ahora tengo que compensar que los datos se salten minutos (¡o todo el fin de semana!) desplazando los datos más e interpolando, me pregunto qué probabilidades tiene este pavo de funcionar cuando lo termine, ja ja. Todo a partir de un programa de matlab que demuestra que por fin tengo un método de trading que puede batir el spread/comisión, pero ponerlo en práctica real es otra cosa.

A todos los que no son ydrol, vale, os declaro ganadores de vuestros respectivos concursos de p***, así que enhorabuena y como ganáis, ya podéis dejar de postear en este hilo.

 

Hmmmmm. I don't know if static_cast even exists in mql4, but can I just use any regular arithmetic operations on datetimes then, so long as I save the result in another datetime?

Si el resultado de su aritmética sigue siendo un punto en el tiempo (es decir, sigue siendo un valor que es el número de segundos desde 1970), entonces manténgalo como datetime, de lo contrario puede convertirlo en un long o int. (No es necesario, pero evitará confusiones más adelante).

No sirve de nada enemistarse con todo el mundo, sólo cambiar el enfoque para conseguir la ayuda que quieres :)

 

Bueno después de escribir algo de código efectivamente me parece muy difícil evitar guardar resultados aritméticos con datetimes como entradas en ints. ¿Pero static_cast<long> funcionaría teóricamente como lo haría en C++? No veo ninguna mención en los docs.

Por cierto, zona horaria. ¿Es UTC? Ese libro sigue diciendo el número de segundos desde el 1 de enero de 1970 a las 0:00. Podría asumir que es UTC como el tiempo de UNIX, excepto que ya hemos establecido que hay al menos algunas discrepancias entre las variables de "datetime" aquí y lo que usa C++ (sin milisegundos, por ejemplo) - que admite que no es el tiempo de UNIX, pero se llama "datetime" de todos modos - así que sólo porque se parece superficialmente al tiempo de UNIX por empezar a principios de 1970, no debería asumir que es eso. ¿Es necesariamente UTC o es posible que cada broker tenga su propio desfase basado en su propia zona horaria y que yo necesite tenerlo en el código para que éste averigüe dónde está el inicio de la semana, módulo 10080 minutos, basado en los datos? La cuestión es saber la hora, módulo 10080, en la que empieza y termina la negociación, ya que el mercado sólo está abierto 7200 de esos 10080 minutos, para que pueda liquidar las posiciones a medida que se acerca el fin de semana, y no empezar a tope justo al principio o MUCHO peor, tomar decisiones de negociación drásticas basadas en discontinuidades en los precios entre el final de una semana y el principio de la siguiente, o incluso ignorar las interrupciones al determinar información como la volatilidad - que defino como el cambio cuadrático medio en el precio después de 1 minuto - y luego agrego 1/4 veces el cambio cuadrático medio en el precio después de 2 minutos y 1/9 veces el cambio cuadrático medio en el precio después de 3 y 1/16 veces el cambio cuadrático medio en el precio después de 4 y luego multiplico todo por 1/(1+1/2+1/3+1/4)=0.48.

Hey que puedo decir, entré pidiendo ayuda y fueron desagradables y antagónicos conmigo desde el principio. Si alguien pide ayuda, lo que hago es no dársela o dársela. Si no sé la respuesta a una pregunta que alguien hace, no hago una conversación trivial en lugar de responderla, y si no quiero tomarme el tiempo de responder a la pregunta adecuadamente, no me tomo el tiempo de burlarme de ellos por preguntar o darles una respuesta inútil. Hay un margen de maniobra para alguien que hace una pregunta cuya respuesta debería conocer si ha vivido en el planeta Tierra durante más de un día, o si la pregunta es retórica y, sobre todo, si está diseñada para insultar a un determinado grupo de personas. Soy un tipo de persona que va al grano y me rijo por un código ético de "ojo por ojo". Soy cortés con la gente hasta que me tratan mal y entonces dejo de serlo, y también soy honesto con la gente hasta que me mienten, engañan y roban, y entonces mi código de comportamiento civil por defecto sale por la ventana y mentiré, engañaré y robaré a cambio y no mostraré piedad ni contención. Puede que sea una forma simplista de ver el mundo, pero soy terco e implacable.

Pero a ti, gracias por tu ayuda. Y si hay algo en lo que pueda ayudarte, pregunta. No es que suponga que buscas ayuda en algo en lo que yo pueda ayudar.

 
zortharg:

Bueno después de escribir algo de código efectivamente me parece muy difícil evitar guardar resultados aritméticos con datetimes como entradas en ints. ¿Pero static_cast<long> funcionaría teóricamente como lo haría en C++? No veo ninguna mención en los docs.

Por cierto, la zona horaria. ¿Es UTC?


Es independiente de la zona horaria. . ¿cuántos segundos hay entre las 14:00 y las 15:00 horas? no es necesario conocer la zona horaria para responder 3600 . . si ayuda sólo suponga que la hora de inicio, la medianoche del 1 de enero de 1970 y la hora que le interesa están ambas en la misma zona horaria.
 

EDIT: Oops, como se ha señalado, no hay ninguna zona horaria específica para datetime. Depende de dónde lo hayas obtenido. (¡esto causa una complicación innecesaria, a diferencia de UnixTime en el que se basó finalmente!)

La zona horaria para datetime (segundos después de 1970) se basa en UTC. Al igual que la hora de Unix. Es UnixTime - tiempo Unix de 64 bits.

Unile true UTC, Unix time ignora los segundos bisiestos (ver 1er párrafo) y tal, así que la aritmética del módulo funciona para los minutos, y las horas.

datetime - datetime = long (segundos de duración) - ¡aunque en lo que respecta al comercio será un int la mayoría de las veces que puedo prever!

datetime +/- segundos(long) = datetime(otra fecha)

datetime +/- segundos(int) = datetime(otra fecha)

Razón de la queja: