Как выбрать наименьшую (наибольшую) цену открытия для нескольких открытых ордеров?

 

Добрый день!

Может кто подскажет как выбрать наименьшую (наибольшую) цену открытия для нескольких открытых ордеров?

Заранее спасибо!

 
int n = 5; // Количество оцениваемых баров
double high[100], low[100];

for(int i=0;i<n;i++){
   high[i]=iHigh(...);
   low[i]=iLow(...);
}
double Low = ArrayMinimum(low,..);
double High = ArrayMaximum(high,..);

Как работают функции смотри мануал.

Хай, лоу, соответственно меняется на iOpen, iClose.

 

Всё правильно, только вопрос был не о БАРАХ, а об ОРДЕРАХ.

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

 

для всех открытых, но еще не закрытых ордеров:

double MinOpenedOrderPrice() {
   double result = 0;
   for (int i = 0; i < OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
         if((result>OrderOpenPrice())||(result==0)) result = OrderOpenPrice();
   }
   return(result);
}
double MaxOpenedOrderPrice() {
   double result = 0;
   for (int i = 0; i < OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
         if(result<OrderOpenPrice()) result = OrderOpenPrice();
   }
   return(result);
}
чтобы написать для "нескольких" нужно знать условия по которым они выбираются


 
goldtrader:

Всё правильно, только вопрос был не о БАРАХ, а об ОРДЕРАХ.

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

А я тут голову ломаю как связать эти бары с ордерами...спасибо

 
embezz:

для всех открытых, но еще не закрытых ордеров:

double MinOpenedOrderPrice() {
   double result = 0;
   for (int i = 0; i < OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
         if((result>OrderOpenPrice())||(result==0)) result = OrderOpenPrice();
   }
   return(result);
}
double MaxOpenedOrderPrice() {
   double result = 0;
   for (int i = 0; i < OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
         if(result<OrderOpenPrice()) result = OrderOpenPrice();
   }
   return(result);
}
чтобы написать для "нескольких" нужно знать условия по которым они выбираются


Никак не пойму, как мы сравниваем result равный 0, с OrderOpenPrice()???

 
vetal_dnepr:

Никак не пойму, как мы сравниваем result равный 0, с OrderOpenPrice()???

 
vetal_dnepr:
embezz:

для всех открытых, но еще не закрытых ордеров:

double MinOpenedOrderPrice() {
   double result = 0;
   for (int i = 0; i < OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
         if((result>OrderOpenPrice())||(result==0)) result = OrderOpenPrice();
   }
   return(result);
}
double MaxOpenedOrderPrice() {
   double result = 0;
   for (int i = 0; i < OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
         if(result<OrderOpenPrice()) result = OrderOpenPrice();
   }
   return(result);
}
чтобы написать для "нескольких" нужно знать условия по которым они выбираются


Никак не пойму, как мы сравниваем result равный 0, с OrderOpenPrice()???

А не доглядел малеха...все разобрался, спасибо! А что имелось ввиду под "несколькими"?

 

так и сравниваем (пример для MaxOpenedOrderPrice) :

если OrderOpenPrice() больше result, то result=OrderOpenPrice() . так перебирая все ордера в переменной result останется максимальное OrderOpenPrice(). result=0 - лишь начальное значение, т.е. функция вернет ноль только если нет ни одного открытого ордера... можно использовать и другое значение, -1 например, не принципиально.

 
vetal_dnepr писал (а):

А не доглядел малеха...все разобрался, спасибо! А что имелось ввиду под "несколькими"?

Например только бай ордера, или только EURUSD или еще по каким параметрам...

 
embezz:
vetal_dnepr писал (а):

А не доглядел малеха...все разобрался, спасибо! А что имелось ввиду под "несколькими"?

Например только бай ордера, или только EURUSD или еще по каким параметрам...

Большое спасибо!!!! Разобрался
Причина обращения: