manager_EquityControl_BlueDream_V1_GS_2011_01_26

Author: expforex
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself
Miscellaneous
It issuies visual alerts to the screenIt plays sound alerts
0 Views
0 Downloads
0 Favorites
manager_EquityControl_BlueDream_V1_GS_2011_01_26
//+------------------------------------------------------------------+
//                                     manager_EquityControl_BlueDream 
//+------------------------------------------------------------------+
#property copyright "Copyright © Sergey Gulyaev. Maykop."
#property show_inputs

#define FIRST_NAME "manager_EquityControl_BlueDream"  //èìÿ óïðàâëÿþùåãî ìîäóëÿ
#define VER "V1"                                      //âåðñèÿ
#define RELIZE "GS_2011_01_26"                        //ðåëèç
#define AUTOR "© valenok2003@mail.ru"
#define URL "http://fxgeneral.com/forum/index.php?showforum=51"

extern bool    ONLY_ALERT = false;      
extern string  rem_1 = "-ïî àáñîëþòíîìó çíà÷åíèþ ýêâèòè-";
extern double  Set_Limit_Equity_Max = 0;
extern double  Set_Limit_Equity_Min = 0;
extern string  rem_2 = "-ïî ïðèðîñòó ýêâèòè â âàëþòå äåïî-";
extern double  Set_Profit_Delta_Equity = 0;
extern double  Set_Loss_Delta_Equity   = 0;
extern string  rem_3 = "-ïî ïðèðîñòó ýêâèòè â ïðîöåíòàõ-";
extern double  Set_Profit_Delta_Equity_Percent = 0;
extern double  Set_Loss_Delta_Equity_Percent   = 0;
extern string  rem_5 = "-èçìåíÿòü ìèíèìóì äèíàìè÷åñêè-";
extern bool    DYNAMIC = true;
extern string  rem_6 = "-ñèãíàë BlueDream-";
extern bool    Set_STOP_TRADE_IF_CLOSE = true;
extern string  rem_7 = "-äîïóñòèìûå çíà÷åíèÿ (0,1,2,3)-";
extern int     Pozition = 2;
extern int     Size = 9;
extern color    Color_Line_Start = Gold;
extern color    Color_Line_Profit = Blue;
extern color    Color_Line_Loss = OrangeRed;

color Color_Txt_Set_Loss;

int      Old_Num_Orders,
         Cnt_Tick,
         Cnt_Tick_Advert;

double   Limit_Equity_Max,
         Limit_Equity_Min,
         Start_Equity,
         Cur_Equity,
         Start_Limit_Equity_Min,
         Delta_Start_and_Min_Equity,
         Cost_Point,
         Level_Line_Start,
         Level_Line_Profit,
         Level_Line_Loss,
         Delta_LineProfit_LineStart,
         Delta_LineLoss_LineStart;

bool     STOP_REASON_USER_SET,
         STOP_TRADE_IF_CLOSE,
         ALERT_STIC,
         FLAG_CLOSE_ALL,
         END_WORK,
         TRIGER = true;

string   GV_Name_Signal_Stop_Trade,
         Txt_Set_Profit,
         Txt_Set_Loss,
         Name_Obj_Advert,
         Txt_Limit_Equity_Cur,
         Txt_Limit_Equity_Max,
         Txt_Limit_Equity_Min;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
//----
   Limit_Equity_Max = 0;
   Limit_Equity_Min = 0;   
   Start_Equity = AccountEquity();
   Cur_Equity = 0;
   Delta_Start_and_Min_Equity  = 0; 
   Start_Limit_Equity_Min = 0; 
   Cnt_Tick = 0;
   Cost_Point = 0;
   Level_Line_Start = 0;
   Level_Line_Profit = 0;
   Level_Line_Loss = 0;
   Delta_LineProfit_LineStart = 0;
   Delta_LineLoss_LineStart = 0;
   Cnt_Tick_Advert = 0;
   
   Txt_Set_Profit = "";
   Txt_Set_Loss = "";
   Txt_Limit_Equity_Max = "";
   Txt_Limit_Equity_Cur = "";
   Txt_Limit_Equity_Min = "";
   Name_Obj_Advert = "Advert";
   
   STOP_REASON_USER_SET = false;
   ALERT_STIC = true;
   END_WORK = false;
   FLAG_CLOSE_ALL = false;
   STOP_TRADE_IF_CLOSE = Set_STOP_TRADE_IF_CLOSE;
//--------------------------------------------------------------------
//- âû÷èñëåíèå óðîâíåé -----------------------------------------------
   if(Set_Limit_Equity_Max != 0) Limit_Equity_Max = Set_Limit_Equity_Max;
   if(Set_Limit_Equity_Min != 0) Limit_Equity_Min = Set_Limit_Equity_Min;
   if(Set_Profit_Delta_Equity !=0) Limit_Equity_Max = AccountEquity() + Set_Profit_Delta_Equity;
   if(Set_Loss_Delta_Equity   !=0) Limit_Equity_Min = AccountEquity() - Set_Loss_Delta_Equity;
   if(Set_Profit_Delta_Equity_Percent !=0) Limit_Equity_Max = AccountEquity() + (AccountEquity()/100)*Set_Profit_Delta_Equity_Percent;
   if(Set_Loss_Delta_Equity_Percent !=0)   Limit_Equity_Min = AccountEquity() - (AccountEquity()/100)*Set_Loss_Delta_Equity_Percent;
   Delta_Start_and_Min_Equity = Start_Equity - Limit_Equity_Min;
//--------------------------------------------------------------------
//--- ïðîâåðêa óñòàíîâîê ïîëüçîâàòåëÿ --------------------------------
   string Txt_Check_User_Set = check_user_set();
   if(Txt_Check_User_Set != "") 
   {  Alert(Txt_Check_User_Set);
      STOP_REASON_USER_SET = true;
   }
//--------------------------------------------------------------------
//--- ñîçäà¸ì èìåíà ãëîáàëüíûõ ïåðåìåííûõ äëÿ ïåðåäà÷è ñèãíàëà -------
   if(!ONLY_ALERT)
   {
      bool SET_VAR_STOP_TRADE = true;
      for(int i = 1; i <= 100; i++) // èùåì ïåðâûå ñâîáîäíûå èìåíà è çàíèìàåì èõ
      {  if(SET_VAR_STOP_TRADE && !GlobalVariableCheck(Symbol() + "_" + "Stop_Trade" + "_" + i))
         {  GV_Name_Signal_Stop_Trade = Symbol() + "_" + "Stop_Trade" + "_" + i;
            GlobalVariableSet(GV_Name_Signal_Stop_Trade,0.0);
            SET_VAR_STOP_TRADE = false;
            int ST = i;
         }
      }  
   }
//--------------------------------------------------------------------
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
//----
   clea_all();
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
//----
//--------------------------------------------------------------------
//-- îñòàíîâêà ïî ïðè÷èíå íåïðàâèëüíî ââåä¸ííûõ ïîëüçîâàòåëåì äàííûõ -
   if(STOP_REASON_USER_SET) return(0);
//--------------------------------------------------------------------
//-- ïðîâåðêà ñóììû îòêðûòûõ ëîòîâ -----------------------------------
   if((Old_Num_Orders != check_open_orders() || point_coast_get() == 0) && !END_WORK)
   {  Cnt_Tick = 0;
      del_only_obj();
      Old_Num_Orders = check_open_orders();
      Delta_Start_and_Min_Equity = Start_Equity - Limit_Equity_Min;
      ObjectCreate ("No_Orders", OBJ_LABEL, 0, 0, 0);
      ObjectSet    ("No_Orders", OBJPROP_CORNER, 2);
      ObjectSet    ("No_Orders", OBJPROP_XDISTANCE, 5);
      ObjectSet    ("No_Orders", OBJPROP_YDISTANCE, 5);
      ObjectSetText("No_Orders", "Ñòîèìîñòü ïóíêòà = 0! Èçìåíèòå áàëàíñ îðäåðîâ", 10, "Arial", Yellow);      
      return(0);
   }
   else ObjectDelete ("No_Orders"); 
//--------------------------------------------------------------------
//--- åñëè óðîâåíü îòðàáîòàë è âñå îðäåðà çàêðûëèñü ------------------
   if(END_WORK) 
   {  del_only_obj();
      if(STOP_TRADE_IF_CLOSE && ALERT_STIC) 
      {  if(!ONLY_ALERT)
         {  GlobalVariableSet(GV_Name_Signal_Stop_Trade,1);
            Alert("mm_Equity_Control: ôëàã çàïðåùåíèÿ òîðãîâëè äëÿ BlueDream óñòàíîâëåí!"); 
         }
         ALERT_STIC = false;
      }
      return(0);
   }
//--------------------------------------------------------------------
//---- äèíàìè÷åñêîå èçìåíåíèå íèæíåãî ïðåäåëà ýêâèòè -----------------
   Cur_Equity = AccountEquity();
   if(DYNAMIC)
      if(Cur_Equity - Limit_Equity_Min > Delta_Start_and_Min_Equity) 
         Limit_Equity_Min = Cur_Equity - Delta_Start_and_Min_Equity;
//--------------------------------------------------------------------
//---- âû÷èñëÿåì óðîâíè ëèíèé ----------------------------------------
   Cost_Point = point_coast_get();
//----   
//--------------------------------------------------------------------
//--- ðèñóåì ëèíèè ---------------------------------------------------
   switch(Cnt_Tick)
   {  //íà ïåðâîì òèêå
      case 0:        
         Cnt_Tick++;
         Level_Line_Start = Bid;
         drow_line("Line_Start",Level_Line_Start,Color_Line_Start);
         Start_Equity = AccountEquity();      
      //----
         Delta_LineProfit_LineStart = MathRound((Limit_Equity_Max - Start_Equity)/(Cost_Point));
         Level_Line_Profit = Level_Line_Start + Delta_LineProfit_LineStart*Point;
         drow_line("Line_Profit",Level_Line_Profit,Color_Line_Profit);
      //----
         Delta_LineLoss_LineStart = MathRound((Start_Equity - Limit_Equity_Min)/(Cost_Point));
         Level_Line_Loss = Level_Line_Start - Delta_LineLoss_LineStart*Point;
      //----
         drow_line("_Start_Line_Loss",Level_Line_Loss,Gray);
         drow_line("Line_Loss",Level_Line_Loss,Color_Line_Loss);
         Start_Limit_Equity_Min = Limit_Equity_Min;
      break;
      default:
         Delta_LineLoss_LineStart = MathRound((Start_Equity - Limit_Equity_Min)/(Cost_Point));
         Level_Line_Loss = Level_Line_Start - Delta_LineLoss_LineStart*Point;
      //----
         drow_line("Line_Loss",Level_Line_Loss,Color_Line_Loss);
      //--------------------------------------------------------------------
      //- ïîäãîòîâêà òåêñòà äëÿ âûâîäà -------------------------------------
         if(Limit_Equity_Max == 0) Txt_Limit_Equity_Max = "Limit_Equity_Max = Íå óñòàíîâëåí!";
         else 
         {  Txt_Limit_Equity_Max = "Equity_Max = " + DoubleToStr(Limit_Equity_Max,2);
            double Max_Equity_Percent_Start = (Limit_Equity_Max - Start_Equity)/(Start_Equity/100);
            double Max_Equity_Percent_Cur   = (Limit_Equity_Max - Cur_Equity)/(Cur_Equity/100);
            Txt_Set_Profit = "TP=" + DoubleToStr(Max_Equity_Percent_Start,1) + "% îò Start_Equity, " +
                             "TP=" + DoubleToStr(Max_Equity_Percent_Cur,1) + "% îò Cur_Equity";
         }
      //---------------------------
         if(Limit_Equity_Min == 0) Txt_Limit_Equity_Min = "Limit_Equity_Min = Íå óñòàíîâëåí!";
         else 
         {
            Txt_Limit_Equity_Min = "Equity_Min = " + DoubleToStr(Start_Limit_Equity_Min,2);
            Txt_Limit_Equity_Cur = "Tral_Equity_Min = " + DoubleToStr(Limit_Equity_Min,2);
            double Min_Equity_Percent_Start = MathAbs((Start_Equity - Limit_Equity_Min)/(Start_Equity/100));
            double Min_Equity_Percent_Cur   = (Cur_Equity - Limit_Equity_Min)/(Cur_Equity/100);
            Color_Txt_Set_Loss = Red;
            Txt_Set_Loss = "SL=" + DoubleToStr(Min_Equity_Percent_Start,1) + "% îò Start_Equity, " + 
                           "SL=" + DoubleToStr(Min_Equity_Percent_Cur,1) + "% îò Cur_Equity";
            if(Limit_Equity_Min >= Start_Equity)
            {  Color_Txt_Set_Loss = LimeGreen;
               Txt_Set_Loss = "SL ïðåâûñèë Start_Equity íà "+ DoubleToStr(Min_Equity_Percent_Start,1) + "% " + 
                              "SL=" + DoubleToStr(Min_Equity_Percent_Cur,1) + "% îò Cur_Equity";
            }
         }
      //---------------------------
      break;
   }
   
//--------------------------------------------------------------------
//--- âûâîäèì èíôîðìàöèþ â îáúåêòû -----------------------------------
   out_info();
   set_advert();
//--------------------------------------------------------------------
//----- îòðàáàòûâàåì çàêðûòèå ----------------------------------------
   if(Cur_Equity <= Limit_Equity_Min && Limit_Equity_Min !=0){if(ONLY_ALERT)Alert("Ýêâèòè äîñòèãëî óñòàíîâëåííîãî ìèíèìóìà!"); FLAG_CLOSE_ALL = true;}
   if(Cur_Equity >= Limit_Equity_Max && Limit_Equity_Max !=0){if(ONLY_ALERT)Alert("Ýêâèòè äîñòèãëî óñòàíîâëåííîãî ìàêñèìóìà!");FLAG_CLOSE_ALL = true;}
   if(FLAG_CLOSE_ALL)
   {  if(ONLY_ALERT) END_WORK = true;
      else
      {  Close_All();
         if(!check_open_orders())
         {  end_work();
            END_WORK = true;
         }
      }
   }
//--------------------------------------------------------------------
//----
  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
      && OrderSymbol()==Symbol()
      && 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)));
}
//+------------------------------------------------------------------+
//+-------
//+-------
//+------------------------------------------------------------------+
void end_work()
{
   color _Notice_Color;
   string _Txt_Notice;
   if(Start_Equity < AccountEquity())
   {  _Notice_Color = DodgerBlue; 
      _Txt_Notice = "Çàêðûòî ñ ïðèáûëüþ, ïðè ýêâèòè = " + DoubleToStr(AccountEquity(),2); 
      PlaySound("payment.wav");
   }
   if(Start_Equity == AccountEquity())
   {  _Notice_Color = White; 
      _Txt_Notice = "Çàêðûòî ïî íîëÿì, ïðè ýêâèòè = " + DoubleToStr(AccountEquity(),2);
      PlaySound("ERROR.WAV");
   }
   if(Start_Equity > AccountEquity())
   {  _Notice_Color = Red; 
      _Txt_Notice = "Çàêðûòî ñ óáûòêîì, ïðè ýêâèòè = " + DoubleToStr(AccountEquity(),2);
      PlaySound("ERROR.WAV");
   }
//-----   
   del_only_obj();
//-----
   ObjectCreate("Close", OBJ_LABEL, 0, 0, 0);
   ObjectSetText("Close", _Txt_Notice, 14, "Arial", _Notice_Color);
   ObjectSet("Close", OBJPROP_CORNER, Pozition);
   ObjectSet("Close", OBJPROP_XDISTANCE, 5);
   ObjectSet("Close", OBJPROP_YDISTANCE, 85);
}
//+------------------------------------------------------------------+
//+-------
//+-------
//+------------------------------------------------------------------+
//| âûâîäèì èíôî
//+------------------------------------------------------------------+
void out_info()
{
   if(Limit_Equity_Max != 0 || Limit_Equity_Min != 0)
   {
      if(ONLY_ALERT)
      {
         ObjectCreate("Only_Alert", OBJ_LABEL, 0, 0, 0);
         ObjectSetText("Only_Alert", "Òîëüêî îïîâåùåíèå!", Size, "Arial", Red);
         ObjectSet("Only_Alert", OBJPROP_CORNER, Pozition);
         ObjectSet("Only_Alert", OBJPROP_XDISTANCE, 50);
         ObjectSet("Only_Alert", OBJPROP_YDISTANCE, Size*19);
      }
      if(DYNAMIC)
      {
         if(TRIGER) TRIGER = false;
         else TRIGER = true;
         if(TRIGER)
         {
            ObjectCreate("Dynamic", OBJ_LABEL, 0, 0, 0);
            ObjectSetText("Dynamic", "ÒÐÀË ÂÊËÞ×ÅÍ!", Size, "Arial", Red);
            ObjectSet("Dynamic", OBJPROP_CORNER, Pozition);
            ObjectSet("Dynamic", OBJPROP_XDISTANCE, 5);
            ObjectSet("Dynamic", OBJPROP_YDISTANCE, Size*17);
         }
         else ObjectDelete("Dynamic"); 
      }
      ObjectCreate("Start_Equity", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("Start_Equity", "Start_Equity = " + DoubleToStr(Start_Equity,2), Size, "Arial", Yellow);
      ObjectSet("Start_Equity", OBJPROP_CORNER, Pozition);
      ObjectSet("Start_Equity", OBJPROP_XDISTANCE, 5);
      ObjectSet("Start_Equity", OBJPROP_YDISTANCE, Size*15);
    
      ObjectCreate("Cur_Equity", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("Cur_Equity", "Cur_Equity = " + DoubleToStr(Cur_Equity,2), Size, "Arial", LimeGreen);
      ObjectSet("Cur_Equity", OBJPROP_CORNER, Pozition);
      ObjectSet("Cur_Equity", OBJPROP_XDISTANCE, 5);
      ObjectSet("Cur_Equity", OBJPROP_YDISTANCE, Size*13);

      ObjectDelete("Limit_Equity_Max");
      ObjectCreate("Limit_Equity_Max", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("Limit_Equity_Max", Txt_Limit_Equity_Max, Size, "Arial", DodgerBlue);
      ObjectSet("Limit_Equity_Max", OBJPROP_CORNER, Pozition);
      ObjectSet("Limit_Equity_Max", OBJPROP_XDISTANCE, 5);
      ObjectSet("Limit_Equity_Max", OBJPROP_YDISTANCE, Size*11);

      ObjectCreate("Limit_Equity_Min", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("Limit_Equity_Min", Txt_Limit_Equity_Min, Size, "Arial", Red);
      ObjectSet("Limit_Equity_Min", OBJPROP_CORNER, Pozition);
      ObjectSet("Limit_Equity_Min", OBJPROP_XDISTANCE, 5);
      ObjectSet("Limit_Equity_Min", OBJPROP_YDISTANCE, Size*9);

      ObjectCreate("Limit_Equity_Cur", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("Limit_Equity_Cur", Txt_Limit_Equity_Cur, Size, "Arial", Red);
      ObjectSet("Limit_Equity_Cur", OBJPROP_CORNER, Pozition);
      ObjectSet("Limit_Equity_Cur", OBJPROP_XDISTANCE, 5);
      ObjectSet("Limit_Equity_Cur", OBJPROP_YDISTANCE, Size*7);

      ObjectCreate("Set_Profit", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("Set_Profit", Txt_Set_Profit, Size, "Arial", DodgerBlue);
      ObjectSet("Set_Profit", OBJPROP_CORNER, Pozition);
      ObjectSet("Set_Profit", OBJPROP_XDISTANCE, 5);
      ObjectSet("Set_Profit", OBJPROP_YDISTANCE, Size*5);
      
      ObjectCreate("Set_Loss", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("Set_Loss", Txt_Set_Loss, Size, "Arial", Color_Txt_Set_Loss);
      ObjectSet("Set_Loss", OBJPROP_CORNER, Pozition);
      ObjectSet("Set_Loss", OBJPROP_XDISTANCE, 5);
      ObjectSet("Set_Loss", OBJPROP_YDISTANCE, Size*3);
   }
   return;
}
//+------------------------------------------------------------------+
//+-------
//+-------
//+------------------------------------------------------------------+
//| set_advert
//+------------------------------------------------------------------+
#define ADVERT0 "Ýòà ïðîãðàììà ÿâëÿåòñÿ îäíèì èç ìîäóëåé"
#define ADVERT1 "êîíñòðóêòîðà ñîâåòíèêîâ BlueDream"
#define ADVERT2 "èñïîëüçóÿ ãîòîâûå ìîäóëè"
#define ADVERT3 "âû ìîæåòå ñàìè ñîáðàòü ñîâåòíèêà"
#define ADVERT4 "äëÿ ýòîãî âàì íå íóæíî çíàòü ïðîãðàììèðîâàíèå"
#define ADVERT5 "ïîëíûé íàáîð äåòàëåé"
#define ADVERT6 "èùèòå ïîèñêîì â yandex"
#define ADVERT7 "ñîâåòíèê êîíñòðóêòîð BlueDream"
void set_advert()
{
   switch(Cnt_Tick_Advert)
   {
      case 0:
         Cnt_Tick_Advert++;
         out_string_advert(ADVERT0, LimeGreen);      
      break;
      case 5:
         Cnt_Tick_Advert++;
         out_string_advert(ADVERT1, LimeGreen);      
      break;
      case 10:
         Cnt_Tick_Advert++;
         out_string_advert(ADVERT2, LimeGreen);      
      break;
      case 15:
         Cnt_Tick_Advert++;
         out_string_advert(ADVERT3, LimeGreen);      
      break;
      case 20:
         Cnt_Tick_Advert++;
         out_string_advert(ADVERT4, LimeGreen);      
      break;
      case 25:
         Cnt_Tick_Advert++;
         out_string_advert(ADVERT5, LimeGreen);      
      break;
      case 30:
         Cnt_Tick_Advert++;
         out_string_advert(ADVERT6, LimeGreen);      
      break;
      case 35:
         Cnt_Tick_Advert++;
         out_string_advert(ADVERT7, LimeGreen);      
      break;
      case 40:
         Cnt_Tick_Advert=0;
      break;
      default:
         Cnt_Tick_Advert++;
      break;      
   }
   return;
}
//+------------------------------------------------------------------+
//+-------
//+-------
//+------------------------------------------------------------------+
//| âûâîä ñòðîêè ðåêëàìû
//+------------------------------------------------------------------+
void out_string_advert(string _Txt, color _Color_Txt)
{
   ObjectDelete (Name_Obj_Advert); 
   ObjectCreate (Name_Obj_Advert, OBJ_LABEL, 0, 0, 0);
   ObjectSet    (Name_Obj_Advert, OBJPROP_CORNER, 2);
   ObjectSet    (Name_Obj_Advert, OBJPROP_XDISTANCE, 5);
   ObjectSet    (Name_Obj_Advert, OBJPROP_YDISTANCE, 5);
   ObjectSetText(Name_Obj_Advert, _Txt, 10, "Arial", _Color_Txt);
   return;
}
//+------------------------------------------------------------------+
//+-------
//+-------
//+------------------------------------------------------------------+
//| ïðîâåðêà íàëè÷èÿ îòêðûòûõ îðäåðîâ
//+------------------------------------------------------------------+
int check_open_orders()
{
   int _Just_Orders = 0;
   int _Cnt = 0;
   _Just_Orders=OrdersTotal()-1; 
   for(int _i=_Just_Orders; _i>=0; _i--) 
   {
      if(OrderSelect(_i,SELECT_BY_POS,MODE_TRADES) && OrderType()<=OP_SELL && OrderSymbol()==Symbol())         
         _Cnt++; 
   }
   return(_Cnt);
}
//+------------------------------------------------------------------+
//+-------
//+-------
//+------------------------------------------------------------------+
//| ðèñóåò ãîðèçîíòàëüíóþ ëèíèþ
//+------------------------------------------------------------------+
void drow_line(string _Name, double _Price, color _Color)
{
   ObjectDelete(_Name); 
   ObjectCreate(_Name,OBJ_HLINE,0,0,_Price);
   ObjectSet(_Name,OBJPROP_COLOR,_Color);
   return;
}
//+------------------------------------------------------------------+
//+-------
//+-------
//+------------------------------------------------------------------+
//| ïðîâåðêà óñòàíîâîê ïîëüçîâàòåëÿ
//+------------------------------------------------------------------+
string check_user_set()
{  bool  _STOP_REASON_1 = false,
         _STOP_REASON_2 = false,
         _STOP_REASON_3 = false,
         _STOP_REASON_4 = false,
         _STOP_REASON_5 = false;
   string   _Txt_Reason_1 = "Íåîáõîäèìî óñòàíîâèòü õîòÿ áû îäíî çíà÷åíèå!",
            _Txt_Reason_2 = "Âåðõíèé ïðåäåë íå ìîæåò áûòü ìåíüøå òåêóùåãî çíà÷åíèÿ ýêâèòè!",
            _Txt_Reason_3 = "Íèæíèé ïðåäåë íå ìîæåò áûòü áîëüøå òåêóùåãî çíà÷åíèÿ ýêâèòè!",
            _Txt_Reason_4 = "Close_All_if_Profit_or_Loss: îòðèöàòåëüíûå çíà÷åíèÿ íå äîïóñòèìû!",
            _Txt_Reason_5 = "Îïöèè ïðèáûëè è óáûòêà ìîæíî óñòàíàâëèâàòü íå â ïàðå," + 
            "\níî äîëæíî áûòü åäèíñòâåííîå çíà÷åíèå ïî ïðèáûëè è åäèíñòâåííîå ïî óáûòêó!";
//---------------------------
   if(Set_Limit_Equity_Max == 0 && Set_Limit_Equity_Min == 0 
   && Set_Profit_Delta_Equity == 0 && Set_Loss_Delta_Equity == 0
   && Set_Profit_Delta_Equity_Percent == 0 && Set_Loss_Delta_Equity_Percent == 0)
      _STOP_REASON_1 = true;
//---------------------------
   if(Set_Limit_Equity_Max < AccountEquity() && Set_Limit_Equity_Max != 0)
      _STOP_REASON_2 = true;
//---------------------------
   if(Set_Limit_Equity_Min > AccountEquity())
      _STOP_REASON_3 = true;
//---------------------------
   if(Set_Limit_Equity_Max < 0 || Set_Limit_Equity_Min < 0 
   || Set_Profit_Delta_Equity < 0 || Set_Loss_Delta_Equity < 0 
   || Set_Profit_Delta_Equity_Percent < 0 || Set_Loss_Delta_Equity_Percent < 0)
      _STOP_REASON_4 = true;
//---------------------------
   if(((Set_Limit_Equity_Max !=0 && Set_Profit_Delta_Equity !=0) 
   ||(Set_Limit_Equity_Max !=0 && Set_Profit_Delta_Equity_Percent !=0)
   ||(Set_Profit_Delta_Equity !=0 && Set_Profit_Delta_Equity_Percent !=0))
   ||
   ((Set_Limit_Equity_Min !=0 && Set_Loss_Delta_Equity !=0) 
   ||(Set_Limit_Equity_Min !=0 && Set_Loss_Delta_Equity_Percent !=0)
   ||(Set_Loss_Delta_Equity !=0 && Set_Loss_Delta_Equity_Percent !=0
   )))
      _STOP_REASON_5 = true;
//---------------------------
   string _Txt_Alert_Stop_Reason = "";
   if(_STOP_REASON_1) _Txt_Alert_Stop_Reason = _Txt_Reason_1 + "\n";
   if(_STOP_REASON_2) _Txt_Alert_Stop_Reason = _Txt_Alert_Stop_Reason + _Txt_Reason_2 + "\n";
   if(_STOP_REASON_3) _Txt_Alert_Stop_Reason = _Txt_Alert_Stop_Reason + _Txt_Reason_3 + "\n";
   if(_STOP_REASON_4) _Txt_Alert_Stop_Reason = _Txt_Alert_Stop_Reason + _Txt_Reason_4 + "\n";
   if(_STOP_REASON_5) _Txt_Alert_Stop_Reason = _Txt_Alert_Stop_Reason + _Txt_Reason_5;
//---------------------------
   return(_Txt_Alert_Stop_Reason);
}
//+------------------------------------------------------------------+
//+-------
//+-------
//+------------------------------------------------------------------+
//| óäàëÿåì âñå ñëåäû ðàáîòû ìîäóëÿ
//+------------------------------------------------------------------+
void clea_all()   
{  ObjectDelete("Close"); 
   ObjectDelete("Only_Alert"); 
   ObjectDelete("Dynamic"); 
   ObjectDelete("Start_Equity"); 
   ObjectDelete("Cur_Equity"); 
   ObjectDelete("Limit_Equity_Max"); 
   ObjectDelete("Set_Profit"); 
   ObjectDelete("Limit_Equity_Min"); 
   ObjectDelete("Set_Loss"); 
   ObjectDelete("_Start_Line_Loss"); 
   ObjectDelete("Obj_Advert");
   ObjectDelete ("No_Orders");
   ObjectDelete ("Limit_Equity_Cur");
//---------------------------
   ObjectDelete("Line_Start");    
   ObjectDelete("Line_Profit"); 
   ObjectDelete("Line_Loss");
//---------------------------   
   ObjectDelete(Name_Obj_Advert);
   GlobalVariableDel(GV_Name_Signal_Stop_Trade);
   return;
}
//+------------------------------------------------------------------+
//+-------
//+-------
//+------------------------------------------------------------------+
//| óäàëÿåì âñå ñëåäû ðàáîòû ìîäóëÿ
//+------------------------------------------------------------------+
void del_only_obj()   
{  ObjectDelete("Only_Alert"); 
   ObjectDelete("Dynamic"); 
   ObjectDelete("Start_Equity"); 
   ObjectDelete("Cur_Equity"); 
   ObjectDelete("Limit_Equity_Max"); 
   ObjectDelete("Set_Profit"); 
   ObjectDelete("Limit_Equity_Min"); 
   ObjectDelete("Set_Loss"); 
   ObjectDelete("_Start_Line_Loss"); 
   ObjectDelete("Advert");
   ObjectDelete ("No_Orders"); 
   ObjectDelete ("Limit_Equity_Cur");
//----
   ObjectDelete("Line_Start");    
   ObjectDelete("Line_Profit"); 
   ObjectDelete("Line_Loss");
   return;
}
//+------------------------------------------------------------------+
//+-------
//+-------
//+------------------------------------------------------------------+
//| ïðîâåðêà ñòîèìîñòè ïóíêòà
//+------------------------------------------------------------------+
double point_coast_get()
{
   int _Just_Orders = 0;
   double _Summ_Lots = 0;
   double _LotVal = MarketInfo(Symbol(),MODE_TICKVALUE);//ñòîèìîñòü 1 ïóíêòà äëÿ 1 ëîòà
   _Just_Orders=OrdersTotal()-1; 
   for(int _i=_Just_Orders; _i>=0; _i--) 
   {
      if(OrderSelect(_i,SELECT_BY_POS,MODE_TRADES) && OrderType()<=OP_SELL && OrderSymbol()==Symbol())         
      { 
         if(OrderType()==OP_BUY)  _Summ_Lots += OrderLots();
         if(OrderType()==OP_SELL) _Summ_Lots -= OrderLots(); 
      }
   }
   double _Poin_Coast = _Summ_Lots*_LotVal;
   return(_Poin_Coast);
}
//+------------------------------------------------------------------+
//+-------

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---