Close_All_Profit_Loss_Percent_2010_08_04

Author: expforex
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
Close_All_Profit_Loss_Percent_2010_08_04
//+------------------------------------------------------------------+
//                                    ñîâåòíèê 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