как я могу получить наибольшую цену после открытия ордера (orderopenprice). - страница 3

 

Так почему вы возвращаете номер билета? Прочитайте код, который вы копируете и вставляете, поймите его, изучите...

Я использовал его для следующего

if(OrderSelect(LastOpenTicketForBuy(), SELECT_BY_POS)==true)
{ ордер на покупку = OrderOpenPrice();}

if ((( ордер на покупку+ ордер на продажу)/2))<MarketInfo("EURUSD",MODE_BID) )

закрываем позицию

 
Hand:


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


небольшое изменение с вашего разрешения

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

Уважаемый qjol

большое спасибо за вашу реальную помощь. но все же я не уверен, будет ли это работать или нет (я думаю, что мои функции немного сложны). давайте посмотрим.

первая функция :

функция для получения и сохранения цена открытия последнего ордера только для покупки

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

     что мне нужно: 1- функция для получения и сохранения цена открытия последнего ордера только для покупки 
2- функция для получения и сохранения цены открытия последнего ордера на продажу
3- функция для получения и сохранения цены закрытия последнего ордера, независимо от покупки или продажи
4- функция для получения и сохранения предыдущей цены закрытия перед последним закрытием ордера на покупку или продажу.
 

Хорошо, попробуйте это...

Это сделает 1 и 2 ...

LastOpenPrice(OP_BUY) для цены открытия последней покупки.

LastOpenPrice(OP_SELL) для цены открытия последней продажи.

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
}
 

А это...

для 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
}
 
Не уверен, что понимаю, что вы имеете в виду под № 4.
 

хищник

Я думаю, что вы что-то упускаете, если у него более 1 заказа на одну и ту же пару (и одну и ту же магию), поэтому я думаю, что так будет лучше.

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
}

твоё мнение

 
Если вести обратный отсчет, то первый ордер, соответствующий магическому числу и символу, будет последним, размещенным для данного эксперта и символа, не так ли?
 
Не уверен
 
qjol:

хищник

Я думаю, вы что-то упускаете, если у него более 1 заказа на одну и ту же пару (и одну и ту же магию), поэтому я думаю, что так будет лучше.

ваше мнение


ребята,

Большое спасибо,

Позвольте мне сказать вам, почему я хочу использовать LastOpenPrice(OP_BUY) и LastOpenPrice(OP_SELL), потому что я хочу использовать их в некоторых условиях, таких как

if ( LastOpenPrice(OP_BUY) -LastOpenPrice(OP_SELL)) > 0.0090 // по этой причине мне нужно, чтобы последний ордер был открыт на покупку и последний ордер был открыт на продажу, поэтому мне нужны отдельные последние ордера один на покупку, а другой на продажу.

-----

для double LastClosePrice() // могу ли я использовать if ( OrderType() == OP_BUY || OP_SELL) вместо *** OrderType() < OP_BUYLIMIT*** для получения последнего закрытия, независимо от покупки или продажи.

----

для функции номер 4:

4- функция для получения и сохранения предыдущей цены закрытия перед последним закрытием ордера на покупку или продажу. // я хочу получить закрытый ордер перед последним закрытым ордером на покупку или продажу.

спасибо