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

 

Вы имеете в виду:

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 )  {        
            if(OpenPrice = OrderOpenPrice()&&OpenPrice!=0)          
               break;          }
               return (OpenPrice);} //  
Пожалуйста, мне нужно увидеть вашу сулотион.
 
Hand:

Пожалуйста, мне нужно увидеть вашу сулоцию.

НЕТ... вы должны учиться ... приложите немного усилий для разнообразия, прочитайте книгу ( https://book.mql4.com// ) прочитайте документацию ( https://docs.mql4.com// ) ... иметь разные магические числа для длинных и сортировочных сделок - это идиотизм и НЕ НУЖНО . . .
 

возможно, этот способ сработает.

if ( ( (LastOpenPrice(OP_SELL)+0.0030)<MarketInfo("EURUSD",MODE_BID) )&&( LastOpenPrice(OP_SELL)>0) ) <--------------- 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 (

 
Hand:

возможно, этот способ сработает.

if ( ( (LastOpenPrice(OP_SELL)+0.0030)<MarketInfo("EURUSD",MODE_BID) )&&( LastOpenPrice(OP_SELL)>0) ) <--------------- 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 (

Когда я спрашиваю "каков ваш план игры?", я действительно имею в виду это. Перефразируя, какова ваша СТРАТЕГИЯ?

Если вы НЕ хотите торговать, когда нет последней цены открытия, можете ли вы считать так?

if(LastOpenPrice(OP_SELL) <=0) { возврат? что делать? ----- случай продажи

if(LastOpenPrice(OP_BUY) <=0) { возврат? или что делать? ------ случай покупки

затем, остальная часть кода работает....

С такой ошибкой, как эта, боюсь, вы не сможете "заполнить дыры" тут и там в ваших кодах. Ваша стратегия выглядит разрушенной.

Подобная ошибка "информирует" о необходимости пересмотра стратегии на более высоком уровне ---> КОГДА торговать (и когда не торговать). Есть ли у вас ответы, идеи и т.д. на этот счет?

 
Hand:

Вы имеете в виду:

Пожалуйста, мне нужно увидеть ваш сулотион

Я совсем забыл упомянуть об этом, но это самое важное для всего, и вечности, связанного с этим. Это просто полное безумие, что ВЫ бьетесь над мыслью увидеть МОЕ=ВШЕ решение, для которого у меня нет решения.

Где, на планете Земля, вы находитесь? За кого вы меня принимаете? Ваш ангел-хранитель, шаман, личный джинн и т.д.?

Что бы вы ни вбили себе в голову, я действительно не могу помочь, просто для вашей информации.

 

ребята,

Пожалуйста, проверьте следующие функции (если правильно или нет) мне нужно сделать это условия

if ( lastOpenedOpenPriceBuy()-lastOpenedOpenPriceSell() )>=0.0060

{ сделайте что-нибудь }

double lastOpenedOpenPriceBuy()
  {
   double ret = 0;
   datetime time=0;
   for(int i=0; i<OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()==OP_BUY && OrderOpenTime()>time) {
         time = OrderOpenTime();
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);
  }


double lastOpenedOpenPriceSell()
  {
   double ret = 0;
   datetime time=0;
   for(int i=0; i<OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()==OP_SELL && OrderOpenTime()>time) {
         time = OrderOpenTime();
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);
  }



double lastClosedClosePrice()
  {
   double ret = 0;
   datetime time = 0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
      if(OrderType()<2 && OrderCloseTime()>time) {
         time = OrderCloseTime();
         ret = OrderClosePrice();
      }
   }
   
   return(ret);
  }



double beforelastClosedClosePrice()
  {
   double ret = 0;
   double ret2 = 0;
   datetime time = 0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
      if(OrderType()<2 && OrderCloseTime()>time) {
         time = OrderCloseTime();
         ret = ret2;
         ret2 = OrderClosePrice();
      }
   }
   if(ret==0) {
      ret = ret2;
   }
   
   return(ret);
  }
 

Я могу помочь с первым, возможно, другие смогут помочь с остальными.

<-------------------- can consider to use if(OrdersTotal()>0..then proceed  ---------------->
double lastOpenedOpenPriceBuy()  <----- what a name...confusing, maybe.
  {
   double ret = 0;
   datetime time=0; <---- can consider setting Lowest Limit to -9999, at least -1, rather than 0.  
   for(int i=0; i<OrdersTotal(); i++) { <----- do consider counting down.
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES); <------ This returns some BOOLEAN result.then what? -----(?)
      if(OrderType()==OP_BUY && OrderOpenTime()>time) { <------ This can return runtime OrderSelect ERR bec. of above line (?). ------ (!) 
         time = OrderOpenTime(); 
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);<------ return double as UnNormalized price. you sure about this?
  }

 

Пожалуйста, обратите внимание:

когда я добавляю это условие

if (  ((lastOpenedOpenPriceBuy()-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 (  ( (lastOpenedOpenPriceBuy()-0.0030)>MarketInfo(EURUSD,MODE_BID) )  )") ;}

оно не работает, но когда я добавил еще одно условие.

if (  (lastOpenedOpenPriceBuy()>0)&&((lastOpenedOpenPriceBuy()-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 (  ( (lastOpenedOpenPriceBuy()-0.0030)>MarketInfo(EURUSD,MODE_BID) )  )") ;}
все выглядит нормально (lastOpenedOpenPriceBuy()>0)
 
<-------------------- можно рассмотреть возможность использования if(OrdersTotal()>0..then proceed---------------->
double lastOpenedOpenPriceBuy() <----- что за название... путаница, наверное.
{double ret = 0; datetime time=0;<---- можно рассмотреть возможность установки Lowest Limit на -9999, по крайней мере -1, а не 0. Ни один ордер не может быть открыт <= 0for(int i=0; i<OrdersTotal(); i++) { <----- рассмотрим обратный отсчет. Ничего не изменилось.OrderSelect(i, SELECT_BY_POS, MODE_TRADES); <------ Это возвращает некоторый BOOLEAN результат. Что потом? -----(?) Если в цикле, то ордер должен существовать, когда ордер существует, OrderSelect не вызовет ошибку. Если не в цикле, то эта строка не будет выполнена.if(OrderType()==OP_BUY && OrderOpenTime()>time) { <------ Это может вернуть ошибку OrderSelect ERR из-за вышеприведенной строки (?). ------ (!) Та же причина, что и в предыдущей строке.
time = OrderOpenTime(); ret = OrderOpenPrice
(); } } } return(ret);<------ return double as UnNormalized price. вы уверены в этом? Впервой строке уже определено ret = 0.}
 

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

OrderSelect(i, SELECT_BY_POS, MODE_TRADES); <------Если в цикле, то ордер должен существовать, когда ордер существует, OrderSelect не вызовет ошибку. Если ордера нет, то эта строка не будет выполнена.Я думаю, что эта ваша строка обладает некоторыми способностями Гудини, чтобы исчезать из цикла, когда ордеров нет, и снова появляться, когда они есть. 


Причина обращения: