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

 
crossy:


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

???

Você pode ir para o próximo valor no laço usando continuar. . ou escapar do laço com quebra. . . clique nos links para documentação sobre cada um deles.
 
crossy:

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


???

Esse código está errado . . . .

cnt precisa começar em OrdersTotal() - 1 e diminuir para cnt >= 0 . . . . a primeira entrada é 0 e não 1

Foi por isso que pedi para ver o código . . e você já mostrou o suficiente para identificar o problema . . provavelmente . ;-)

 
RaptorUK:

Esse código está errado . . . .

cnt precisa começar em OrdersTotal() - 1 e diminuir para cnt >= 0 . . . . a primeira entrada é 0 e não 1

Foi por isso que pedi para ver o código . . e você já mostrou o suficiente para identificar o problema . . provavelmente . ;-)


Muito Correto. Obrigado, Wizeman!
 
crossy:

Muito Correto. Obrigado, Wizeman!


E outra idéia:

Se eu tiver muitas condições, você pode escrever:

If( X>b && B>S && NB<F......)

{

BBB= 5;

}f.e.

Aqui, a EA tem que computar todas as condições dentro do parêntese.

Mas, se você estiver procurando eficiência (4.000 linhas de código...) eu prefiro ter:

Se ( X>b )

{

enquanto (B>S)

{

Enquanto (NB<F...)

{

BBB=5;

}

pausa;

}

pausa;

}

As 2 variações são as mesmas?

Y.

 

crossy, quando você escrever o código, por favor use o botão SRC, ele será muito mais legível

Assim, será mostrado assim

   //--- first code
   If(X>b && B>S && NB<F......)
     {
      BBB=5;
     }
   
   // --- second code
   If(X>b)
     {
      while(B>S)
        {
         while(NB<F..)
           {
            BBB=5;
           }
         break;
         }
      break;
     }

Explicação sobre "se, enquanto e para" loop em mql4 https://book.mql4.com/operators/assign

No segundo código, tudo bem, já que você usa break, porém, é um longo caminho só para conseguir BBB = 5, prefiro o primeiro código, ele usa menos recursos

 
crossy:


E outra idéia:

Se eu tiver muitas condições, você pode escrever:

If( X>b && B>S && NB<F......)

{

BBB= 5;

}f.e.

Aqui, a EA tem que computar todas as condições dentro do parêntese.

Mas, se você estiver procurando eficiência (4.000 linhas de código...) eu prefiro ter:

Usando assim, você pode se encontrar em um loop infinito ...
 
Obrigado a ambos!
 
onewithzachy:

Use o botão SRC para exibir seu código para uma melhor leitura, por favor :)

You OrderSelect() está codificado de forma errada. Compare seu código com este. Depois, escreva de volta se você ainda tiver o problema ou não :)


Especial agradecimento a onewithzachy,

Eu não sabia que o ORDERSELECT não pegou, então você pode ter erros desconhecidos.

Meu código, que era 4016 linhas de código, tornou-se quase 4500 linhas - mas sem erros.

Obrigado a todos vocês, freinds.

Y.

 

Olá freinds,

Após uma longa jornada aqui, tive um bom avanço com minha EA, mas tenho mais um problema, como se segue:

Eu tenho a seguinte linha de código:

CLOSE_Single_P(Par1, "LONG",OrderT,OrderL);

como:

Pair1 é o Símbolo,

"LONG" é um sinal de um longo comércio,

OrderT é o número do bilhete de pedido,

OrderL é o tamanho do lote de pedidos.

A função é a seguinte:

void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
double PRC;
bool Check = false;
for ( int cntt=0; cntt<20000; cntt++ )
{
if ( Check )
{
Check_Ini();
return;
}
for ( int vvv = OrderTotal()-1; vvvv >= 0; vvvv-- )
{
if ( OrderSelect(vvvv, SELECT_BY_POS, MODE_TRADES) )
{
Check = false;
if ( TREN == "LONG" )
PRC = MarketInfo(SYMB,MODE_BID);
else
if ( TREN == "SHORT" )
PRC = MarketInfo(SYMB,MODE_ASK);

Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
if ( Check )
break;
}
}
}
retorno;
}

Meu PROBLEMA é: A EA às vezes fecha o comércio muito bem, mas às vezes a EA fecha a tarde MAS continua a procurar o bilhete para fechá-lo, embora já estivesse fechado.

(Eu recebo o erro: "Número desconhecido do bilhete..." .

Acho que tenho um erro lógico.

Obrigado pela sua gentil ajuda.

Y

 

Por favor . . . . . .