Discusión sobre el artículo "Experto comercial universal: trabajando con órdenes pendientes y cobertura (parte 5)"
Petición al autor. Su enfoque es extremadamente conveniente al escribir TC. Todo lo superfluo queda oculto a los ojos, lo que no puede sino agradar. ¿Cuál es el beneficio de esto?
Si escribo un impulso-TC usando el método clásico y el tuyo, ¿cuánto más lento será tu método en el tester?
No cabe duda de que su código será más bonito, conciso, cómodo y universal.
¿Admite ya TC multisímbolo (dónde está el OnTick multisímbolo)?
//|Clase contenedora para la gestión de estrategias de tipo CStrategy ||.Un error tipográfico.
Me pareció miope definir sólo CStrategyList::OnChartEvent, y luego llamarlo sólo en el OnChartEvent nativo.
Yo habría hecho una clase base con un OnChartEvent virtual. Y absolutamente todas las clases CStrategyList, CStrategy y demás (por cierto, no se heredan indicadores de nada por alguna razón) derivarían de la clase base. Y en el OnChartEvent nativo, deberías llamar una vez en bucle a todos los OnChartEvent virtuales que se crearon.
Veo que estás utilizando librerías escritas por desarrolladores. Por ejemplo, Arrays. ¿Están escritas normalmente?
Tienes esto por todas partes en tu código fuente
#include <Strategy\Message.mqh>Esto supone que no tengo una carpeta Strategy para otras necesidades. ¿Por qué no usas comillas en includnics cuando está permitido? ¿Y por qué no hacer
#include <Sokolov\Strategy\Message.mqh>
Me pareció miope definir sólo CStrategyList::OnChartEvent, y luego llamarlo sólo en el OnChartEvent nativo.
Yo habría hecho una clase base con un OnChartEvent virtual. Y absolutamente todas las clases CStrategyList, CStrategy y demás (por cierto, no se heredan indicadores de nada por alguna razón) derivarían de la clase base. Y en el OnChartEvent nativo escribiría una llamada en bucle de todos los OnChartEvent virtuales que se crearan.
Sí, esto es probablemente más correcto. Ahora el evento OnChartEvent es algo ignorado por los expertos. Haré los cambios apropiados en la próxima versión.
Veo que utilizas librerías escritas por desarrolladores. Por ejemplo, Arrays. ¿Están bien escritas?
Excelente y están muy optimizadas. A lo largo de los años en los que se han utilizado, todos los algoritmos que contienen se han perfeccionado y puesto a punto. Por eso los recomiendo.
Lo tienes así en todo el código fuente.
Esto supone que no tengo la carpeta Strategy para otras necesidades. ¿Por qué no usas comillas en includnics cuando está permitido? ¿Y por qué no hacer
Las fuentes ubicadas dentro de la carpeta Strategy sólo se refieren localmente entre sí, tal vez he mirado a través de algo, no sé, pero debe haber referencias locales. Los archivos del Asesor Experto y el propio módulo Asesor Experto mq5 hacen referencia al motor de forma global, y esto también es correcto, ya que es un módulo externo a la librería.
He mirado EventChartPBarChanged.mqh. ¿Por qué se ignora const donde se requiere?
Petición al autor. Su enfoque es extremadamente conveniente al escribir TC. Todo lo superfluo queda oculto a los ojos, lo que no puede sino agradar. ¿Cuál es el beneficio de esto?
Si escribo un impulso-TC usando el método clásico y el tuyo, ¿cuánto más lento será tu método en el tester?
No cabe duda de que su código será más bonito, conciso, cómodo y universal.
¿Admite ya TC multisímbolo (dónde está el OnTick multisímbolo)?
El tiempo principal en el probador de estrategias se gasta en el trabajo de su infraestructura (desplazamiento de barras, emulación del entorno de negociación, etc.) Mucho menos tiempo se gasta en el propio código del Asesor Experto.
Por otra parte, el perfilado 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.
.
¿No sería mejor añadir sólo un MqlTick?
El vídeo del artículo no es visible en ningún navegador.
Interesante idea por cierto. Por alguna razón no se me había ocurrido.
Hay problemas con el video. En la nueva versión del sitio se negó a flash. Ahora solo en yuteb se pueden ver videos. Llevará algún tiempo publicar vídeos, pero lo arreglaremos pronto.
Las fuentes ubicadas dentro de la carpeta Strategy se refieren entre sí localmente, quizás he mirado por encima algo, no lo sé, pero debería haber referencias locales. Los archivos del Asesor Experto y el propio módulo Asesor Experto mq5 hacen referencia al motor globalmente, y esto también es correcto, ya que es un módulo externo a la librería.
Revisado. Mira MoneyManagment.mqh.
Referencia global desde mq5 - Entiendo completamente la necesidad. Pero usted ha reservado la carpeta Include/Stategy con sus soluciones. Y yo uso esta carpeta para mis propias necesidades. Y no quiero ver el mqh de otra persona en ella. Sería lógico que movieras toda tu infraestructura a Include\Sokolov/Estrategia, Include\Sokolov/Estrategia, Include\Sokolov/Panel, etc.
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Experto comercial universal: trabajando con órdenes pendientes y cobertura (parte 5):
Este artículo continúa la presentación a los lectores del motor comercial CStrategy. A petición de multitud de usuarios, se han añadido funciones de trabajo con órdenes pendientes al motor comercial. Asimismo, las últimas versiones de MetaTrader 5 han comenzado a dar soporte a cuentas con cobertura. Ahora CStrategy también da soporte a las mismas. En el artículo se da una descripción detallada de un algoritmo para trabajar con órdenes pendientes, así como de los principios de funcionamiento de CStrategy con las cuentas con cobertura.
Hemos analizado el trabajo con órdenes pendientes y ahora podemos crear un experto completo que use las posibilidades del motor comercial para trabajar con ellas. Nuestra estrategia consistirá en entrar en los momentos de movimiento fuerte en la dirección de este movimiento, por eso se llamará CImpulse. En la apertura de cada nueva barra se medirá una cierta distancia con respecto al precio actual, expresado en tanto por ciento. A la misma distancia del precio actual se colocarán las órdenes pendientes BuyStop y SellStop. La distancia se establecerá en tanto por ciento. Si dentro de una barra se ejecuta una de las órdenes, esto significará que el precio en este intervalo de tiempo ha recorrido una gran distancia, lo que es señal de un impulso en el mercado. La orden se ejecutará y se transformará en una posición abierta.
Las posiciones abiertas se acompañarán con una media móvil sencilla. Si el precio retorna a ella, la posición se cerrará. En la captura de pantalla se muestra la entrada típica en una posición larga al activarse una orden pendiente BuyStop:
Autor: Vasiliy Sokolov