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
Aquí hay un ejemplo de funcionamiento de la función hash de Adler32:
El código básico de la función está tomado de la wikipedia y ligeramente modificado para MQL5. Este es el resultado del script:
Como puede ver, todos los valores devueltos por esta función son absolutamente diferentes, aunque las cadenas en sí no difieren mucho.
¿Por qué ulong y no uint?
Y las operaciones con arrays en esta función son extremadamente ineficientes. Es más fácil modificar el código y dividir el unicode en dos símbolos independientes: será 50 veces más rápido.
3681 ms frente a 13822 ms a 3 millones de carreras.... sólo 4 veces diferente...... pero sin pérdida de conversiónSí, así es, porque 32 bits es un entero, no un long. Aunque, francamente, yo modificaría la función hash para la versión de 64 bits. Después de todo, la probabilidad de colisión es menor, y es fácil de ajustar para el experto en magia. Aunque, por otro lado, la implementación actual es totalmente compatible con MQL4 (pues no tiene tipo largo)
P.D. ¿No sería más rápido, si convierto la cadena a un array uchar antes de hacer el bucle, y ya en el bucle ir uno a uno a través de los valores del array? Pero creo que llamar a StringGetCharacter(buf, n) cada vez en el bucle es demasiado caro.
Sí, así es, porque 32 bits es un entero, no un long. Aunque, francamente, yo modificaría la función hash para la versión de 64 bits. Después de todo, la probabilidad de colisión es menor, y es fácil de ajustar para el experto en magia. Sin embargo, por otro lado, la implementación actual es totalmente compatible con MQL4 (pues no tiene tipo largo)
P.D. ¿No sería más rápido, si convierto la cadena a un array uchar antes del bucle, y luego en el bucle tengo que recorrer los valores del array uno por uno? Aun así, creo que llamar a StringGetCharacter(buf, n) cada vez en el bucle es demasiado caro.
Entiendo que este algoritmo sólo puede ser de 32 bits.
¿Y qué pasa con la conversión antes del bucle, cómo? Entonces necesitarías una matriz... asignación dinámica... Sí y hay una pérdida de información al convertir
Entiendo que este algoritmo sólo puede ser de 32 bits.
3681 ms frente a 13822 ms a 3 millones de carreras.... sólo 4 veces diferente...... pero sin pérdida de conversión
sería aún más rápido si la operación dat % 256 se sustituye por dat & 0xFF, y s = (...)%65521 ; descomponer a s = (...); if(s>=65521) s-=65521;
А по поводу конвертации перед циклом - это как? Вам массив тогда понадобится... динамическое распределение... Да и при конвертации происходит потеря информации
Así que esta es la conversión regular antes del ciclo:
Pero de nuevo, esta función sólo está disponible en MQL5. La pérdida de información, según tengo entendido, se produce en Unicode-->ASCII, lo cual es bastante aceptable.
Así que esta es la conversión regular antes del ciclo:
Pero de nuevo, esta función sólo está disponible en MQL5. La pérdida de información, según tengo entendido, se produce en Unicode-->ASCII, lo cual es bastante aceptable.
Bueno, sí... Sólo es aceptable para usted en su tarea particular, mientras que no para el algoritmo.
Mira de cerca el algoritmo MaHash8v64 (ulong) de 64 bits, o quizás los dos juntos (al menos, yo lo haré por mí).
No hay Unicode en MQL4, así que tampoco hay problema.
P.D. StringGetCharacter es una función bastante rápida, sólo devuelve WORD(ushort para MQL5) desde la posición requerida, es decir, no funciona con string en absoluto
Si alguien tiene un proyecto de aplicación C++ windows VS, preferiblemente para la versión 10. El proyecto necesita utilizar una dll en su trabajo. Lo utilizaré como plantilla.
Preferiblemente la dll debería llamarse MLP2HL.dll.
Gracias de antemano.
Si alguien tiene un proyecto de aplicación C++ windows VS, preferiblemente para la versión 10. El proyecto necesita utilizar una dll en su trabajo. Lo utilizaré como plantilla.
Preferiblemente la dll debería llamarse MLP2HL.dll.
Gracias de antemano.
La plantilla se encuentra aquí: ...MetaTrader 4\Nmuestras
VS 2010 lo convierte automáticamente. El nombre se puede cambiar.La plantilla se encuentra aquí: ...MetaTrader 4\\Nsuperficies\Nmuestras
VS 2010 lo convierte automáticamente. El nombre se puede cambiar.No, ya sé lo de la plantilla dll. :)
Necesito una plantilla de proyecto exe que contenga en ella las fuentes de la dll, para poder depurarla. Una dll no es ejecutable y debe ser llamada por alguien. He decidido estudiar Intel Parallel Studio 2011 para VS.