Ciclo Operador 'para' perguntas - página 11

 
WhooDoo22:


Acho que você não está me entendendo... se eu acrescentar alguns aparelhos, talvez seja mais claro... . você fez isso . .

Creio que pretendia fazer isto . . .

Isto é porque eu desejava a condição ...

a ser aplicada à seção de código dentro dos aparelhos ("{ }").

Então, por que você não fez essa mudança em sua última versão de seu código . ... se você pretendia fazer isso, por que não o fez?

 
WhooDoo22:

Simon,


O 0 em sua imagem é provavelmente de . . .


Nah-uh-uh! ;)

Vamos fazer uma viagem pela pista de documentação... Hahaha.

data/hora OrdemFecharTempo( )
Devolve o tempo de fechamento para o pedido atualmente selecionado. Se a hora de fechamento da ordem não for 0, então a ordem selecionada e foi fechada e recuperada do histórico da conta. O tempo de fechamento de ordens abertas e pendentes é igual a 0.

Nota: A ordem deve ser previamente selecionada pela função OrderSelect().


Primeiro, vamos ambos dar uma olhada no bloco de código da função OrderClose() que codifiquei recentemente...

A seguir, vamos ambos dar uma olhada no resultado mostrado em um instantâneo do painel de 'Especialistas'...

Aaah, o que temos aqui? :)

Não tenho certeza de que ponto você está tentando fazer aqui, você pode explicar por favor ? o Print(OrderCloseTime()) está obviamente errado, mas você ainda o tem em seu código, por quê ? o que aconteceu quando você adicionou as 2 linhas de código que eu sugeri ?
 

Simon,

Então por que você ainda não fez essa mudança em sua última versão de seu código . . . se você pretendia fazer isso, por que não o fez?

Dê-me um segundo para dar uma olhada, por favor.

Eu pretendia codificar isto anteriormente, mas não pretendo codificar isto no momento. Não há razão para codificar isto...

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
      {
      if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
      if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}           
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
         {
         OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
         Print(OrderCloseTime());
         GetLastError();
         }
      }

Quando eu posso codificar isto ao invés disso...

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
      Print(OrderCloseTime());
     }

Todas as condições "se" se aplicam ao que está dentro do aparelho ("{}"). Adicionar aparelhos a este bloco de código (da maneira que eu pretendia codificá-lo) é ineficiente e não serve a nenhum propósito.


Obrigado.

 

Simon,


Não tenho certeza de que ponto você está tentando fazer aqui, você pode explicar por favor?

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
      Print(OrderCloseTime());
     }

// replace above code block with...

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
//      Print(OrderCloseTime());
     }

Dê um giro (sem a função Print()) no terminal em uma conta demo muito rápido, depois clique no painel 'Experts' e visualize a ausência do zero (0) do resto dos resultados no painel 'Experts'.

Note que não há 0. Hmm, certo? ;)

Agora dê um giro ao EA (com a função Print() incluída).

Observe um 0 no painel de 'Especialistas'.


Você adivinhou por que havia um zero nos resultados do painel 'Especialistas' anteriormente e você estava certo (riscar "Nah-uh-uh! ;)" no início da mensagem).

O 0 em sua imagem é provavelmente de . .

Print(OrderCloseTime());

Lembra-se? Claro que sim. :)


o Print(OrderCloseTime()) está obviamente errado, mas você ainda o tem em seu código, por quê ?

Por favor, explique por que você acredita que está errado.

Eu o tenho no código para lhe mostrar um ponto. A questão é: Zero está aparecendo no painel "Especialistas" por causa deste pedaço de código estar no código.


o que aconteceu quando você acrescentou as 2 linhas de código que eu sugeri ?

Atualmente, estou trabalhando convenientemente nisto :)


Obrigado

 
WhooDoo22:

o Print(OrderCloseTime()) está obviamente errado, mas você ainda o tem em seu código, por quê ?

Por favor, explique por que você acredita que está errado.

Eu o tenho no código para lhe mostrar um ponto. A questão é: Zero está aparecendo no painel "Especialistas" por causa deste pedaço de código estar no código.


A última imagem que você postou mostra que a ordem USDJPY foi fechada à 01:45:35 . . a próxima linha de código que segue a linha que fechou a ordem é Print(OrderCloseTime()); e resulta em um valor de 0 . . 0 como uma data é meia-noite de 1 de janeiro de 1970, isto não é quando você fechou o pedido, como você apontou corretamente um valor de retorno 0 de OrderCloseTime() também pode ser quando o pedido está aberto ou é um pedido pendente, bem seu pedido está fechado, você sabe que está fechado, sua última imagem provou que . . então como pode um valor de 0 ser correto ? a resposta é que não pode ser correto, o que significa que está errado.

 

Simon,

Atualmente estou trabalhando nisto...

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}           
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      int ClosedTicketNum = OrderTicket();   //  <---- add this line
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
      
      OrderSelect(ClosedTicketNum, SELECT_BY_TICKET);   //  <---- add this line

      Print(OrderCloseTime());
      GetLastError();
     }

Obrigado.

 
WhooDoo22:

Simon,

Então por que você ainda não fez essa mudança em sua última versão de seu código . . . se você pretendia fazer isso, por que não o fez?

Dê-me um segundo para dar uma olhada, por favor.

Eu pretendia codificar isto anteriormente, mas não pretendo codificar isto no momento. Não há razão para codificar isto...

Quando eu posso codificar isto ao invés disso...

Todas as condições "se" se aplicam ao que está dentro do aparelho ("{}"). Adicionar aparelhos a este bloco de código (da maneira que eu pretendia codificá-lo) é ineficiente e não serve a nenhum propósito.

OK, olhando para este código . . . .

if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))                                  // 1.
if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}                   // 2.
if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}                  // 3.
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))   // 4.
     {  
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);                   // 5.
      Print(OrderCloseTime());                                                    // 6.
     }

Eu numerei as linhas para facilitar a discussão.

Olhando para a linha 1. qual das outras linhas numeradas de código será executada se OrderStopLoss() e OrderTakeProfit() forem ambas0?

 

Simon,

Fixo, portanto, funciona como pretendido.

if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}                   // 2.
if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}                  // 3.
if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))                                  // 1.
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))   // 4.
     {  
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);                   // 5.
      Print(OrderCloseTime());                                                    // 6.
     }

Linhas 2 e 3.

Obrigado.

 

Simon,

   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      int ClosedTicketNum=OrderTicket();
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      OrderSelect(ClosedTicketNum,SELECT_BY_TICKET);
      
      Print(OrderCloseTime());
     }

Resultado:

Resultado do painel de 'Especialistas'.

Por que o tempo de fechamento do pedido representa em tal forma (1357306061) ?

A razão pela qual a função Print() funciona é porque a função OrderSelect() (dentro das chaves) deve selecionar a ordem fechada e NÃO uma ordem aberta? Isto deve ser feito dentro das chaves, certo? ;) Enganoso, complicado.

Obrigado.

 

Simon,

Aí vem ele... BAM!

   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
      
      Print(OrderCloseTime());
     }

Melhor ainda! Hahaha ;)

Obrigado.

Arquivos anexados: