Discusión sobre el artículo "Experto comercial universal: trabajando con órdenes pendientes y cobertura (parte 5)" - página 2

[Eliminado]  
Vasiliy Sokolov:
Sesgo hacia los métodos const. Me hice programador en C# - y allí no existe, porque la limitación impuesta por el modificador no es efectiva.

Ingenuamente pensé que este modificador también le dice al compilador dónde crear código nativo más óptimo durante la compilación.....

Yo mismo lo uso para autocontrolarme.

[Eliminado]  
Vasiliy Sokolov:

El tiempo principal en el probador de estrategias se gasta en el trabajo de su infraestructura (desplazamiento de barras, emulación del entorno comercial, etc.) El código del Asesor Experto en sí toma mucho menos tiempo.

Por otra parte, la creación de perfiles ha demostrado que los principales métodos de CSTartegy que consumen muchos recursos son los métodos BuyInit, SellInit, BuySupport y SellSupport, es decir, la propia lógica del Asesor Experto. Todo el resto de la carga se compila en código plano de forma óptima, o simplemente se elimina si no se utiliza. Por eso se justifica la programación OOP de alto nivel.

Tenga en cuenta que en los Asesores Expertos más o menos complejos con muchas reglas y una infraestructura pesada, la programación en una forma inicialmente plana (sin funciones y OOP) conducirá a errores inevitables del programador, y como consecuencia el rendimiento de tal Asesor Experto será aún menor que con OOP. Los tiempos del ensamblador han terminado. Hace tiempo que el compilador derrotó al ser humano en ciertos ámbitos de la optimización. Queda para un humano definir una arquitectura inicialmente competente y escalable con un número mínimo de interfaces y una buena manejabilidad.
.

Estoy a favor de la programación orientada a objetos con las manos y los pies. Siempre y cuando no se escondan detrás de ella sólo soluciones muletilla, como con multisymbol OnTick. Que oficialmente los desarrolladores consideran que no es una solución de muleta.
 
Anton Zverev:

Ingenuamente pensé que este modificador también le dice al compilador dónde crear código nativo más óptimo durante la compilación......

Yo mismo lo uso para el autocontrol.

Quizás en C++ y MQL sea exactamente así, pero... Nunca lo he entendido.
 
Anton Zverev:
Estoy a favor de OOP con las manos y los pies. Siempre y cuando no se escondan detrás soluciones de muleta, como con multisymbol OnTick. Que oficialmente es considerado por los desarrolladores como una solución no muleta.

Desgraciadamente, aquí no se puede hacer nada a nivel de usuario. Aunque OnTick en CStrtategy es multivalente, su multivalencia también se emula mediante muletillas. Simplemente en cada evento entrante se solicita el tick de otro instrumento, y si ha cambiado, se genera un nuevo evento OnTick para este instrumento. En FORTS, por cierto, CStrategy proporciona un OnTick realmente multidivisa, gracias al evento OnBookEvent. Pero de nuevo, esto es una emulación cuando se trabaja en el probador.

Otra opción es proporcionar CStrategy con un indicador de recursos. Al inicio CStrategy lanza una instancia de este indicador en el símbolo necesario y recibe de él el evento de llegada de un nuevo tick. A continuación, se convierte en OnTick CStrategy. Se trata de una muletilla clásica, pero toda la implementación se oculta magistralmente entre bastidores, y cualquier estrategia funciona de forma unificada sin saber cómo se recibieron estos ticks.

[Eliminado]  
Vasiliy Sokolov:

Desafortunadamente, aquí no se puede hacer nada a nivel de usuario. Aunque OnTick en CStrtategy es multidivisa, su multidivisa también se emula mediante muletillas. Simplemente en cada evento entrante se solicita el tick de otro instrumento, y si ha cambiado, se genera un nuevo evento OnTick para este instrumento. En FORTS, por cierto, CStrategy proporciona un OnTick realmente multidivisa, gracias al evento OnBookEvent. Pero de nuevo, esto es una emulación cuando se trabaja en el probador.

Desafortunadamente, este enfoque pierde ticks.

Otra opción es proporcionar CStrategy con un indicador de recursos. Al inicio CStrategy lanza una instancia de este indicador en el símbolo necesario y recibe de él el evento de llegada de un nuevo tick. A continuación, se convierte en OnTick CStrategy. Esta es una variante clásica de muleta, pero toda la implementación se oculta magistralmente entre bastidores, y cualquier estrategia funciona de forma unificada sin saber cómo se recibieron estos ticks.

Sí, esta variante y aprobado por los desarrolladores. Pero, en mi humilde opinión, parece terriblemente muleto cuando se considera cómo los recursos de un probador optimizado se desperdician en una tarea que es la más simple para otras plataformas. Ciertamente, la programación orientada a objetos oculta la muletilla de forma magistral.
 
Anton Zverev:

Lamentablemente, este enfoque falla garrapatas.

Sí, esta opción está aprobada por los desarrolladores. Pero, en mi humilde opinión, parece una muletilla terrible si tenemos en cuenta cómo se gastan los recursos de un probador optimizado en la tarea más sencilla para otras plataformas. Sin duda, la programación orientada a objetos oculta la muleta de forma magistral.
Bueno, no es tan malo. Porque los indicadores en MQL son muy rápidos y trabajan en su propio hilo. Resulta que lanzamos algún mini listener que nos avisa de la llegada de un nuevo evento. Pensaré en esta implementación en las próximas partes del artículo.
 
He leido en diagonal, articulos muy utiles, apenas puedo pasar por ellos - tal vez me he perdido algo, me interesan los colgantes, pero faltan muchos datos en el impulso, por favor apunten con el dedo... o tengo que introducirlos yo mismo?????
'Ask' - function not defined    Impulse.mqh     51      20
'Ask' - function not defined    Impulse.mqh     51      28
'PendingOrders' - undeclared identifier Impulse.mqh     56      16
'GetOrder' - object pointer expected    Impulse.mqh     58      44
'IsMain' - member function not defined  Impulse.mqh     59      34
'Modify' - member function not defined  Impulse.mqh     66      19
'Delete' - member function not defined  Impulse.mqh     69      19
'Bid' - function not defined    Impulse.mqh     85      20
'Bid' - function not defined    Impulse.mqh     85      28
'PendingOrders' - undeclared identifier Impulse.mqh     90      16
'GetOrder' - object pointer expected    Impulse.mqh     92      44
'IsMain' - member function not defined  Impulse.mqh     93      34
'Modify' - member function not defined  Impulse.mqh     100     19
'Delete' - member function not defined  Impulse.mqh     103     19
'Bid' - function not defined    Impulse.mqh     118     23
'Bid' - function not defined    Impulse.mqh     118     31
'Bid' - function not defined    Impulse.mqh     124     7
'Ask' - function not defined    Impulse.mqh     136     23
'Ask' - function not defined    Impulse.mqh     136     31
'Ask' - function not defined    Impulse.mqh     142     7
20 error(s), 0 warning(s)               21      1
 
Сергей Криушин:
He leido en diagonal, articulos muy utiles, apenas puedo pasar por ellos - tal vez me he perdido algo, me interesan los colgantes, pero faltan muchos datos en el impulso, por favor apunten con el dedo... o tengo que introducirlos yo mismo????
Buenas tardes. Por favor, actualice el motor de comercio a la última versión. Se adjunta en la quinta parte del artículo.
 
Сергей Криушин:
He leido en diagonal, articulos muy utiles, apenas puedo pasar por ellos - tal vez me he perdido algo, me interesan los colgantes, pero faltan muchos datos en el impulso, por favor apunten con el dedo... o tengo que introducirlos yo mismo????
Si no entiendes algo, puedes preguntar en este hilo.
 
Vasiliy Sokolov:
Si no entiendes algo, puedes preguntar en este hilo.
No funciona - estas líneas no están en el propio Impulse....