Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 509

 
Bueno, sí, eso es obvio, pero no es bueno. No es bueno poner parámetros de entrada en una clase.
 
Вадим Мотеюнас:

Hola, podríais decirme por qué en este ciclo mis órdenes limitadas sólo se borran si después de colocar una orden limitada no se ha colocado otra orden limitada en la siguiente barra, es decir, una orden limitada sólo se borra si se coloca y luego le siguen dos barras en las que no se ha colocado ninguna orden limitada

¿Qué orden has elegido aquí?

for(i=0;i<=OrderTicket();i++)
 
Nikolay Gaylis:

¿Y qué orden has elegido aquí?

Me sale el error, en lugar de OrderTicket() también he sustituido una variable ticket a la que se asigna OrderSend, sigue sin borrar nada, pero ¿cómo configuro el bucle para que pase por las órdenes limitadas y borre las que se quedaron en la 2ª barra?

 
Вадим Мотеюнас:

Veo el error, también he sustituido una variable de OrderTicket() por ticket OrderSend, sigue sin borrar nada, pero ¿cómo configuro el bucle para que pase por las órdenes limitadas y borre las que se quedaron en la 2ª barra?

Esto es óptimo, al menos así es como aprendí mql

Encuentras un EA en kodobase que aproximadamente cumple con tus requisitos, miras el código y si el código es grande y no es claro, busca el siguiente.

Después de haber encontrado un código más comprensible, empiezas a estudiarlo y a editarlo, de manera que rápidamente consigues entender cómo funciona

MQL5 Code Base: Советники
MQL5 Code Base: Советники
  • www.mql5.com
В разделе торговых советников вы найдете множество приложений, автоматизирующих вашу аналитику и торговлю. Здесь вы найдете самые разные приложения, обладающие различными торговыми алгоритмами и предоставляющими различную степень автоматизации. Имеются как простенькие эксперты, так и сложные торговые роботы, способные полностью автоматизировать...
 
Juer:
Bueno, sí, es obvio, pero no es conveniente. No es agradable meter parámetros de entrada en una clase.

Sin embargo, estos valores deben llegar de alguna manera )). Después de todo, la mayoría de las veces el trabajo de la clase se basa en los valores que el usuario especifica. Pero por alguna razón no quieres hacer esto. No aparecerán allí por arte de magia.

Normalmente, los parámetros de entrada en la etapa de inicialización del programa se transfieren a una estructura especial. En la mayoría de los casos, estos valores están preprocesados (al menos, se comprueba que son correctos). Cuando se crea una nueva instancia de la clase, se le pasa una referencia a esta estructura. ¿Cuál es el inconveniente aquí?

 
Ihor Herasko:

Sin embargo, estos valores deben llegar de alguna manera )). Después de todo, la mayoría de las veces el trabajo de la clase se basa en los valores que el usuario especifica. Pero por alguna razón no quieres hacer esto. No aparecerán allí por arte de magia.

Normalmente, los parámetros de entrada en la etapa de inicialización del programa se transfieren a una estructura especial. En la mayoría de los casos, estos valores están preprocesados (al menos, se comprueba que son correctos). Cuando se crea una nueva instancia de la clase, se le pasa una referencia a esta estructura. ¿Cuál es el inconveniente aquí?

El inconveniente está únicamente en la necesidad de pasar estos valores cada vez que se crea un objeto. Son idénticos siempre. Muy bien, lo crearé a través del constructor pero es una solución privada. El constructor por defecto puede contener estos parámetros para un EA y son muy diferentes para otro.

Tal vez la solución sea crear una clase completamente diferente cuyos métodos devuelvan los valores de los parámetros. Entonces sólo tendría que inicializar esta nueva clase una vez. Y en la clase original, al crear un objeto (incluso en el mismo constructor), solicitar los valores de los parámetros de la nueva clase.

 
Juer:

El único inconveniente es la necesidad de pasar estos valores cada vez que se crea un objeto. Son los mismos siempre. Muy bien, lo haré a través del constructor, pero es una solución privada. El constructor por defecto de un EA puede tener estos parámetros, mientras que el constructor por defecto de otro EA es completamente diferente.

Tal vez la solución sea crear una clase completamente diferente cuyos métodos devuelvan los valores de los parámetros. Entonces sólo tendría que inicializar esta nueva clase una vez. Y en la clase original, al crear un objeto (incluso en el mismo constructor), solicitar los valores de los parámetros de la nueva clase.

Parece que resuelves heroicamente el problema inventado.
 
Artyom Trishkin:
Parece que está resolviendo heroicamente un problema inventado.
No leí detenidamente el problema, pero algo me hizo pensar que era el mismo rastrillo que yo pisé y me ayudaste a quitarlo de en medio. ¿No es así?
 
Alexey Viktorov:
No leí detenidamente el problema, pero algo me hizo pensar que era el mismo rastrillo que yo estaba pisando y me ayudaste a quitarlo de en medio. ¿No es así?
No exactamente. No tenías ningún deseo de inicializar el vacío.
 
Artyom Trishkin:
Parece que estás resolviendo heroicamente un problema inventado.

Sí, eso es lo que sugerí arriba, de hecho de la misma manera que hiciste con la estructura, sólo que más complicada.

-> Y en la clase origen, al crear un objeto (incluso en el mismo constructor), solicitar los valores de los parámetros de la nueva clase.

Pero en general tendría que pasar una referencia a esta clase auxiliar a la clase fuente. En resumen, sí, lo mismo que con la estructura.

Crear una clase contenedora, a través de la cual crear todos estos objetos más. Entonces, estos parámetros pueden ser inicializados una vez en esta clase contenedora. Eso es lo que creo que haré.