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

 

Я исправил первую проблему (допустил ошибку Спасибо diostar)

// я должен поставить if(OrdersTotal()>0){
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()-lastOpenedOpenPriceSell() )>=0.0060) &&( lastClosedClosePrice()<beforelastClosedClosePrice())) )
{ CLOSESHORT("EURUSD") ;}

Я не знаю, что мне делать:

Для справки функция CLOSESHORT:

int CLOSESHORT(string symbol_c) {
CloseAllPositions(symbol_c,OP_SELL,MagicNumberShort);
CloseAllPositions(symbol_c,OP_SELL,MagicNumberShort);
return(0);
}


Спасибо

 

Теперь я запутался.

Вы отвечаете о первой функции lastOpenedOpenPriceBuy().

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

 
diostar:

Теперь я в замешательстве.

Вы не единственный... перестаньте тратить свое время.
 
RaptorUK:
Вы не единственный... перестаньте тратить время.

Знаешь, эта тема, наверное, одна из самых длинных. И после 6 страниц я запуталась. Нет, я все еще говорю, что это не "трата времени".

(Это означает, что пришло время для нового направления, новой жизни, нового начала. Для всех.)

 
Я тоже потратил время на эту тему, я добавил код и сделал предложения... ...Когда вы тащите лошадь к воде, ароматизируете ее сеном и добавляете несколько яблок, а лошадь все равно не хочет пить, пора понять, что лошадь не хочет пить... ей нужна внутривенная капельница для приема воды... в этот момент, насколько я понимаю, лошадь предоставлена сама себе.
 
RaptorUK:
Я тоже потратил время на эту тему, я добавил код и сделал предложения. ... когда вы тащите лошадь к воде, ароматизируете ее сеном и добавляете несколько яблок, а лошадь все равно не хочет пить, пора понять, что лошадь не хочет пить... ей нужна внутривенная капельница для приема воды... в этот момент, насколько я понимаю, лошадь предоставлена сама себе.

Понятно. Конечная награда может быть не "предназначена" для того, чтобы лошадь питалась, тогда награда для тех, кто пытался, должна быть чем-то другим.

Спасибо лошади за это.

 

Спасибо diostar за вашу помощь.

Теперь я на 85% исправил ошибки. Давайте посмотрим:

1- мы создали 4 функции (пожалуйста, посмотрите их в конце этой страницы)

* lastOpenedOpenPriceBuy()

* lastOpenedOpenPriceSell()

*lastClosedClosePrice()
*beforelastClosedClosePrice()

2- Мы столкнулись с первой проблемой при использовании:

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

Мы исправляем ее, добавляя :

if(OrdersTotal()>0){
  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 (  ((lastOpenedOpenPriceSell()+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 (  ( (lastOpenedOpenPriceSell()+0.0030)<MarketInfo(EURUSD,MODE_BID) )  )") ;}
  }

3- Вторая проблема заключается в следующем:

if ( ((lastOpenedOpenPriceBuy()-lastOpenedOpenPriceSell())>=0.0060)&&(((lastOpenedOpenPriceBuy()+lastOpenedOpenPriceSell())/2)<MarketInfo("EURUSD",MODE_BID))
         &&(lastClosedClosePrice()< beforelastClosedClosePrice()) )  
   {  CLOSESHORT("EURUSD") ;}

если я удалю &&(lastClosedClosePrice()< beforelastClosedClosePrice()) . тогда все будет нормально

нет проблем с :

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

*(((lastOpenedOpenPriceBuy()+lastOpenedOpenPriceSell())/2)<MarketInfo("EURUSD",MODE_BID))

единственная проблема возникает при &&(lastClosedClosePrice()< beforelastClosedClosePrice())

Возьмем пример:

если ордер номер 5 открылся и был на продажу, затем ордер номер 6 открылся и закрылся, что ордер был на покупку, тогда ордер номер 7 открылся и был на покупку.

Случай будет следующим (lastClosedClosePrice()< beforelastClosedClosePrice())

( Order Number 6 < Order Number 4 ) // так как ордер номер 5 все еще не закрылся.

Что мне делать? Я не знаю. Я пытался использовать if(OrdersHistoryTotal()>0){theninsert all the conditions but no way }
.

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

Это НЕ я предложил, и "мы" не создавали это. Это на 100% ваше.

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