Ciclo Operador 'para' perguntas - página 13

 

Simon,

"Seu loop while não encontrou nenhum bilhete ... . ."

Não "possivelmente" encontrou o índice de bilhetes no pool de História, encontrou-o ou as seguintes funções não teriam sido executadas :)


" um índice de pool != um número de ticket não passamos por isso antes ?"

Deixe-me esclarecer agora,

Um número de bilhete de pedido é o número único atribuído a um pedido uma vez que o pedido tenha sido enviado.

Um número de posição de pedido é a posição de um pedido em um índice deagrupamento de pedidos(importante de entender) semelhante a uma matriz.


"por que você espera que a ordem USDJPY fechada acabe na mesma posição em um pool completamente diferente, o History pool"?

Eu não deveria porque é um pool separado.

No código que apresento...

   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());
     }

isto aparentemente está selecionando o pedido do pool histórico, certo? Pelo menos foi o que eu recolhi da Documentação. Também tentei recentemente abrir cerca de cinco pedidos em pares de moedas separados, fechei um, depois liguei o EA e ele ainda desempenhava todas as funções, incluindo Print(OrderCloseTime());.


Obrigado.

 
WhooDoo22:

Simon,

"Seu loop while não encontrou nenhum bilhete ... . ."

Não "possivelmente" encontrou o índice de bilhetes no pool de História, encontrou-o ou as seguintes funções não teriam sido executadas :)

Quais funções você está usando que utilizam um número de ticket ? seu OrderSelects são todas SELECT_BY_POS . . POS significando POSition, então eu repito, seu loop não encontra um ticket que encontre um índice no pool de Order.


O que você está selecionando no pool de históricos é a Ordem na posição de índicei como você SABE que a ordem que acabou de fechar está na posiçãoi? a resposta é que você não SABE . . o valor dei é onde a ordem USDJPY estava no pool de ordens . . os pools estão completamente separados e não estão ligados de nenhuma forma ou forma.
 

Simon,

"seu loop while não encontra um bilhete, ele encontra um índice no pool de pedidos".

Sim, acredito que entendo isto. Isto não deveria ser um problema.


"os pools são completamente separados e não estão ligados de nenhuma forma ou forma".

Isto é entendido ainda que o bloco de código de função OrderClose() parece funcionar como se pretende. Vou ajustar o bloco de código para salvar o valor do número do bilhete de ordem de modo a continuar com o que você deseja endereçar. Concorda?

PRIMEIRO, eu farei esta pergunta: Por que o número de posição do pool histórico de um pedido não seria o mesmo que o número de posição atual do pool? Eu acredito que este número seja o mesmo.


Obrigado.

 
WhooDoo22:

Simon,

"seu loop while não encontra um bilhete, ele encontra um índice no pool de pedidos".

Sim, acredito que entendo isto. Isto não deveria ser um problema.


"os pools são completamente separados e não estão ligados de nenhuma forma ou forma".

Isto é entendido ainda que o bloco de código de função OrderClose() parece funcionar como se pretende.

Não houve nenhuma mudança na chamada OrderClose(), portanto, ainda deve funcionar.


No entanto, isto não funciona como pretendido porque o conceito é fatalmente falho... até que você entenda porque não adianta continuar...

 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());
     }
 
WhooDoo22:


PRIMEIRO, vou fazer esta pergunta: Por que o número da posição histórica de um pedido não seria o mesmo que o número da posição atual do pool? Acredito que o número seja o mesmo.


Vá para sua conta Demo que você tem testado com . . . quantos pedidos abertos você tem ? quantos pedidos você tem em seu histórico na guia Histórico de conta ?
 

Simon,

O "Histórico de contas" contém cinqüenta e seis.

O 'Comércio' (ordens abertas) contém três.


Estou esperando que você escreva: "Acho que funciona WhooDoo. :)"

Hooold on, eu verifiquei o número do ticket de função Print() devolvido e ele devolveu um número de ticket diferente do pedido de USDJPY.

Não funciona. Confirmado. Estou feliz por ter tentado, mas esta lição valeu a pena ser discutida.

Obrigado.

 
WhooDoo22:

Simon,

O "Histórico de contas" contém cinqüenta e seis.

O 'Comércio' (ordens abertas) contém três.

Se você criar uma nova ordem USDJPY e executar seu código e ele encontrar esta nova ordem eu terei um valor de 3 , que posição no Pool Histórico sua ordem USDJPY vai tomar quando você fechá-la ? já existem 56, então a posição 3 já está tomada, assim como a posição 4, 5, 6, 7 . . 55
 

Simon,

57.

   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 usdjpy_ticket_number=OrderTicket();
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(usdjpy_ticket_number,SELECT_BY_TICKET,MODE_TRADES)==true)
      
      Print("Ticket number for USDJPY = ",usdjpy_ticket_number);
      Print("Order close time = ",OrderCloseTime());
     }

Obrigado.

Arquivos anexados:
 
WhooDoo22:

Simon,

57.

Obrigado.

i é 3 então como a seleção da ordem na posição 3 no Pool Histórico vai conseguir colocar a ordem na posição 57 ? ?
 

Simon,

Não vai. Recentemente, redescobri isto.

Obrigado.