Price Data Components
Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
Equity_v8
//+------------------------------------------------------------------+
//| 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);
}
//+----------------------------------------------------------------------------+
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
---