Manual completo para novatos en MQL - página 3

 
8284 wrote >>

¡Oh CB, Oh CB!

Eres un tipo duro. Realmente no quieres sostener mi mano a través de esto. Este es el mismo libro escrito en griego, latín y mars speak del que huí. Es cierto que no hay manera de que uno pueda llegar a ser competente en una profesión sin aprender la terminología, pero .....

Me recuerdas a mi profesor de lógica, el Dr. Otakpor (por lógica me refiero a la filosofía). Es mejor que nunca le preguntes nada si no tienes ni idea de lo que estás preguntando. CB, el libro sobre arrays es bastante técnico para mí (fue mi primer esfuerzo en la codificación). Tengo una vaga idea de lo que se trata, pero no una comprensión completa. Sin embargo, lo tomo como un reto.

Voy a buscar ese pequeño "..a" que convertirá mi "ah.." en "aha".

Voy a leer, y escribir y luego dar lo que sé en las matrices (en realidad sus aplicaciones que necesito saber más).

Lo único es que esto resultaría en un post muy largo. Hay trozos de código en los que veo que se usan arrays [] pero no entiendo bien la lógica. Esperaba que si me lo explicaban, no tendría tantas preguntas (como una pieza que falta en el puzzle).

Me has desafiado y creo que es bueno para mi desarrollo, pero te ruego que seas un poco más suave conmigo porque soy científicamente discapacitado. Mi formación es artística. Cuando hablo con las mujeres, dicen que hablo como un poeta. Sólo espero no codificar como uno.

En serio, hoy no voy a dormir, dentro de 24 horas, volveré a entender los arrays. Espero que me corrijan donde me he equivocado, y me ayuden a entender la aplicación de los arrays a la programación.

¡Oh CB, Oh CB !

Por cierto, mis tres mejores profesores fueron el Dr. Otakpor, Barr Richard Idubor y Barr Bob Osamor.

El Dr. Otakpor (que enseñaba Lógica y Filosofía) sacaba lo mejor de sus alumnos respondiendo a sus preguntas con las suyas propias para que ellos respondieran a las suyas.

Esto hacía que todo fuera interactivo. Si te quedabas atascado, te pinchaba suavemente, te insinuaba, hasta que conseguías la respuesta.

Si no tenías ni idea, ¡hmmm... era otro juego!

 

¿Su pregunta se refiere más al PORQUÉ de utilizar un array que al CÓMO?

Si es así, entonces, desde mi punto de vista, un array es una forma más ordenada de almacenar un conjunto de instancias de la misma variable, pudiendo encontrar cada instancia describiendo su ubicación.

Como ejemplo, si escribieras una aplicación que implementara un cifrado muy simple en el que A=1, B=2, C=3, etc., podrías almacenar las letras del alfabeto en una matriz de cadenas de 1 dimensión (1x26) y localizar cada letra sustituyendo el número. Si (como un ejemplo de salida) escribiera un EA que almacenara los precios de compra y venta a partir del primer tick posterior a 3 minutos después de cada nueva hora y almacenara estos valores de forma continua durante las últimas 5 horas, entonces podría utilizar un array doble de 2 dimensiones (2x5) para lograrlo.


CB

 
cloudbreaker wrote >>

¿Su pregunta se refiere más al PORQUÉ de utilizar un array que al CÓMO?

Si es así, entonces, desde mi punto de vista, un array es una forma más ordenada de almacenar un conjunto de instancias de la misma variable, pudiendo encontrar cada instancia describiendo su ubicación.

Como ejemplo, si escribieras una aplicación que implementara un cifrado muy simple en el que A=1, B=2, C=3, etc., podrías almacenar las letras del alfabeto en una matriz de cadenas de 1 dimensión (1x26) y localizar cada letra sustituyendo el número. Si (como un ejemplo de salida) escribiera un EA que almacenara los precios de compra y venta a partir del primer tick posterior a 3 minutos después de cada nueva hora y almacenara estos valores de forma continua durante las últimas 5 horas, entonces podría utilizar un array doble de 2 dimensiones (2x5) para lograrlo.

CB

Ok CB, mi pregunta se centra más en el CÓMO que en el PORQUÉ. Ya sé el por qué; por comodidad. Entiendo la mayor parte de lo que has escrito arriba, pero no todo.

Te has vuelto a poner en plan tecno, ves que para llevarnos por delante necesitas hablar como un bebé y tener paciencia. Definitivamente te haremos sentir orgulloso, pero nos llevará un tiempo. Teniendo en cuenta que hace apenas 3 días su mensaje anterior no habría tenido sentido para mí, le pregunto respetuosamente qué quiere decir con "base rodante".

Estoy seguro de que cuando lo explique, tendré ganas de golpearme a mí mismo, pero ahora estoy confundido.

De todos modos, entiendo el por qué, pero no el cómo.

Estoy trabajando en un ensayo sobre matrices que presentaré aquí en las próximas 24 horas, y si me falta algo, espero una corrección. Si no, preguntaré por los cómos y los cómos de los arrays.

Muchas gracias,

¡Aprecio su ayuda!

 

Ok CB, estoy listo con mi ensayo. Estoy seguro de que he cometido un error o dos y estaré encantado de que me lo señalen. Por si sirve de algo, creo que en cierto modo he sonado un poco técnico (hablando de inicializar y declarar y otras cosas). Escribir esto me ha hecho ver las cosas de otra manera, pero también he aprendido al escribirlo.

Voy a leer sobre arrays multidimensionales.

Me gustaría recibir tu sincera crítica (y la de todos los demás) sobre esto.

Si hay algún novato que se haya beneficiado de esto, también me gustaría escucharlo.

Tal vez haga un ensayo sobre las funciones también, porque escribir sobre estas cosas se me ha inculcado aún más.

 

¿Qué es un array?

Definir un array puede ser un fracaso para los novatos, así que sería mejor describirlo. Después, cualquiera puede buscar su definición técnica.

Un array puede ser pensado como un grupo de datos similares.
Un ejemplo.
La población cambia cada año.

2004 población = 4
2005 población = 5
2006 población = 6
2007 población = 7
2008 población = 8
2009 población = 9 y así sucesivamente.

Si estuviéramos programando en mql4, para utilizar estos datos, podríamos declararlos como variables, por ejemplo
int 2004pop = 4;
int 2005pop = 5
int 2006pop = 6
int 2007pop = 7; y así sucesivamente hasta llegar a 2009 o al infinito

Esto puede funcionar, pero es bastante engorroso. Aquí es donde entran los arrays.
Todos los datos de la población son un array.
Para utilizar arrays, primero hay que declararlos.
Se declaran usando estos "[ ]"
Lo primero que tienes que hacer es decirle al programa el tipo de array, si es un entero, un doble, etc En nuestro ejemplo es un entero.
luego le das un nombre descriptivo al array, nosotros lo llamaremos yearpop (abreviatura de year population)
Después del nombre descriptivo vienen los paréntesis [ ], y dentro de los paréntesis revelamos con qué estamos trabajando. En nuestro caso tenemos 6 datos, así que dentro del paréntesis ponemos 6. Así [6]
Hasta aquí nuestra declaración de array tiene el siguiente aspecto
int añopop [6];
podemos ir más allá para inicializar el array mostrando los valores de los años individuales así

int yearpop [6] = {4,5,6,7,8,9};

Ahora mql4 comienza su cuenta desde 0 en lugar de uno. Aquí tenemos seis valores, así que en lugar de numerar del 1 al 6, mql4 numera del 0 al 5. Para obtener el valor del primer año tienes que usar 0. Para el segundo año, tienes que usar 1 y así sucesivamente.

Mira esto de nuevo
int yearpop [6] = {4,5,6,7,8,9} ;
Los números 4,5,6,7,8,9 se llaman elementos
La forma de obtener el valor de sus elementos es a través de sus índices (espero no estar mezclando cosas aquí).
Los índices comienzan de 0 a lo que sea (en nuestro caso 5)

Por lo tanto, si quieres obtener el valor del primer año, utiliza su índice, que es 0, así

yearpop [0] // esto te daría la población del primer año
yearpop [1]// población del segundo año.
De esta forma se podrían hacer muchos cálculos de forma cómoda (supongo)
por ejemplo
int sobrepoblación ;
sobrepoblación = yearpop[0] +yearpop [3] / yearpop [2];

¿Cómo se aplica esto a mql4?
Todo lo que sé hasta ahora es que en mql4, la barra actual o el marco de tiempo o el símbolo o el gráfico es siempre 0 o NULL.
En segundo lugar mql4 cuenta hacia atrás así
543210 (de derecha a izquierda).
Como ejemplo, en cualquier gráfico (lo siento, no puedo hacer gráficos)
la barra actual, aún no formada, tiene el valor 0.
La barra inmediatamente a la izquierda tiene el valor de uno, y la siguiente a la izquierda tiene el valor de 2, y así sucesivamente.
Inmediatamente la barra que tiene el valor 0 está completa, entonces toma el valor 1, mientras que la nueva barra que se forma toma el valor 0 y todas las demás se desplazan en consecuencia.
Ahora supongamos que tenemos un array de los niveles de precios más altos de las barras (que es lo que realmente tenemos), podríamos hacer algo así
double highlevels [200];// lo que significa que tenemos 200 barras //de datos en nuestro array
En realidad hay una función en mql4 que nos puede decir los máximos y mínimos de todas las barras.
Supongamos que queremos saber la diferencia entre la barra 150 y la primera barra.
Si los arrays no estuvieran disponibles, tendrías que declarar, y posiblemente inicializar al menos 150 barras lo que consumiría mucho tiempo (CB, este es el porqué de los arrays).
Pero como tenemos arrays, todo lo que tenemos que hacer es referirnos a ellos por sus números de índice y hacer el cálculo, así
doble diferencia;

diferencia = highlevels [0] - highlevels[149] // recuerda que estamos //contando desde 0
el 0 es la barra que se está formando actualmente. Si queremos usar una barra terminada para el cálculo, usamos highlevels [1] en su lugar.

Hasta ahora, sólo he hablado de arrays unidimensionales. Es como una tabla con una sola fila.

Mql4 permite arrays de hasta 4 dimensiones que es algo que todavía no he entendido.

 
¿Alguien ha visto esto ya?
 

¡Hola chicos!

Es bonito ver que ha habido posts en este hilo después de mi desaparición. He pasado a un segundo plano trabajando en una estrategia con el coaching de alguien bastante excepcional de este foro. Así que, siendo realista, me temo que no voy a contribuir mucho a este hilo en un futuro próximo, al menos no tan "en profundidad" como lo hice antes :)

Mientras tanto, a todos los novatos: mantened la pasión por el trading y recordad que si ayudáis a alguien, la ayuda os encontrará cuando la necesitéis :)

 
Hola,

siendo un novato me gustaría preguntar si la función incorporada metastock : ref() y stochmomentum() son implementados por algunas funciones en metatrader

thnx
 
Huckleberry:

Hola Niko,

Es el 4 de julio. ¿Has vuelto de Turquía?

Saludos

Huckleberry


Para aquellos que necesiten buscar en un documento para encontrar algo en él, aquí hay una versión en PDF de toda la Documentación...

Fue convertido a PDF desde un archivo de ayuda HTML compilado...

 
cloudbreaker:

8284 - Los buenos programadores se esfuerzan por conseguir la modularidad, es decir, la creación de bloques de construcción reutilizables que puedan ser unidos repetidamente, dejando un mínimo de código nuevo para cada nuevo programa. Hay que tener en cuenta que este enfoque también es adecuado para los materiales de formación. Hay muchos recursos disponibles para aprender los fundamentos de la programación que mencionas, ya que son comunes a todas las tecnologías. No es eficiente duplicar estos materiales de aprendizaje en todos los lenguajes de programación.


CB

Hola CB,

han pasado muchas cosas desde lo anterior. Me he vuelto mucho más competente de lo que nunca pensé que podría ser en la escritura de código (aunque todavía hay mucho que pulir). Me parece que tu cita anterior es muy perspicaz (algo que no aprecié en su momento) .

Quiero darte las gracias por tu ayuda (yo también aprendí de tu ayuda a los demás) y felicitarte por tu nombramiento como moderador (creo que muy merecido).

También quiero felicitar a Gordon y a BB.