Funkcje własne:   GetSumPipsOpenedPositions()

Funkcja int GetSumPipsOpenedPositions() zwraca sumaryczną ilość punktów jako różnicę między bieżącą ceną rynkową a cenami otwarcia wybranych otwartych pozycji. Przy tym, jeśli bieżąca cena znajduje się niżej ceny otwarcia pozycji na sprzedaż, tj. jest zysk, to różnica w punktach będzie miała wartość dodatnią. Dla pozycji kupna, tj. jest strata, różnica w punktach będzie ujemna. Ma następujące argumenty:

f_symbol - nazwa instrumentu finansowego. Wartość domyślna = "", tj. wszystkie instrumenty. W przypadku _Symbol funkcja zwróci sumaryczną ilość punktów dla instrumentu finansowego tego wykresu notowań, gdzie program MQL4 zostanie uruchomiony.
f_cmd - typ pozycji. Wartość domyślna = -1, tj. wszystkie otwarte pozycje typu OP_BUY i OP_SELL .
f_magic - identyfikator (magic number). Wartość domyślna = -1, tj. wszystkie otwarte pozycje.

f_symbol - nazwa instrumentu finansowego. Wartość domyślna = "", tj. wszystkie instrumenty. W przypadku _Symbol funkcja zwróci sumaryczną ilość punktów dla instrumentu finansowego tego wykresu notowań, gdzie program MQL4 zostanie uruchomiony.

f_cmd - typ pozycji. Wartość domyślna = -1, tj. wszystkie otwarte pozycje typu OP_BUY i OP_SELL .

f_magic - identyfikator (magic number). Wartość domyślna = -1, tj. wszystkie otwarte pozycje.

Jeśli nie ma żadnej pozycji, funkcja zwróci wartość stałej INT_MAX , tj. 2147483647.

int GetSumPipsOpenedPositions(string f_symbol="", // instrument finansowy
                              int    f_cmd=-1,    // typ pozycji
                              int    f_magic=-1)  // identyfikator
  {
   if(f_cmd==OP_BUYLIMIT || f_cmd==OP_SELLLIMIT ||
      f_cmd==OP_BUYSTOP  || f_cmd==OP_SELLSTOP)
      return INT_MAX;
//---
   int  f_sumPips=0;
   bool f_isPositionExist=false;
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if((f_symbol==OrderSymbol()      || f_symbol=="") &&
            (f_cmd   ==OrderType()        || f_cmd==-1) &&
            (f_magic ==OrderMagicNumber() || f_magic==-1))
           {
            f_isPositionExist=true;
            if(OrderType()==OP_BUY)
               f_sumPips+=int((MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice())*
                              MathPow(10,MarketInfo(OrderSymbol(),MODE_DIGITS)));
            if(OrderType()==OP_SELL)
               f_sumPips+=int((OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK))*
                              MathPow(10,MarketInfo(OrderSymbol(),MODE_DIGITS)));
           }
//---
   if(f_isPositionExist) return f_sumPips;
   else return INT_MAX;
  }

1) Znaleźć sumaryczną ilość punktów otwartych pozycji dla EURUSD, na sprzedaż i z identyfikatorem 12345:

GetSumPipsOpenedPositions("EURUSD", OP_SELL, 12345);

2) Znaleźć sumaryczną ilość punktów otwartych pozycji dla EURUSD, dowolnego typu i identyfikatorem 12345:

GetSumPipsOpenedPositions("EURUSD", -1, 12345);

3) Znaleźć sumaryczną ilość punktów otwartych pozycji dla EURUSD, dowolnego typu i z dowolnym identyfikatorem:

GetSumPipsOpenedPositions("EURUSD");

4) Znaleźć sumaryczną ilość punktów otwartych pozycji wśród wszystkich instrumentów finansowych, dowolnego typu i identyfikatorem 12345:

GetSumPipsOpenedPositions("", -1, 12345);

5) Znaleźć sumaryczną ilość punktów otwartych pozycji wśród wszystkich instrumentów finansowych, dowolnego typu i z dowolnym identyfikatorem:

GetSumPipsOpenedPositions();