/*+------------------------------------------------------------------+
Pips Trailing.mq4
Author : Aiman
Ver 1.0 (27.10.2009)
//+------------------------------------------------------------------+*/
#property copyright "Copyright © 2009, 1000 pips club"
#property link ""
//---- input parameters
extern int Target_Pips = 0;
extern int StopLoss_Pips = 0;
extern bool Pips_Trailing = false;
extern int Trailing_Start = 200;
extern int Trailing_Pips = 50;
int slippage=5;
bool CloseOP=false;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {ObjectsDeleteAll(0,OBJ_LABEL); Comment (""); return(0);}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit() {ObjectsDeleteAll(0,OBJ_LABEL); Comment (""); return(0);}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//- Close all if pips reached target pips
if(Target_Pips>0 && TotalPips()>=Target_Pips) CloseOP=true;
//- Close all if pips touched StopLoss Pips
if(StopLoss_Pips>0 && TotalPips()<=(0-StopLoss_Pips)) CloseOP=true;
if(CloseOP) CloseAll ();
if(OrdersTotal()==0) CloseOP=false;
//- Pips trailing StopLoss
if(Pips_Trailing) PipsTrailing();
displayStatus ();
return(0);
}
//+------------------------------------------------------------------+
double TotalPips ()
{
double totalpips=0, pips;
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
double point=MarketInfo(OrderSymbol(),MODE_POINT);
if(OrderType()==OP_BUY) pips=(MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice())/point;
if(OrderType()==OP_SELL)pips=(OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK))/point;
totalpips=totalpips+pips;
pips=0;
}
return (totalpips);
}
//+------------------------------------------------------------------+
void CloseAll ()
{
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), slippage, CLR_NONE );
Sleep(300);
continue;
}
if (OrderType()==OP_SELL)
{
OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), slippage, CLR_NONE );
Sleep(300);
}
}
}
//+------------------------------------------------------------------+
void PipsTrailing ()
{
double PipsLocked;
if (TotalPips()>=Trailing_Start && GlobalVariableCheck("ProfitLocked")==false)
GlobalVariableSet("ProfitLocked", TotalPips()-Trailing_Pips);
if (GlobalVariableCheck("ProfitLocked"))
{
PipsLocked=GlobalVariableGet("ProfitLocked");
if(TotalPips()>PipsLocked+Trailing_Pips )
GlobalVariableSet("ProfitLocked", TotalPips()-Trailing_Pips);
if (TotalPips()<=PipsLocked) CloseOP=true;
}
if (OrdersTotal()==0)
GlobalVariableDel("ProfitLocked");
}
//+------------------------------------------------------------------+
void displayStatus ()
{
string fontstyle="Arial Bold";
drawLabel ("Totalpips", "Total Pips: "+DoubleToStr(TotalPips(),0), 9, fontstyle, Yellow, 2, 10, 46);
drawLabel ("Targetpips", "Target Pips: "+DoubleToStr(Target_Pips,0), 9, fontstyle, Yellow, 2, 10, 34);
drawLabel ("StopLosspips", "StopLoss Pips: -"+DoubleToStr(StopLoss_Pips,0), 9, fontstyle, Yellow, 2, 10, 22);
string locktext;
color lockcolor;
if (!GlobalVariableCheck("ProfitLocked")) {locktext="Trailing Pips not yet activated!"; lockcolor=Peru; }
else {locktext= "Trailing Pips @ : "+DoubleToStr(GlobalVariableGet("ProfitLocked"),0); lockcolor=LawnGreen; }
if (!Pips_Trailing) locktext= "Trailing Pips is OFF";
if (CloseOP) {locktext= "EA is closing all trades!"; lockcolor=Red; }
drawLabel ("TrailingStop", locktext, 9, fontstyle, lockcolor, 2, 10, 10);
}
//+------------------------------------------------------------------+
void drawLabel (string Ln, string Lt, int th, string ts, color Lc, int cr, int xp, int yp)
{
ObjectCreate(Ln, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Ln, Lt, th, ts, Lc);
ObjectSet(Ln, OBJPROP_CORNER, cr);
ObjectSet(Ln, OBJPROP_XDISTANCE, xp);
ObjectSet(Ln, OBJPROP_YDISTANCE, yp);
}