Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 329
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
No es necesario ordenar el array después de cada adición de un elemento del array. Es mejor mover la clasificación
De la referencia
Mas[Blizko2] es el valor más pequeño de la matriz
Gracias por su respuesta. Podría decirme, para determinar el siguiente elemento del array, he utilizado el elemento +1 ya encontrado, pero el probador da un error en este lugar.
Necesito encontrar el siguiente elemento. ¡Obviamente es +1, pero el programa me da un error! ¿Quizás hay otra manera o quizás lo hago mal? Por favor, dame una pista)
Blizko1 = Mas[Blizko2]+1;
¿o así?
pero luego al compilar la advertencia sobre la posible pérdida de datos
Con esta construcción
Blizko1 = Mas[Blizko2]+1;
se añade 1 al valor obtenido de la celda del índice Blizko2, y ahí se almacena el precio, un valor doble. Estás añadiendo un entero 1. Para evitar una advertencia, es necesario escribir +1.0
Pero esto tampoco salvará al "padre de la democracia rusa", porque estás añadiendo 1 no al índice sino al valor almacenado en la matriz Mas[] por el índice Blizko2.
Así que, naturalmente, para obtener un valor de una celda cercana del array, hay que sumar o restar 1 al índice. Pero aquí tenemos un error con el que has tropezado: si el índice apunta a la celda más externa de un array -ya sea 0 o la última-, entonces al restar 1 (en 0) o sumar 1 (en la última) caerás fuera del array -no existe tal celda-. En consecuencia, hay que controlar que Blizko2+1 no sea mayor que ArraySize(Mas)-1, o que Blizko2-1 no sea menor que cero.
Y... te han dicho que no necesitas ordenar el array en cada iteración del bucle - ¿necesitas frenos?
Se debe ordenar después de comprobar que el tamaño del array es mayor que 1.
Y este diseño no está nada claro:
Mira: en Blizko2 tienes el índice de la celda del array con el precio.
Luego escribes en el array - en su celda Blizko2+1 el valor contenido en la variable Blizko1 (¿por qué??) - deberías tener precios allí, pero los estás rellenando con valores incomprensibles.
Tienes que averiguar lo que estás haciendo en general, sólo tienes que comentar cada línea de tu función. Con mucho cuidado.
Con esta construcción
se añade 1 al valor obtenido de la celda del índice Blizko2, y ahí se almacena el precio, un valor doble. Estás añadiendo un entero 1. Para evitar una advertencia, es necesario escribir +1.0
Pero esto tampoco salvará al "padre de la democracia rusa", porque estás añadiendo 1 no al índice sino al valor almacenado en la matriz Mas[] por el índice Blizko2.
Así que, naturalmente, para obtener un valor de una celda cercana del array, hay que sumar o restar 1 al índice. Pero aquí tenemos un error con el que has tropezado: si el índice apunta a la celda más externa de una matriz -ya sea 0 o la última-, entonces al restar 1 (en 0) o sumar 1 (en la última) caerás fuera de la matriz -no existe tal celda-. En consecuencia, hay que controlar que Blizko2+1 no sea mayor que ArraySize(Mas)-1, o que Blizko2-1 no sea menor que cero.
Y... te han dicho que no necesitas ordenar el array en cada iteración del bucle - ¿necesitas frenos?
Para ordenarlo, tenemos que comprobar si el tamaño del array es mayor que 1.
Y esta construcción no está nada clara:
Ver: en Blizko2 tienes el índice de la celda del array con el precio.
Luego escribes en el array - en su celda Blizko2+1 el valor contenido en la variable Blizko1 (¿por qué??) - deberías tener precios allí, pero los estás rellenando con valores incomprensibles.
Tienes que averiguar lo que estás haciendo en general - sólo comentar cada línea de tu función. Con mucho cuidado.
Gracias por la respuesta informativa. El propósito para el que quiero crear el array es determinar los precios de las órdenes más cercanas por debajo del precio y por encima del precio, si es que las hay. Si están disponibles y la distancia entre ellos y el precio supera la distancia que he definido, entonces abre las órdenes correspondientes. Pensé que se vería así (describí la lógica de mis acciones aquí tanto como pude)
Tendría un aspecto similar al siguiente
Tendría un aspecto similar al siguiente
Gracias, ¿qué significaDBL_MAX en el nivel superior?
Gracias. ¿Qué significaDBL_MAX?
Incluso tienes un enlace insertado por el ingenioso motor del foro. Es más fácil hacer clic que esperar una respuesta.
Incluso tienes un enlace insertado por el ingenioso motor del foro. Es más fácil hacer clic en él que esperar una respuesta.
Gracias. Me gustaría tener un motor así)))
Gracias por la respuesta informativa. La finalidad con la que pretendo crear el array es determinar los precios de las órdenes más cercanas por debajo del precio y por encima del precio, si es que las hay. Si están disponibles y la distancia entre ellos y el precio supera una determinada distancia, entonces se abren las órdenes correspondientes. Pensé que se vería así (describí la lógica de mis acciones aquí tanto como pude)
Hay un error en el comentario de esta línea.
Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading.
Cualquier pregunta para principiantes de MQL4, ayuda y discusión sobre algoritmos y códigos
Alexey Viktorov, 2017.10.04 09:32
De la ayuda
Valor devuelto
Devuelve el índice del primer elemento encontrado. Si no se encuentra el valor buscado, devuelve el índice del elemento menor más cercano entre los que se encuentra el valor buscado.
Mas[Blizko2] es el valor más pequeño de la matriz.
Sólo queda añadir que la referencia no dice nada sobre la dependencia de la dirección de ordenación del array. Por lo tanto, no se necesita ninguna manipulación después de ArrayBsearch. La tarea ya está hecha.
Artyom ya ha explicado todo con más detalle. Comprueba la igualdad de un índice a cero y el tamaño de un array para que no salte fuera de los límites...
¿Cómo puedo hacer que el ratón comience a ser rastreado sólo después de hacer clic en el botón? Pero la situación ocurre (en la idea de transferir un stop en todas las órdenes a un punto por el clic del ratón desde el EA) cuando hago clic en el botón, un stop en todas las órdenes en el precio donde se hizo clic en el botón comienza a ser transferido a la vez. ¿Cómo puede esta propiedad if(id==CHARTEVENT_CLICK)
ejecutar sólo después de hacer clic en este botón if(ObjectGetInteger(0, "cm STOP ALL",OBJPROP_STATE))
¿Cómo puedo hacer que el ratón comience a ser rastreado sólo después de que se haga clic en el botón? Pero la situación ocurre (en la idea de transferir un stop en todas las órdenes a un punto por el clic del ratón desde el EA) cuando hago clic en el botón, un stop en todas las órdenes en el precio donde se hizo clic en el botón comienza a ser transferido a la vez. ¿Cómo puede esta propiedad if(id==CHARTEVENT_CLICK)
ejecutar sólo después de hacer clic en este botón if(ObjectGetInteger(0, "cm STOP ALL",OBJPROP_STATE))