eTester2Graph_v01

Author: Copyright � 2010, FXMaster.de
Miscellaneous
Implements a curve of type %1Uses files from the file systemIt reads information from a file
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 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 ---