//+----------------------------------------------------------------------------+ //| GroupOfHistory.mq4 | //| Êèì Èãîðü Â. aka KimIV | //| http://www.kimiv.ru | //| 27.02.2006 Ãðóïïèðîâêà èñòîðèè ñ÷¸òà (Group of History). | //| Ñêðèïò âûïîëíÿåò ÷òåíèå ñïèñêà ñäåëîê èç èñòîðèè ñ÷¸òà, ãðóïïèðóåò | //| äàííûå ïî óêàçàííîìó â ïàðàìåòðàõ ïðèçíàêó è çàïèñûâàåò â ôàéë. | //| 02.02.2006 Äîáàâèë ñòîëáåö ÌàêñÄÄ è ðàñøèðèë ïåðå÷åíü äîïóñòèìûõ | //| çíà÷åíèé ïàðàìåòðà gohGroup: | //| 1-òèï, 2-ñèìâîë, 3-ìàãèê, 4-êîììåíòàðèé | //| 06.02.2006 Ïî ïðîñüáå alextur'à Äîáàâèë ñòîëáåö ÒåêÄÄ. | //| 15.12.2006 Ïî ïðîñüáå Alfa äîáàâèë êîëîíêè ñ äàòîé ïåðâîãî îòêðûòîãî | //| îðäåðà è äàòîé ïîñëåäíåãî çàêðûòîãî. | //+----------------------------------------------------------------------------+ #property copyright "Êèì Èãîðü Â. aka KimIV" #property link "http://www.kimiv.ru" #property show_inputs //------- Âíåøíèå ïàðàìåòðû ñêðèïòà -------------------------------------------- extern string gohOutFileName = "GroupOfHistory.csv"; extern int gohGroup = 3; // 1-òèï, 2-ñèìâîë, 3-ìàãèê, 4-êîììåíòàðèé extern int gohProfit = 1; // 1-ïóíêòû, 2-âàëþòà îðäåðà //+----------------------------------------------------------------------------+ //| script program start function | //+----------------------------------------------------------------------------+ void start() { int i; // Ñ÷¸ò÷èê ñäåëîê int n; // Èíäåêñ ýëåìåíòà ìàññèâà, íîìåð ñòðîêè int ot; // Òèï îïåðàöèè int ks[]; // Êîëè÷åñòâî ñäåëîê string nm[]; // Íàèìåíîâàíèå ãðóïïû double op[], ou[]; // Îáùèå ïðèáûëü è óáûòîê double mb[]; // Ìàêñèìóì áàëàíñà double dd[]; // Ïðîñàäêà, ÌàêñÄÄ double td[]; // Òåêóùàÿ ïðîñàäêà datetime od[]; // Äàòà ïåðâîãî îòêðûòîãî îðäåðà datetime cd[]; // Äàòà ïîñëåäíåãî çàêðûòîãî string st, text=""; FileDelete(gohOutFileName); switch (gohGroup) { case 1: text = "Òèï"; break; case 2: text = "Ñèìâîë"; break; case 3: text = "Ìàãèê"; break; case 4: text = "Êîììåíòàðèé"; break; } text = text + ";×èñò.ïðèá.;Îáù.ïðèá.;Îáù.óá.;ÌàêñÄÄ;ÒåêÄÄ;Ñäåëîê;Ïåðâàÿ;Ïîñëåäíÿÿ"; WritingLineInFile(gohOutFileName, text); for(i = 0; i < HistoryTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { ot = OrderType(); if(ot == OP_BUY || ot == OP_SELL) { switch(gohGroup) { case 1: if(ot == OP_BUY) st = "Buy"; else st = "Sell"; break; case 2: st = OrderSymbol(); break; case 3: if(OrderMagicNumber() == 0) st = ""; else st = OrderMagicNumber(); break; case 4: st = StrTran(OrderComment(), "[sl]", ""); st = StrTran(st, "[tp]", ""); break; } n = ArrayFind(nm, st); if(n + 1 > ArraySize(op)) { ArrayResize(op, n + 1); ArrayResize(ou, n + 1); ArrayResize(mb, n + 1); ArrayResize(dd, n + 1); ArrayResize(td, n + 1); ArrayResize(ks, n + 1); ArrayResize(od, n + 1); ArrayResize(cd, n + 1); } if(OrderProfit() > 0) { if(gohProfit == 2) op[n] += OrderProfit(); else op[n] += MathAbs(OrderOpenPrice() - OrderClosePrice()) / MarketInfo(OrderSymbol(), MODE_POINT); } else { if(gohProfit == 2) ou[n] += OrderProfit(); else ou[n] -= MathAbs(OrderOpenPrice() - OrderClosePrice()) / MarketInfo(OrderSymbol(), MODE_POINT); } if(gohProfit == 2) op[n] += OrderSwap(); if(mb[n] < op[n] + ou[n]) mb[n] = op[n] + ou[n]; td[n] = mb[n] - op[n] - ou[n]; if(dd[n] < td[n]) dd[n] = td[n]; if(od[n] == 0) od[n] = OrderOpenTime(); if(cd[n] < OrderCloseTime()) cd[n] = OrderCloseTime(); ks[n]++; } } } for(i = 0; i < ArraySize(nm); i++) { text = nm[i] + ";" + StrTran(DoubleToStr(op[i] + ou[i], 2), ".", ",") + ";" + StrTran(DoubleToStr(op[i], 2), ".", ",") + ";" + StrTran(DoubleToStr(ou[i], 2), ".", ",") + ";" + StrTran(DoubleToStr(dd[i], 2), ".", ",") + ";" + StrTran(DoubleToStr(td[i], 2), ".", ",") + ";" + StrTran(DoubleToStr(ks[i], 0), ".", ",") + ";" + TimeToStr(od[i], TIME_DATE) + ";" + TimeToStr(cd[i], TIME_DATE); WritingLineInFile(gohOutFileName, text); } text = "Ñôîðìèðîâàí ôàéë " + gohOutFileName; Comment(text); Print(text); } //+----------------------------------------------------------------------------+ //| Èùåò ýëåìåíò ìàññèâà òèïà STRING è âîçâðàùàåò åãî èíäåêñ. | //| Ïðè îòñóòñòâèè èñêîìîãî ýëåìåíòà äîáàâëÿåò íîâûé. | //| Ïàðàìåòðû: | //| nm - ìàññèâ ýëåìåíòîâ òèïà STRING (ïåðåäà¸òñÿ ïî ññûëêå) | //| st - èñêîìîå çíà÷åíèå ýëåìåíòà | //+----------------------------------------------------------------------------+ int ArrayFind(string& nm[], string st) { int i, p; for(i = 0; i < ArraySize(nm); i++) { if(StringLen(st) > 0) { p = StringFind(nm[i], st); if(p >= 0) return(i); } else if(StringLen(nm[i]) == 0) return(i); } i = ArrayResize(nm, ArraySize(nm) + 1) - 1; nm[i] = st; return(i); } //+----------------------------------------------------------------------------+ //| Çàìåíà ïîäñòðîêè | //| Ïàðàìåòðû: | //| str - òåêñòîâàÿ ñòðîêà, â êîòîðîé ïðîèçâîäèòñÿ çàìåíà | //| strfrom - çàìåíÿåìàÿ ïîäñòðîêà | //| strto - çàìåíÿþùàÿ ïîäñòðîêà | //+----------------------------------------------------------------------------+ string StrTran(string str, string strfrom, string strto) { int n; string outstr = "", tempstr; for(n = 0; n < StringLen(str); n++) { tempstr = StringSubstr(str, n, StringLen(strfrom)); if(tempstr == strfrom) { outstr = outstr + strto; n = n + StringLen(strfrom) - 1; } else outstr = outstr + StringSubstr(str, n, 1); } return(outstr); } //+----------------------------------------------------------------------------+ //| Çàïèñü ñòðîêè â ôàéë | //+----------------------------------------------------------------------------+ void WritingLineInFile(string FileName, string text) { int file_handle = FileOpen(FileName, FILE_READ|FILE_WRITE, " "); if(file_handle > 0) { FileSeek(file_handle, 0, SEEK_END); FileWrite(file_handle, text); FileClose(file_handle); } } //+----------------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features:
Uses files from the file system
It writes information to file