количество валютных пар по которым открыты позиции

 

Как посчитать количество валютных пар по которым открыты позиции ?

CurrencyPairs++;

 
Natalya Dzerzhinskaya:

Как посчитать количество валютных пар по которым открыты позиции ?

CurrencyPairs++;

   CurrencyPairs=0;
   for(int q=0;q<SymbolsTotal(true);q++)
     {
      string symbol=SymbolName(q,true);
      if(PositionSelect(symbol))CurrencyPairs++;
     }
самое простое что приходит на ум.

с уважением.
 
Natalya Dzerzhinskaya:

Как посчитать количество валютных пар по которым открыты позиции ?

CurrencyPairs++;

Я сделал-бы так, но зависит от того, что дальше будет в программе

string symbols[];
int b=0;
  for(int i=0; i<OrdersTotal(); i++) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if(OrderType()<=1) {
     if(ArraySearchStr(symbols, OrderSymbol())==-1) {
      b++;
       ArrayResize(symbols,b);
       symbols[b-1]=OrderSymbol();
  }}}}

int ArraySearchStr(string& m[], string e) {
  for(int i=0; i<ArraySize(m); i++) {
   if(m[i]==e) return(i);
  }
  return(-1);
 }

Print( ArraySize(symbols) );
 
Andrey Kisselyov:
самое простое что приходит на ум.
mql4 не распознаёт))
PositionSelect
Vitaly Muzichenko:

Я сделал-бы так, но зависит от того, что дальше будет в программе


Ограничить надо портфель в торговле.
если 2 символа торгуют то остальные пары в игнор


 
Natalya Dzerzhinskaya:

Ограничить надо портфель в торговле.

если 2 символа торгуют то остальные пары в игнор

Тогда замените PositionSelect в предложенном коде на четвёрошную, и получите просто количество, без сохранения символов.

 
Vitaly Muzichenko:

Тогда замените PositionSelect в предложенном коде на четвёрошную, и получите просто количество, без сохранения символов.


Не соображу как реализовать

 
Natalya Dzerzhinskaya:

Не соображу как реализовать

bool PositionSelect(string sym)
  {
   bool fl=false;
   for(int ps=0;ps<OrdersTotal() && !fl && !IsStopped();ps++)
     {
      if(!OrderSelect(ps,SELECT_BY_POS))continue;
      if(OrderSymbol()==sym)fl=true;
     }
   return fl;
  }
добавьте к предыдущему коду эту функцию.

с уважением.
 
Andrey Kisselyov:
добавьте к предыдущему коду эту функцию.

Всё работает! Спасибо))

 
Natalya Dzerzhinskaya:

Всё работает! Спасибо))

пожалуйста.

с уважением.
 
Andrey Kisselyov:
самое простое что приходит на ум.
Хотя, как выяснилось, вопрос по МТ4, дополню "простой" вариант для МТ5 - там есть PositionsTotal и не надо мудрить с перебором всех символов.
 
Stanislav Korotky:
Хотя, как выяснилось, вопрос по МТ4, дополню "простой" вариант для МТ5 - там есть PositionsTotal и не надо мудрить с перебором всех символов.
вынужден адресовать вас к справке, дабы вы не учудили такое у себя в советнике.

PositionsTotal
 
Возвращает количество открытых позиций.
 
int  PositionsTotal();
 

Возвращаемое значение
 
Значение типа int.
 
Примечание
 
При "неттинговом" учете позиций (ACCOUNT_MARGIN_MODE_RETAIL_NETTING и ACCOUNT_MARGIN_MODE_EXCHANGE) по каждому символу в любой момент 
времени может быть открыта только одна позиция, которая является результатом одной или более сделок. Не следует путать между собой 
позиции и действующие отложенные ордера, которые также отображаются на вкладке "Торговля" в панели "Инструменты".
 
При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций.
 
Смотри также
 
PositionGetSymbol(), PositionSelect(), Свойства позиций
как видно возвращаемое значение в 5ке будет зависеть от типа счета и учета позиций в нем, и при
независимом представлении позиций

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

с уважением.

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