Miscellaneous
0
Views
0
Downloads
0
Favorites
eTester2Graph_v01
//+------------------------------------------------------------------+
//| Tester2Graph.mq4 |
//| Copyright © 2010, FXMaster.de |
//| êîä - Ñåðãååâ Àëåêñåé (profy.mql@gmail.com) |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, FXMaster.de"
#property link "profy.mql@gmail.com | Ñåðãååâ Àëåêñåé"
//+------ ÈÍÑÒÐÓÊÖÈß -------------------------------------------------------------------------+
//| 1. Ñêîïèðóéòå îò÷åò òåñòåðà èç Html â Excel |
//| - êîïèðóéòå òîëüêî äàííûå òàáëèöû (áåç øàïêè òàáëèöû) |
//| - çàòåì ñîõðàíèòå ôàéë â ôîðìàòå CSV |
//| 2. Ïîëîæèòå ïîëó÷èâøèéñÿ ôàéëà ïàïêó <Terminal_Path>/experts/files |
//| 3.  ïàðàìåòðàõ èíäèêàòîðà óêàæèòå â ïîëå File èìÿ âàøåãî ïîëó÷èâøåãîñÿ ôàéëà |
//| 4. Åñëè âû õîòèòå âèäåòü íà ãðàôèêå ëèíèè ñäåëîê, òî ïîñòàâüòå ShowDeal=true |
//| 5. Èíäèêàòîð âû÷èñëÿåò ñâîè äàííûå òîëüêî ïðè èíèöèàëèçàöèè (÷òîá íå òîðìîçèòü êîìïüþòåð) |
//+-------------------------------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 LimeGreen
#property indicator_color2 Red
#property indicator_style1 STYLE_SOLID
#property indicator_style2 STYLE_DOT
#property indicator_width1 2
#property indicator_width2 1
extern string File="file.csv"; // èìÿ ôàéëà-îò÷åòà
extern double StartDepo=10000; // ñòàðòîâûé áàëàíñ (äëÿ ïðàâèëüíîãî îòîáðàæåíèÿ êîíå÷íîé ïðèáûëè)
extern int HourShift=0; // ñìåùåíèå ÷àñîâîãî ïîÿñà (äëÿ ñèíõðîíèçàöèè âàøåãî áðîêåðà è áðîêåðà èç îò÷åòà)
extern double Pnt=0.1; // ìíîæèòåëü äëÿ ïÿòèçíàêîâ (äëÿ âû÷èñëåíèÿ ïðàâèëüíîé ïðèáûëè)
extern bool ShowDeal=true; // íàäî ëè ïîêàçûâàòü ëèíèè ñäåëîê íà ãðàôèêå
double B0[], E0[];
bool first;
//------------------------------------------------------- init
int init()
{
first=true;
int i;
i=0; SetIndexBuffer(i, B0); SetLevelValue(i, StartDepo); SetIndexStyle(i, DRAW_LINE); SetIndexLabel(i, "Balance "+File);
i++; SetIndexBuffer(i, E0); SetIndexStyle(i, DRAW_LINE); SetIndexLabel(i, "Equity "+File);
return(0);
}
//------------------------------------------------------- start
int start()
{
if (!first) return; // åñëè óæå âû÷èñëÿëè, òî âûõîäèì
first=false;
int f, i, bar, h, j, max=0, min=-1;
datetime dt; double val, dprof, tp, sl, dlot;
string sn, stype, stick, slot, ssl, stp, spr, sdt, sval, sprof;
double type[], lot[], op[], cl[], prof[], opT[], clT[], opP[], clP[];
ArrayResize(lot, Bars+1); ArrayResize(op, Bars+1); ArrayResize(cl, Bars+1); ArrayResize(prof, Bars+1);
ArrayResize(type, 10000); ArrayResize(opT, 10000); ArrayResize(clT, 10000);
ArrayResize(opP, 10000); ArrayResize(clP, 10000);
ArraySetAsSeries(lot, true); ArraySetAsSeries(op, true); ArraySetAsSeries(cl, true);
ArraySetAsSeries(prof, true);
ArrayInitialize(B0, EMPTY_VALUE); ArrayInitialize(E0, EMPTY_VALUE);
h=FileOpen(File, FILE_READ|FILE_CSV, ';'); if (h<=0) return;
ArrayInitialize(lot, 0); ArrayInitialize(op, -1); ArrayInitialize(cl, -1); ArrayInitialize(prof, 0);
ArrayInitialize(type, 0); ArrayInitialize(opT, 0); ArrayInitialize(clT, 0);
ArrayInitialize(opP, 0); ArrayInitialize(clP, 0);
while (!FileIsEnding(h))
{
sn=FileReadString(h); i=StrToInteger(sn);// íîìåð
if (FileIsEnding(h)) break;
sdt=FileReadString(h); dt=StrToTime(sdt); bar=iBarShift(Symbol(), Period(), dt); // äàòà/áàð
if (sdt=="") break; if (max<bar) max=bar; if (min>bar || min<0) min=bar;
stype=FileReadString(h); // òèï buy/sell/close/ t/p / s/l
stick=FileReadString(h); // òèêåò
slot=FileReadString(h); // îáúåì
spr=FileReadString(h); // öåíà îïåðàöèè
stp=FileReadString(h); // óðîâåíü ÒÏ
ssl=FileReadString(h); // óðîâåíü ÑË
sprof=FileReadString(h); // ïðèáûëü
sval=FileReadString(h); val=StrToDouble(Clear(sval)); // áàëàíñ ñ÷åòà
while (!FileIsLineEnding(h)) sval=FileReadString(h);
i=StrToInteger(stick);
cl[bar]=Close[bar];
tp=StrToDouble(stp); sl=StrToDouble(ssl);
if (stype=="buy" || stype=="sell")
{
type[i]=IIF(stype=="buy", 1, -1); dlot=StrToDouble(slot);
op[bar]=StrToDouble(spr); opP[i]=op[bar]; opT[i]=dt+HourShift*60*60;
for (j=bar; j>=0; j--) { lot[j]=lot[j]+dlot*type[i]; op[j]=op[bar]; }
if (ShowDeal)
{
SetArrow("open"+i, opT[i], opP[i], IIF(type[i]>0, Blue, Red), 1, 0, "open #"+i+" @"+TTS(opT[i])+" | op="+DTS(opP[i])+" t/p="+DTS(tp)+" s/l="+DTS(sl)+" lot="+DTS(dlot));
if (tp>0) SetArrow("t/p"+i, opT[i], tp, IIF(type[i]>0, Blue, Red), 4, 0, "t/p #"+i+" ="+DTS(tp));
if (sl>0) SetArrow("s/l"+i, opT[i], sl, IIF(type[i]>0, Blue, Red), 4, 0, "s/l #"+i+" ="+DTS(sl));
}
}
if (stype=="close" || stype=="t/p" || stype=="s/l")
{
dlot=type[i]*StrToDouble(slot); cl[bar]=StrToDouble(spr); clP[i]=cl[bar]; clT[i]=dt+HourShift*60*60;
for (j=bar; j>=0; j--) lot[j]=lot[j]-dlot;
dprof=(clP[i]-opP[i])/(Point*Pnt); dprof*=dlot; for (j=bar; j>=0; j--) prof[j]=prof[j]+dprof;
if (ShowDeal)
{
SetArrow("close"+i, clT[i], clP[i], IIF(type[i]>0, Blue, Red), 3, 0, "close #"+i+" @"+TTS(clT[i])+" | op="+DTS(opP[i])+" t/p="+DTS(tp)+" s/l="+DTS(sl)+" lot="+DTS(dlot));
SetLine("line"+i, opT[i], opP[i], clT[i], clP[i], IIF(type[i]>0, Blue, Red), 1, STYLE_DOT, "");
}
}
}
FileClose(h);
for(i=Bars-2; i>=0; i--) if (cl[i]<0) { cl[i]=Close[i]; op[i]=op[i+1]; lot[i]=lot[i+1]; }
for(i=max; i>=min; i--) // áàëàíñ
{
val=(cl[i]-op[i])/(Point*Pnt); val*=lot[i]; val+=prof[i];
B0[i]=prof[i]; E0[i]=val;
}
for (i=min; i<=max; i++) { if (B0[i]!=EMPTY_VALUE) B0[i]+=StartDepo; if (E0[i]!=EMPTY_VALUE) E0[i]+=StartDepo; }
return(0);
}
//------------------------------------------------------- Clear
string Clear(string st)
{
int i, n=StringLen(st);
string st0="";
for (i=0; i<n; i++)
if (StringSubstr(st, i, 1)!=" ") st0=st0+StringSubstr(st, i, 1);
return(st0);
}
//------------------------------------------------------------------ SetArrow
void SetArrow(string name, datetime dt, double pr, color clr, int arr, int width, string st)
{
ObjectCreate(name, OBJ_ARROW, 0, dt, pr);
ObjectSet(name, OBJPROP_TIME1, dt); ObjectSet(name, OBJPROP_PRICE1, pr);
ObjectSet(name, OBJPROP_ARROWCODE, arr); ObjectSet(name, OBJPROP_COLOR, clr);
ObjectSetText(name, st); ObjectSet(name, OBJPROP_WIDTH, width);
}
//------------------------------------------------------------------ SetLine
void SetLine(string name, datetime dt1, double pr1, datetime dt2, double pr2, color clr, int width, int style, string st)
{
ObjectCreate(name, OBJ_TREND, 0, 0, 0); ObjectSet(name, OBJPROP_RAY, false);
ObjectSet(name, OBJPROP_TIME1, dt1); ObjectSet(name, OBJPROP_PRICE1, pr1);
ObjectSet(name, OBJPROP_TIME2, dt2); ObjectSet(name, OBJPROP_PRICE2, pr2);
ObjectSet(name, OBJPROP_WIDTH, width); ObjectSet(name, OBJPROP_COLOR, clr);
ObjectSetText(name, st); ObjectSet(name, OBJPROP_STYLE, style);
}
//--------------------------------------------------------------- IIF
double IIF(bool cond, double a1, double a2) { if (cond) return (a1); else return(a2); }
//--------------------------------------------------------------- DTS
string DTS(double d, int n=-1) { if (n<0) return(DoubleToStr(d, Digits)); else return(DoubleToStr(d, n)); }
//--------------------------------------------------------------- TTS
string TTS(datetime time) { return (TimeToStr(time, TIME_DATE|TIME_SECONDS)); }
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
---