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

 
crossy:

OK. Aqui está a versão modificada, a qual eu tive o mesmo erro.

Y.

Você não precisa da Função. . . . . se livrar dela.

 

Vamos fazer isso novamente parte 2 :(

 ...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         // Do the selection and OrderClose() INSIDE HERE ..., please
         
         
         /*
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
         */
      }   
      //if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... ) // this selection goes up there
    
         //CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
/*
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;
      }
      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); // close it up there, and you have to rewrite the parameters
   }
   */
 

Faça isso . . . ( repetido a partir daqui: https://www.mql5.com/en/forum/139543 )

if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
   {
   Print("Trying to close Order: ", OrderTicket());                             // <---- tells you that the   if  returned true
   if ( ! OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Yellow)
      Print("OrderClose failed, error # ", GetLastError());                          // <------- reports the error if the OrderClose failed . . 
   } 

... e você não precisa da Função de forma alguma.

 
onewithzachy:

Vamos fazer isso novamente parte 2 :(


Eu quero seu exuss, por favor, já que tenho férias, por isso voltarei no domingo à noite.

Farei o que você sugeriu, e espero ter sucesso.

Obrigado a ambos.

Y.

 
crossy:


Eu quero seu exuss, por favor, já que tenho férias, por isso voltarei no domingo à noite.


OK, aproveite suas férias :-)
 
crossy:


Quero seu exuss, por favor, já que tenho um feriado, por isso estarei de volta no domingo à noite.

Farei o que você sugeriu, e espero ter sucesso.

Obrigado a ambos.

Y.

Divirtam-se :D

Eu tenho F1 Mônaco para assistir este domingo :D

 
onewithzachy:

Divirta-se :D

Eu tenho F1 Mônaco para assistir este domingo :D

E amanhã, FP3 e Qualificação ;-)
 
crossy:


Obrigado onewewzachy,

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.

Acho isto muito mais simples, e funciona para mim:

//---------------------------------------------+

verificação nula CheckForClose()
{
int i, res, order_id;

//-------+
for(i=0;i<OrdensTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==falso) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continua;
order_id= OrderTicket();


//--trailing and close
se (OrderType() == OP_BUY)
{
se (Is_Close_Buy==verdadeiro) //-- o sinal para fechar
{
RefreshRates();// Refresh rates
res= 0;
res= OrderClose(order_id,Lots,Bid,3,Gold);
while(IsTradeAllowed() == falso) Sleep(100); //---espere um pouco para obter resposta do servidor
se (res>0){
PlaySound("cash_register.wav");} //... som feliz, ganhando dinheiro esperançosamente !!!!
se (res<0)
{
PlaySound("creak.wav");
Print("OrderSend failed with error #",GetLastError());
return(0);
}
retornar;
}
}//fechar fechar Verificar pedido de compra
//---
se (OrderType() == OP_SELL)
{
se (Is_Close_Sell==verdadeiro) //- o sinal para fechar
{
RefreshRates();// Refresh rates
res= 0;
res= OrderClose(order_id,Lots,Ask,3,Gold);
while(IsTradeAllowed() == falso) Sleep(100); //---espere um pouco para obter resposta do servidor
se (res>0){
PlaySound("cash_register.wav");}
if(res<0)
{
PlaySound("creak.wav");
Print("OrderSend failed with error #",GetLastError());
return(0);
}
retornar;
}
}//fechar fechar Verificar ordem de venda
}//--------+
retornar;
}

//----------------------------------------------+

 
RaptorUK:
E amanhã, FP3 e Qualificação ;-)

@ RaptorUK, estou considerando usar capacete de proteção para que pelo menos eu possa pensar bem à frente do que estou pensando agora. Não é isso, esses motoristas pensam bem à frente? :D


@ skaboy, estou pedindo educadamente aqui, se você não se importa, por favor use o botão SRC para postar seu código. Temos perguntado isso muitas vezes, só neste tópico.


@ crossy, Já passou quase uma semana desde seu primeiro posto. Certamente eu entendo que você pode não ter a cabeça clara agora lidando com 4000 linhas, neste momento eu mesmo tenho a minha aqui também. Se você ainda não entendeu, - ehm - você pode nos pedir para escrever o código Close para você. No entanto, você ainda tem que escrever o código mesmo que apenas um pouco - e nos mostrar. :D, o código do RaptorUK logo acima é mais direto do que o meu, pense nisso e então você pode seguir em frente com seu EA.

Com a maneira como você escreve o código aqui - demasiados códigos repetidos desnecessários - você deve ter um pouco de preocupação com suas 4000 linhas de código para que ele possa retardar sua EA e fazer com que sua EA perca um tique. Não faz mal perder alguns pontos, entretanto, o que acontece se você falhar a 10 pips de distância ? e provavelmente suas 4000 linhas ainda podem ser reduzidas a apenas 400 linhas. Quem sabe ?, seu EA, tornar-se mais leve e mais rápido. :D

 
skaboy:

Acho isto muito mais simples, e funciona para mim:


Não funciona se você tem várias ordens para ser fechado . . . ler isto e aprender: Loops e Encerramento ou Eliminação de Encomendas
Razão: