//+------------------------------------------------------------------+ //| Equity_v8.mq4 | //| Copyright © 2008, Xupypr | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, Xupypr" #property indicator_separate_window #property indicator_buffers 8 #property indicator_color1 LightSteelBlue #property indicator_color2 SteelBlue #property indicator_color3 Black #property indicator_color4 LightSteelBlue #property indicator_color5 SteelBlue #property indicator_color6 Black #property indicator_color7 SteelBlue #property indicator_color8 OrangeRed #property indicator_width1 3 #property indicator_width2 3 #property indicator_width3 3 #property indicator_width4 1 #property indicator_width5 1 #property indicator_width6 3 #property indicator_width7 1 #property indicator_width8 2 extern string Only_Comment=""; // Ó÷èòûâàòü îðäåðà òîëüêî ñ íàëè÷èåì óêàçàííîãî êîììåíòàðèÿ (íàïðèìåð [sl] èëè [tp]) extern string Only_Magics=""; // Ó÷èòûâàòü îðäåðà òîëüêî ñ óêàçàííûìè ìàãè÷åñêèìè íîìåðàìè (÷åðåç ëþáîé ðàçäåëèòåëü) extern string Only_Symbols=""; // Ó÷èòûâàòü òîëüêî óêàçàííûå èíñòðóìåíòû (÷åðåç ëþáîé ðàçäåëèòåëü) extern bool Only_Current=false; // Ó÷èòûâàòü òîëüêî òåêóùèé èíñòðóìåíò extern bool Only_Buys=false; // Ó÷èòûâàòü îðäåðà òîëüêî íà ïîêóïêó extern bool Only_Sells=false; // Ó÷èòûâàòü îðäåðà òîëüêî íà ïðîäàæó extern bool Show_Balance=true; // Îòîáðàæàòü áàëàíñ extern bool Show_Equity=true; // Îòîáðàæàòü ñðåäñòâà extern bool Show_Info=false; // Îòîáðàæàòü äîïîëíèòåëüíóþ èíôîðìàöèþ extern bool File_Write=false; // Çàïèñü äàííûõ â ôàéë int ANumber,Window; bool First; double EquityBodyUp[],EquityBodyDown[],MaskBody[],EquityShadeUp[],EquityShadeDown[],MaskShade[],EquityLine[],Balance[]; double CurrentBalance,MaxProfit,Drawdown,MaxPeak,RecoveryFactor; string ShortName; datetime TimeBar; datetime OpenTime_Ticket[][2]; // âðåìÿ îòêðûòèÿ è íîìåð òèêåòà datetime CloseTime[]; // âðåìÿ çàêðûòèÿ int Type[]; // òèï îïåðàöèè string Instrument[]; // èíñòðóìåíò double Lots[]; // êîëè÷åñòâî ëîòîâ double OpenPrice[]; // öåíà îòêðûòèÿ double ClosePrice[]; // öåíà çàêðûòèÿ double Commission[]; // êîìèññèÿ double Swap[]; // íàêîïëåííûé ñâîï double CurSwap[]; // òåêóùèé ñâîï double DaySwap[]; // äíåâíîé ñâîï double Profit[]; // ÷èñòàÿ ïðèáûëü double Magic[]; // ìàãè÷åñêèé íîìåð //+----------------------------------------------------------------------------+ //| Custom indicator initialization function | //+----------------------------------------------------------------------------+ int init() { if (Only_Comment=="" && Only_Magics=="" && Only_Symbols=="" && !Only_Current && !Only_Buys && !Only_Sells) ShortName="Total"; else { if (Only_Comment!="") ShortName=Only_Comment; else ShortName=""; if (Only_Magics!="") ShortName=StringConcatenate(ShortName," ",Only_Magics); if (Only_Symbols!="") ShortName=StringConcatenate(ShortName," ",Only_Symbols); else if (Only_Current) ShortName=StringConcatenate(ShortName," ",Symbol()); if (Only_Sells) Only_Buys=false; if (Only_Buys) ShortName=StringConcatenate(ShortName," Buys"); if (Only_Sells) ShortName=StringConcatenate(ShortName," Sells"); } SetIndexBuffer(0,EquityBodyUp); SetIndexLabel(0,ShortName+" Equity"); SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(1,EquityBodyDown); SetIndexLabel(1,ShortName+" Equity"); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexBuffer(2,MaskBody); SetIndexLabel(2,"Mask"); SetIndexStyle(2,DRAW_HISTOGRAM); SetIndexBuffer(3,EquityShadeUp); SetIndexLabel(3,ShortName+" Equity"); SetIndexStyle(3,DRAW_HISTOGRAM); SetIndexBuffer(4,EquityShadeDown); SetIndexLabel(4,ShortName+" Equity"); SetIndexStyle(4,DRAW_HISTOGRAM); SetIndexBuffer(5,MaskShade); SetIndexLabel(5,"Mask"); SetIndexStyle(5,DRAW_HISTOGRAM); SetIndexBuffer(6,EquityLine); SetIndexLabel(6,ShortName+" Equity"); SetIndexStyle(6,DRAW_LINE); SetIndexBuffer(7,Balance); SetIndexLabel(7,ShortName+" Balance"); SetIndexStyle(7,DRAW_LINE); if (Show_Equity) ShortName=StringConcatenate(ShortName," Equity"); if (Show_Balance) ShortName=StringConcatenate(ShortName," Balance"); IndicatorShortName(ShortName); IndicatorDigits(2); ANumber=AccountNumber(); First=true; TimeBar=0; return(0); } //+----------------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+----------------------------------------------------------------------------+ int deinit() { ObjectsDeleteAll(Window); return(0); } //+----------------------------------------------------------------------------+ //| Custom indicator iteration function | //+----------------------------------------------------------------------------+ int start() { static bool open; string filename,objectname,text,time; static string minfosymbols="",m1symbols=""; static double equityopen,equityhigh,equitylow,equityclose; double spread,lotsize; int handle,beginbar,bar,i,m,j,start,total,historytotal,opentotal; //int tick=GetTickCount(); if (ANumber!=AccountNumber()) { ArrayInitialize(EquityBodyUp,EMPTY_VALUE); ArrayInitialize(EquityBodyDown,EMPTY_VALUE); ArrayInitialize(MaskBody,EMPTY_VALUE); ArrayInitialize(EquityShadeUp,EMPTY_VALUE); ArrayInitialize(EquityShadeDown,EMPTY_VALUE); ArrayInitialize(MaskShade,EMPTY_VALUE); ArrayInitialize(EquityLine,EMPTY_VALUE); ArrayInitialize(Balance,EMPTY_VALUE); ObjectsDeleteAll(Window); ANumber=AccountNumber(); minfosymbols=""; m1symbols=""; First=true; TimeBar=0; } if (!IsConnected()) { Print("Ñâÿçü ñ ñåðâåðîì îòñóòñòâóåò èëè ïðåðâàíà"); return(0); } if (!OrderSelect(0,SELECT_BY_POS,MODE_HISTORY)) return(0); Window=WindowFind(ShortName); if (First) { First=false; MaxProfit=0.0; Drawdown=0.0; MaxPeak=0.0; if (Period()>PERIOD_D1) { Alert("Ïåðèîä íå ìîæåò áûòü áîëüøå D1"); return(0); } historytotal=OrdersHistoryTotal(); opentotal=OrdersTotal(); total=historytotal+opentotal; ArrayResize(OpenTime_Ticket,total); for (i=0;i<historytotal;i++) if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if (Select()) { OpenTime_Ticket[i][0]=OrderOpenTime(); OpenTime_Ticket[i][1]=OrderTicket(); } else { OpenTime_Ticket[i][0]=EMPTY_VALUE; total--; } } if (opentotal>0) { for (i=0;i<opentotal;i++) if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if (Select()) { OpenTime_Ticket[historytotal+i][0]=OrderOpenTime(); OpenTime_Ticket[historytotal+i][1]=OrderTicket(); } else { OpenTime_Ticket[historytotal+i][0]=EMPTY_VALUE; total--; } } } ArraySort(OpenTime_Ticket); ArrayResize(OpenTime_Ticket,total); ArrayResize(CloseTime,total); ArrayResize(Type,total); ArrayResize(Lots,total); ArrayResize(Instrument,total); ArrayResize(OpenPrice,total); ArrayResize(ClosePrice,total); ArrayResize(Commission,total); ArrayResize(Swap,total); ArrayResize(CurSwap,total); ArrayResize(DaySwap,total); ArrayResize(Profit,total); ArrayResize(Magic,total); for (i=0;i<total;i++) if (OrderSelect(OpenTime_Ticket[i][1],SELECT_BY_TICKET)) ReadOrder(i); if (Type[0]<6) { Alert("Èñòîðèÿ ñäåëîê çàãðóæåíà íå ïîëíîñòüþ"); return(0); } if (File_Write) { filename=StringConcatenate(AccountNumber(),"_",Period(),".csv"); handle=FileOpen(filename,FILE_CSV|FILE_WRITE); if (handle<0) { Alert("Îøèáêà #",GetLastError()," ïðè îòêðûòèè ôàéëà"); return(0); } } start=0; CurrentBalance=0.0; beginbar=iBarShift(NULL,0,OpenTime_Ticket[0][0]); for (i=beginbar;i>=0;i--) { open=true; equityopen=0.0; TimeBar=iTime(NULL,0,i); for (m=0;m<Period();m++) { if (TimeBar>TimeCurrent()) break; equityclose=0.0; for (j=start;j<total;j++) { if (OpenTime_Ticket[j][0]>TimeBar+60) break; if (CloseTime[start]<TimeBar) start++; if (CloseTime[j]>=TimeBar && CloseTime[j]<TimeBar+60 && Type[j]>5) { CurrentBalance+=Profit[j]; objectname=StringConcatenate("Time: ",TimeToStr(CloseTime[j])); if (ObjectFind(objectname)==-1) ObjectCreate(objectname,OBJ_VLINE,Window,TimeBar,0); ObjectSetText(objectname,StringConcatenate(Instrument[j],": ",DoubleToStr(Profit[j],2))); ObjectSet(objectname,OBJPROP_TIME1,TimeBar); ObjectSet(objectname,OBJPROP_COLOR,OrangeRed); ObjectSet(objectname,OBJPROP_WIDTH,2); continue; } if (CloseTime[j]>=TimeBar && CloseTime[j]<TimeBar+60 && ClosePrice[j]!=0) CurrentBalance+=Swap[j]+Commission[j]+Profit[j]; else if (Show_Equity && OpenTime_Ticket[j][0]<=TimeBar && CloseTime[j]>=TimeBar) { if (MarketInfo(Instrument[j],MODE_POINT)==0) { if (StringFind(minfosymbols,Instrument[j])==-1) { Alert(" îáçîðå ðûíêà íå õâàòàåò "+Instrument[j]); minfosymbols=StringConcatenate(minfosymbols," ",Instrument[j]); } continue; } bar=iBarShift(Instrument[j],PERIOD_M1,TimeBar); if (iTime(Instrument[j],PERIOD_M1,bar)>TimeBar+300) { if (StringFind(m1symbols,Instrument[j])==-1) { Alert("Îòñóòñòâóåò èñòîðèÿ M1 ïî "+Instrument[j]+" íà÷èíàÿ ñ "+TimeToStr(iTime(Instrument[j],PERIOD_M1,bar))); m1symbols=StringConcatenate(m1symbols," ",Instrument[j]); } continue; } if (open) { if (TimeDayOfWeek(iTime(NULL,0,i))!=TimeDayOfWeek(iTime(NULL,0,i+1)) && OpenTime_Ticket[j][0]<TimeBar) { switch (MarketInfo(Instrument[j],MODE_PROFITCALCMODE)) { case 0: { if (TimeDayOfWeek(iTime(NULL,0,i))==4) CurSwap[j]+=3*DaySwap[j]; else CurSwap[j]+=DaySwap[j]; } break; case 1: { if (TimeDayOfWeek(iTime(NULL,0,i))==1) CurSwap[j]+=3*DaySwap[j]; else CurSwap[j]+=DaySwap[j]; } } } if (Type[j]==OP_BUY) { lotsize=LotSize(Instrument[j],TimeBar,false); equityopen+=Commission[j]+CurSwap[j]+(iOpen(Instrument[j],PERIOD_M1,bar)-OpenPrice[j])*Lots[j]*lotsize; } else { spread=MarketInfo(Instrument[j],MODE_POINT)*MarketInfo(Instrument[j],MODE_SPREAD); lotsize=LotSize(Instrument[j],TimeBar,false); equityopen+=Commission[j]+CurSwap[j]+(OpenPrice[j]-iOpen(Instrument[j],PERIOD_M1,bar)-spread)*Lots[j]*lotsize; } } if (Type[j]==OP_BUY) { lotsize=LotSize(Instrument[j],TimeBar,true); equityclose+=Commission[j]+CurSwap[j]+(iClose(Instrument[j],PERIOD_M1,bar)-OpenPrice[j])*Lots[j]*lotsize; } else { spread=MarketInfo(Instrument[j],MODE_POINT)*MarketInfo(Instrument[j],MODE_SPREAD); lotsize=LotSize(Instrument[j],TimeBar,true); equityclose+=Commission[j]+CurSwap[j]+(OpenPrice[j]-iClose(Instrument[j],PERIOD_M1,bar)-spread)*Lots[j]*lotsize; } } } TimeBar+=60; if (open) { equityopen+=CurrentBalance; equityhigh=equityopen; equitylow=equityopen; open=false; } equityclose+=CurrentBalance; if (equityhigh<equityclose) equityhigh=equityclose; if (equitylow>equityclose) equitylow=equityclose; if (Show_Info) Information(equityclose); } if (Show_Balance) Balance[i]=NormalizeDouble(CurrentBalance,2); if (Show_Equity) { if (equityopen<=equityclose) { EquityBodyUp[i]=NormalizeDouble(equityclose,2); MaskBody[i]=NormalizeDouble(equityopen,2); EquityShadeUp[i]=NormalizeDouble(equityhigh,2); } else { EquityBodyDown[i]=NormalizeDouble(equityopen,2); MaskBody[i]=NormalizeDouble(equityclose,2); EquityShadeDown[i]=NormalizeDouble(equityhigh,2); } MaskShade[i]=NormalizeDouble(equitylow,2); if (equityhigh==equitylow) EquityLine[i]=equityhigh; if (equityclose<0) EquityLine[i]=equityclose; if (File_Write) { time=StringConcatenate(TimeToStr(iTime(NULL,0,i),TIME_DATE),";",TimeToStr(iTime(NULL,0,i),TIME_MINUTES)); if (FileWrite(handle,time,equityopen,equityhigh,equitylow,equityclose,CurrentBalance)<0) Print("Îøèáêà #",GetLastError()," ïðè çàïèñè â ôàéë"); } } } TimeBar=Time[0]; ArrayResize(OpenTime_Ticket,opentotal); if (opentotal>0) { for (i=0;i<opentotal;i++) if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) OpenTime_Ticket[i][1]=OrderTicket(); } if (File_Write) FileClose(handle); } else { if (TimeBar!=Time[0]) { TimeBar=Time[0]; equityopen=0.0; equityclose=0.0; open=true; } if (Only_Comment=="" && Only_Magics=="" && Only_Symbols=="" && !Only_Current && !Only_Buys && !Only_Sells) { if (Show_Balance) Balance[0]=NormalizeDouble(AccountBalance(),2); if (Show_Equity) { if (open) { equityopen=AccountEquity(); equityhigh=equityopen; equitylow=equityopen; open=false; } equityclose=AccountEquity(); if (equityclose<equitylow) equitylow=equityclose; if (equityclose>equityhigh) equityhigh=equityclose; } if (Show_Info) Information(AccountEquity()); } else { opentotal=ArraySize(OpenTime_Ticket); if (opentotal>0) { for (i=0;i<opentotal;i++) { if (!OrderSelect(OpenTime_Ticket[i][1],SELECT_BY_TICKET)) continue; if (OrderCloseTime()==0) continue; else if (Select()) CurrentBalance+=OrderCommission()+OrderSwap()+OrderProfit(); } } equityclose=0.0; opentotal=OrdersTotal(); if (opentotal>0) { for (i=0;i<opentotal;i++) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if (Select()) equityclose+=OrderCommission()+OrderSwap()+OrderProfit(); } } equityclose+=CurrentBalance; if (Show_Balance) Balance[0]=NormalizeDouble(CurrentBalance,2); if (Show_Equity) { if (open) { equityopen=equityclose; equitylow=equityopen; equityhigh=equityopen; open=false; } if (equityclose<equitylow) equitylow=equityclose; if (equityclose>equityhigh) equityhigh=equityclose; } if (Show_Info) Information(equityclose); ArrayResize(OpenTime_Ticket,opentotal); if (opentotal>0) { for (i=0;i<opentotal;i++) if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) OpenTime_Ticket[i][1]=OrderTicket(); } } if (Show_Equity) { if (equityopen<=equityclose) { EquityBodyDown[0]=EMPTY_VALUE; EquityBodyUp[0]=NormalizeDouble(equityclose,2); MaskBody[0]=NormalizeDouble(equityopen,2); EquityShadeDown[0]=EMPTY_VALUE; EquityShadeUp[0]=NormalizeDouble(equityhigh,2); } else { EquityBodyUp[0]=EMPTY_VALUE; EquityBodyDown[0]=NormalizeDouble(equityopen,2); MaskBody[0]=NormalizeDouble(equityclose,2); EquityShadeUp[0]=EMPTY_VALUE; EquityShadeDown[0]=NormalizeDouble(equityhigh,2); } MaskShade[0]=NormalizeDouble(equitylow,2); if (equityhigh==equitylow) EquityLine[0]=equityhigh; else EquityLine[0]=EMPTY_VALUE; } } objectname="Equity Level"; if (ObjectFind(objectname)==-1) ObjectCreate(objectname,OBJ_HLINE,Window,0,equityclose); ObjectSet(objectname,OBJPROP_PRICE1,equityclose); ObjectSet(objectname,OBJPROP_COLOR,LightSlateGray); if (Show_Info) { objectname="Maximal Drawdown"; if (ObjectFind(objectname)==-1) ObjectCreate(objectname,OBJ_LABEL,Window,0,0); text=StringConcatenate(objectname,": ",DoubleToStr(Drawdown,2)); if (MaxPeak>0) text=StringConcatenate(text," (",DoubleToStr(100*Drawdown/MaxPeak,2),"%)"); ObjectSetText(objectname,text); ObjectSet(objectname,OBJPROP_XDISTANCE,10); ObjectSet(objectname,OBJPROP_YDISTANCE,10); ObjectSet(objectname,OBJPROP_CORNER,1); ObjectSet(objectname,OBJPROP_COLOR,Silver); objectname="Recovery Factor"; if (ObjectFind(objectname)==-1) ObjectCreate(objectname,OBJ_LABEL,Window,0,0); if (Drawdown>0) RecoveryFactor=equityclose/Drawdown; text=StringConcatenate(objectname,": ",DoubleToStr(RecoveryFactor,2)); ObjectSetText(objectname,text); ObjectSet(objectname,OBJPROP_XDISTANCE,10); ObjectSet(objectname,OBJPROP_YDISTANCE,30); ObjectSet(objectname,OBJPROP_CORNER,1); ObjectSet(objectname,OBJPROP_COLOR,Silver); } //Print("Calculating - ",GetTickCount()-tick," ms"); return(0); } //+----------------------------------------------------------------------------+ //| ×òåíèå äàííûõ îðäåðà | //+----------------------------------------------------------------------------+ void ReadOrder(int n) { Type[n]=OrderType(); if (OrderType()>5) Instrument[n]=OrderComment(); else Instrument[n]=OrderSymbol(); Lots[n]=OrderLots(); OpenPrice[n]=OrderOpenPrice(); int close; if (OrderCloseTime()!=0) { CloseTime[n]=OrderCloseTime(); ClosePrice[n]=OrderClosePrice(); close=iBarShift(NULL,0,OrderCloseTime()); } else { CloseTime[n]=TimeCurrent(); ClosePrice[n]=0.0; close=0; } Commission[n]=OrderCommission(); Swap[n]=OrderSwap(); Profit[n]=OrderProfit(); CurSwap[n]=0.0; int swapdays=0; int open=iBarShift(NULL,0,OrderOpenTime()); for (int b=open-1;b>=close;b--) { if (TimeDayOfWeek(iTime(NULL,0,b))!=TimeDayOfWeek(iTime(NULL,0,b+1))) { switch (MarketInfo(Instrument[n],MODE_PROFITCALCMODE)) { case 0: { if (TimeDayOfWeek(iTime(NULL,0,b))==4) swapdays+=3; else swapdays++; } break; case 1: { if (TimeDayOfWeek(iTime(NULL,0,b))==1) swapdays+=3; else swapdays++; } } } } if (swapdays>0) DaySwap[n]=Swap[n]/swapdays; else DaySwap[n]=0.0; Magic[n]=OrderMagicNumber(); if (Lots[n]==0) { string ticket=StringSubstr(OrderComment(),StringFind(OrderComment(),"#")+1); if (OrderSelect(StrToInteger(ticket),SELECT_BY_TICKET,MODE_HISTORY)) Lots[n]=OrderLots(); } } //+----------------------------------------------------------------------------+ //| Ðàñ÷¸ò ìàêñèìàëüíîé ïðîñàäêè | //+----------------------------------------------------------------------------+ void Information(double equity) { if (MaxProfit<equity) MaxProfit=equity; if (Drawdown<(MaxProfit-equity)) { Drawdown=MaxProfit-equity; MaxPeak=MaxProfit; } } //+----------------------------------------------------------------------------+ //| Îïðåäåëåíèå ðàçìåðà êîíòðàêòà | //+----------------------------------------------------------------------------+ double LotSize(string symbol, datetime tbar, bool close) { double size; string BQ,currency=AccountCurrency(); switch (MarketInfo(symbol,MODE_PROFITCALCMODE)) { case 0: { int sbar=iBarShift(symbol,PERIOD_M1,tbar); size=MarketInfo(symbol,MODE_LOTSIZE); if (StringSubstr(symbol,3,3)=="USD") break; if (StringSubstr(symbol,0,3)=="USD") { if (close) size=size/iClose(symbol,PERIOD_M1,sbar); else size=size/iOpen(symbol,PERIOD_M1,sbar); } else { BQ=StringSubstr(symbol,0,3)+"USD"; if (iClose(BQ,PERIOD_M1,0)==0) BQ="USD"+StringSubstr(symbol,0,3); if (iClose(BQ,PERIOD_M1,0)==0) break; int BQbar=iBarShift(BQ,PERIOD_M1,tbar); if (StringSubstr(BQ,0,3)=="USD") { if (close) size=size/iClose(BQ,PERIOD_M1,BQbar)/iClose(symbol,PERIOD_M1,sbar); else size=size/iOpen(BQ,PERIOD_M1,BQbar)/iOpen(symbol,PERIOD_M1,sbar); } else { if (close) size=size*iClose(BQ,PERIOD_M1,BQbar)/iClose(symbol,PERIOD_M1,sbar); else size=size*iOpen(BQ,PERIOD_M1,BQbar)/iOpen(symbol,PERIOD_M1,sbar); } } } break; case 1: size=MarketInfo(symbol,MODE_LOTSIZE); break; case 2: size=MarketInfo(symbol,MODE_TICKVALUE)/MarketInfo(symbol,MODE_TICKSIZE); } if (currency!="USD") { BQ=currency+"USD"; if (iClose(BQ,PERIOD_M1,0)==0) { BQ="USD"+currency; if (close) size*=iClose(BQ,PERIOD_M1,iBarShift(BQ,PERIOD_M1,tbar)); else size*=iOpen(BQ,PERIOD_M1,iBarShift(BQ,PERIOD_M1,tbar)); } else { if (close) size/=iClose(BQ,PERIOD_M1,iBarShift(BQ,PERIOD_M1,tbar)); else size/=iOpen(BQ,PERIOD_M1,iBarShift(BQ,PERIOD_M1,tbar)); } } return(size); } //+----------------------------------------------------------------------------+ //| Âûáîð îðäåðà ïî êðèòåðèÿì | //+----------------------------------------------------------------------------+ bool Select() { if (OrderType()>5) return(true); if (OrderType()>1) return(false); if (Only_Comment!="") { if (StringFind(OrderComment(),Only_Comment)==-1) return(false); } if (Only_Magics!="") { if (StringFind(Only_Magics,DoubleToStr(OrderMagicNumber(),0))==-1) return(false); } if (Only_Symbols!="") { if (StringFind(Only_Symbols,OrderSymbol())==-1) return(false); } else if (Only_Current && OrderSymbol()!=Symbol()) return(false); if (Only_Buys && OrderType()!=OP_BUY) return(false); if (Only_Sells && OrderType()!=OP_SELL) return(false); return(true); } //+----------------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Series array that contains open prices of each bar
Series array that contains close prices for each bar
Indicator Curves created:
Implements a curve of type DRAW_HISTOGRAM
Implements a curve of type DRAW_LINE
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of closed orders
Checks for the total of open orders
Other Features:
It issuies visual alerts to the screen
Uses files from the file system
It writes information to file