need help to modify this mt5 indicator a little bit

 

Hi coders ,can you please help me modify this code . The pip show indicator . It shows pips of open positions but it shows sum of them . I need it to show average amount of them .

Currently if there is 2 positions open one at 10 pips and other one at 9 pips it shows 19 pips. I want it to show average of them which is 9.5 pips. 


Any help appreciated


//+------------------------------------------------------------------+
//|                                                    Show Pips.mq4 |
//|                                    Copyright 2017, TPSproTrading |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, TPSproTrading"
#property version   "2.2"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Parameters                                                       |
//+------------------------------------------------------------------+
enum ENUM_SHOW_TYPE
  {
   a = 0,   // Follow the price
   b = 1,   // As comment
   c = 2,   // In selected corner of the screen
  };
input ENUM_SHOW_TYPE
show_type=0;                   // Type of appearance
input ENUM_BASE_CORNER
corner=CORNER_RIGHT_LOWER;  // Graph corner for attachment
input bool    show_profit =  false;               // Show profit?
input bool    show_perc   =  false;               // Show profit in percents?
input bool    show_spread =  true;                // Show spread?
input bool    show_time   =  true;                // Show time to bar closure?
input color   colortext   =  clrBlack;            // Text color
input color   ecProfit    =  clrBlue;             // Profit color
input color   ecLoss      =  clrRed;              // Loss color
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
enum ENUM_SEPARATOR
  {
   d = 124,    // |
   e =  47,    // /
   f =  46,    // .
   g =  92,    // \
   h =  35,    // #
  };
extern ENUM_SEPARATOR
separator   =  124;                 // Separator
extern int     coord_y     =  12;                  // Y coordinate
extern int     indent      =  5;                   // Indent in bars
extern int     text_size   =  16;                   // Font size
extern string  text_font   =  "Calibry";           // Font

string         name_1      =  "TPSpro_SMT";
string         text_1      =  "";
double         n           =  1.0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   int _dig=(int)SymbolInfoInteger(Symbol(),SYMBOL_DIGITS);
   if(_dig == 3|| _dig == 5) n *= 10;
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
   ObjectDelete(0,name_1);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   double   tu =  0.0, tp = 0.0, tr = 0.0,
   sp =  (double)SymbolInfoInteger(Symbol(), SYMBOL_SPREAD);
   string   _sp = "", _m = "", _s = "";
   string   sep = "";
   StringConcatenate(sep," ",CharToString(char(separator))," ");

   if(AccountInfoDouble(ACCOUNT_BALANCE)==0.0)
     {
      text_1="";
     }
   else
     {
      tu =  GetProfitOpenPosInPoint();
      tp =  GetProfitOpenPos();
      tr =  tp * 100.0 / AccountInfoDouble(ACCOUNT_BALANCE);
      //Comment(tu, " ", tp, " ", tr, " ", AccountInfoDouble(ACCOUNT_BALANCE));
      StringConcatenate(text_1,DoubleToString(tu,1)," pips");

      if(show_profit) StringConcatenate(text_1,text_1,sep,DoubleToString(tp,2)," ",AccountInfoString(ACCOUNT_CURRENCY));
      if(show_perc) StringConcatenate(text_1,text_1,sep,DoubleToString(tr,1),"%");
     }

//--- Time to bar expiry
   int   m  =  int(SeriesInfoInteger(Symbol(), 0, SERIES_LASTBAR_DATE) + PeriodSeconds() - TimeCurrent());
   int   s  =  m%60;
   m=(m-s)/60;
   if(m < 10)          _m    =  "0";
   if(s < 10)          _s    =  "0";
   if(sp < 10)         _sp   =  "..";
   else if(sp < 100)   _sp   =  ".";

   if(show_spread)
     {
      if(AccountInfoDouble(ACCOUNT_BALANCE)==0.0)
         StringConcatenate(text_1,text_1,DoubleToString(sp,0),_sp);
      else
         StringConcatenate(text_1,text_1,sep,DoubleToString(sp,0),_sp);
     }
   if(show_time)
     {
      if(AccountInfoDouble(ACCOUNT_BALANCE)==0.0 && !show_spread)
         StringConcatenate(text_1,text_1,_m,DoubleToString(m,0),":",_s,DoubleToString(s,0)); // Next bar in 
      else
         StringConcatenate(text_1,text_1,sep,_m,DoubleToString(m,0),":",_s,DoubleToString(s,0)); // Next bar in 
     }

   if(show_type==0)
      SetText(name_1,text_1,ColorOnSign(tp),TimeCurrent(),SymbolInfoDouble(Symbol(),SYMBOL_BID),text_size);
   if(show_type==1)
      Comment(text_1);
   if(show_type==2)
      SetLabel(name_1,text_1,ColorOnSign(tp),3,coord_y,corner,text_size);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetProfitOpenPos(int mn=-1)
  {
   int orders = PositionsTotal();
   double pr  = 0.0;
   for(int i=0; i<orders; i++)
     {
      ResetLastError();
      string symbol=PositionGetSymbol(i);
      if(symbol==Symbol())
        {
         if(mn<0 || OrderGetInteger(ORDER_MAGIC)==mn)
           {
            pr+=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
           }
        }
     }

   return (pr);
  }
//+----------------------------------------------------------------------------+
//|  Author      : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                |
//+----------------------------------------------------------------------------+
//|  Version     : 01.08.2008                                                  |
//|  Description : Returns the total profit of open items in points            |
//+----------------------------------------------------------------------------+
//| Parameters:                                                                |
//| sy     - name of the tool   (""   - any character,                         |
//|                              NULL - the current character)                 |
//| op     - operation          (-1   - any position)                          |
//| mn     - MagicNumber        (-1   - any magic)                             |
//+----------------------------------------------------------------------------+
double GetProfitOpenPosInPoint(int op=-1,int mn=-1)
  {
   double pr=0.0;

   for(int i=0; i<PositionsTotal(); i++)
     {
      ResetLastError();
      string symbol=PositionGetSymbol(i);
      if(symbol==Symbol())
        {
         ulong type     =  OrderGetInteger(ORDER_TYPE),
         magic    =  OrderGetInteger(ORDER_MAGIC);

         if(op<0 || type==op)
           {
            if(mn<0 || magic==mn)
              {
               if(type==ORDER_TYPE_BUY)
                 {
                  pr+=(PositionGetDouble(POSITION_PROFIT)/PositionGetDouble(POSITION_VOLUME)/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE))/n;
                 }
               if(type==ORDER_TYPE_SELL)
                 {
                  pr+=(PositionGetDouble(POSITION_PROFIT)/PositionGetDouble(POSITION_VOLUME)/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE))/n;
                 }
              }
           }
        }
     }
   return (pr);
  }
//+------------------------------------------------------------------+
//| Set text                                                         |
//+------------------------------------------------------------------+
bool SetText(string nm,string tx,color cl,datetime time,double price,int fs)
  {
   time+=indent*PeriodSeconds();
   ResetLastError();
//--- Create object "Text"
   if(ObjectFind(0,nm)<0)
      ObjectCreate(0,nm,OBJ_TEXT,0,time,price);

   ObjectMove(0,nm,0,time,price);
   ObjectSetString(0,nm,OBJPROP_TEXT,tx);
   ObjectSetString(0,nm,OBJPROP_FONT,text_font);
   ObjectSetInteger(0,nm,OBJPROP_FONTSIZE,fs);
   ObjectSetDouble(0,nm,OBJPROP_ANGLE,0.0);
   ObjectSetInteger(0,nm,OBJPROP_ANCHOR,ANCHOR_LEFT_LOWER);
   ObjectSetInteger(0,nm,OBJPROP_COLOR,cl);
   ObjectSetInteger(0,nm,OBJPROP_BACK,false);
   ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,false);
   ObjectSetInteger(0,nm,OBJPROP_SELECTED,false);
   ObjectSetInteger(0,nm,OBJPROP_HIDDEN,true);

   return (true);
  }
//+------------------------------------------------------------------+
//| Set label                                                        |
//+------------------------------------------------------------------+
void SetLabel(string nm,string tx,color cl,int xd,int yd,int cr,int fs)
  {
   ResetLastError();
//--- Create object "Label"   
   if(ObjectFind(0,nm)<0)
      ObjectCreate(0,nm,OBJ_LABEL,0,0,0);

   ObjectSetString(0,nm,OBJPROP_TEXT,tx);
   ObjectSetInteger(0,nm,OBJPROP_COLOR,cl);
   ObjectSetInteger(0,nm,OBJPROP_XDISTANCE,xd);
   ObjectSetInteger(0,nm,OBJPROP_YDISTANCE,yd);
   ObjectSetInteger(0,nm,OBJPROP_CORNER,cr);
   ObjectSetInteger(0,nm,OBJPROP_FONTSIZE,fs);
   ObjectSetInteger(0,nm,OBJPROP_HIDDEN,true);

   if(cr==CORNER_RIGHT_UPPER || cr==CORNER_RIGHT_LOWER)
      ObjectSetInteger(0,nm,OBJPROP_ANCHOR,ANCHOR_RIGHT);
  }
//+------------------------------------------------------------------+
//| Returns the color by the sign of a number                        |
//+------------------------------------------------------------------+
color ColorOnSign(double nu)
  {
   color lcColor=colortext;

   if(nu > 0) lcColor = ecProfit;
   if(nu < 0) lcColor = ecLoss;

   return(lcColor);
  }
//+------------------------------------------------------------------+


 
Payman: can you please help me modify this code . T  I need it to show average amount of them .
  1. Help you with what? You haven't stated a problem, you stated a want. Show us your attempt (using the CODE button) and state the nature of your difficulty.
              No free help (2017)

    Or pay someone. Top of every page is the link Freelance.
              Hiring to write script - General - MQL5 programming forum (2018)

    We're not going to code it for you (although it could happen if you are lucky or the issue is interesting).
              No free help (2017)

  2. So do it. Count the positions as you sum them and divide at the end. What's the problem?