//+------------------------------------------------------------------+
// ñîâåòíèê Close_All_Profit_Loss |
//+------------------------------------------------------------------+
#property copyright "Copyright © Sergey Gulyaev. Maykop."
#property show_inputs
string Name_Indicator = "Close_All_if_Profit_or_Loss",
Ver = "GS_2010_07_29",
Autor = " ©valenok2003@mail.ru";
extern string rem_0 = "-ïðè äîñòèæåíèè ïðèáûëè-";
extern string rem_1 = "-èëè óáûòêà (â ïðîöåíòàõ)-";
extern double _Max_Equity = 0;
double Max_Equity = 0;
extern double _Min_Equity = 0;
double Min_Equity = 0;
extern string rem_2 = "-ïîçèöèÿ äëÿ âûâîäà èíôî (0,1,2,3)-";
extern int Pozition = 3;
extern int Size = 12;
double Start_Equity,
Equity,
Cur_Equity;
bool FLAG_ON = true;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
Start_Equity = AccountEquity();
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("Max_Equity");
ObjectDelete("Start_Equity");
ObjectDelete("Min_Equity");
ObjectDelete("Cur_Equity");
ObjectDelete("Close_Max");
ObjectDelete("Close_Min");
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(_Max_Equity < 0 || _Min_Equity < 0 || _Max_Equity >100 || _Min_Equity > 100)
{
Alert("Close_All_if_Profit_or_Loss: îòðèöàòåëüíûå çíà÷åíèÿ è çíà÷åíèÿ áîëüøå 100% íå äîïóñòèìû!");
return(0);
}
//- âû÷èñëåíèå óðîâíåé -----------------------------------------------
Max_Equity = (Start_Equity*_Max_Equity)/100;
Max_Equity = Start_Equity + Max_Equity;
Min_Equity = (Start_Equity*_Min_Equity)/100;
Min_Equity = Start_Equity - Min_Equity;
string Txt_Max_Equity,
Txt_Min_Equity;
if(_Max_Equity == 0) Txt_Max_Equity = "NONE";
else Txt_Max_Equity = DoubleToStr(Max_Equity,2);
if(_Min_Equity == 0) Txt_Min_Equity = "NONE";
else Txt_Min_Equity = DoubleToStr(Min_Equity,2);
//--------------------------------------------------------------------
Cur_Equity = AccountEquity();
//---- âûâîäèì èíôî --------------------------------------------------
if(_Max_Equity != 0 || _Min_Equity != 0) FLAG_ON = true;
if(FLAG_ON)
{
ObjectDelete("Close_Max");
ObjectDelete("Close_Min");
ObjectCreate("Start_Equity", OBJ_LABEL, 0, 0, 0);
ObjectSetText("Start_Equity", "Start_Equity = " + DoubleToStr(Start_Equity,2), Size-3, "Arial", Yellow);
ObjectSet("Start_Equity", OBJPROP_CORNER, Pozition);
ObjectSet("Start_Equity", OBJPROP_XDISTANCE, 5);
ObjectSet("Start_Equity", OBJPROP_YDISTANCE, Size*8);
ObjectCreate("Cur_Equity", OBJ_LABEL, 0, 0, 0);
ObjectSetText("Cur_Equity", "Cur_Equity = " + DoubleToStr(Cur_Equity,2), Size-3, "Arial", DodgerBlue);
ObjectSet("Cur_Equity", OBJPROP_CORNER, Pozition);
ObjectSet("Cur_Equity", OBJPROP_XDISTANCE, 5);
ObjectSet("Cur_Equity", OBJPROP_YDISTANCE, Size*6);
ObjectCreate("Max_Equity", OBJ_LABEL, 0, 0, 0);
ObjectSetText("Max_Equity", "Max_Equity = " + Txt_Max_Equity, Size, "Arial", Blue);
ObjectSet("Max_Equity", OBJPROP_CORNER, Pozition);
ObjectSet("Max_Equity", OBJPROP_XDISTANCE, 5);
ObjectSet("Max_Equity", OBJPROP_YDISTANCE, Size*4);
ObjectCreate("Min_Equity", OBJ_LABEL, 0, 0, 0);
ObjectSetText("Min_Equity", "Min_Equity = " + Txt_Min_Equity, Size, "Arial", Red);
ObjectSet("Min_Equity", OBJPROP_CORNER, Pozition);
ObjectSet("Min_Equity", OBJPROP_XDISTANCE, 5);
ObjectSet("Min_Equity", OBJPROP_YDISTANCE, Size*2);
}
//----- îòðàáàòûâàåì -------------------------------------------------
if(Cur_Equity < Min_Equity && _Min_Equity != 0)
{
Close_All();
if(OrdersTotal() == 0)
{
ObjectDelete("Max_Equity");
ObjectDelete("Start_Equity");
ObjectDelete("Min_Equity");
ObjectDelete("Cur_Equity");
ObjectCreate("Close_Min", OBJ_LABEL, 0, 0, 0);
ObjectSetText("Close_Min", "Çàêðûòî ñ óáûòêîì ïî ýêâèòè = " + DoubleToStr(Min_Equity,2), 14, "Arial", Red);
ObjectSet("Close_Min", OBJPROP_CORNER, Pozition);
ObjectSet("Close_Min", OBJPROP_XDISTANCE, 5);
ObjectSet("Close_Min", OBJPROP_YDISTANCE, 85);
Start_Equity = AccountEquity();
_Max_Equity = 0;
_Min_Equity = 0;
FLAG_ON = false;
}
}
//----
if(Cur_Equity > Max_Equity && _Max_Equity != 0)
{
Close_All();
if(OrdersTotal() == 0)
{
ObjectDelete("Max_Equity");
ObjectDelete("Start_Equity");
ObjectDelete("Min_Equity");
ObjectDelete("Cur_Equity");
ObjectCreate("Close_Max", OBJ_LABEL, 0, 0, 0);
ObjectSetText("Close_Max", "Çàêðûòî ñ ïðèáûëüþ ïî ýêâèòè = " + DoubleToStr(Max_Equity,2), 14, "Arial", Blue);
ObjectSet("Close_Max", OBJPROP_CORNER, Pozition);
ObjectSet("Close_Max", OBJPROP_XDISTANCE, 5);
ObjectSet("Close_Max", OBJPROP_YDISTANCE, 85);
Start_Equity = AccountEquity();
_Max_Equity = 0;
_Min_Equity = 0;
FLAG_ON = false;
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Close_All.mq4 |
//+------------------------------------------------------------------+
#property copyright "expforex"
#property link "http://expforex.at.ua"
#include <stdlib.mqh>
double Price[2];
int giSlippage;
int Close_All()
{
int iOrders=OrdersTotal()-1, i;
//----
for(i=iOrders; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && (OrderType()<=OP_SELL)
&& GetMarketInfo()
&& !OrderClose(OrderTicket(),OrderLots(),Price[1-OrderType()],giSlippage))
{
Print(OrderError());
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Function..: GetMarketInfo |
//+------------------------------------------------------------------+
bool GetMarketInfo()
{
RefreshRates();
Price[0]=MarketInfo(OrderSymbol(),MODE_ASK);
Price[1]=MarketInfo(OrderSymbol(),MODE_BID);
double dPoint=MarketInfo(OrderSymbol(),MODE_POINT);
if(dPoint==0) return(false);
giSlippage=(Price[0]-Price[1])/dPoint;
return(Price[0]>0.0 && Price[1]>0.0);
}
//+------------------------------------------------------------------+
//| Function..: OrderError |
//+------------------------------------------------------------------+
string OrderError()
{
int iError=GetLastError();
return(StringConcatenate("Order:",OrderTicket()," GetLastError()=",iError," ",ErrorDescription(iError)));
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
Comments