calc_profit_loss_on_lineprice

Author: MSR Calc Profit Loss on LinePrice
Orders Execution
Checks for the total of open orders
0 Views
0 Downloads
0 Favorites
calc_profit_loss_on_lineprice
//+------------------------------------------------------------------+
//|                                                           MSR    |
//|                                      Copyright 2015, MSR corp    |
//|                                        http://www.msrcorp.net    |
//+------------------------------------------------------------------+
#property copyright "MSR Calc Profit Loss on LinePrice"
#property link      "http://ruforum.mt5.com/threads/71794-sovetnik-msr-3.0-multi-v-poiskah-tretey-volni?p=11799234&viewfull=1#post11799234"
#property version     "1.0"      
#property description "MSR Calc Profit Loss on LinePrice"
#property description "Ïî âîïðîñàì äîðàáîòêè è ñîòðóäíè÷åñòâà îáðàùàéòåñü:"
#property description "e-mail: complus@inbox.ru"
#property strict; 
//---- Âíåøíèå ïàðàìåòðû ñîâåòíèêà
extern string _Parameters_Trade="-------------"; // Ïàðàìåòðû
extern int MAGIC=1000;   // MagicNumber for calculate, -1 any Magic
extern string NL="LP";   // Name of Line
extern int fs=16;        // FontSize
extern color cm=clrRed;  // Color prof/loss
//---- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà
double dt,ss;
string pl="";
//+------------------------------------------------------------------+
//| Expert start function                                            |
//+------------------------------------------------------------------+
void start()
  {
   for(int cnt=ObjectsTotal()-1; cnt>=0; cnt--)
     {
      string name=ObjectName(cnt);
      if(ObjectType(name)==OBJ_HLINE)
        {
         if(name==NL)
           {
            dt=ObjectGet(name,OBJPROP_PRICE1);
           }
        }
     }
//---
   if(dt>0)
     {
      ss=ProfitIFTakeInCurrency(MAGIC);
      if(ss>0){pl="+";}
      else{pl="";}
      string LM="Profit/Loss = "+pl+DoubleToStr(ss,2)+" "+AccountCurrency();
      Title(LM);
     }
  }
//+------------------------------------------------------------------+
//|   Show Profit/Loss                                               |
//+------------------------------------------------------------------+
void Title(string Show)
  {
   string name_0="L_1";
   if(ObjectFind(name_0)==-1)
     {
      ObjectCreate(name_0,OBJ_LABEL,0,0,0);
      ObjectSet(name_0,OBJPROP_CORNER,0);
      ObjectSet(name_0,OBJPROP_XDISTANCE,390);
      ObjectSet(name_0,OBJPROP_YDISTANCE,50);
     }
   ObjectSetText(name_0,Show,fs,"Arial",cm);
  }
//+----------------------------------------------------------------------------+
//| Àâòîð: Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                        |
//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//| Calculation:                                                               |
//| mn - MagicNumber                ( -1  - ëþáîé ìàãèê)                       |
//+----------------------------------------------------------------------------+
double ProfitIFTakeInCurrency(int mn)
  {
   int    i, k=OrdersTotal(); // Ïîäñ÷åò îòêðûòûõ ïîçèöèé
   double m;                  // Ñïîñîá ðàñ÷åòà ïðèáûëè: 0 - Forex, 1 - CFD, 2 - Futures
   double l;                  // Ðàçìåð êîíòðàêòà â áàçîâîé âàëþòå èíñòðóìåíòà
   double p;                  // Ðàçìåð ïóíêòà â âàëþòå êîòèðîâêè
   double t;                  // Ìèíèìàëüíûé øàã èçìåíåíèÿ öåíû èíñòðóìåíòà â âàëþòå êîòèðîâêè
   double v;                  // Ðàçìåð ìèíèìàëüíîãî èçìåíåíèÿ öåíû èíñòðóìåíòà â âàëþòå äåïîçèòà
   double s=0;                // Ïîäñ÷åò ñòîïà â âàëþòå äåïîçèòà
//---
   l=MarketInfo(Symbol(), MODE_LOTSIZE);
   m=MarketInfo(Symbol(), MODE_PROFITCALCMODE);
   p=MarketInfo(Symbol(), MODE_POINT);
   t=MarketInfo(Symbol(), MODE_TICKSIZE);
   v=MarketInfo(Symbol(), MODE_TICKVALUE);
//---
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && (mn<0 || OrderMagicNumber()==mn))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(OrderType()==OP_BUY)
                 {
                  if(m==0) s+=(dt-OrderOpenPrice())/p*v*OrderLots();
                  if(m==1) s+=(dt-OrderOpenPrice())/p*v/t/l*OrderLots();
                  if(m==2) s+=(dt-OrderOpenPrice())/p*v*OrderLots();
                  s+=OrderCommission()+OrderSwap();
                 }
               if(OrderType()==OP_SELL)
                 {
                  if(m==0) s+=(OrderOpenPrice()-dt)/p*v*OrderLots();
                  if(m==1) s+=(OrderOpenPrice()-dt)/p*v/t/l*OrderLots();
                  if(m==2) s+=(OrderOpenPrice()-dt)/p*v*OrderLots();
                  s+=OrderCommission()+OrderSwap();
                 }
              }
           }
        }
     }
   return(s);
  }
//+----------------------------------------------------------------------------+

Comments