Preguntas sobre el MQL5 Wizard y la biblioteca estándar de clases comerciales - página 12
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Hasta ahora, sólo hay una solución para resolver los inconvenientes anteriores:
Acceso abierto a la lectura de los valores devueltos por el método Direction() del módulo de señales desde los módulos de gestión de posiciones y de gestión de capitales y riesgos.
Añade un método más, por ejemplo, con identificador doble getMainSingnal(), que hace referencia a una instancia de la clase del módulo de señales y devuelve el resultado del método Direction() del módulo de señales. Dado que este intercambio de información se realiza en modo de sólo lectura, la seguridad no se ve comprometida en modo alguno.
Para ello
Casi todo está claro. Lo único que quiero aclarar: "¿por qué este deseo tuyo de ver la señal en el nivel de MM y de arrastre debe implementarse en el nivel de la clase base?
No creo que eso sea algo bueno (es decir, malo). El algoritmo no es típico (desde mi punto de vista). Según tengo entendido, tienes tus propios módulos de MM y trailing (con sus propios algoritmos ligados a la señal).
Aquí y pon en ellos los correspondientes 1.,2.,3.
Casi todo está claro. Lo único que me gustaría aclarar es "¿por qué este deseo suyo de ver la señal a nivel de MM y de arrastre debe implementarse a nivel de clase base?".
No creo que eso sea algo bueno (es decir, malo). El algoritmo no es típico (desde mi punto de vista). Según he entendido tienes tus propios módulos de MM y trailing (con tus propios algoritmos vinculados a la señal).
Así que, pon el 1, 2, 3 apropiado en ellos.
La cuestión es que el Maestro toma como base la clase SEhregt. Y en consecuencia, no puedo sobrescribir funciones necesarias en los módulos que creo, porque ya son incompatibles con esta clase CEhregt tan básica desde el principio porque no tienen acceso a una instancia de la clase de módulo de señales.
Debido a que la instancia de la clase de módulo de señal se almacena sólo en el campo de la clase SEhregt en el archivo Expert.mqh, línea 67
CExpertSignal *m_signal; // trading signals object
y este campo no es compartido (inaccesible) con otras clases y módulos creados a partir de ellas.
Por esta misma razón, no hay forma de anular las clases CExpertMoney y CExpertTrailing para hacerlas compatibles con el asistente.
Al fin y al cabo, si se deniega el acceso en las clases padre, los descendientes no lo obtendrán de ninguna manera.
Llegar a la raíz (c) "Aforismos" de Kozma Prutkov
He descubierto cómo pasar las señales de trading desde el módulo de señales a los módulos de mantenimiento de posiciones y de gestión de dinero y riesgo sin pasar instancias de CExpertSignal.
Vamos a añadir dos líneas a las clases CExpertMoney y CExpertTrailing:
Para el archivo ExpertMoney.mqh:
Para el archivo ExpertTrailing.mqh:
De este modo, hemos definido los campos y métodos necesarios para pasar las señales de negociación. Ahora tenemos que pasar estas señales de comercio a las clases del módulo. Lo haremos en Expert.mqh, es decir, para la clase CExpert
Escribiremos una línea para pasar nuestras señales de trading a la clase de soporte de posiciones
e insertarlo al principio del método que se llama antes de cada trailing stop, es decir, CheckTrailingStop():
Escribiremos una línea para pasar las señales de trading a la clase de gestión de dinero y riesgo:
e insertarlo al principio del método que se llama antes de la apertura de cada posición, es decir, CheckOpen():
Y ya está, el problema está resuelto.
Ahora, podemos obtener el valor actual de las señales de negociación en los módulos de gestión de posiciones y de renta variable y gestión de riesgos accediendo al valor del campo m_signaldirection. Ahora sólo tenemos que registrar los nuevos campos y métodos en las clases CExpertMoney y CExpertTrailing en la documentación y añadir los archivos modificados a las actualizaciones.
Aquí están los archivos. En el Experto, las líneas 100 y 123 están escritas a mano.
Si tiene alguna otra pregunta, no dude en consultarla.
Aquí están los archivos. En el Experto, las líneas 100 y 123 están escritas a mano.
Si tiene más preguntas, no dude en ponerse en contacto conmigo.
¿Qué clase de personas son estos desarrolladores? ¿Cuándo van a empezar a escuchar lo que necesitan los operadores, que ya tienen experiencia en la creación de sistemas de negociación, en lugar de proponer su propia visión de diseñar sistemas de negociación que son prácticamente inutilizables para los usuarios finales porque tienen que ajustar manualmente el código fuente? Cuántas veces tengo que explicar que puedo entrar manualmente y arreglar el código fuente, e incluso así me llevará mucho tiempo entender qué es qué, aunque esté familiarizado con la programación. Y es poco probable que el usuario final se meta en el código, porque no entiende de programación. Usted mismo declaró, y cito:
"El conocimiento de los lenguajes de programación ya no es un requisito previo para crear robots de trading."Ver https://www.mql5.com/ru/articles/240.
"La primera versión del Asistente MQL5 ya tenía la posibilidad de crear rápidamente un Asesor Experto listo para usar como un conjunto de módulos simples en forma de código fuente en MQL5. Incluso no es necesario que conozca MQL5- sólo tiene que leer"Construya su propio Asesor Experto en MQL5 Wizard" (ver https://www.mql5.com/ru/articles/275).
Ahora resulta que se requieren conocimientos de lenguajes de programación, ya que el usuario tiene que introducir el código después del Asistente y editar algo allí. Es decir, todas las declaraciones anteriores son invenciones y engaños de los desarrolladores.
Por ejemplo, si escribo mi propio módulo de gestión del dinero y del riesgo que debe abrir una posición según el nivel de la señal comercial emitida por un módulo escrito por otro desarrollador de módulos. Como resultado, mi módulo será incompatible con el asistente. ¿Cómo explicar a los usuarios que tienen que ir a alguna parte del código e insertar algunas cadenas para que el módulo funcione? Al fin y al cabo, los desarrolladores de módulos deberían crearlos y el maestro debería combinarlos automáticamente en un sistema coherente, de modo que los módulos, como mínimo, no entren en conflicto y sean totalmente compatibles entre sí. Pero en tu caso, el asistente no lo hace, porque después del asistente tienes que ir al código y rehacer todo manualmente.
¿Realmente es tan difícil poner sólo seis líneas en los archivos de clase de los padres, lo que señalé en mi post anterior? Y el problema se resolverá por sí mismo y nadie tendrá que entrar en las fuentes y cambiar algo allí. ¿Qué se le caerán las manos? ¿Por qué perder el tiempo en un galimatías con la demostración de cómo hay que corregir manualmente algo después del asistente? ¿No se puede dedicar ese mismo tiempo a algo más útil, para que nadie tenga que meterse después en el código para resolver problemas similares?
¿Cuál es la ideología de su empresa: por un lado declara la automatización completa, pero cuando se trata de la práctica sugieren entrar en el código y rehacer todo a mano después de la llamada "automatización"?
En general, a mi entender, es inútil explicar todo esto. No debería sorprenderle que los operadores no quieran cambiar a MT5 porque la plataforma es tosca y está desarrollada no para la comodidad del autotrading, sino para la comodidad de los desarrolladores de esa misma plataforma. Y a menos que el usuario aprenda a fondo la programación, es mejor que se mantenga alejado del comercio automatizado.
Si no quieres, no tienes que hacerlo. Si no tiene nada más que hacer, siéntese aquí y explique a cada usuario dónde y cómo tiene que entrar en el código fuente con sus manos y qué es exactamente lo que tiene que arreglar.
En cualquier caso, con este nivel de argumentación y llevando casi todos los temas más allá de los límites de la exageración, no se puede trabajar contigo. El trabajo real implica una toma de decisiones consciente, no una demagogia verbal.
Me temo que, o bien estás en las garras del maximalismo, o simplemente no entiendes los límites de aplicabilidad de las herramientas.
En cualquier caso, con este nivel de argumentación y llevando casi todas las cuestiones más allá de los límites de la exageración, no se puede trabajar contigo. El trabajo real implica una toma de decisiones consciente, no una demagogia verbal.
En general, no pedía trabajo, es decir, ganar dinero, y estaba bastante contento de cooperar de forma voluntaria. Cómo y dónde me gano la vida lo decido yo.
Pues no lo hará y no tiene por qué hacerlo. Nuestro negocio es ofrecer, usted tiene el derecho de rechazar. Como se dice: el maestro es el jefe.
Si su empresa ya lo ha entendido todo e incluso ha enseñado a los dummies a crear los llamados Asesores Expertos "ya hechos". Además, la cuestión es que sólo sirven para la demostración del Asistente, pero no son muy buenos para el comercio automatizado, porque incluso en los datos históricos la curva de la equidad parece inconveniente ya que la modularidad está implementada, pero falta la consistencia de los módulos para un sistema de comercio completo.
Buena suerte.
...
Por ejemplo, si escribo mi propio módulo de gestión de dinero y riesgo, que debería abrir una posición según el nivel de la señal de negociación emitida por el módulo escrito por otro desarrollador de módulos. El resultado será que mi módulo ya es incompatible con el asistente. ¿Cómo explicar a los usuarios que tienen que ir a alguna parte del código e insertar algunas cadenas para que el módulo funcione? Al fin y al cabo, los desarrolladores de módulos deberían crearlos y el asistente debería combinarlos automáticamente en un sistema coherente, de modo que los módulos, como mínimo, no entren en conflicto y sean totalmente compatibles entre sí. Y tienes un asistente que no lo hace, porque después tienes que ir al código y rehacer todo manualmente.
¿Realmente es tan difícil escribir sólo seis líneas en los archivos de clase de los padres, lo que señalé en mi post anterior? Y el problema se resolverá por sí mismo y nadie tendrá que ir a las fuentes y cambiar algo allí. ¿Qué se le caerán las manos? ¿Por qué perder el tiempo en un galimatías, demostrando cómo arreglar manualmente algo después del asistente? ¿No se puede dedicar ese mismo tiempo a algo más útil, para que nadie tenga que meterse en el código después para resolver problemas similares?
...Su enfoque viola la encapsulación de clases y, como resultado, trae confusión jerárquica.
Lea tranquilamente el libro de Steve McConell "El código perfecto".
Imagínese que en una fábrica para la producción de guantes, hay un sello de cinco dedos para la mano derecha y la izquierda, pero luego llega un pequeño pedido de guantes de seis dedos. Hay gente así, después de todo. Pero en lugar de hacer un sello para ellos (que hará un lote y se quedará allí por un tiempo), sugieres modificar el sello de cinco dedos haciendo un dedo deslizante. Parece que es universal y todo es estupendo, pero la fuerza del sello de cinco dedos se debilitará en aras de la universalidad (en aras de una pequeña necesidad de producir ocasionalmente guantes de seis dedos). Y entonces se pedirá un lote de 300 dedos de cuatro patas, y de nuevo se desmenuzará la bien probada y fiable plantilla.
Ya te lo han dicho arriba:
No creo que sea bueno (es decir, malo). El algoritmo no es típico (desde mi punto de vista). Según tengo entendido, tiene sus propios módulos de MM y de arrastre (con sus propios algoritmos ligados a la señal).
En lugar de realizar cambios en la biblia estándar, sería mejor hacer desarrollos para ampliarla (a través de la herencia). Entonces sería realmente interesante.
HZZ Además, para que la gente no tenga que lidiar con los entresijos del código (como has escrito más arriba), puedes envolver los módulos listos en biblio y sharovariar en el mercado, luego sólo tienes que enchufar el módulo de Reshetov y pulsar el botón [descargar masa].
Su enfoque viola la encapsulación de las clases, y como resultado introduce una confusión jerárquica.
Lea tranquilamente el libro de Steve McConell "Código perfecto".
En pocas palabras, piense en el Maestro como una fábrica de guantes, hay un sello de cinco dedos para la mano derecha y la izquierda, pero luego llega un pequeño pedido de guantes de seis dedos. Después de todo, hay gente así. Pero en lugar de hacer un sello para ellos (que hará un lote y se quedará allí por un tiempo), sugieres modificar el sello de cinco dedos haciendo un dedo deslizante. Parece que es universal y todo es estupendo, pero la fuerza del sello de cinco dedos se debilitará en aras de la universalidad (en aras de una pequeña necesidad de producir ocasionalmente guantes de seis dedos). Y entonces se pedirá un lote de 300 dedos de cuatro patas, y de nuevo se desmenuzará la bien probada y fiable plantilla.
Ya te lo han dicho arriba:
En lugar de hacer cambios en la biblia estándar, sería mejor hacer desarrollos para ampliarla (a través de la herencia). Entonces será realmente interesante.Por ejemplo, un trailing stop se ejecuta de acuerdo con un sistema de señales separado desarrollado por un desarrollador de terceros del módulo, como una onda móvil o parabólica, cuyas señales en algunos puntos contradicen las señales del módulo y el sistema de negociación comienza a funcionar de manera inconsistente. El módulo de gestión del dinero y del riesgo tampoco puede adivinar telepáticamente que la señal de negociación es débil y que ha llegado el momento de reducir el volumen de las posiciones abiertas y actuar de acuerdo con unas reglas independientes del módulo de señales, es decir, uno de ellos pide que se reduzca la velocidad en las curvas y el otro que se acelere. Y todo el sistema de comercio, creado con la ayuda de su supuesto maestro, resulta como en la fábula de Krylov llamada "El cangrejo y el lucio". Ni más ni menos. Y esta misma ideología de fábula de montar asesores temerarios, su empresa intenta imponernos para el autotrading. ¿Lo necesitamos?
El resultado son sistemas de negociación con tales gráficos de equidad y equilibrio que sólo pueden asustar a los operadores e inversores por igual, véase https://www.mql5.com/ru/code/833.
Esto no se debe a que el creador del módulo, en este caso concreto Nikolay Kositsin, haya hecho algo mal, sino a que el resto de módulos del sistema de comercio no pueden coordinarse entre sí y funcionan de forma incoherente.
Pero es inútil explicarlo. Los desarrolladores de la plataforma, en lugar de escribir unas míseras seis líneas para arreglar los problemas, escribirán kilómetros de notas a pie de página en los foros, acusando a los desarrolladores de sistemas de comercio de difundir la demagogia, las violaciones de encapsulación y otros pecados mortales, pero no moverán un dedo para corregir sus propias deficiencias y malentendidos.
Así que no tiene sentido seguir discutiendo. Quédate con tu opinión y haz lo que quieras. Estoy harto y no sirve para nada, porque a los desarrolladores de la plataforma les importa un bledo, porque no hacen sus propias cosas y si estas mismas herramientas pueden ser utilizadas por los usuarios de la plataforma para el autotrading, a los desarrolladores les da igual. El que está lleno de gente con hambre no sabe de qué tiene hambre.
...
Reshetov, ni siquiera puedo leer tus garabatos emocionales. Si quieres discutir, argumenta tu caso.
El objetivo de un asistente es crear una plantilla que satisfaga las necesidades de la mayoría de los operadores. Tengo una plantilla de EA en cherver (la escribí yo mismo), establece la funcionalidad básica. Y en la práctica siempre hay que corregirlo. Pero las ediciones son mínimas. Si hubiera creado una plantilla para no editarla en absoluto, habría sido un código enorme para todas las ocasiones, en el que uno podría perderse.
El asistente crea una plantilla que ya funciona, y una persona que no sepa programar puede utilizarla tal cual. Si entiendes de codificación, es fácil cambiarlo a lo que quieres. Basta con entender una vez cómo se crean las cosas y dónde se separan en la biblioteca estándar. Además, también puedes utilizar la biblioteca estándar como plantilla y simplemente copiar las secciones que te gusten en tu propio código.