//+------------------------------------------------------------------+
//| EquityTracker.mq4 |
//| Tibor Gellert |
//| tibor.gellert@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Tibor Gellert - $Revision: 234 $"
#property link ""
/*
Revision control: $Id: EquityTracker.mq4 234 2008-07-30 20:44:08Z tibor $
*/
#include <stdlib.mqh>
extern int TargetEquity = 0;
bool gExpertEnabled = false;
int gCloseAttempts = 0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if (TargetEquity>0)
gExpertEnabled = true;
else
gExpertEnabled = false;
gCloseAttempts = 0;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if (gExpertEnabled && TargetEquity>0 && AccountEquity()>=TargetEquity)
{
if (CloseAllOrders(Symbol())==0)
{
gExpertEnabled = false;
}
gCloseAttempts++;
}
ManageComment();
//----
return(0);
}
//+------------------------------------------------------------------+
int CloseAllOrders(string market)
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS))
{
if (OrderSymbol()==market)
{
switch (OrderType())
{
case OP_BUY:
case OP_SELL:
Print("Order to delete:", OrderTicket(), " (", i, ")");
if (OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0, Black))
{
Print("Order closed:", OrderTicket());
}
else // OrderClose failed
{
PrintError("OrderClose failed:"+OrderTicket());
return (1);
}
break;
} //switch
} // if MAGIC
} // if OrderSelect
else // OrderSelect failed
{
PrintError("OrderSelect failed" );
return (1);
}
} // for
return (0);
}
//+------------------------------------------------------------------+
void PrintError( string msg )
{
int errCode = GetLastError();
Print(msg, " Code: ", errCode, " Desc: ", ErrorDescription(errCode));
}
//+------------------------------------------------------------------+
void ManageComment()
{
string cmnt = "EquityTracker";
if (TargetEquity>0)
{
cmnt = cmnt + "\n Target equity:"+DoubleToStr(TargetEquity,0)+
"\n Close attemps made:"+gCloseAttempts;
}
else
{
cmnt = cmnt + "\n\n Missing target equity - set TargetEquity parameter!";
}
if (gExpertEnabled)
{
cmnt = cmnt + "\n\n Expert is enabled";
}
else
{
cmnt = cmnt + "\n\n Expert is DISABLED";
}
Comment(cmnt);
}
Comments