HistoryInfo_v5

Author: ������� ��������
Orders Execution
Checks for the total of open ordersChecks for the total of closed orders
Miscellaneous
It issuies visual alerts to the screenIt sends emails
0 Views
0 Downloads
0 Favorites
HistoryInfo_v5
//+------------------------------------------------------------------+
//|                                                      HistoryInfo |
//|                               Copyright © 2010, Vladimir Hlystov |
//|                                         http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Õëûñòîâ Âëàäèìèð"
#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];
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];
//--------------------------------------------------------------------
int deinit()
{
   ObjectsDeleteAll(Win);
}
//--------------------------------------------------------------------
int init()
{
return;
}   
//--------------------------------------------------------------------
int start()                                  
{
   string txtInfo;
   if (Win==0)
   {
      Win = WindowFind("HistoryInfo_v5");
      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("History","Èñòîðèÿ",100,20,SteelBlue,10);//øàïêà
      Text("Òåêóøèå","Òåêóøèå",100,93,SteelBlue,10);//øàïêà
      Text("MagikP","Ìàãèê",100,165,SteelBlue,10);//øàïêà
   }
   //---
   int StartShift=180;
   if (OrdersTotal()<Ords || 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("Îò÷åò ïî ñ÷åòó ",AccountNumber()," ",AccountCompany()," îò ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES),"\n\nÈñòîðèÿ\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,WhiteColor,8);//âñåãî Buy
         Text(StringConcatenate(Symbl[i],"s"),     StringConcatenate("S ",HistoryType[1][i],"    ",DoubleToStr(HistoryLot[1][i],2)),StartShift+Shift*i,70,WhiteColor,8);//âñåãî Sell
         ProfitAll+=SymbolHistoryProfit[i];
         if (SendMailInfo) 
            txtInfo=StringConcatenate(txtInfo,Symbl[i],"   ",DoubleToStr(SymbolHistoryProfit[i],2),"   Buy ",HistoryType[0][i],"   lot ",DoubleToStr(HistoryLot[0][i],2),"   Sell ",HistoryType[1][i],"   lot ",DoubleToStr(HistoryLot[1][i],2),"\n");
      }
      if (SendMailInfo) txtInfo=StringConcatenate(txtInfo,"\nÈÒÎÃÎ"," ",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);//îáùèé ïðîôèò
   }
   //==================
   //--- òåêóùèå îðäåðà
   //==================
   int tn=TekOrders();
   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,"\n\nÒåêóøèå\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,WhiteColor,8);//âñåãî Buy
      Text(StringConcatenate(Symbl[i],"sT"),     StringConcatenate("S ",TekType[1][i],"    ",DoubleToStr(TekLot[1][i],2)),StartShift+Shift*i,130,WhiteColor,8);//âñåãî Sell
      ProfitAll+=SymbolProfit[i];
      if (txtInfo!="" && SendMailInfo) 
         txtInfo=StringConcatenate(txtInfo,Symbl[i],"   ",DoubleToStr(SymbolProfit[i],2),"   Buy ",TekType[0][i],"   lot ",DoubleToStr(HistoryLot[0][i],2),"   Sell ",TekType[1][i],"   lot",DoubleToStr(HistoryLot[1][i],2),"\n");
   }
   if (txtInfo!="") txtInfo=StringConcatenate(txtInfo,"\nÈÒÎÃÎ","",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), 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);
   if (SendMailInfo && Ords>OrdersTotal()) 
   {
      SendMail(StringConcatenate("HistoryInfo ",AccountCompany()," ",AccountNumber()),
               StringConcatenate(txtInfo,"\nOrders ",OrdersTotal(),
                                 "\nEquity ",DoubleToStr(AccountEquity(),2),
                                 "\nFreeMargin ",DoubleToStr(AccountFreeMargin(),2),
                                 "\nBalance ",DoubleToStr(AccountBalance(),2)));
   }
/*   if (txtInfo!="") 
   {
      Comment(txtInfo,"\nOrders ",OrdersTotal(),
             "\nEquity ",DoubleToStr(AccountEquity(),2),
             "\nFreeMargin ",DoubleToStr(AccountFreeMargin(),2),
             "\nBalance ",DoubleToStr(AccountBalance(),2));
   }*/
   Ords=OrdersTotal();
}
//--------------------------------------------------------------------
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;
   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;
         OOT = OrderOpenTime();
         if (DateInfoStart>=OOT || DateInfoEnd<OOT) continue;
         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]=OrderProfit()+OrderSwap()+OrderCommission();
            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]=OrderProfit()+OrderSwap()+OrderCommission();
            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);
   else return(Green);
}
//--------------------------------------------------------------------
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);
}
//--------------------------------------------------------------------

Comments