informer_v4

Author: Copyright � 2009, Maxim `ax` Sviridov
informer_v4
Orders Execution
Checks for the total of closed ordersChecks for the total of open orders
0 Views
0 Downloads
0 Favorites
informer_v4
//+----------------------------------------------------------------------------+
//|                                                               èíôîðìåð.mq4 |
//|                                      Copyright © 2009, Maxim `ax` Sviridov |
//|                                                 http://ax.tm3912.ru/trade/ |
//|                                                                            |
//| 13.11.2009 Ïîôèêñåíà îøèáêà "zero divide", íåáîëüøàÿ îïòèìèçàöèÿ           | 
//| 30.12.2009 Ìåòêè äëÿ íåçàêðûòûõ ïîçèöèé, ìàãèê-ôèëüòð, óðîâíè TP&SL        |
//|            êîððåêòíîå óäàëåíèå îáúåêòîâ èíäèêàòîðà                         |
//| 07.01.2010 ßçûê Englesh or not (Russian)                                   |
//+----------------------------------------------------------------------------+
#property copyright "Copyright © 2009, Maxim `ax` Sviridov"
#property link      "http://ax.tm3912.ru/trade/"

extern bool   Lang_Eng       = True;   // Englesh or not (Russian)

extern bool   DealMarkers    = True;    // Ðàçìå÷àòü ñäåëêè íà ãðàôèêå èëè íåò
extern bool   DepoStats      = True;    // Îòîáðàæàòü ñòàòèñòèêó ñ÷¸òà
extern bool   ShowLive		  = True;	 // Ïîêàçûâàòü öåíîâûå ìåòêè íà íåçàêðûòûå ïîçèöèè èëè íåò

extern string MagicFilter	  = "";		//	Åñëè çäåñü ïåðå÷èñëèòü MagicNumber (÷åðåç çàïÿòóþ, áåç ïðîáåëîâ)
													//	òî áóäóò îòîáðàæàòüñÿ òîëüêî ñäåëêè ñ ýòèìè ìýäæèêàìè

extern color  clAccName      = Silver;  // Öâåò ïîäïèñè èìåíè âëàäàëüöà àêêàóíòà
extern color  clInfData      = Gray;    // Öâåò ïîäïèñåé ðàçíûõ äàííûõ î ñ÷¸òå
extern int    FontSize       = 8;       // Ðàçìåð øðèôòà
extern int    DigitsLength   = 9;       // Äëèííà äåíåæíûõ öûôð (äëÿ âûðàâíèâàíèÿ) 
extern int    PercentLength  = 5;       // Äëèííà ïðîöåíòíûõ öûôð (äëÿ âûðàâíèâàíèÿ) 


extern color  clLineProfit   = Lime;    // Öâåò ïðèáûëüíûõ ëèíèé
extern color  clLineLoss     = Red;     // Öâåò óáûòî÷íûõ ëèíèé

extern color  clMarkerBuy    = Lime;    // Öâåò ìåòêè ïîêóïêè
extern color  clMarkerSell   = Red;     // Öâåò ìåòêè ïðîäàæè
extern color  clMarkerClose  = Silver;  // Öâåò ìåòêè çàêðûòèÿ îðäåðà


//------- Ãëîáàëüíûå ïåðåìåííûå -----------------------------------------------+

int      X,Y;           // íà÷àëüíûå êîîðäèíàòû
int      i;             // ñ÷¸ò÷èê
int      inf_count;     // êîëè÷åñòâî èíôî-áëîêîâ
string   inf_name[10];  // Ìàññèâ èì¸í èíôî-áëîêîâ
string   inf_data[10];  // Ìàññèâ çíà÷åíèé èíôî-áëîêîâ

int      maxLengthN, maxLengthD;     // Ìàêñèìàëüíàÿ äëèííà (äëÿ âûðàâíèâàíèÿ òåêñòà)
string   accName;                    // Èìÿ àêêàóíòà



#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   X = 10;
   Y = 35;
   inf_count  = 8;            // Ñ÷¸ò, Äåïî, Áàëàíñ, Ïðèáûëü, Ñíÿòèå, Çàëîã, Ïîçèöèÿ, Ñðåäñòâà
   maxLengthN = 13; 
   maxLengthD = 18+(DigitsLength-6); 
   
   for(i=0; i<=inf_count-1; i++) {inf_name[i]="";inf_data[i]="";}
 
   if (Lang_Eng){
      inf_name[0] = "Account ¹: ";
      inf_name[1] = "Deposit: ";
      inf_name[2] = "Balance: ";
      inf_name[3] = "Profit: ";
      inf_name[4] = "Withdraw: ";
      inf_name[5] = "Margin: ";
      inf_name[6] = "Equity-Balance: ";
      inf_name[7] = "Equity: ";
   }else{  
      inf_name[0] = "Ñ÷¸ò ¹: ";
      inf_name[1] = "Äåïîçèò: ";
      inf_name[2] = "Áàëàíñ: ";
      inf_name[3] = "Ïðèáûëü: ";
      inf_name[4] = "Ñíÿòèå: ";
      inf_name[5] = "Çàëîã: ";
      inf_name[6] = "Ïîçèöèÿ: ";
      inf_name[7] = "Ñðåäñòâà: ";
   }

	if(MagicFilter != "") MagicFilter = "," + MagicFilter + ",";

   return(0);
 }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   // óäàëèì âñå îáúåêòû ñîçäàííûå èíäèêàòîðîì
   DeleteIndObjects();
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   if(DepoStats)  // Ïîêàçàòü ñòàòèñòèêó ñ÷¸òà
   {
      string accName     = AccountName();
      string accNumber   = AccountNumber();
      string accCurrency = AccountCurrency();
      double accBalance  = AccountBalance();
      double accMargin   = AccountMargin();
      double accEquity   = AccountEquity();
      double accDepo     = Depo();
      double accProfit   = Profit();
      double accWidch    = Widch();
      
      int md = ((maxLengthN + maxLengthD - StringLen(accName))/2) + StringLen(accName);
      while(StringLen(accName) < md ) accName = accName + " ";
      
      
      string sign="";   // çíàê äëÿ èçìåíåíèÿ â ïðîöåíòàõ
      if (accBalance>accDepo) sign = "+";
      
      if(ObjectFind("AccountName")<0)ObjectCreate("AccountName", OBJ_LABEL, 0, 0, 0);
      ObjectSet("AccountName", OBJPROP_CORNER, 1);
      ObjectSetText("AccountName", accName, FontSize, "Lucida Console", clAccName);
      ObjectSet("AccountName", OBJPROP_XDISTANCE, X);
      ObjectSet("AccountName", OBJPROP_YDISTANCE, Y - 15);


      inf_data[0] = RAlignD(accNumber) + " (" + accCurrency + ") 1:" + AccountLeverage();   // Ñ÷¸ò ¹
      inf_data[1] = RAlignD(DoubleToStr(accDepo,2));
      inf_data[2] = RAlignD(DoubleToStr(accBalance, 2));   // Áàëàíñ
      inf_data[3] = RAlignD(DoubleToStr(accProfit,2));
      inf_data[4] = RAlignD(DoubleToStr(accWidch,2));              // Ñíÿòèå
      inf_data[5] = RAlignD(DoubleToStr(accMargin,2));             // Çàëîã
      inf_data[6] = RAlignD(DoubleToStr(accEquity-accBalance,2)) + " | " + RAlignP(DoubleToStr((accEquity/accBalance-1)*100,2)) + "%";  // 
      inf_data[7] = RAlignD(DoubleToStr(accEquity, 2));            // Ýêâèòè

      if(accDepo>0){
         inf_data[2] = inf_data[2] + " | " + RAlignP(sign + DoubleToStr(accProfit/accDepo*100,2)) + "%" ;
         inf_data[7] = inf_data[7] + " | " + RAlignP(DoubleToStr((accEquity/accDepo-1)*100,2)) + "%";
      }
      
      for(i=0; i<=inf_count-1; i++) // Äëÿ âñåõ èíôî-áëîêîâ îáíîâèì çíà÷åíèÿ
      {  
         //if (inf_name[i]=="") continue; // Ïðîïóñòèì ïóñòûå
         while(StringLen(inf_data[i]) < maxLengthD) inf_data[i] = inf_data[i] + " ";
         if(ObjectFind(inf_name[i])<0) ObjectCreate(inf_name[i], OBJ_LABEL, 0, 0, 0);
         ObjectSet(inf_name[i], OBJPROP_CORNER, 1);
         ObjectSetText(inf_name[i], inf_name[i] + inf_data[i], FontSize, "Lucida Console", clInfData);
         ObjectSet(inf_name[i], OBJPROP_XDISTANCE, X);
         ObjectSet(inf_name[i], OBJPROP_YDISTANCE, Y + i*11);
      }
   }
   // Âèçóàëèçàöèÿ ñäåëîê íà ãðàôèêå
   if (DealMarkers || ShowLive){
      datetime ot, ct;
      double   op, cp, tp, sl;
      int      i,  ty, k, iMagicNum;

		if (DealMarkers){
         k=OrdersHistoryTotal();
         for (i=0; i<k; i++){
            if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){
		    		if(MagicFilter != "") {
		 	  	     	iMagicNum = OrderMagicNumber();
			   		iMagicNum = StringFind(MagicFilter, "," + iMagicNum + ",");
               }
				  else iMagicNum = 1;
            
              ty=OrderType();
				  if (OrderSymbol()==Symbol() && ty<2 && iMagicNum != -1){
                  ot=OrderOpenTime();
                  op=OrderOpenPrice();
                  ct=OrderCloseTime();
                  cp=OrderClosePrice();
                  SetObj(OrderTicket(), ty, ot, op, ct, cp);
               }
            }
         }
      }
      
		if (ShowLive) {
			k=OrdersTotal();
			for (i=0; i<k; i++) {
				if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
					if(MagicFilter != "") {
						iMagicNum = OrderMagicNumber();
						iMagicNum = StringFind(MagicFilter, "," + iMagicNum + ",");
					}
					else iMagicNum = 1;
					ty=OrderType();
					
					if (OrderSymbol()==Symbol() && ty<2 && iMagicNum != -1){
                  ot=OrderOpenTime();
                  op=OrderOpenPrice();
                  tp=OrderTakeProfit();
                  sl=OrderStopLoss();
						SetObj(OrderTicket(), ty, ot, op, 0, 0, tp, sl);
					}
				}
			}
		}
   }
   return(0);
  }
//+----------------------------------------------------------------------------+

//+----------------------------------------------------------------------------+
string RAlignD(string s="") {
while(StringLen(s) < DigitsLength) s = StringConcatenate(" ", s);
return(s);}
//+----------------------------------------------------------------------------+
string RAlignP(string s="") {
while(StringLen(s) < PercentLength+3) s = StringConcatenate(" ", s);
return(s);}
//+----------------------------------------------------------------------------+
double Depo(){int y=0; double d=0;
for(y=0;y<OrdersHistoryTotal();y++){OrderSelect(y,SELECT_BY_POS,MODE_HISTORY);
if(OrderType()==6 && OrderProfit()>0) d+=OrderProfit();}
return(d);}
//+----------------------------------------------------------------------------+
double Widch(){int y=0; double w=0;
for(y=0;y<OrdersHistoryTotal();y++){OrderSelect(y,SELECT_BY_POS,MODE_HISTORY);
if(OrderType()==6 && OrderProfit()<0) w+=OrderProfit();}
return(w);}
//+----------------------------------------------------------------------------+
double Profit(){int y=0; double p=0;
for(y=0;y<OrdersHistoryTotal();y++){OrderSelect(y,SELECT_BY_POS,MODE_HISTORY);
if(OrderType()<2) p+=OrderProfit()+OrderSwap()+OrderCommission();}
return(p);}
//+----------------------------------------------------------------------------+
//|  SetObj: óñòàíîâêà îáúåêòîâ                                                |
//|  Ïàðàìåòðû:                                                                |
//|    or - íîìåð îáúåêòà                                                      |
//|    ty - îïåðàöèÿ                                                           |
//|    ot - äàòà, âðåìÿ îòêðûòèÿ                                               |
//|    op - öåíà îòêðûòèÿ                                                      |
//|    ct - äàòà, âðåìÿ çàêðûòèÿ                                               |
//|    cp - öåíà çàêðûòèÿ                                                      |
//|    tp - öåíà òåéê-ïðîôèòà                                                  |
//|    sl - öåíà ñòîï-ëîñà                                                     |
//+----------------------------------------------------------------------------+
void SetObj(int or, int ty, datetime ot, double op, datetime ct=0, double cp=0, double tp=0, double sl=0)
{

   datetime tc = TimeCurrent()-(240*Period());
   datetime tf = TimeCurrent()+(600*Period());


   // Ëèíèÿ îò îòêðûòèÿ äî çàêðûòèÿ ñäåëêè
   if (ct!=0)
   {
      string no="Deal";

      if(ObjectFind(no+or)<0) ObjectCreate(no+or, OBJ_TREND, 0, 0, 0, 0, 0);
         ObjectSet(no+or, OBJPROP_STYLE, STYLE_DOT);
         ObjectSet(no+or, OBJPROP_TIME1 , ot);
         ObjectSet(no+or, OBJPROP_PRICE1, op);
         ObjectSet(no+or, OBJPROP_TIME2 , ct);
         ObjectSet(no+or, OBJPROP_PRICE2, cp);
   
      if(ty==OP_BUY){
         if (op<cp) ObjectSet(no+or, OBJPROP_COLOR, clLineProfit);
         if (op>cp) ObjectSet(no+or, OBJPROP_COLOR, clLineLoss);
      }
  
      if(ty==OP_SELL){
         if (op>cp) ObjectSet(no+or, OBJPROP_COLOR, clLineProfit);
         if (op<cp) ObjectSet(no+or, OBJPROP_COLOR, clLineLoss);
      }
      
      ObjectSet(no+or, OBJPROP_RAY , False);
      
      // óäàëÿåì óæå íå íóæíîå
      if (ObjectFind("ADealTP"+or)!=-1)      ObjectDelete("ADealTP"+or);  
      if (ObjectFind("ADealTP-l-"+or)!=-1)   ObjectDelete("ADealTP-l-"+or);  
      if (ObjectFind("ADealSL"+or)!=-1)      ObjectDelete("ADealSL"+or);  
      if (ObjectFind("ADealSL-l-"+or)!=-1)   ObjectDelete("ADealSL-l-"+or);  
    }

   // Ìåòêè îòêðûòèÿ ñäåëîê   
   no="ADealOp";
   if (ObjectFind(no+or)<0) ObjectCreate(no+or, OBJ_ARROW, 0, 0,0); ObjectSet(no+or, OBJPROP_TIME1, ot);
   if (ty==OP_BUY){
      ObjectSet(no+or, OBJPROP_PRICE1   , op);
      ObjectSet(no+or, OBJPROP_COLOR    , clMarkerBuy);
      ObjectSet(no+or, OBJPROP_ARROWCODE, SYMBOL_LEFTPRICE);
   }
   if (ty==OP_SELL){
      ObjectSet(no+or, OBJPROP_PRICE1   , op);
      ObjectSet(no+or, OBJPROP_COLOR    , clMarkerSell);
      ObjectSet(no+or, OBJPROP_ARROWCODE, SYMBOL_LEFTPRICE);
   }

   // Ìåòêè çàêðûòèÿ ñäåëîê   
   if (cp!=0){
      no="ADealCl";
      if (ObjectFind(no+or)<0) ObjectCreate(no+or, OBJ_ARROW, 0, 0,0); ObjectSet(no+or, OBJPROP_TIME1, ct);
      ObjectSet(no+or, OBJPROP_PRICE1  , cp);
      ObjectSet(no+or, OBJPROP_COLOR   , clMarkerClose);
      ObjectSet(no+or, OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
   }
   
   // Ìåòêè òåéê-ïðîôèòà
   if (tp!=0)
   {
      no="ADealTP";
      
      if (ObjectFind(no+or)<0) ObjectCreate(no+or, OBJ_ARROW, 0, 0,0); ObjectSet(no+or, OBJPROP_TIME1, tf);
      ObjectSet(no+or, OBJPROP_PRICE1  , tp);
      ObjectSet(no+or, OBJPROP_COLOR   , clLineProfit);
      ObjectSet(no+or, OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
      
      if(ObjectFind(no+"-l-"+or)<0) ObjectCreate(no+"-l-"+or, OBJ_TREND, 0, 0, 0, 0, 0);
         ObjectSet(no+"-l-"+or, OBJPROP_RAY , False);
         ObjectSet(no+"-l-"+or, OBJPROP_STYLE, STYLE_SOLID);
         ObjectSet(no+"-l-"+or, OBJPROP_TIME1 , tc);
         ObjectSet(no+"-l-"+or, OBJPROP_PRICE1, tp);
         ObjectSet(no+"-l-"+or, OBJPROP_TIME2 , tf+60*Period());
         ObjectSet(no+"-l-"+or, OBJPROP_PRICE2, tp);
         ObjectSet(no+"-l-"+or, OBJPROP_COLOR, clLineProfit);
   } 
   

   // Ìåòêè ñòîï-ëîñà   
   if (sl!=0)
   {
      no="ADealSL";
      
      if (ObjectFind(no+or)<0) ObjectCreate(no+or, OBJ_ARROW, 0, 0,0); ObjectSet(no+or, OBJPROP_TIME1, tf);
      ObjectSet(no+or, OBJPROP_PRICE1  , sl);
      ObjectSet(no+or, OBJPROP_COLOR   , clLineLoss);
      ObjectSet(no+or, OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
      
      if(ObjectFind(no+"-l-"+or)<0) ObjectCreate(no+"-l-"+or, OBJ_TREND, 0, 0, 0, 0, 0);
         ObjectSet(no+"-l-"+or, OBJPROP_RAY , False);
         ObjectSet(no+"-l-"+or, OBJPROP_STYLE, STYLE_SOLID);
         ObjectSet(no+"-l-"+or, OBJPROP_TIME1 , tc);
         ObjectSet(no+"-l-"+or, OBJPROP_PRICE1, sl);
         ObjectSet(no+"-l-"+or, OBJPROP_TIME2 , tf+60*Period());
         ObjectSet(no+"-l-"+or, OBJPROP_PRICE2, sl);
         ObjectSet(no+"-l-"+or, OBJPROP_COLOR, clLineLoss);
   } 
}
//+----------------------------------------------------------------------------+
void DeleteIndObjects()
{
   int ot, iMagicNum;
   
   // Óäàëèòü ñòàò-äàííûå
   ObjectDelete("AccountName");
   for(i=0; i<=inf_count-1; i++) ObjectDelete(inf_name[i]);
   
   // Óäàëèòü ìàðêåðû ïîçèöèé
   if (DealMarkers){
      int i,  ty, k=OrdersHistoryTotal();
      for (i=0; i<k; i++){
         if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){
            ty=OrderType();
            ot=OrderTicket();
            if (OrderSymbol()==Symbol() && ty<2){
               ObjectDelete("ADealOp"+ot);
               ObjectDelete("ADealCl"+ot);
               ObjectDelete("Deal"+ot);
            }
         }
      }
   }
   
   if (ShowLive){
      if (OrdersTotal()>0){
 			k=OrdersTotal();
			for (i=0; i<k; i++) {
				if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
					if(MagicFilter != "") {
						iMagicNum = OrderMagicNumber();
						iMagicNum = StringFind(MagicFilter, "," + iMagicNum + ",");
					}
					else iMagicNum = 1;
					ty=OrderType();
					ot=OrderTicket();
					if (OrderSymbol()==Symbol() && ty<2 && iMagicNum != -1){
                  ObjectDelete("ADealOp"+ot);
                  ObjectDelete("ADealTP"+ot);
                  ObjectDelete("ADealTP-l-"+ot);
                  ObjectDelete("ADealSL"+ot);
                  ObjectDelete("ADealSL-l-"+ot);
					}
				}
			}
      }
   }
}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---