HistoryInfo_v7

Author: Vladimir Hlystov
Price Data Components
Series array that contains open time of each bar
Orders Execution
Checks for the total of closed ordersChecks for the total of open orders
Miscellaneous
It issuies visual alerts to the screenIt sends emails
0 Views
0 Downloads
0 Favorites
HistoryInfo_v7
//+------------------------------------------------------------------+
//|                                                      HistoryInfo |
//|                               Copyright © 2011, Vladimir Hlystov |
//|                                         http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Vladimir Hlystov"
#property link      "cmillion@narod.ru"
#property indicator_separate_window
extern int        MagikInfo     = 0;              //åñëè 0 òî âñå ìàãèêè
extern int        Shift         = 80;             //øèðèíà ìåæäó ñòîëáöàìè
extern string     SybmolInfo    = "";             //åñëè "" òî âñå èíñòðóìåíòû
extern datetime   DateInfoStart = D'01.01.2010';  //íà÷èíàòü ñ äàòû
extern datetime   DateInfoEnd   = D'01.01.2012';  //çàêàí÷èâàÿ äàòîé
extern color      WhiteColor    = DarkGray;       //öâåò âûâîäà èíôîðìàöèè
extern bool       SendMailInfo  = true;           //îòïðàâêà èíôîðìàöèè íà ïî÷òó
//--------------------------------------------------------------------
string Symbl[100],NameInd = "HistoryInfo_v7";
double HistoryOrders[5][10000],Orders[5][10000],SymbolProfit[100],SymbolHistoryProfit[100],MagikProfit[100],HistoryLot[2][100],TekLot[2][100];
int HistoryType[2][100],TekType[2][100];
int Nsymb,Nmag,Win,Ords=0,hn,Magik[100];
double Today[10];
//--------------------------------------------------------------------
int deinit()
{
   ObjectsDeleteAll(Win);
}
//--------------------------------------------------------------------
int init()
{
return;
}   
//--------------------------------------------------------------------
int start()                                  
{
   string txtInfo;
   if (Win==0)
   {
      Win = WindowFind(NameInd);
      Text("DateInfo",StringConcatenate("Ñêàíèðîâàíèå ñ÷åòà ñ ",TimeToStr(DateInfoStart,TIME_DATE)," ïî ",TimeToStr(DateInfoEnd,TIME_DATE)),500,2,WhiteColor,8);//øàïêà
      string txt;
      if (MagikInfo==0) txt = "Magik íîìåðà - ÂÑÅ";
      else  txt = StringConcatenate("Magik íîìåð - ",MagikInfo);
      Text("Magik",txt,850,2,WhiteColor,8);//øàïêà
      ObjectCreate("c", OBJ_LABEL, Win, 0, 0);
      ObjectSet("c", OBJPROP_CORNER, 2);
      ObjectSet("c", OBJPROP_YDISTANCE, 5);
      ObjectSet("c", OBJPROP_XDISTANCE, 5);
       ObjectSetText("c", "Copyright © 2010 cmillion@narod.ru", 8, "Tahoma", WhiteColor);
      Text("0","Èíôîðìàöèÿ ïî ñ÷åòó "+AccountNumber()+" / "+AccountCompany()+" / 1:"+AccountLeverage(),100,2,WhiteColor,8);//øàïêà
      Text("1"," ",5,20,WhiteColor,8);
      Text("2"," ",5,30,WhiteColor,8);
      Text("3"," ",5,40,WhiteColor,8);
      Text("4"," ",5,50,WhiteColor,8);
      Text("5"," ",5,60,WhiteColor,8);
      Text("History","Èñòîðèÿ",100,20,SteelBlue,10);
      Text("Òåêóøèå","Òåêóøèå",100,93,SteelBlue,10);
      Text("MagikP","Ìàãèê",100,165,SteelBlue,10);
   }
   //---
   int StartShift=180;
   int tn=TekOrders();
   if (Ords>tn || Ords==0)
   {
      hn=HistoryOrders();
      if (hn>10000) {Alert("Ïåðåïîëíåíèå áóôåðà",OrdersHistoryTotal());return;}
      ArrayInitialize(HistoryType,0);
      ArrayInitialize(HistoryLot,0);
      for (int i=0; i<=Nsymb; i++)
      {                                               
         SymbolHistoryProfit[i]=0;
         for (int j=0; j<hn; j++)
         {
            if (i == HistoryOrders[0][j])//Symbol
            {
               SymbolHistoryProfit[i]+=HistoryOrders[2][j];//ïðîôèò 
               if (HistoryOrders[1][j]==OP_BUY) {HistoryType[0][i]++;HistoryLot[0][i]+=HistoryOrders[3][j];}
               if (HistoryOrders[1][j]==OP_SELL) {HistoryType[1][i]++;HistoryLot[1][i]+=HistoryOrders[3][j];}
            }
         }
      }
      double ProfitAll;
      if (SendMailInfo) txtInfo=StringConcatenate("Account statement ",AccountNumber()," ",AccountCompany()," date ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES),"\n\nHistory\n====================\n");
      for (i=0; i<=Nsymb; i++)
      {  
         if (StringLen(Symbl[i])<2) continue;
         Text(Symbl[i],                            Symbl[i],                                                                        StartShift+Shift*i,20,SteelBlue,10);//ñèìâîë
         Text(StringConcatenate(Symbl[i],"profit"),DoubleToStr(SymbolHistoryProfit[i],2),                                           StartShift+Shift*i,35,Color(SymbolHistoryProfit[i]),9);//ïðîôèò
         Text(StringConcatenate(Symbl[i],"lot"),  "òèï   Lot ",                                                                     StartShift+Shift*i,48,SteelBlue,8);//âñåãî Buy
         Text(StringConcatenate(Symbl[i],"b"),     StringConcatenate("B ",HistoryType[0][i],"    ",DoubleToStr(HistoryLot[0][i],2)),StartShift+Shift*i,60,Color(SymbolHistoryProfit[i]),8);//âñåãî Buy
         Text(StringConcatenate(Symbl[i],"s"),     StringConcatenate("S ",HistoryType[1][i],"    ",DoubleToStr(HistoryLot[1][i],2)),StartShift+Shift*i,70,Color(SymbolHistoryProfit[i]),8);//âñåãî Sell
         ProfitAll+=SymbolHistoryProfit[i];
         if (SendMailInfo) 
            txtInfo=StringConcatenate(txtInfo,Symbl[i],"   Buy ",Ch32(HistoryType[0][i],0),"   lot ",Ch32(HistoryLot[0][i],2),"   Sell ",Ch32(HistoryType[1][i],0),"   lot ",Ch32(HistoryLot[1][i],2),"   ",DoubleToStr(SymbolHistoryProfit[i],2),"\n");
      }
      if (SendMailInfo) txtInfo=StringConcatenate(txtInfo,"====================\nTOTAL"," ",DoubleToStr(ProfitAll,2),"\n\n");
      Text("symbolAll","ÈÒÎÃÎ",                 StartShift+Shift*i,20,SteelBlue,10);//øàïêà
      Text("profitAll",DoubleToStr(ProfitAll,2),StartShift+Shift*i,35,Color(ProfitAll),10);//îáùèé ïðîôèò
      i+=2;
      for (j=0; j<10; j++) 
         Text("Yesterday"+j,StringConcatenate(TimeToStr(iTime(NULL,1440,j),TIME_DATE),"  ",DoubleToStr(Today[j],2)),StartShift+Shift*i,20+12*j,Color(Today[j]),10);
   }
   //==================
   //--- òåêóùèå îðäåðà
   //==================
   if (tn>10000) {Alert("Ïåðåïîëíåíèå áóôåðà",OrdersTotal());return;}
   ArrayInitialize(TekType,0);
   ArrayInitialize(TekLot,0);
   for (i=0; i<Nsymb+1; i++)
   {                                               
      SymbolProfit[i]=0;
      for (j=0; j<tn; j++)
      {
         if (i == Orders[0][j])//Symbol
         {
            SymbolProfit[i]+=Orders[2][j];//ïðîôèò 
            if (Orders[1][j]==OP_BUY) {TekType[0][i]++;TekLot[0][i]+=Orders[3][j];}
            if (Orders[1][j]==OP_SELL) {TekType[1][i]++;TekLot[1][i]+=Orders[3][j];}
         }
      }
   }
   ProfitAll=0;
   if (txtInfo!="" && SendMailInfo) txtInfo=StringConcatenate(txtInfo,"\nFloating\n====================\n");
   for (i=0; i<=Nsymb; i++)
   {  
      if (StringLen(Symbl[i])<2) continue;
      Text(StringConcatenate(Symbl[i],"T"),Symbl[i],                                                                      StartShift+Shift*i,93,SteelBlue,10);//ñèìâîë
      Text(StringConcatenate(Symbl[i],"profitT"),DoubleToStr(SymbolProfit[i],2),                                          StartShift+Shift*i,105,Color(SymbolProfit[i]),10);//ïðîôèò
      Text(StringConcatenate(Symbl[i],"bT"),     StringConcatenate("B ",TekType[0][i],"    ",DoubleToStr(TekLot[0][i],2)),StartShift+Shift*i,120,Color(SymbolHistoryProfit[i]),8);//âñåãî Buy
      Text(StringConcatenate(Symbl[i],"sT"),     StringConcatenate("S ",TekType[1][i],"    ",DoubleToStr(TekLot[1][i],2)),StartShift+Shift*i,130,Color(SymbolHistoryProfit[i]),8);//âñåãî Sell
      ProfitAll+=SymbolProfit[i];
      if (txtInfo!="" && SendMailInfo && (TekType[0][i]!=0 || TekType[1][i]!=0)) 
         txtInfo=StringConcatenate(txtInfo,Symbl[i],"   Buy ",Ch32(TekType[0][i],0),"   lot ",Ch32(TekLot[0][i],2),"   Sell ",Ch32(TekType[1][i],0),"   lot ",Ch32(TekLot[1][i],2),"   ",DoubleToStr(SymbolProfit[i],2),"\n");
   }
   if (txtInfo!="") txtInfo=StringConcatenate(txtInfo,"====================\nTOTAL ",DoubleToStr(ProfitAll,2),"\n\n");
   Text("profitAllT",DoubleToStr(ProfitAll,2),StartShift+Shift*i,105,Color(ProfitAll),10);//îáùèé ïðîôèò
   //---
   for (i=0; i<=Nmag; i++)
   {                                               
      MagikProfit[i]=0;
      for (j=0; j<hn; j++)
      {
         if (i == HistoryOrders[4][j])//Magik
         {
            MagikProfit[i]+=HistoryOrders[2][j];//ïðîôèò 
         }
      }
   }
   ProfitAll=0;
   for (i=0; i<=Nmag; i++)
   {  
      if (Magik[i]==0) continue;
      Text(StringConcatenate(Magik[i],"M"),DoubleToStr(Magik[i],0),                    StartShift+Shift*i,165,SteelBlue,10);//ñèìâîë
      Text(StringConcatenate(Magik[i],"profitM"),DoubleToStr(MagikProfit[i],2),StartShift+Shift*i,180,Color(MagikProfit[i]),10);//ïðîôèò
      ProfitAll+=MagikProfit[i];
   }
   Text("magAll","ÈÒÎÃÎ",                     StartShift+Shift*i,165,SteelBlue,10);//øàïêà
   Text("profitAllM",DoubleToStr(ProfitAll,2),StartShift+Shift*i,180,Color(ProfitAll),10);//îáùèé ïðîôèò
   //---
   ObjectSetText("1",StringConcatenate("Orders    ",hn,"+",tn,"+",OrdersTotal()-tn), 8, "Tahoma", WhiteColor);
   ObjectSetText("2",StringConcatenate("Symbols  ",Nsymb+1), 8, "Tahoma", WhiteColor);
   ObjectSetText("3",StringConcatenate("Equity     ",DoubleToStr(AccountEquity(),2)), 8, "Tahoma", WhiteColor);
   ObjectSetText("4",StringConcatenate("Balance   ",DoubleToStr(AccountBalance(),2)), 8, "Tahoma", WhiteColor);
   ObjectSetText("5",StringConcatenate("FreeMar. ",DoubleToStr(AccountFreeMargin(),2)), 8, "Tahoma", WhiteColor);
   if (SendMailInfo && Ords>tn) 
   {
      SendMail(StringConcatenate(NameInd," ",AccountCompany()," ",AccountNumber()),
               StringConcatenate(txtInfo,"\nProfit ",TimeToStr(iTime(NULL,1440,0),TIME_DATE)," = ",DoubleToStr(Today[0],2),
                                 "\nProfit ",TimeToStr(iTime(NULL,1440,1),TIME_DATE)," = ",DoubleToStr(Today[1],2),
                                 "\n\nAll orders ",OrdersTotal()," market ",tn,
                                 "\nEquity     ",DoubleToStr(AccountEquity(),2),
                                 "\nFreeMargin ",DoubleToStr(AccountFreeMargin(),2),
                                 "\nBalance    ",DoubleToStr(AccountBalance(),2)));
   }
   Ords=tn;
}
//--------------------------------------------------------------------
int SymbolNum(string Symb)
{
   for (int i=0; i<100; i++)
   {                                               
      if (Symb==Symbl[i]) return(i);
      if (StringLen(Symbl[i])<2) break;
   }
   Symbl[i]=Symb;
   Nsymb=i;
   return(i);
}
//--------------------------------------------------------------------
int MagikNum(int Magic)
{
   for (int i=0; i<100; i++)
   {                                               
      if (Magic==Magik[i]) return(i);
      if (Magik[i]==0) break;
   }
   Magik[i]=Magic;
   Nmag=i;
   return(i);
}
//--------------------------------------------------------------------
int HistoryOrders()                                  
{
   int n,OMN;
   string Symb;
   datetime OOT,StartInfo=Time[0],EndInfo=0;
   double Profit;
   ArrayInitialize(Today,0);
   ArrayInitialize(HistoryOrders,0);
   for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         Symb = OrderSymbol();
         if (OrderSymbol()!=SybmolInfo && SybmolInfo!="") continue;
         OMN = OrderMagicNumber();
         if (MagikInfo!=OrderMagicNumber() && MagikInfo!=0) continue;
         Profit = OrderProfit()+OrderSwap()+OrderCommission();
         OOT = OrderOpenTime();
         if (OOT>=iTime(NULL,1440,0)) Today[0]+=Profit;
         for (int j=1; j<10; j++) {if (OOT>=iTime(NULL,1440,j) && OOT<iTime(NULL,1440,j-1)) Today[j]+=Profit;}
         if (OOT>=DateInfoStart && OOT<DateInfoEnd)
         {
            if (OrderType()==OP_BUY)
            {
               if (StartInfo>OOT) StartInfo=OOT;
               if (EndInfo<OOT) EndInfo=OOT;
               HistoryOrders[0][n]=SymbolNum(Symb);
               HistoryOrders[1][n]=OP_BUY;
               HistoryOrders[2][n]=Profit;
               HistoryOrders[3][n]=OrderLots();
               HistoryOrders[4][n]=MagikNum(OMN);
               n++;
            }
            if (OrderType()==OP_SELL)
            {
               if (StartInfo>OOT) StartInfo=OOT;
               if (EndInfo<OOT) EndInfo=OOT;
               HistoryOrders[0][n]=SymbolNum(Symb);
               HistoryOrders[1][n]=OP_SELL;
               HistoryOrders[2][n]=Profit;
               HistoryOrders[3][n]=OrderLots();
               HistoryOrders[4][n]=MagikNum(OMN);
               n++;
            }
         }
      }   
      if (n>10000) {Comment("Ïåðåïîëíåíèå áóôåðà",OrdersHistoryTotal());return(n);}
   }
   //---
   string TimeSkan;
   double TS = MathCeil((EndInfo-StartInfo)/86400);   //âðåìÿ ñêàíèðîâàíèÿ â ÷àñàõ
   if (TS>=0)
   {
      if (TS>0) TimeSkan = StringConcatenate(TS," äí.");
      if (TS==0) TimeSkan = "1 äåíü";
   }
   
   if (EndInfo!=0) ObjectSetText("DateInfo", StringConcatenate("Ñêàíèðîâàíèå ñ÷åòà ñ ",TimeToStr(StartInfo,TIME_DATE)," ïî ",TimeToStr(EndInfo,TIME_DATE)," âñåãî ",TimeSkan), 8, "Tahoma", WhiteColor);
   else ObjectSetText("DateInfo",StringConcatenate("Çà äàííûé ïåðèîä ñ ",TimeToStr(DateInfoStart,TIME_DATE)," ïî ",TimeToStr(DateInfoEnd,TIME_DATE)," íå áûëî ñäåëîê"), 8, "Tahoma", Red);
   return(n);
}
//--------------------------------------------------------------------
int TekOrders()                                  
{
   int n,OMN;
   string Symb;
   datetime OOT;
   ArrayInitialize(Orders,0);
   for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         Symb = OrderSymbol();
         if (OrderSymbol()!=SybmolInfo && SybmolInfo!="") continue;
         OMN = OrderMagicNumber();
         if (MagikInfo!=OMN && MagikInfo!=0) continue;
         OOT = OrderOpenTime();
         if (DateInfoStart>=OOT || DateInfoEnd<OOT) continue;
         if (OrderType()==OP_BUY)
         {
            Orders[0][n]=SymbolNum(Symb);
            Orders[1][n]=OP_BUY;
            Orders[2][n]=OrderProfit()+OrderSwap()+OrderCommission();
            Orders[3][n]=OrderLots();
            Orders[4][n]=MagikNum(OMN);
            n++;
         }
         if (OrderType()==OP_SELL)
         {
            Orders[0][n]=SymbolNum(Symb);
            Orders[1][n]=OP_SELL;
            Orders[2][n]=OrderProfit()+OrderSwap()+OrderCommission();
            Orders[3][n]=OrderLots();
            Orders[4][n]=MagikNum(OMN);
            n++;
         }
      }   
      if (n>10000) {Comment("Ïåðåïîëíåíèå áóôåðà",OrdersHistoryTotal());return(n);}
   }
   return(n);
}
//--------------------------------------------------------------------
color Color(double x)
{
   if (x<0) return(Red);
   if (x>0) return(Green);
   else return(WhiteColor);
}
//--------------------------------------------------------------------
color Text(string name, string txt, int x, int y,color C, int w)
{  
   ObjectCreate(name, OBJ_LABEL, Win, 0, 0);
   ObjectSet(name, OBJPROP_CORNER, 0);
   ObjectSet(name, OBJPROP_YDISTANCE, y);
   ObjectSet(name, OBJPROP_XDISTANCE, x);
   ObjectSetText(name,txt,w,"Tahoma", C);
}
//--------------------------------------------------------------------
string Ch32(double n,int k)
{
   string text=DoubleToStr(n,k);
   if (n>1000) return(text);
   if (n>100) return(text+" ");
   if (n>10) return(text+"  ");
   return(text+"   ");
}
//--------------------------------------------------------------------

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 ---