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

 

Olá!

Você pode me mostrar como uma EA baseada na Média Exponencial Tripla pode ser proibidade abrir uma posição se a última negociação for realizada no SL?

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 

MQL5
Não tenho problemas com ele no modo normal, mas assim que começo a otimizar as impressões de erro em cada execução e não há saída.

Mas o problema é que ele nem sequer executa o código. Coloquei impressões ao redor do programa, sem saída, apenas um erro em cada execução que sai.

Por que a impressão não está funcionando?

 
Roman Sharanov:

MQL5
O Expert Advisor trabalha sem problemas no modo normal, mas assim que eu começo a otimizá-lo, ele reclama em cada passagem que entrou nos limites da matriz.

Mas o problema é que ele nem sequer executa o código. Coloquei impressões ao redor do programa, sem saída, apenas um erro em cada execução que sai.

Por que a impressão não funciona?

Você tem que verificar o tamanho da matriz. Você verá uma linha onde há uma saída fora da matriz. Aqui, você deve inserir Imprimir antes desta linha, na qual você escreve a saída do tamanho da matriz e índice, pela qual você está tentando acessar os dados da matriz - o tamanho da matriz e índice será impresso no log, e então o programa sairá com um erro.

MAS! Faça tudo isso no testador em modo visual, não no otimizador - no otimizador (e no testador em modo não visual) todas as impressoras são desativadas para aceleração.

 
Artyom Trishkin:

Saia fora da matriz antes de chegar a Print().

Verifique o tamanho da matriz. Você verá uma linha onde a saída está fora da matriz. Antes desta linha, você deve inserir Print, na qual você escreve a saída do tamanho da matriz e índice, pela qual você está tentando acessar os dados da matriz - o tamanho da matriz e índice serão impressos no log, e então o programa irá travar.

MAS! Faça tudo no testador no modo visual, não no otimizador - no otimizador (e no testador no modo não visual) as impressoras são todas desligadas para acelerar.

Esse é o problema, tudo funciona com qualquer parâmetro no visual, mas com qualquer otimização sai fora dos limites

 
Roman Sharanov:

Esse é o problema que com qualquer parâmetro no visual tudo funciona, mas com qualquer otimização está fora dos limites

O que há na matriz? Posso apenas adivinhar que ou ainda não há dados na matriz, ou ela é menor do que você pensa. Há alguma verificação no programa para o tamanho da matriz?

 
Artyom Trishkin:

O que está na matriz? Só posso adivinhar que ou ainda não há dados na matriz, ou ela é menor do que você pensa. Há alguma verificação no programa para o tamanho da matriz?

No último N, eu tenho 500, os valores macd e os limites do ciclo são estritamente limitados e nunca podem ser menores que 0 e maiores que N, eu já o depurei e contei com papel

 
Roman Sharanov:

O último N, eu tenho 500, valores macd, e os limites do loop são estritamente limitados e nunca podem ser menores que 0 e maiores que N, eu já o depurei e contei com papel

Você tem certeza de que a matriz está cheia de dados quando você os acessa? Há uma verificação da disponibilidade dos dados e que a matriz tem o valor correto?

Só porque é escrito e calculado em um pedaço de papel não significa que corresponda ao que a EA recebeu (não recebeu).

 
Artyom Trishkin:

Você tem certeza de que a matriz está cheia de dados quando você os acessa? Há uma verificação de que os dados estão disponíveis e que a matriz tem o tamanho certo?

Só porque está escrito e calculado em um pedaço de papel, não significa que corresponda ao que o Consultor Especialista recebeu (não recebeu).

Sim, no início, antes de todas as operações, ele é copiado do buffer.

 
Qual é a fórmula universal para calcular o preço de breakeven se houver comissões e swaps na transação?

Há uma fórmula simples que funciona para cotações com 5 dígitos e depósito em usd

Lote x lucro em pips = lucro em $.

Se for comprado, e houver swaps e comissões no negócio, então o preço breakeven será um pouco mais alto do que o preço aberto
(Se não houver swaps e comissões, o breakeven é o preço de abertura)

Mas se o instrumento for exótico ou a cotação for de 4 ou 2 dígitos ou a moeda de depósito for libra esterlina. A fórmula acima não é útil.
Existe uma fórmula universal?
 
Roman Sharanov:

Sim, no início, antes de todas as operações, copiado do buffer

Copiado. E quanto é copiado é verificado?

Se você estiver usando um indicador com suavização, ele requer algumas barras a mais do que você espera. Portanto, só porque você copiou não significa que os dados tenham sido copiados e estejam disponíveis em seu tamanho completo.

É mais fácil para você verificar o tamanho da matriz e, se ela não tiver o tamanho exigido, sair OnTick()

Razão: