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

 
( OrderType() < OP_BUYLIMIT ) то же самое, что и ( OrderType () == OP_BUY ||OrderType() == OP_SELL )
 
Hand:


ребята,

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

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

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

Вы можете сделать это... это сработает... попробуйте.
 
Или, может быть, вы имеете в виду последний заказ на покупку, который сейчас закрыт?
 

понятно ли объяснение функции n.4?

функция №4:

// я хочу получить ордер, закрытый до последнего закрытого ордера на покупку или продажу.

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

 

ребята,

Это действительно не работает

// Used to keep global variables

extern int MagicNumberLong = 6658641;                     //Identifies long positions
extern int MagicNumberShort = 4167090;                    //Identifies short positions
  
 






double LastOpenPrice(int ordertype)
   { 

   double OpenPrice;                         
   datetime lastOpen;
   for ( int pos = OrdersTotal()- 1 ; pos >= 0 ; pos--)
      if ( OrderSelect (pos, SELECT_BY_POS) // Only my orders w/
      && OrderMagicNumber() == MagicNumberLong || MagicNumberShort // 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 )
         {
         OpenPrice = OrderOpenPrice();
         break;
         }
   return (OpenPrice);                                             //  <-------  this returns the Order Open Price  NOT the ticket
}

if (  ((iOpen("EURUSD",PERIOD_H1,0)-0.0030)>=MarketInfo("EURUSD",MODE_BID))   ) 
  {   BUY("EURUSD",B_EURUSD_LS_0,B_EURUSD_TP_0,B_EURUSD_SL_0,B_EURUSD_TS_0,"if (  ( ((iOpen(EURUSD,PERIOD_H1,0)-0.00...") ;}
if (  ( (LastOpenPrice(OP_BUY)-0.0030)>MarketInfo("EURUSD",MODE_BID) )  ) 
   {  SELL("EURUSD",S_EURUSD_LS_1,S_EURUSD_TP_1,S_EURUSD_SL_1,S_EURUSD_TS_1,"if (  ( (LastOpenPrice(OP_BUY)-0.0030)>=MarketInfo(" EURUSD",MODE_BID) )  )") ;}
if (  ( ((iOpen("EURUSD",PERIOD_H1,0)+0.0030)<=MarketInfo("EURUSD",MODE_BID)) )  ) 
  {   SELL("EURUSD",S_EURUSD_LS_0,S_EURUSD_TP_0,S_EURUSD_SL_0,S_EURUSD_TS_0,"if (  ((iOpen(EURUSD,PERIOD_H1,0)+0.00...") ;}
if (  ( (LastOpenPrice(OP_SELL)+0.0030)<MarketInfo("EURUSD",MODE_BID) )  ) 
   {  BUY("EURUSD",B_EURUSD_LS_1,B_EURUSD_TP_1,B_EURUSD_SL_1,B_EURUSD_TS_1,"if (  ( (LastOpenPrice(OP_SELL)+0.0030)<MarketInfo(" EURUSD",MODE_BID) )") ;}

Как вы можете видеть на изображениях

я начал тестировать советника с 01/03/2011 по 11/04/2011

в первый час на 01/03/2011

позиция была открыта , но никто из вышеупомянутых условий не был доступен. Это вывело меня из себя.

 
Hand:

понятно ли объяснение функции n.4?

функция №4:

// я хочу получить ордер, закрытый до последнего закрытого ордера на покупку или продажу.

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

Цена закрытия? цена закрытия бара перед баром, где закрылся последний ордер ? или цена закрытия ордера на покупку или продажу, который закрылся перед последним закрывшимся ордером ?
 

второй вариант:

цена закрытия ордера на покупку или продажу, который закрылся перед последним закрывшимся ордером ?

 
Hand:

второй вариант:

цена закрытия ордера на покупку или продажу, который закрылся перед последним закрывшимся ордером?

Попробуйте это...

Чтобы получить последнюю цену закрытия последнего ордера, который был покупкой или продажей и соответствовал символу и magic.number, сделайте следующее LastClosePrice(1)

Чтобы получить предыдущую, сделайте следующее... LastClosePrice(2 )

double LastClosePrice(int Order)
   { 
 
   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 )
         {
         Order--;
         if (Order == 0)                                            //  determines if we have found the Order we are interested in
            {
            ClosePrice = OrderCloseprice();
            break;
            }
         }
   return (ClosePrice);                                             //  <-------  this returns the Order Open Price  NOT the ticket
}

ПРИМЕЧАНИЕ: этот код НЕ РАБОТАЕТ с вашими магическими числами, как показано в вашем коде выше. ...

extern int MagicNumberLong = 6658641;                     //Identifies long positions
extern int MagicNumberShort = 4167090; 


WHY ? ? ? ?
 

Ребята.

Есть ли кто-нибудь, кто может использовать программу teamviewer, тогда мы получим доступ вместе и проверим, в чем реальная проблема.

 
Hand:

ребята,

Это действительно не работает.

Как вы можете видеть на изображениях

Я начал тестировать советника с 01/03/2011 по 11/04/2011

в первый час на 01/03/2011

позиция была открыта , но никто из вышеупомянутых условий не был доступен. Это позволило мне действительно сойти с ума.

Это не безумие. Это "разумно" для открытия ордера, потому что:

double LastOpenPrice(int ordertype)
   { 

   double OpenPrice;                         
   datetime lastOpen;
   for ( int pos = OrdersTotal()- 1 ; pos >= 0 ; pos--)
      if ( OrderSelect (pos, SELECT_BY_POS) // Only my orders w/
      && OrderMagicNumber() == MagicNumberLong || MagicNumberShort // my magic number       
      && OrderSymbol() == Symbol()    // and my pair.             
      && OrderType() == ordertype 
      && OrderOpenTime() > lastOpen )
         {
         OpenPrice = OrderOpenPrice();
         break;
         }
   return (OpenPrice); //  <-------  this returns the Order Open Price OR ZERO.

Если приведенная выше функция возвращает НОЛЬ, то может произойти любой сценарий, подобный приведенному ниже

 if (  ( (LastOpenPrice(OP_SELL)+0.0030)<MarketInfo("EURUSD",MODE_BID) )  ) <--------------- 0+0.0030=0.0030<Bid: TRUE
   {  BUY("EURUSD",B_EURUSD_LS_1,B_EURUSD_TP_1,B_EURUSD_SL_1,B_EURUSD_TS_1,"if (

Я предлагаю вам разместить "главную" логику поверх этой. Если функция LastOpenPrice(...) возвращает ноль, каков ваш план игры?