3600 caracteres es muy poco para programas grandes y serios.
Creo que muchos estarán de acuerdo conmigo.
Necesita no menos de 5000 - 10000 caracteres para describir los programas. O al menos una pestaña con el nombre de la configuración del programa
Un moderador siempre puede pedir que se elimine el agua.
Ahora mismo estoy escribiendo una descripción del programa, y he utilizado los 3.600 caracteres sólo para describir los escenarios, pero ni siquiera he descrito la mitad de las características...
Vladimir, ¿alguna vez has comprado algo? ¿Cuánto tiempo has dedicado a leer el manual?
Nadie va a leer un libro de varios volúmenes, y ni siquiera va a ver vídeos de más de 3-5 minutos. Sólo hay una solución: información sobre herramientas en la interfaz del programa, como hacen casi todos los demás. Algo así como un tutorial interactivo. Y las instrucciones detalladas para los usuarios avanzados pueden colocarse en un blog o en su sitio. Quien lo quiera lo encontrará y lo descargará.
3600 caracteres es muy poco para programas grandes y serios.
Creo que muchos estarán de acuerdo conmigo.
Necesita no menos de 5000 - 10000 caracteres para describir los programas. O al menos una pestaña con el nombre de la configuración del programa
Un moderador siempre puede pedir que se elimine el agua.
Ahora mismo estoy escribiendo una descripción del programa, he utilizado los 3.600 caracteres sólo para describir los escenarios y ni siquiera la mitad de las características...
No estoy de acuerdo. La brevedad es la hermana del talento.
"No pienses que con tus muchas palabras serás escuchado".
Vladimir, ¿alguna vez has comprado algo? ¿Cuánto tiempo ha dedicado a leer las instrucciones?
Nadie leerá un libro de varios volúmenes, ni siquiera verá un vídeo de 3 a 5 minutos. Sólo hay una salida: añadir pistas en la interfaz del programa, como se hace ahora en casi todas partes. Algo así como un tutorial interactivo. Y las instrucciones detalladas para los usuarios avanzados pueden colocarse en un blog o en su sitio. Quien lo quiera lo encontrará y lo descargará.
Los que no leen y no compran, ¿han comprado muchos productos sin entender para qué sirve el producto?
Mientras que C++ informa de un error durante la compilación, porque ambas funciones encajan obviamente, y además, la sintaxis no permite llamar explícitamente a la función (2)
Además, teniendo en cuenta las características específicas de MQL, sería más lógico hacer lo contrario: establecer la prioridad de pasar el parámetro no por valor (como ahora), sino por referencia const (cuyas ventajas son especialmente evidentes en el ejemplo de las cadenas).
Cuando se utilizan agentes locales, el archivo con los resultados de la optimización se crea en la carpeta compartida, cuando se utiliza Local Network Farm o MQL5 Cloud Network, no hay ningún archivo.
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии (советники) перед началом использования их в реальной торговле. При тестировании советника происходит его однократная прогонка с начальными параметрами на исторических данных. При оптимизации торговая стратегия прогоняется несколько раз с различным набором параметров...
Esto es una obra de arte en realidad. Se calcularon 8 raíces en 4 llamadas de una instrucción de ensamblador. Se evalúan dos números dobles en una sola llamada.
Cuando se opera a través de un array, todo va como de costumbre con comprobaciones, bifurcaciones y pérdidas al convertir el índice doble -> entero.
Al trabajar con arrays en este ejemplo hay una mezcla constante de FPU/ALU que es muy mala para la productividad
La optimización del acceso a las matrices dinámicas es genial, más allá de los elogios. Pero la mezcla de operaciones FPU/ALU + doble -> entero + bifurcación hace perder tiempo.
La conclusión general: las matemáticas en MQL5 ganan gracias a la optimización perfecta. Aquí no pierden las matrices, sino que ganan las matemáticas.
Y aquí está lo que la pornografía se hizo en el mismo código por Visual C ++ 2017 x64 con optimizaciones completas:
; 52 : int X=pos%Width;
; 53 : int Y=int(pos/Width);
; 54 :
; 55 : D1=sqrt((X1-X)*(X1-X)+(Y1-Y)*(Y1-Y));
0046 f 0 f 28 c8 movaps xmm1, xmm0
004728 b c3 mov eax, ebx
0047499 cdq
00475450 f 57 db xorps xmm11, xmm11
00479 f7 ff idiv edi
0047 b 0 f 57 f6 xorps xmm6, xmm6
0047 e 410 f 28 c4 movaps xmm0, xmm12
00482 f2 440 f 2 a d8 cvtsi2sd xmm11, eax
00487 f2 0 f 2 a f2 cvtsi2sd xmm6, edx
0048 b f2 410 f 5 c cb subsd xmm1, xmm11
00490 f2 0 f 5 c c6 subsd xmm0, xmm6
00494 f2 0 f 59 c9 mulsd xmm1, xmm1
00498 f2 0 f 59 c0 mulsd xmm0, xmm0
0049 c f2 0 f 58 c1 addsd xmm0, xmm1
004 a0 e8 00000000 call sqrt
; 56 : D2=sqrt((X2-X)*(X2-X)+(Y2-Y)*(Y2-Y));
; 57 : D3=sqrt((X3-X)*(X3-X)+(Y3-Y)*(Y3-Y));
004 a5 410 f 28 cf movaps xmm1, xmm15
004 a9 410 f 28 c6 movaps xmm0, xmm14
004 ad f2 0 f 5 c c6 subsd xmm0, xmm6
004 b1 f2 410 f 5 c cb subsd xmm1, xmm11
004 b6 f2 0 f 59 c0 mulsd xmm0, xmm0
004 ba f2 0 f 59 c9 mulsd xmm1, xmm1
004 be f2 0 f 58 c1 addsd xmm0, xmm1
004 c2 e8 00000000 call sqrt
; 58 : D4=sqrt((X4-X)*(X4-X)+(Y4-Y)*(Y4-Y));
004 c7 f2 0 f 108 c 2490010000 movsd xmm1, QWORD PTR Y4$1$[rsp]
004 d0 f2 0 f 10842498010000 movsd xmm0, QWORD PTR X4$1$[rsp]
004 d9 f2 410 f 5 c cb subsd xmm1, xmm11
004 de f2 0 f 5 c c6 subsd xmm0, xmm6
004 e2 f2 0 f 59 c9 mulsd xmm1, xmm1
004 e6 f2 0 f 59 c0 mulsd xmm0, xmm0
004 ea f2 0 f 58 c1 addsd xmm0, xmm1
004 ee e8 00000000 call sqrt
; 59 : D5=sqrt((X5-X)*(X5-X)+(Y5-Y)*(Y5-Y));
; 60 : D6=sqrt((X6-X)*(X6-X)+(Y6-Y)*(Y6-Y));
; 61 : D7=sqrt((X7-X)*(X7-X)+(Y7-Y)*(Y7-Y));
; 62 : D8=sqrt((X8-X)*(X8-X)+(Y8-Y)*(Y8-Y));
004 f3 f2 0 f 10442420 movsd xmm0, QWORD PTR X8$1$[rsp]
004 f9 410 f 28 c8 movaps xmm1, xmm8
004 fd f2 0 f 5 c c6 subsd xmm0, xmm6
00501 f2 410 f 5 c cb subsd xmm1, xmm11
00506 f2 0 f 59 c0 mulsd xmm0, xmm0
0050 a f2 0 f 59 c9 mulsd xmm1, xmm1
0050 e f2 0 f 58 c1 addsd xmm0, xmm1
00512 e8 00000000 call sqrt00517 f2 0 f 104 c 2428 movsd xmm1, QWORD PTR Y2$1$[rsp]
0051 d 410 f 28 c5 movaps xmm0, xmm13
00521 f2 440 f 10442430 movsd xmm8, QWORD PTR Y5$1$[rsp]
00528 f2 410 f 5 c cb subsd xmm1, xmm11
0052 d f2 440 f 10542440 movsd xmm10, QWORD PTR Y6$1$[rsp]
00534 f2 0 f 5 c c6 subsd xmm0, xmm6
00538 f2 440 f 10642450 movsd xmm12, QWORD PTR Y7$1$[rsp]
0053 f f2 450 f 5 c c3 subsd xmm8, xmm11
00544 f2 0 f 107 c 2438 movsd xmm7, QWORD PTR X5$1$[rsp]
0054 a f2 450 f 5 c d3 subsd xmm10, xmm11
0054 f f2 440 f 104 c
2448 movsd xmm9, QWORD PTR X6$1$[rsp]
00556 f2 450 f 5 c e3 subsd xmm12, xmm11
0055 b f2 440 f 105 c
2458 movsd xmm11, QWORD PTR X7$1$[rsp]
00562 f2 0 f 5 c fe subsd xmm7, xmm6
00566 f2 0 f 59 c0 mulsd xmm0, xmm0
0056 a f2 440 f 5 c ce subsd xmm9, xmm6
0056 f f2 0 f 59 c9 mulsd xmm1, xmm1
00573 f2 440 f 5 c de subsd xmm11, xmm6
00578 f2 0 f 58 c1 addsd xmm0, xmm1
0057 c e8 00000000 call sqrt00581 f2 0 f 59 ff mulsd xmm7, xmm7
00585 f2 450 f 59 c0 mulsd xmm8, xmm8
0058 a f2 410 f 58 f8 addsd xmm7, xmm8
0058 f 0 f 28 c7 movaps xmm0, xmm7
00592 e8 00000000 call sqrt00597 f2 450 f 59 c9 mulsd xmm9, xmm9
0059 c f2 450 f 59 d2 mulsd xmm10, xmm10
005 a1 f2 450 f 58 ca addsd xmm9, xmm10
005 a6 410 f 28 c1 movaps xmm0, xmm9
005 aa e8 00000000 call sqrt005 af f2 450 f 59 db mulsd xmm11, xmm11
005 b4 f2 450 f 59 e4 mulsd xmm12, xmm12
005 b9 f2 450 f 58 dc addsd xmm11, xmm12
005 be 410 f 28 c3 movaps xmm0, xmm11
005 c2 e8 00000000 call sqrt005 c7 f2 0 f 10842488010000 movsd xmm0, QWORD PTR Y1$1$[rsp]
; 63 :
; 64 : double d=fabs(D1+D3+D4+D8)/(D1+D2+D3+D4+D5+D6+D7+D8);
Un múltiplo no calificado del código generado en MQL5.
Sorprendentemente MSVC ni siquiera trata de optimizar - toda la matemática es conducida a través de bibliotecas como si fuera escrita para un procesador de hace 20 años. Y la activación del conjunto de comandos AVX no cambia en absoluto el comportamiento del compilador.
Se adjunta el archivo C++ de prueba. No es necesario expresar la idea de "un error en el ejemplo de prueba", no hay ningún error.
Hay muy poco espacio en las descripciones de los productos.
3600 caracteres es muy poco para programas grandes y serios.
Creo que muchos estarán de acuerdo conmigo.
Necesita no menos de 5000 - 10000 caracteres para describir los programas. O al menos una pestaña con el nombre de la configuración del programa
Un moderador siempre puede pedir que se elimine el agua.
Ahora mismo estoy escribiendo una descripción del programa, y he utilizado los 3.600 caracteres sólo para describir los escenarios, pero ni siquiera he descrito la mitad de las características...Vladimir, ¿alguna vez has comprado algo? ¿Cuánto tiempo has dedicado a leer el manual?
Nadie va a leer un libro de varios volúmenes, y ni siquiera va a ver vídeos de más de 3-5 minutos.
Sólo hay una solución: información sobre herramientas en la interfaz del programa, como hacen casi todos los demás. Algo así como un tutorial interactivo. Y las instrucciones detalladas para los usuarios avanzados pueden colocarse en un blog o en su sitio. Quien lo quiera lo encontrará y lo descargará.
Hay muy poco espacio en las descripciones de los productos.
3600 caracteres es muy poco para programas grandes y serios.
Creo que muchos estarán de acuerdo conmigo.
Necesita no menos de 5000 - 10000 caracteres para describir los programas. O al menos una pestaña con el nombre de la configuración del programa
Un moderador siempre puede pedir que se elimine el agua.
Ahora mismo estoy escribiendo una descripción del programa, he utilizado los 3.600 caracteres sólo para describir los escenarios y ni siquiera la mitad de las características...No estoy de acuerdo. La brevedad es la hermana del talento.
"No pienses que con tus muchas palabras serás escuchado".
Mateo 6:7.
Vladimir, ¿alguna vez has comprado algo? ¿Cuánto tiempo ha dedicado a leer las instrucciones?
Nadie leerá un libro de varios volúmenes, ni siquiera verá un vídeo de 3 a 5 minutos.
Sólo hay una salida: añadir pistas en la interfaz del programa, como se hace ahora en casi todas partes. Algo así como un tutorial interactivo. Y las instrucciones detalladas para los usuarios avanzados pueden colocarse en un blog o en su sitio. Quien lo quiera lo encontrará y lo descargará.
Los que no leen y no compran, ¿han comprado muchos productos sin entender para qué sirve el producto?
¿Debemos entonces publicar todo en los blogs?
No estoy de acuerdo. La brevedad es la hermana del talento.
"No creas que con tu verborrea serás escuchado".
Mateo 6:7.
Estoy de acuerdo, pero incluso el breve 3600 no es suficiente...
Los que no leen y no compran, ¿han comprado muchos productos sin entender para qué sirve el producto?
¿Debemos entonces publicar todo en los blogs?
¿Comprender la finalidad del producto a partir del manual?
Eso es una tontería. Voy a descargar y sentir la demo.
Este código se basa en un defecto del compilador
Resultado: 1... ¿Por qué no 2?
Mientras que C++ informa de un error durante la compilación, porque ambas funciones encajan obviamente, y además, la sintaxis no permite llamar explícitamente a la función (2)
Además, teniendo en cuenta las características específicas de MQL, sería más lógico hacer lo contrario: establecer la prioridad de pasar el parámetro no por valor (como ahora), sino por referencia const (cuyas ventajas son especialmente evidentes en el ejemplo de las cadenas).
No está claro por qué pasar (en realidad copiar) cadenas largas por valor cuando se puede hacer por referencia.
Error de compilación
¿Por qué mover manualmente el contenido del archivo .h (sobre todo porque puede cambiar de vez en cuando) cuando puedes simplemente incluirlo?
Buenas tardes, ¿podrían aconsejarme?
¿Cómo escribirlos resultados de la optimización en un archivo utilizando la granja de red local o la red en la nube MQL5?
Hay un procedimiento en OnTester(), utiliza:
Cuando se utilizan agentes locales, el archivo con los resultados de la optimización se crea en la carpeta compartida, cuando se utiliza Local Network Farm o MQL5 Cloud Network, no hay ningún archivo.
Una comprobación reveló que:
Este código se convierte en el siguiente código SSE en ensamblador:
Esto es una obra de arte en realidad. Se calcularon 8 raíces en 4 llamadas de una instrucción de ensamblador. Se evalúan dos números dobles en una sola llamada.
La conclusión general: las matemáticas en MQL5 ganan gracias a la optimización perfecta. Aquí no pierden las matrices, sino que ganan las matemáticas.
Y aquí está lo que la pornografía se hizo en el mismo código por Visual C ++ 2017 x64 con optimizaciones completas:
Un múltiplo no calificado del código generado en MQL5.
Sorprendentemente MSVC ni siquiera trata de optimizar - toda la matemática es conducida a través de bibliotecas como si fuera escrita para un procesador de hace 20 años. Y la activación del conjunto de comandos AVX no cambia en absoluto el comportamiento del compilador.
Se adjunta el archivo C++ de prueba. No es necesario expresar la idea de "un error en el ejemplo de prueba", no hay ningún error.