Price Data Components
Orders Execution
Miscellaneous
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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---