como posso obter o preço mais alto após a abertura do pedido. - página 3

 

Então, por que você está devolvendo o número do bilhete? Leia o código que você está copiando e colando, entenda-o, aprenda . .

eu o usei para fazer o seguinte

if(OrderSelect(LastOpenTicketForBuy(), SELECT_BY_POS)==verdadeiro)
{ pedido de compra= OrderOpenPrice();}

então se ((( ordem de compra + ordem de venda)/2))<MarketInfo("EURUSD",MODE_BID) )

fechar a posição

 
Hand:


if(OrderSelect(LastOpenTicketForBuy(), SELECT_BY_POS)==verdadeiro)


uma pequena mudança com sua permissão

if(OrderSelect(LastOpenTicketForBuy(), SELECT_BY_TICKET)==true)
 

Prezado qjol

muito obrigado por sua ajuda real. mas ainda não tenho certeza se vai funcionar ou não (acho minhas funções um pouco dificeis). vamos ver

primeira função :

função para obter e manter o último pedido preço aberto apenas para compra

double LastOpenForBuy(){ datetime lastTime = 0 ; int lastTicket = - 1 ; // None open. 
int magi.number= 0 ; double orderforbuy;
for ( int pos = OrdersTotal ()- 1 ; pos >= 0 ; pos--)
if ( OrderSelect (pos, SELECT_BY_POS) // Only my orders w/
&& OrderMagicNumber () == magic.number // my magic number
&& OrderSymbol () == Symbol () // and my pair.
&& OrderType ()==OP_BUY )
{ orderforbuy = OrderOpenprice ();
lastTicket = OrderTicket (); }
return (orderforbuy);}

if(OrderSelect(LastOpenForBuy(), SELECT_BY_TICKET)==true)
{ order for buy= OrderOpenPrice();}

// then something like// // if ( (( order for buy+ order for sell)/2))<MarketInfo("EURUSD",MODE_BID) )

//close the position

     o que eu preciso é: 1- função para obter e manter o último pedido preço aberto apenas para compra 
2- função para obter e manter o último pedido aberto preço para venda
3 função para obter e manter o último pedido próximo do preço de compra ou venda
4- funciona para obter e manter o preço de fechamento anterior antes do último pedido fechado o que comprar ou vender.
 

OK, tente isto . . .

Ele fará 1 & 2 . .

LastOpenPrice(OP_BUY) pelo preço aberto da última compra.

LastOpenPrice(OP_SELL) pelo preço aberto da última venda.

double LastOpenPrice(int  OrderType)
   { 
 
   double OpenPrice;                         

   for ( int pos = OrdersTotal()- 1 ; pos >= 0 ; pos--)
      if ( OrderSelect (pos, SELECT_BY_POS) // Only my orders w/
      && OrderMagicNumber() == magic.number // my magic number       //  <-------  what Magic Number do you use when you place a trade ?  it must match  ! !
      && OrderSymbol() == Symbol()  // and my pair.                  //            magic.number  should be a Globally defined variable that has your Magic Numer  
      && OrderType() == OrderType )
         {
         OpenPrice = OrderOpenprice();
         break;
         }
   return (OpenPrice);                                             //  <-------  this returns the Order Open Price  NOT the ticket
}
 

E isto . . . .

para 3 . .

double LastClosePrice()
   { 
 
   double ClosePrice;                         

   for ( int pos = OrdersHistoryTotal()- 1 ; pos >= 0 ; pos--)
      if ( OrderSelect (pos, SELECT_BY_POS, MODE_HISTORY)            // Only my CLOSED  orders 
      && OrderMagicNumber() == magic.number // my magic number       //  <-------  what Magic Number do you use when you place a trade ?  it must match  ! !
      && OrderSymbol() == Symbol()  // and my pair.                  //            magic.number  should be a Globally defined variable that has your Magic Numer  
      && OrderType() < OP_BUYLIMIT )
         {
         ClosePrice = OrderCloseprice();
         break;
         }
   return (ClosePrice);                                             //  <-------  this returns the Order Open Price  NOT the ticket
}
 
Não tenho certeza se entendi o que você quer dizer com o nº 4.
 

raptor

acho que falta algo se ele tiver mais de 1 pedido no mesmo par (& a mesma magia) portanto acho que é melhor assim

double LastOpenPrice(int OrderType)
   { 
 
   double OpenPrice;                         
   datetime lastOpen; // First line added

   for ( int pos = OrdersTotal()- 1 ; pos >= 0 ; pos--)
      if ( OrderSelect (pos, SELECT_BY_POS) // Only my orders w/
      && OrderMagicNumber() == magic.number // my magic number       //  <-------  what Magic Number do you use when you place a trade ?  it must match  ! !
      && OrderSymbol() == Symbol()  // and my pair.                  //            magic.number  should be a Globally defined variable that has your Magic Numer  
      && OrderType() == OrderType
      && OrderOpenTime() > lastOpen) // Second line added
         {
         OpenPrice = OrderOpenprice();
         break;
         }
   return (OpenPrice);                                             //  <-------  this returns the Order Open Price  NOT the ticket
}

sua opinião

 
Se você contar para baixo a primeira ordem que corresponde ao Número Mágico e Símbolo será a última colocada para a EA e Símbolo em questão, não ?
 
Não tenho certeza
 
qjol:

raptor

acho que falta algo se ele tiver mais de 1 pedido no mesmo par (& a mesma magia) portanto acho que é melhor assim

sua opinião


caras,

muito obrigado,

Deixe-me dizer por que quero usar o LastOpenPrice(OP_BUY) e o LastOpenPrice(OP_SELL) porque quero usá-los em algumas condições como

se ( LastOpenPrice(OP_BUY) -LastOpenPrice(OP_SELL)) > 0,0090 // por essa razão eu preciso manter o último pedido aberto para compra e o último pedido aberto para venda, então eu preciso separar o último pedido um para compra e o outro para venda.

-----

para duplo LastClosePrice() // posso usar se ( OrderType() == OP_BUY || OP_SELL) em vez disso *** OrderType() < OP_BUYLIMIT*** para obter o último fechamento do que comprar ou vender.

----

para a função número 4:

4- função para obter e manter o preço de fechamento anterior antes do último fechamento do pedido o que comprar ou vender. // eu quero obter a ordem fechada antes da última ordem fechada de compra ou venda.

obrigado

Razão: