Ajuda: Por que a EA não fecha um negócio - página 2

 
crossy:


Obrigado onewewithzachy,

Primeiro, acho que você tem um pequeno erro:

for(int cnt = OrdersTotal() -1 ; cnt >= 0; cnt--)

Você tem que adicionar a correção verde e ousada.

Mas, eu não entendo como a seguinte linha pode nos ajudar?

#incluindo "...\iBibliotecas\iB.mq4".

Obrigado, Y.

Seu direito com a contagem, entretanto, se a escrevermos como eu escrevi, a OrderSelect() retornará falsa, e a for loop continuará para a próxima contagem.

Isso inclui a impressão do erro neste código ...

Print("failed to close buy position ", ErrorDescription(GetLastError())  ); 

... para que saibamos porque sua EA não fecha nenhuma ordem:(.

Você também pode escrever assim ...

#include <stdlib.mqh>

Há um exemplo na pasta de scripts do MetaEditor intitulado trade.mq4.


Suponho que você saiba onde colocar o include, certo ?. Coloque-o em cima de sua EA (assim como a variável global ou como o trade.mq4).

O stdlib.mq4 está localizado em MetaEditor > Janela Navigator (Ctrl + D) > guia arquivos > pasta bibliotecas > stdlib.mq4.

Uau, espero que você não se importe que eu tenha ido lá, porque eu não sei se você já sabe ou não sabe :)

 
onewithzachy:

Seu direito com a contagem, entretanto, se a escrevermos como eu escrevi, a OrderSelect() retornará falsa, e a for loop continuará para a próxima contagem.

Isso inclui a impressão do erro neste código ...

... para que saibamos porque sua EA não fecha nenhuma ordem:(.

Você também pode escrever assim ...

Há um exemplo na pasta de scripts do MetaEditor intitulado trade.mq4.


Suponho que você saiba onde colocar o include, certo ?. Coloque-o em cima de sua EA (assim como a variável global ou como o trade.mq4).

O stdlib.mq4 está localizado em MetaEditor > Janela Navigator (Ctrl + D) > guia arquivos > pasta bibliotecas > stdlib.mq4.

Uau, espero que você não se importe que eu tenha ido lá, porque eu não sei se você já sabe ou não sabe :)


Obrigado onewewzachy,

Eu fiz como você sugeriu, e espero pelo estudo correto. Vou atualizar.

 
crossy:


Obrigado com zachy,

Eu fiz como você sugeriu, e espero pela estualização correta. Vou atualizar.

Mmm...., eu não sou grande fã de testes de costas, no entanto, o RaptorUK sugere em outro tópico(clique aqui), que podemos depurar nosso código usando os testes de costas.
 
onewithzachy:
Mmm...., eu não sou grande fã de testes de costas, no entanto, o RaptorUK sugere em outro tópico(clique aqui), que podemos depurar nosso código usando os testes de costas.


O EA é multipares, portanto, o backtesting é impossível.

De qualquer forma, eu posso obter a situação relevante muito rapidamente. E eu já tenho resultados. Eu vou atualizar...

Obrigado

 
crossy:


A EA é multipares, portanto, é impossível retroceder.

Não é possível fazer um backtesting. . . depuração . . mesmo com uma depuração EA baseada em carteira, ainda pode ser possível.
 

Obrigado Raptor,

Eu noto que o ORDERSELECT é uma variável bool, e às vezes o MT4 não tem sucesso

para fazer isso. Por causa disso, o Zachy recomandou a fazê-lo:

for(int cnt=0; cnt<OrdersTotal(); cnt++)
{
if(OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES) == verdadeiro &&
OrderSymbol()==Pair &&
OrderType()==OP_BUY)
{
// código para fechar
}
}

Minha pergunta é: se o ORDERSELECT é falso, como posso fazer o "cnt" LOOP novamente, sem faltar...?

Espero que você me entenda.

Y.

 
crossy:

Obrigado Raptor,

Eu noto que o ORDERSELECT é uma variável bool, e às vezes o MT4 não tem sucesso

para fazer isso. Por causa disso, o Zachy recomandou a fazê-lo:

for(int cnt=0; cnt<OrdersTotal(); cnt++ )

Minha pergunta é: se o ORDERSELECT é falso, como posso fazer o "cnt" LOOP novamente, sem faltar...?

Espero que você me entenda.

Y.

Se você estiver fechando ordens você DEVE contar para baixo ... NÃO para cima.
 
RaptorUK:
Se você estiver fechando ordens você DEVE contar para baixo ... NÃO para cima.


Desculpe Raptor, acabei de fazer uma Copy_paste a partir de um post anterior, mas a mudei dentro do meu código.

De qualquer forma, você tem alguma idéia sobre minha pergunta prévia?

 
crossy:


Desculpe Raptor, acabei de fazer uma Copy_paste de um post anterior, mas a mudei dentro do meu código.

De qualquer forma, você tem alguma idéia sobre minha pergunta prévia?

Mostre seu código e eu posso dar uma opinião.
 
RaptorUK:
Mostre seu código e eu posso dar uma opinião.


Rap, É 4016 linhas de código....

De qualquer forma, minha pergunta é uma pergunta técnica. Eu aprendi uma vez FORTRAN, nad lá você tinha números para as linhas de código desejadas, então você poderia fazer

"Vá para 120", e o código foi para essa linha novamente.

Aqui se Orderselect é FALSO como a EA pode voltar para a linha de código: for(int cnt=OrdersTotal(); cnt > 0; cnt-- )

???

Razão: