//+------------------------------------------------------------------+
//|                                                    ConPos_V1.mq4 |
//+------------------------------------------------------------------+

#property copyright "IK"
//#property link      "http://www.3dmarketanalysis.com"

#property indicator_chart_window

extern color  Buy_Color = Blue;
extern color  Sell_Color = Purple;
extern int    Text_Corner_0_to_3 = 2;

int init()
{
  ObjectCreate("Average_Buy_Report",OBJ_LABEL,0,0,0);
  ObjectCreate("Average_Sell_Report",OBJ_LABEL,0,0,0);
  return(0);
}

int deinit()
{
   ObjectDelete("Average_Sell_Line");
   ObjectDelete("Average_Buy_Line");
   ObjectDelete("Average_Sell_Report");
   ObjectDelete("Average_Buy_Report");
   return(0);
}

int start()
  {
   int    counted_bars=IndicatorCounted();
   double Total_Sell_Price=0;
   double Cons_Sell_Price=0;
   double Total_Sell_Size=0;
   double Total_Buy_Price=0;
   double Cons_Buy_Price=0;
   double Total_Buy_Size=0;
   double Long_Profit=0;
   double Short_Profit=0;
   double Long_Locked=0;
   double Short_Locked=0;
   int i;

   if(Text_Corner_0_to_3<0||Text_Corner_0_to_3>3)Text_Corner_0_to_3=0;

   ObjectDelete("Average_Buy_Line");
   ObjectDelete("Average_Sell_Line");
   for(i=0;i<OrdersTotal();i++)
   {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()==Symbol())
      {
         if(OrderType()==OP_BUY)
         {
            Total_Buy_Price += OrderOpenPrice()*OrderLots();
            Total_Buy_Size += OrderLots();
            Long_Profit += OrderProfit() + OrderSwap();
            if(Bid != OrderOpenPrice())
            {
               Long_Locked += ((OrderStopLoss()-OrderOpenPrice())/(Bid-OrderOpenPrice()))*OrderProfit();
            }
         }
         if(OrderType()==OP_SELL)
         {
            Total_Sell_Price += OrderOpenPrice()*OrderLots();
            Total_Sell_Size += OrderLots();
            Short_Profit += OrderProfit() + OrderSwap();
            if(Ask != OrderOpenPrice())
            {
               Short_Locked += ((OrderOpenPrice()-OrderStopLoss())/(OrderOpenPrice()-Ask))*OrderProfit();
            }
         }
      }
      if(Long_Locked>-AccountBalance()) Long_Locked=AccountBalance();   
      if(Long_Locked>-AccountBalance()) Long_Locked=AccountBalance();   
   }
   if(Total_Buy_Price>0)
   {
      Total_Buy_Price /= Total_Buy_Size;
      ObjectCreate("Average_Buy_Line",OBJ_HLINE,0,0,Total_Buy_Price);
      ObjectSet("Average_Buy_Line",OBJPROP_COLOR,Buy_Color);
   }
   if(Total_Sell_Price>0)
   {
      Total_Sell_Price /= Total_Sell_Size;
      ObjectCreate("Average_Sell_Line",OBJ_HLINE,0,0,Total_Sell_Price);
      ObjectSet("Average_Sell_Line",OBJPROP_COLOR,Sell_Color);
   }
 
   ObjectSet("Average_Buy_Report",OBJPROP_CORNER,Text_Corner_0_to_3);
   ObjectSet("Average_Buy_Report",OBJPROP_XDISTANCE,5);
   if(Text_Corner_0_to_3==0||Text_Corner_0_to_3==1) ObjectSet("Average_Buy_Report",OBJPROP_YDISTANCE,14);
   if(Text_Corner_0_to_3==2||Text_Corner_0_to_3==3) ObjectSet("Average_Buy_Report",OBJPROP_YDISTANCE,5);
   ObjectSet("Average_Buy_Report",OBJPROP_COLOR,Buy_Color);
   ObjectSet("Average_Buy_Report",OBJPROP_WIDTH,3);
   ObjectSet("Average_Buy_Report",OBJPROP_BACK,false);
   ObjectSet("Average_Buy_Report",OBJPROP_FONTSIZE,10);
   ObjectSetText("Average_Buy_Report",StringConcatenate("Long: ",Total_Buy_Price,", ",
      Total_Buy_Size," Lots, P/L:",Long_Profit," ",AccountCurrency(),", Risk:",DoubleToStr(Long_Locked,2)," ",AccountCurrency()),10,"Times New Roman");
   ObjectSet("Average_Sell_Report",OBJPROP_CORNER,Text_Corner_0_to_3);
   ObjectSet("Average_Sell_Report",OBJPROP_XDISTANCE,5);
   if(Text_Corner_0_to_3==0||Text_Corner_0_to_3==1) ObjectSet("Average_Sell_Report",OBJPROP_YDISTANCE,30);
   if(Text_Corner_0_to_3==2||Text_Corner_0_to_3==3) ObjectSet("Average_Sell_Report",OBJPROP_YDISTANCE,21);
   ObjectSet("Average_Sell_Report",OBJPROP_COLOR,Sell_Color);
   ObjectSet("Average_Sell_Report",OBJPROP_WIDTH,3);
   ObjectSet("Average_Sell_Report",OBJPROP_BACK,false);
   ObjectSet("Average_Sell_Report",OBJPROP_FONTSIZE,12);
   ObjectSetText("Average_Sell_Report",StringConcatenate("Short: ",Total_Sell_Price,", ",
      Total_Sell_Size," Lots, P/L:",Short_Profit," ",AccountCurrency(),", Risk:",DoubleToStr(Short_Locked,2)," ",AccountCurrency()),10,"Times New Roman");

   return(0);
  }