//+——————————————————————+
//| EA Close All.mq4 |
//| Copyright © Master Forex – 2017 |
//| https://www.mql5.com/en/users/Master_Forex/portfolio |
//+——————————————————————+
#property copyright “Copyright © Master Forex – 2017”
#property link “https://www.mql5.com/en/users/Master_Forex/portfolio”
#property version “1.00”
#property strict
#property description “Created – 02.05.2017 11:59″
#property description ” ”
#property description “Customer: Ryan Brown ( https://www.mql5.com/en/users/cubbybgood )”
#include <stdlib.mqh>
input string EAComment = “EA Close All”;// EA Comment
input int MagicNumber = 0; // Magic Number
input bool ShowInfo = 1; // Show Info to Chart
input ENUM_BASE_CORNER Corner = 1; // Info Corner
input string CloseAtPipsProfits = “——————–< Close by Pips Profit >——————–“;//Close by Pips Profit ……………………………………………………………………………………………..
input bool UseCloseAtPipsProfits = 0; // Close by Pips Profit
input int PipsProfit = 5; // Profit in Pips
input string CloseAtProfits = “——————–< Close by $ Profit >——————–“;//Close by $ Profit ……………………………………………………………………………………………..
input bool UseCloseAtProfits = 0; // Close by $ Profit
input double Profit = 5; // Profit in $
input string ClosePercentLoss = “——————–< Close by % Loss >——————–“;//Close by % Loss ……………………………………………………………………………………………..
input bool CloseAtPercentLoss = 0; // Close by % Loss
input double PercentLoss = 5; // Loss %
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH//
double ClosingArray[100], DrawDowns=0, DDBuffer=0, Drawdown=0;int Pip=1, lotdigit=0;string text[26], prefix=””;
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH//
//+——————————————————————+
//| Expert initialization function |
//+——————————————————————+
void OnInit()
{
ArrayResize(text,26);
int digits=(int)MarketInfo(Symbol(),MODE_DIGITS);
double bid=(int)MarketInfo(Symbol(),MODE_BID);
if(digits==4 || (bid<1000 && digits==2)){ Pip=1;} else Pip=10;
if(IsTesting()) prefix=”Test”+IntegerToString(MagicNumber);
else prefix=IntegerToString(MagicNumber);
return;
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH//
//+——————————————————————+
//| Expert deinitialization function |
//+——————————————————————+
void OnDeinit(const int reason)
{
if(!IsTesting()){
for(int i= ObjectsTotal(); i>=0; i–)
{
string name= ObjectName(i);
if(StringSubstr(name,0,4)==”Info”)
{
ObjectDelete(name);}
}
} else GVDel(prefix);
return;
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH//
//+——————————————————————+
//| Expert tick function |
//+——————————————————————+
void OnTick()
{
OrdersClose();if(!IsOptimization()) PrintInfo();
return;
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH//
//+——————————————————————+
//| Orders Close |
//+——————————————————————+
void OrdersClose()
{
if(UseCloseAtPipsProfits && 0 < Orders(-1) && CheckPipsProfit(-1)> PipsProfit && GVGet(“EPPb”)==0){ GVSet(“EPPb”,1);}
if(UseCloseAtPipsProfits && 0 < Orders(-1) && GVGet(“EPPb”)==1){ if(CloseOrders(-1,FIFO(-1))){ Print(“-> Exit with pips profits!”);}}
if(UseCloseAtProfits && CheckProfit(-1) > 0 && CheckProfit(-1) >= Profit && GVGet(“EPb”)==0){ GVSet(“EPb”,1);}
if(UseCloseAtProfits && 0 < Orders(-1) && GVGet(“EPb”)==1){ if(CloseOrders(-1,FIFO(-1))){ Print(“-> Exit with $ profits!”);}}
if(CloseAtPercentLoss && 0 < Orders(-1) && CheckProfit(-1) < 0 && MathAbs(CheckProfit(-1))> (PercentLoss*AccountBalance()/100) && GVGet(“EPlb”)==0){ GVSet(“EPlb”,1);}
if(CloseAtPercentLoss && 0 < Orders(-1) && GVGet(“EPlb”)==1){ if(CloseOrders(-1,FIFO(-1))){ Print(“-> Exit with % loss!”);}}
if(1 > Orders(-1)){ GVSet(“EPPb”,0);GVSet(“EPb”,0);GVSet(“EPlb”,0);}
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH//
//+——————————————————————+
//| Check Pips Profit |
//+——————————————————————+
double CheckPipsProfit(int type) //-1= All,0=Buy,1=Sell;
{
double Profitb=0, Profits=0; string sym=””;
for(int i=OrdersTotal()-1;i>=0;i–)
{
bool os = OrderSelect(i,SELECT_BY_POS, MODE_TRADES);
if(MagicNumber == 0 || OrderMagicNumber() == MagicNumber)
{
if(OrderType()==OP_BUY){
Profitb=Profitb+(((MarketInfo(OrderSymbol(),MODE_BID))-OrderOpenPrice())/point(OrderSymbol()));}
if(OrderType()==OP_SELL){
Profits=Profits+((OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK))/point(OrderSymbol()));}
}}
if(0==type){ return(Profitb);}
if(1==type){ return(Profits);}
if(-1==type){ return(Profits+Profitb);}
return(0);
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH//
//+——————————————————————+
//| Check $ Profit |
//+——————————————————————+
double CheckProfit(int type) //-1= All,0=Buy,1=Sell;
{
double Profitb=0,Profits=0;
for(int i=OrdersTotal()-1;i>=0;i–)
{
bool os = OrderSelect(i,SELECT_BY_POS, MODE_TRADES);
if(MagicNumber == 0 || OrderMagicNumber() == MagicNumber)
{
if(OrderType()==OP_BUY){ Profitb+=OrderProfit()+OrderSwap()+OrderCommission();}
if(OrderType()==OP_SELL){ Profits+=OrderProfit()+OrderSwap()+OrderCommission();}
}}
if(0==type){ return(Profitb);}
if(1==type){ return(Profits);}
if(-1==type){ return(Profits+Profitb);}
return(0);
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH//
//+————————————————————+
//| Close Orders |
//+————————————————————+
bool CloseOrders(int type, int tick)
{
bool oc=0;
bool os = OrderSelect(tick,SELECT_BY_TICKET, MODE_TRADES);
if(MagicNumber == 0 || OrderMagicNumber() == MagicNumber)
{
if(type==-1){
if(OrderType()==0){ oc = OrderClose(tick,OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),1000,clrGold);}
if(OrderType()==1){ oc = OrderClose(tick,OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),1000,clrGold);}
if(OrderType()>1){ oc = OrderDelete(tick);}}
if(OrderType()==type && type==0){ oc = OrderClose(tick,OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),1000,clrGold);}
if(OrderType()==type && type==1){ oc = OrderClose(tick,OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),1000,clrGold);}
if(OrderType()==type && OrderType()> 1){ oc = OrderDelete(tick);}
if(OrderType()==0 && type==6){ oc = OrderClose(tick,OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),1000,clrGold);}
if((OrderType()==2 || OrderType()== 4) && type==6){ oc = OrderDelete(tick);}
if(OrderType()==1 && type==7){ oc = OrderClose(tick,OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),1000,clrGold);}
if((OrderType()==3 || OrderType()== 5) && type==7){ oc = OrderDelete(tick);}
for(int x=0;x<100;x++)
{
if(ClosingArray[x]==0)
{
ClosingArray[x]=OrderTicket();
break; } } }
return(oc);
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH//
//+——————————————————————+
//| Get total order |
//+——————————————————————+
int Orders(int type)
{
int count=0;
//-1= All,0=Buy,1=Sell,2=BuyLimit,3=SellLimit,4=BuyStop,5=SellStop,6=AllBuy,7=AllSell,8=AllMarket,9=AllPending;
for(int x=OrdersTotal()-1;x>=0;x–)
{
if(OrderSelect(x,SELECT_BY_POS,MODE_TRADES))
{
if(type < 0){ count++;}
if(OrderType() == type && type >= 0){ count++;}
if(OrderType() <= 1 && type == 8){ count++;}
if(OrderType() > 1 && type == 9){ count++;}
if((OrderType() == 0 || OrderType() == 2 || OrderType() == 4) && type == 6){ count++;}
if((OrderType() == 1 || OrderType() == 3 || OrderType() == 5) && type == 7){ count++;}}
}
return(count);
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH//
//+——————————————————————+
//| Print info to chart |
//+——————————————————————+
void PrintInfo()
{
string Current = “NO ORDER”;
if(CurrentProfit()!=0){ Current = DoubleToStr(CurrentProfit(),2);}
if(AccountBalance()!=0){ DrawDowns = DrawDown()*100.0/AccountBalance();}
if(ShowInfo){
text[1]= EAComment;
text[2]= “——————————————-“;
text[3]= “Spread: ” + DoubleToStr(MarketInfo(Symbol(), MODE_SPREAD)/Pip, 2);
text[4]= “Time Current: ” + TimeToStr(TimeCurrent());
text[5]= “——————————————-“;
text[6]= “Account Number: ” + IntegerToString(AccountNumber());
text[7]= “Account Leverage: ” + IntegerToString(AccountLeverage());
text[8]= “Account Balance: ” + DoubleToStr(AccountBalance(), 2);
text[9]= “Account Equity: ” + DoubleToStr(AccountEquity(), 2);
text[10]= “Free Margin: ” + DoubleToStr(AccountFreeMargin(), 2);
text[11]= “Used Margin: ” + DoubleToStr(AccountMargin(), 2);
text[12]= “Max. Draw Down: ” + DoubleToStr(DrawDown(), 2)+”(“+DoubleToStr(DrawDowns,2)+”%””)”;
text[13]= “Account Today Profit: ” + DoubleToStr(DailyProfits(), 2);
text[14]= “Current Profit: ” + Current;
text[15]= “——————————————-“;
int i=1, k=20;
while (i<=15)
{
string ChartInfo = “Info”+IntegerToString(i);
ObjectCreate(ChartInfo, OBJ_LABEL, 0, 0, 0);
ObjectSetText(ChartInfo, text[i], 9, “Arial”, Aqua);
ObjectSet(ChartInfo, OBJPROP_CORNER, Corner);
ObjectSet(ChartInfo, OBJPROP_XDISTANCE, 7);
ObjectSet(ChartInfo, OBJPROP_YDISTANCE, k);
i++;
k=k+13;
}
}
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH//
//+———————————————————————————-+
//| Daily Profit |
//+———————————————————————————-+
double DailyProfits()
{
double DayProfits=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool os = OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(TimeDayOfYear(OrderCloseTime())==DayOfYear()){
DayProfits=DayProfits+OrderProfit()+OrderSwap()+OrderCommission();}
}
for(int i = 0; i < OrdersTotal(); i++)
{
bool Os = OrderSelect(i,SELECT_BY_POS, MODE_TRADES);
if(TimeDayOfYear(OrderOpenTime())==DayOfYear()){
DayProfits=DayProfits+OrderProfit()+OrderSwap()+OrderCommission();}
}
return(DayProfits);
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH//
//+———————————————————————————-+
//| Current Profit |
//+———————————————————————————-+
double CurrentProfit()
{
double Profits=0;
for(int i = 0;i < OrdersTotal();i++)
{
bool Os = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
Profits=Profits+OrderProfit()+OrderSwap()+OrderCommission();
}
return(Profits);
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH//
//+———————————————————————————-+
//| Get Draw Down |
//+———————————————————————————-+
double DrawDown()
{
double DD=AccountBalance()-AccountEquity();
if(DD>DDBuffer)DDBuffer=DD;
return(DDBuffer);
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH//
//+——————————————————————+
//| Check Symbol Points |
//+——————————————————————+
double point(string symbol=NULL)
{
string sym=symbol;if(symbol==NULL) sym=Symbol();
double bid=(int)MarketInfo(sym,MODE_BID);
int digits=(int)MarketInfo(sym,MODE_DIGITS);
if(digits<=1) return(1); //CFD & Indexes
if(digits==4 || digits==5) return(0.0001);
if((digits==2 || digits==3) && bid>1000) return(1);
if((digits==2 || digits==3) && bid<1000) return(0.01);
if(StringFind(sym,”XAU”)>-1 || StringFind(sym,”xau”)>-1 || StringFind(sym,”GOLD”)>-1) return(0.1);//Gold
return(0);
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
//+——————————————————————+
//| Global Variable Set |
//+——————————————————————+
datetime GVSet(string name,double value)
{
return(GlobalVariableSet(prefix+name,value));
}
//+——————————————————————+
//| Global Variable Get |
//+——————————————————————+
double GVGet(string name)
{
return(GlobalVariableGet(prefix+name));
}
//+——————————————————————+
//| Global Variable Delete |
//+——————————————————————+
bool GVDel(string pref)
{
for(int tries=0; tries<10; tries++)
{
int obj=GlobalVariablesTotal();
for(int o=0; o<obj;o++)
{
string name=GlobalVariableName(o);
int index=StringFind(name,pref,0);
if(index>-1)GlobalVariableDel(name);
}
}
return(0);
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH//
//+——————————————————————+
//| get first order ticket |
//+——————————————————————+
int FIFO(int type)
{
int Prev=999999999, Curr=0, tick=-1;
for(int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(MagicNumber == 0 || OrderMagicNumber() == MagicNumber)
{
if(OrderType() == type || type == -1){ Curr = OrderTicket();
if(Curr < Prev){ Prev = Curr; tick = OrderTicket();}}
}
}
}
return(tick);
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH\\
// _________ ||
// / \ ||
// | THE END | ||
// \_________/ ||
// ||
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH//
相关资源
暂无评论...