Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 659
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
También encontré un grave inconveniente, demasiadas llamadas a CopyClose()
¿Pueden decirme cómo copiar las cotizaciones de un array de pares de divisas en un bucle?
Eso parece ser un array doble, por eso MQL no lo soporta, como %.
MQL4 parece funcionar con arrays dinámicos de dos dimensiones. Puedes cambiar la primera dimensión con ArayResize(), y pasar la segunda aCopyClose()
O una solución universal de los desarrolladores, ya que las matrices dinámicas bidimensionales no funcionan en MQL5, envolver una matriz unidimensional en una estructura y crear una matriz de tales estructuras.... Si lo consigues, considera que casi has creado una clase, y es más óptimo, una clase con métodos que cargan los datos y los almacenan en las propiedades de la clase (campos)MQL4 parece funcionar con arrays dinámicos de dos dimensiones, usa ArayResize() para cambiar la primera dimensión yCopyClose() para cambiar la segunda.
o una solución universal de los desarrolladores, ya que las matrices dinámicas de 2 dimensiones no funcionan en MQL5, envolver una matriz unidimensional en una estructura y crear una matriz de tales estructuras.... Si lo consigues, considera que casi has creado una clase, y es más óptimo, una clase con el método que carga los datos por sí mismo y los almacena en las propiedades de la clase (campos)Gracias y lo intentaré
Otra pregunta sobre el indicador, no sé qué más hacer aquí
Necesito imprimir la diferencia entre el cierre de los pares introducidos y la media móvil de los mismos.
No sé qué más hacer.
Los pedidos deberían enumerarse en un bucle, no en cada tic... Para ser más precisos, llegó un tick y todas sus órdenes se cuentan en el bucle: for(j=0;j<OrderTotal;j++)
OrdersTotal() muestra cuántas órdenes están abiertas (incluyendo órdenes pendientes, incluyendo órdenes en todos los símbolos... en total... Aquí se muestra cuántas órdenes se abren en el terminal, es decir, cuántas )))).
La numeración de los pedidos es como en las matrices, de 0 a OrdersTotal()-1 - este es el último pedido, y probablemente tenga un número de ticket inexistente [OrdersTotal()] o alguna otra información en el diario en cada tic, que es difícil de adivinar.
Sí, y quiero que pase por todos los pedidos. El funcionamiento era un poco diferente al principio, pero lo he simplificado al máximo con la esperanza de encontrar la causa y solucionarlo. El retroceso consecutivo completo sólo ocurre cuando los ticks son escasos o después de que elimine el EA del gráfico y no entren nuevos ticks.
Siempre he pensado que si el EA ha entrado en el cuerpo de una función, no debería reaccionar a otros ticks hasta que salga del bucle, pero parece que no es así. ¿Cómo puedo evitar esta situación?
int prueba()
{
int total;
total = OrdersTotal();
log("total = " + total +"; ");
for (int j = 0; j < total; j++)
{
log("j = " + j +"; ");
}
return(0);
}
¿Por qué necesitamos información sobre todos los pedidos cada vez que se produce un tic? ¿No sería mejor introducir restricciones en la visualización del orden, por ejemplo, cada nuevo minuto, cinco minutos, ..., hora?
El problema ni siquiera es que necesite información para cada tick, sino que, si entiendo bien, al bucle no le da tiempo a terminar antes de que llegue un nuevo tick y éste, de alguna manera, rompe la cuenta. Aquí tienes otra captura de pantalla, para que no tengas que buscar la anterior. Muestra que el EA ha contado hasta 52 y luego ha saltado a 93. Me costaba creer que esto se debiera a los nuevos ticks, pero no encuentro otra razón, porque con ticks raros la cuenta termina bien, así como el último ciclo después de que el EA fuera eliminado del gráfico.
Ya he simplificado el código al máximo:
int prueba()
{
int total;
total = OrdersTotal();
log("total = " + total +"; ");
for (int j = 0; j < total; j++)
{
log("j = " + j +"; ");
}
return(0);
}
¿Cómo lo sabes? No es así.
Hasta que se completen todos los cálculos que se iniciaron con la llegada del tic, se omiten todos los tics posteriores.
Como escribí justo arriba, tengo la misma situación, sólo que ya la he simplificado hasta cierto punto y he llegado a la conclusión de que no sólo no puedo hacer normalmente ningún cálculo, sino que me limito a recorrer las órdenes una por una e imprimir sus números en el registro.
Yo también he creído siempre que "hasta que no se hayan completado todos los cálculos que se iniciaron con la llegada de un tic, se saltan todos los tics posteriores". Me gustaría que fuera así, pero no encuentro otra razón, aparte de las nuevas garrapatas, todavía.
Nadie lo dirá sin el código.
Aquí hay un código extremadamente simplificado, que tiene el mismo problema - los nuevos ticks tiran la salida sucesiva de los números de orden.
int test()
{
int total;
total = OrdersTotal();
log("total = " + total +"; ");
for (int j = 0; j < total; j++)
{
log("j = " + j +"; ");
}
return(0);
}
Aquí hay un código extremadamente simplificado que tiene el mismo problema: los nuevos ticks desvían la salida secuencial de los números de orden.
int prueba()
{
int total;
total = OrdersTotal();
log("total = " + total +"; ");
for (int j = 0; j < total; j++)
{
log("j = " + j +"; ");
}
return(0);
}
Otra pregunta sobre el indicador, no sé qué más hacer aquí
Necesito imprimir la diferencia entre el cierre de los pares introducidos y la media móvil de los mismos.
Al final sólo muestra la diferencia sin MA, ¿cuál es el problema?
¡Esto es genial!
¡Romano!
Yo, por ejemplo, soy un comerciante de éxito con 20 años de experiencia.
No entiendo por qué necesitas "la diferencia entre los cierres de los pares introducidos, yuna media móvil de los mismos".
Además, ¿sabes cómo construir una media móvil de estas diferencias? - ¡Fantástico!
¿Puedes simplemente dibujar la media móvil de las cotizaciones? - ¿Tampoco?
¿Cuál es el problema?
Aquí hay un código extremadamente simplificado que tiene el mismo problema: los nuevos ticks desvían la salida secuencial de los números de orden.
int prueba()
{
int total;
total = OrdersTotal();
log("total = " + total +"; ");
for (int j = 0; j < total; j++)
{
log("j = " + j +"; ");
}
return(0);
}
este código funciona, hazlo por analogía: