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 sé qué es mt4, ni siquiera se ejecuta en win10, creo que eso es algo bueno
He ajustado la matriz.
Tuve que usar ArrayCopy , porqueMQL5 juraba que el array era estático.
Si es un concurso de velocidad, ofreceré mi propia variante...
Su variante es efectivamente la más rápida, pero contiene un error: si todos los elementos de un array son iguales a un filtro, su función saldrá del array.
Voy a ofrecer mi propia variante, es un poco más lenta que la tuya:
2018.11.13 17:16:38.618 massiv v1 (EURUSD,M1) test my=1512090
2018.11.13 17:16:40.083 massiv v1 (EURUSD,M1) test alien=1464941
Lleva varios años haciendo este tipo de preguntas. ¿Has aprendido mucho? Lo siento, pero es obvio que todavía estás en el nivel de los bytes y las matrices elementales.
La propia pregunta está formulada de forma incorrecta. La tarea no consiste en eliminar los valores duplicados (tarea de nivel CME) sino en algo mucho mayor, debe actualizar la lista de elementos válidos. Si es así, la pregunta debería sonar completamente diferente. Confundes y engañas a los participantes y, en primer lugar, a ti mismo: impones a los participantes una solución equivocada en principio y pides que la hagan efectiva.
No programo por programar, no tengo el objetivo de convertirme en un megaprogramador ni de ser inteligente en los foros.
¿Qué es lo que no entiendes en la pregunta: Borrar un array de elementos definidos?
Su variante es efectivamente la más rápida, pero contiene un error: si todos los elementos de un array son iguales a un filtro, su función saldrá del array.
Te propongo mi variante, es un poco más lenta que la tuya:
2018.11.13 17:16:38.618 massiv v1 (EURUSD,M1) test my=1512090
2018.11.13 17:16:40.083 massiv v1 (EURUSD,M1) test alien=1464941
Sí, gracias. Corregido.
Sólo que también tienes un error en alguna parte, porque la suma de comprobación no coincide porque falta un elemento en alguna parte. No se sabe dónde.
Lo he retocado eliminando pasajes innecesarios
En ambos casos, cada elemento se arrastra como máximo una vez.
Sí, lo siento, una vez en efecto. Esperaba que alguien se interesara por el enfoque del DBMS y lo comprobara, no esperé. Tuve que hacerlo yo mismo.
Insertado ArrayDeleteValue.mq5 en tu comprobador, es el doble de malo que el tuyo. He pensado en la razón y he arreglado dos líneas para que se elimine un tercio de los elementos en lugar del 0,1%.
Así es como resultó:
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Pastushak: Checksum = 333586; elementos - 667421; tiempo de ejecución = 108521 microsegundos
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Korotky: Checksum = 333586; elementos - 667421; tiempo de ejecución = 5525 microsegundos
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Fedoseev: Checksum = 333586; elementos - 667421; tiempo de ejecución = 4879 microsegundos
2018.11.13 19:45:22.164 Del (GBPUSD.m,H1) variante Semko: Checksum = 333586; elementos - 667421; tiempo de ejecución = 14479 microsegundos
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Pavlov: Checksum = 998744; elementos - 667421; tiempo de ejecución = 0 microsegundos
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Nikitin: Checksum = 333586; elementos - 667421; tiempo de ejecución = 5759 microsegundos
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Vladimir: Checksum = 333586; elementos - 667421; tiempo de ejecución = 1542 microsegundos
La variante de Pavlov tenía un error, tuve que comentarlo.
Conclusión: calcular direcciones en un array con una distancia arbitraria entre sus números sigue siendo peor que procesar elementos en una fila, en un paso dado, y mucho menos en el paso 1, el compilador puede optimizarlo.
P.D. Los compiladores Pascal y Delphi de Borland hacen que en tiempo de ejecución la variable de bucle no importe (en memoria), se pone en algún lugar de los registros de la CPU.
Sí, lo siento, una vez en efecto. Esperaba que alguien se interesara por el enfoque del DBMS y lo comprobara, no esperé. Tuve que hacerlo yo mismo.
Insertado ArrayDeleteValue.mq5 en tu comprobador, es el doble de malo que el tuyo. He pensado en las razones y he arreglado dos líneas para que se elimine un tercio de los elementos en lugar del 0,1%.
Así es como resultó:
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Pastushak: Checksum = 333586; elementos - 667421; tiempo de ejecución = 108521 microsegundos
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Korotky: Checksum = 333586; elementos - 667421; tiempo de ejecución = 5525 microsegundos
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Fedoseev: Checksum = 333586; elementos - 667421; tiempo de ejecución = 4879 microsegundos
2018.11.13 19:45:22.164 Del (GBPUSD.m,H1) variante Semko: Checksum = 333586; elementos - 667421; tiempo de ejecución = 14479 microsegundos
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Pavlov: Checksum = 998744; elementos - 667421; tiempo de ejecución = 0 microsegundos
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Nikitin: Checksum = 333586; elementos - 667421; tiempo de ejecución = 5759 microsegundos
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Vladimir: Checksum = 333586; elementos - 667421; tiempo de ejecución = 1542 microsegundos
La variante de Pavlov tenía un error, tuve que comentarlo.
Conclusión: calcular direcciones en un array con una distancia arbitraria entre sus números sigue siendo peor que procesar elementos en una fila en un paso determinado, más aún en el paso 1, el compilador puede optimizarlo.
P.D. Los compiladores Pascal y Delphi de Borland hacen que en tiempo de ejecución la variable de bucle no importe (en memoria), se pone en algún lugar de los registros de la CPU.
La versión de Pavlov ha sido corregida.
Sus valores son extraños. ¿Quizás has ejecutado el script después de perfilar o depurar sin recompilar el código?
Así es como funciona para mí:
Y en su versión genera una suma de comprobación incorrecta. Y la creación de un array adicional no tiene ningún beneficio, al contrario, ralentiza el proceso y consume recursos adicionales.
Sólo que en mi caso se hace en bloques usando ArrayCopy, por lo que hay una ventaja de velocidad.