Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 509

 
Bem, sim, isso é óbvio, mas não é bom. Não é bom colocar parâmetros de entrada em uma classe.
 
Вадим Мотеюнас:

Olá, você poderia me dizer por que neste ciclo minhas ordens de limite só são deletadas se, após fazer uma ordem de limite, outra ordem de limite não tiver sido feita na próxima barra, ou seja, uma ordem de limite só é deletada se for feita e então seguida por duas barras onde nenhuma ordem de limite foi feita

Qual ordem você escolheu aqui?

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

E que ordem você escolheu aqui?

Recebi o erro, ao invés de OrderTicket() também substituí um ticket variável ao qual OrderSend foi atribuído, ele ainda não apaga nada, mas como faço para configurar o loop para passar pelas ordens limite e apagar as que ficaram na 2ª barra?

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

Vejo o erro, também substituí uma variável para OrderTicket() por OrderSend, ele ainda não apaga nada, mas como configurar o laço para passar pelas ordens de limite e apagar as que ficaram na 2ª barra?

Isto é ótimo, pelo menos foi assim que aprendi o mql

Você encontra um EA em kodobase que atende aproximadamente suas exigências, olhe para o código e se o código for grande e não estiver claro, procure o próximo.

Depois de encontrar um código mais compreensível, você começa a estudá-lo e editá-lo, de modo que você rapidamente compreende como ele funciona

MQL5 Code Base: Советники
MQL5 Code Base: Советники
  • www.mql5.com
В разделе торговых советников вы найдете множество приложений, автоматизирующих вашу аналитику и торговлю. Здесь вы найдете самые разные приложения, обладающие различными торговыми алгоритмами и предоставляющими различную степень автоматизации. Имеются как простенькие эксперты, так и сложные торговые роботы, способные полностью автоматизировать...
 
Juer:
Bem, sim, é óbvio, mas não é conveniente. Não é agradável colar parâmetros de entrada em uma classe.

No entanto, estes valores devem, de alguma forma, chegar lá )). Afinal, na maioria das vezes, o trabalho da classe é baseado nos valores que o usuário especifica. Mas por alguma razão você não quer fazer isso. Eles não aparecerão lá por magia.

Normalmente, os parâmetros de entrada na fase de inicialização do programa são transferidos para uma estrutura especial. Na maioria das vezes esses valores são pré-processados (pelo menos, verificados quanto à exatidão). Quando uma nova instância da classe é criada, uma referência a esta estrutura é passada para ela. Qual é o inconveniente aqui?

 
Ihor Herasko:

No entanto, estes valores devem, de alguma forma, chegar lá )). Afinal, na maioria das vezes, o trabalho da classe é baseado nos valores que o usuário especifica. Mas por alguma razão você não quer fazer isso. Eles não aparecerão lá por magia.

Normalmente, os parâmetros de entrada na fase de inicialização do programa são transferidos para uma estrutura especial. Na maioria das vezes esses valores são pré-processados (pelo menos, verificados quanto à exatidão). Quando uma nova instância da classe é criada, uma referência a esta estrutura é passada para ela. Qual é o inconveniente aqui?

O inconveniente só precisa passar estes valores cada vez que se cria um objeto. Eles são sempre idênticos. Tudo bem, vou criá-lo através do construtor, mas é uma solução privada. O construtor padrão pode conter estes parâmetros para uma EA e eles são bem diferentes para outra EA.

Talvez a solução seja fazer uma classe totalmente diferente cujos métodos retornem os valores dos parâmetros. Então eu só precisaria inicializar esta nova classe uma vez. E na classe original, ao criar um objeto (mesmo no mesmo construtor), solicitar valores de parâmetros da nova classe.

 
Juer:

O único inconveniente é a necessidade de passar esses valores cada vez que um objeto é criado. Eles são sempre os mesmos. Tudo bem, eu o farei através do construtor, mas é uma solução privada. O construtor padrão de uma EA pode ter esses parâmetros, enquanto o construtor padrão de outra EA é completamente diferente.

Talvez a solução seja fazer uma classe totalmente diferente cujos métodos retornem os valores dos parâmetros. Então eu só precisaria inicializar esta nova classe uma vez. E na classe original, ao criar um objeto (mesmo no mesmo construtor), solicitar valores de parâmetros da nova classe.

Parece que você resolve heroicamente o problema inventado.
 
Artyom Trishkin:
Você parece estar resolvendo heroicamente um problema inventado.
Não li atentamente sobre o problema, mas algo me chamou a atenção que era o mesmo ancinho que pisei e você me ajudou a tirá-lo do caminho. Não é?
 
Alexey Viktorov:
Não li atentamente sobre o problema, mas algo me chamou a atenção que era o mesmo ancinho em que eu estava pisando e você me ajudou a tirá-lo do caminho. Não é?
Não exatamente. Você não tinha nenhum desejo de inicializar o vazio.
 
Artyom Trishkin:
Parece que você está resolvendo heroicamente um problema inventado.

Sim, foi o que eu sugeri acima, na verdade da mesma forma que você fez com a estrutura, apenas mais complicada.

-> E na classe fonte, ao criar um objeto (mesmo no mesmo construtor), solicitar valores de parâmetros da nova classe.

Mas em geral eu teria que passar uma referência a esta classe auxiliar para a classe fonte. Em resumo, sim, o mesmo que com a estrutura.

Criar uma classe de contêineres, através da qual todos esses objetos possam ser criados ainda mais. Então estes parâmetros podem ser inicializados uma vez nesta classe de contêineres. Isso é o que eu acho que vou fazer.