ex_Signal_V2_GS_2011_04_22

Author: Copyright � valenok2003@mail.ru
Orders Execution
Checks for the total of open orders
Miscellaneous
It issuies visual alerts to the screenIt plays sound alerts
0 Views
0 Downloads
0 Favorites
ex_Signal_V2_GS_2011_04_22
//+------------------------------------------------------------------+
//|                                                    ex_Signal_V2  |
//+------------------------------------------------------------------+
#property copyright "Copyright © valenok2003@mail.ru"
#property link      "http://bluedream.ucoz.ru"

#define NAME_EXPERT "ex_Signal"
#define VER "V2"                                     
#define RELIZE "GS_2011_04_22"                        
#define AUTOR "© valenok2003@mail.ru"
#define URL "http://bluedream.ucoz.ru"
#define ADVERT "BlueDream - êîíñòðóêòîð ñîâåòíèêîâ!"
#define ADVERT2 "Ñîâåòíèêè íà çàêàç"
#define MAX_NUM_ORDER 200
#define MAX_NUM_STRING 100
#define MAX_NUM_SYMBOL 50

extern bool Alert_Close_ON = true;
extern bool Alert_Open_ON = true;
extern bool Sound_ON = true;
extern bool REPORT  = true;      //ðàçðåøèòü âûâîä òåêóùåé èíôîðìàöèè
extern bool ADD_IN_LOG  = false; //äîáàâëåíèå èíôû â ëîã ôàéë
extern int  _TimeShowInfo = 2;

int
   i, n,
   Cnt_Orders,
   Start_Min_Dist,
   Arr_Tickets[MAX_NUM_ORDER][2],
   Last_Position_Static_Txt;
bool
   STOP_TRADE;
string 
   Name_Sound_Profit = "payment.wav",
   Name_Sound_Loss = "ERROR.WAV",
   Name_Sound_Open  = "expert.wav",
   Name_Sound_Set  = "ok.wav",
   Name_Sound_Close = "ok.wav",
   Arr_Order_Symbol[MAX_NUM_SYMBOL],
   Txt_Output;
datetime
   StartTimerInf,
   Time_Last_Check;        
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
//----
   Txt_Output = "";
   Last_Position_Static_Txt = 0;
   Arr_Tickets[MAX_NUM_ORDER][2] = {0,0,,0,0};
   Arr_Order_Symbol[MAX_NUM_SYMBOL] = {"",,""};
   Cnt_Orders = 0;
   STOP_TRADE = false;
   Time_Last_Check = TimeCurrent();        
   Start_Min_Dist = MarketInfo(Symbol(),MODE_STOPLEVEL);
   if(Alert_Close_ON) Sound_ON = false;
   if(OrdersTotal() > MAX_NUM_ORDER-1) 
   {  Alert("Êîëè÷åñòâî îðäåðîâ ïðåâûøàåò ìàêñèìàëüíî äîïóñòèìîå çíà÷åíèå - " + MAX_NUM_ORDER);
      STOP_TRADE = true;
      return(0);
   }
   if(OrdersTotal()!=0) 
   {  for(i = OrdersTotal()-1; i >= 0; i--) 
      {  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
         Arr_Tickets[i,1] = OrderTicket();
         Arr_Tickets[i,2] = OrderType();
      }
   }
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   ObjectsDeleteAll(0,OBJ_LABEL);
   Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{  
   if(STOP_TRADE)return(0);
   output_static_string_info("DELALL", Black);
   color 
      Color_Txt = DodgerBlue,
      Color_Txt_Attention = Yellow,
      Color_Txt_Alarm = Orange;
//---------------------------   
   if(!IsDemo()) output_static_string_info("ÐÅÀËÜÍÛÉ ÑרÒ!", Color_Txt_Attention);
   else output_static_string_info("Äåìî ñ÷¸ò!", Color_Txt);
//---------------------------      
   color Color_Txt_Min_Dist = Color_Txt;
   if(Start_Min_Dist != MarketInfo(Symbol(),MODE_STOPLEVEL))
   {  Color_Txt_Min_Dist = Color_Txt_Attention;
      if(Sound_ON)PlaySound("alert2.wav");
      Alert("Ìèíèìàëüíàÿ äèñòàíöèÿ èçìåíåíà!");
      Start_Min_Dist = MarketInfo(Symbol(),MODE_STOPLEVEL);
   }
   output_static_string_info("Ìèíèìàëüíàÿ äèñòàíöèÿ " +Symbol()+" = "+DoubleToStr(MarketInfo(Symbol(),MODE_STOPLEVEL),0), Color_Txt_Min_Dist);
//------- ÏÐÎÂÅÐÊÀ ÍÀ ÍÀËÈ×ÈÅ ÎÐÄÅÐΠ--------   
   int CntSymbol = 0;
   for(i = 0; i < MAX_NUM_SYMBOL; i++) Arr_Order_Symbol[i] = ""; //î÷èñòêà áóôåðà ñèìâîëîâ
   if(OrdersTotal()!=0) 
   {  output_static_string_info("Âñåãî îðäåðîâ "+OrdersTotal(), Color_Txt_Attention);
      for(i = OrdersTotal()-1; i >= 0; i--) 
      {  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);  //âûáèðàåì îðäåð
         bool ADD_SYMBOL = true;                                  
         for(int n = 0; n<MAX_NUM_SYMBOL&&Arr_Order_Symbol[n]!=""; n++) //ñðàâíèâàåì ñèìâîë îðäåðà ñî âñåìè ñèìâîëàìè ìàññèâà
         {  if(Arr_Order_Symbol[n] == OrderSymbol())  //åñëè óæå åñòü â ìàññèâå - óõîäèì íà ñëåäóþùèé îðäåð
            {  ADD_SYMBOL = false; 
               break;
            }
         }
         if(ADD_SYMBOL) //åñëè ñèìâîëà íå îêàçàëîñü â ìàññèâå - çàïèñûâàåì â ìàññèâ ïî ñ÷¸ò÷èêó
         {  Arr_Order_Symbol[CntSymbol] = OrderSymbol(); 
            CntSymbol++;   //óâåëè÷èâàåì ñ÷¸ò÷èê
         }
      }
      bool STOP = false;
      n = 0;
      while(!STOP)
      {  Txt_Output = "";
         for(i = 0; i < 4; i++)
         {  if(i+n >= CntSymbol) 
            {  STOP = true;
               break;
            }
            Txt_Output = Txt_Output +"|"+ Arr_Order_Symbol[i+n]+"|";
         }
         int Tmp = output_static_string_info(Txt_Output, Color_Txt_Alarm); 
         n += 4;
      }
   }
   else Tmp = output_static_string_info("Îðäåðîâ íåò!", Color_Txt);
   if(Last_Position_Static_Txt < Tmp) Last_Position_Static_Txt = Tmp;  
//------ ÏÐÎÂÅÐÊÀ ÍÀ ÇÀÊÐÛÒÈÅ ------
   for(i = 0; i<MAX_NUM_ORDER && Arr_Tickets[i,1]!=0; i++) 
   {  OrderSelect(Arr_Tickets[i,1], SELECT_BY_TICKET);
      if(OrderCloseTime() > 0)
      {  if(OrderType() <= OP_SELL)
         {
            if(OrderProfit() < 0) 
            {  Txt_Output = "Çàêðûò "+ Txt_Order_Type(OrderType())+", ñèìâîë "+OrderSymbol()+" c ÓÁÛÒÊÎÌ!";
               output_mov_string_info(Txt_Output, Red, Last_Position_Static_Txt);
               if(Sound_ON) PlaySound(Name_Sound_Loss);
               if(Alert_Close_ON) Alert(Txt_Output);
            }
            if(OrderProfit() > 0) 
            {  Txt_Output = "Çàêðûò "+ Txt_Order_Type(OrderType())+", ñèìâîë "+OrderSymbol()+" c ÏÐÈÁÛËÜÞ!";
               output_mov_string_info(Txt_Output, LimeGreen, Last_Position_Static_Txt);
               if(Sound_ON) PlaySound(Name_Sound_Profit);
               if(Alert_Close_ON) Alert(Txt_Output);
            }
            if(OrderProfit() == 0)
            {  Txt_Output = "Çàêðûò "+ Txt_Order_Type(OrderType())+", ñèìâîë "+OrderSymbol()+"!";
               output_mov_string_info(Txt_Output, Color_Txt_Alarm, Last_Position_Static_Txt);
               if(Sound_ON) PlaySound(Name_Sound_Close);
               if(Alert_Close_ON) Alert(Txt_Output);
            }
         }
         else 
            output_mov_string_info("Óäàë¸í "+ Txt_Order_Type(OrderType())+", ñèìâîë "+OrderSymbol(), Color_Txt_Alarm, Last_Position_Static_Txt);
      }
   }
//------ ÏÐÎÂÅÐÊÀ ÑÐÀÁÎÒÀÂØÈÕ ÎÐÄÅÐÎÂ ----
   for(i = 0; i < MAX_NUM_ORDER; i++)
   {  OrderSelect(Arr_Tickets[i,1], SELECT_BY_TICKET);
      if(Arr_Tickets[i,2] > OP_SELL)
      {  if(OrderCloseTime() <= 0 && OrderType() != Arr_Tickets[i,2])
         {  Txt_Output = "Ñðàáîòàë "+ Txt_Order_Type(Arr_Tickets[i,2])+", ñèìâîë "+OrderSymbol();
            output_mov_string_info(Txt_Output, Color_Txt_Attention, Last_Position_Static_Txt);   
            if(Sound_ON) PlaySound(Name_Sound_Open);
            if(Alert_Open_ON) Alert(Txt_Output);
         }
      }
   }
//------ ÏÐÎÂÅÐÊÀ ÂÍÎÂÜ ÎÒÊÐÛÒÛÕ ÎÐÄÅÐÎÂ ------
   bool SET_TIMER = false;
   for(i = OrdersTotal()-1; i >= 0; i--) 
   {  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderOpenTime() > Time_Last_Check)
      {  if(OrderType() > OP_SELL)
         {  Txt_Output = "Óñòàíîâëåí "+ Txt_Order_Type(OrderType())+", ñèìâîë "+OrderSymbol();
            output_mov_string_info(Txt_Output, Color_Txt, Last_Position_Static_Txt);
            SET_TIMER = true;
            if(Sound_ON) PlaySound(Name_Sound_Set);
            if(Alert_Open_ON) Alert(Txt_Output);
         }
         else
         {  Txt_Output = "Îòêðûò "+ Txt_Order_Type(OrderType())+", ñèìâîë "+OrderSymbol(); 
            output_mov_string_info(Txt_Output, Color_Txt_Attention, Last_Position_Static_Txt);
            SET_TIMER = true;
            if(Sound_ON) PlaySound(Name_Sound_Open);
            if(Alert_Open_ON) Alert(Txt_Output);
         }
      }
   }
   if(SET_TIMER) Time_Last_Check = TimeCurrent();
//------ ÎÁÍÎÂËßÅÌ ÌÀÑÑÈ ÎÐÄÅÐΠ------
   for(i = 0; i<MAX_NUM_ORDER; i++) Arr_Tickets[i,1]=0; //ïîñëå âñåõ ïðîâåðîê îáíîâëÿåì ìàññèâ îðäåðîâ
   if(OrdersTotal()!=0) 
   {  for(i = OrdersTotal()-1; i >= 0; i--) 
      {  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
         Arr_Tickets[i,1] = OrderTicket();
         Arr_Tickets[i,2] = OrderType();
      }
   }
//---------------------------
   output_mov_string_info("NULL", Black, Last_Position_Static_Txt);
   output_ADVERT();
   return(0);
}
//+-------------------------------------------------------------------
//                             ÔÓÍÊÖÈÈ
//+-------------------------------------------------------------------
//+-------
//+-------
//+------------------------------------------------------------------+
//| âûâîä ÑÒÀÒÈ×ÅÑÊÈÕ ñòðîê èíôîðìàöèè                     2011_04_07
//| âîçâðàùàåò íîìåð ïîñëåäíåé çàíÿòîé ïîçèöèè
//+------------------------------------------------------------------+
int 
   _Cnt_Static_Str = 0;
//-------------
int output_static_string_info(string _Txt, color _Color_Txt)
{  int 
      _i,_x,
      _Len_Str,
      _TimeShowInfo = 15,
      _Dist = 15,
      _PozStr,
      _ShiftPoz = 15; //ñìåùåíèå îò âåðõà îêíà
   string 
      _Name_Obj;
//-------------
//   if(!REPORT)return;
   if(_Txt == "DELALL" || _Cnt_Static_Str > MAX_NUM_STRING-1) //íóæíî äîáàâèòü óäàëåíèå ïî òàéìåðó
   {  for(_i = 0; _i < _Cnt_Static_Str; _i++)
      {  _Name_Obj = NAME_EXPERT + "_Static_" + _i;
         _Len_Str = StringLen(ObjectDescription(_Name_Obj)); 
         ObjectDelete(_Name_Obj);
         _Name_Obj = "A_" + _Name_Obj + "_";
         for(_x = 0; _x < _Len_Str;_x++) ObjectDelete(_Name_Obj + _x);
      }
      _Cnt_Static_Str = 0;
      return(0);
   }
   _Name_Obj = NAME_EXPERT + "_Static_" + _Cnt_Static_Str;
   _PozStr = _Dist*_Cnt_Static_Str;
   ObjectCreate (_Name_Obj, OBJ_LABEL, 0, 0, 0);
   ObjectSet    (_Name_Obj, OBJPROP_CORNER, 0);
   ObjectSet    (_Name_Obj, OBJPROP_XDISTANCE, 5);
   ObjectSet    (_Name_Obj, OBJPROP_YDISTANCE, _PozStr+_ShiftPoz);
   ObjectSetText(_Name_Obj, _Txt, 10, "Lucida Console", _Color_Txt);
//------ ðèñóåì ïîäëîæêó
   _Len_Str = StringLen(ObjectDescription(_Name_Obj));
   _Name_Obj = "A_" + _Name_Obj + "_";
   for(_x=0;_x<_Len_Str;_x++)
   {  ObjectCreate (_Name_Obj+_x, OBJ_LABEL, 0, 0, 0);
      ObjectSet    (_Name_Obj+_x, OBJPROP_CORNER, 0);
      ObjectSet    (_Name_Obj+_x, OBJPROP_XDISTANCE, 4+_x*8);
      ObjectSet    (_Name_Obj+_x, OBJPROP_YDISTANCE, _PozStr+_ShiftPoz);
      ObjectSetText(_Name_Obj+_x, CharToStr(110),10,"Wingdings",Black);
   }  
   _Cnt_Static_Str++;
   return(_PozStr+_ShiftPoz);
}
//+-------------------------------------------------------------------
//+-------
//+-------
//+------------------------------------------------------------------+
//| âûâîä áåãóùåé ñòðîêè èíôîðìàöèè                        2011_04_08
//+------------------------------------------------------------------+
int 
   _Cnt_Mov_Str = 0;
void output_mov_string_info(string _Txt, color _Color_Txt, int _Start_Position)
{  int 
      _i,_x,
      _Len_Str,
//      _TimeShowInfo = 5,
      _Dist = 15,
      _ShiftPoz = _Start_Position+15;
   string 
      _Name_Obj;
   bool _HIDE_IDENTICAL_LINES = false; //åñëè ôëàã true, òî ñêðûâàåò äóáëèðóþùèåñÿ ñòðîêè
//-------------
      //äîáàâëåíèå èíôû â ëîã ôàéë
      if(ADD_IN_LOG && _Txt != "NULL" && _Txt != "" && _Txt != "DELALL") Print(NAME_EXPERT + " :" + _Txt);
//-------------
   if(!REPORT)return;
   if(_Txt == "DELALL" || _Cnt_Mov_Str > MAX_NUM_STRING-1)
   {  for(_i = 0; _i < _Cnt_Mov_Str; _i++)
      {  _Name_Obj = NAME_EXPERT + "_Mov_" + _i;
         _Len_Str = StringLen(ObjectDescription(_Name_Obj)); 
         ObjectDelete(_Name_Obj);
         _Name_Obj = "A_" + _Name_Obj + "_";
         for(_x = 0; _x < _Len_Str;_x++) ObjectDelete(_Name_Obj + _x);
      }
      _Cnt_Mov_Str = 0;
      return;
   }
   if(_Txt != "NULL") 
   {  if(_HIDE_IDENTICAL_LINES) _Cnt_Mov_Str--;
      _Name_Obj = NAME_EXPERT + "_Mov_" + _Cnt_Mov_Str;
      int _PozStr = _Dist*_Cnt_Mov_Str;
      ObjectCreate (_Name_Obj, OBJ_LABEL, 0, 0, 0);
      ObjectSet    (_Name_Obj, OBJPROP_CORNER, 0);
      ObjectSet    (_Name_Obj, OBJPROP_XDISTANCE, 5);
      ObjectSet    (_Name_Obj, OBJPROP_YDISTANCE, _PozStr+_ShiftPoz);
      ObjectSetText(_Name_Obj, _Txt, 10, "Lucida Console", _Color_Txt);
//------ ðèñóåì ïîäëîæêó
      _Len_Str = StringLen(ObjectDescription(_Name_Obj)); 
      _Name_Obj = "A_" + _Name_Obj + "_";
      for(_x=0;_x<_Len_Str;_x++)
      {  ObjectCreate (_Name_Obj+_x, OBJ_LABEL, 0, 0, 0);
         ObjectSet    (_Name_Obj+_x, OBJPROP_CORNER, 0);
         ObjectSet    (_Name_Obj+_x, OBJPROP_XDISTANCE, 4+_x*8);
         ObjectSet    (_Name_Obj+_x, OBJPROP_YDISTANCE, _PozStr+_ShiftPoz);
         ObjectSetText(_Name_Obj+_x, CharToStr(110),10,"Wingdings",Black);
      }  
      _Cnt_Mov_Str++;
      StartTimerInf = TimeCurrent();      
   }
   else  //ïåðåâîäèì ñòðîêè (äëÿ ïåðåâîäà ñòðîê íà êàæäîì òèêå äîëæíà çàïóñêàòüñÿ ôóíêöèÿ ñ ïàðàìåòðîì NULL)
   {  if(TimeCurrent() >  StartTimerInf + _TimeShowInfo)
      {  StartTimerInf = TimeCurrent(); // îáíóëÿåì òàéìåð
         if(_Cnt_Mov_Str > 0)           
         {  for(_i = 0; _i < _Cnt_Mov_Str; _i++) 
            {  //óäàëÿåì òåêóùóþ ñòðîêó
               _Name_Obj = NAME_EXPERT + "_Mov_" + _i;
               _Len_Str = StringLen(ObjectDescription(_Name_Obj));
               ObjectDelete(_Name_Obj);
               _Name_Obj = "A_" + _Name_Obj + "_";
               for(_x = 0; _x < _Len_Str;_x++) ObjectDelete(_Name_Obj + _x);
               //ïîëó÷àåì èíôîðìàöèþ î ñëåäóþùåé ñòðîêå   
               _i++;
               _Name_Obj = NAME_EXPERT + "_Mov_" + _i; 
               _Color_Txt = ObjectGet(_Name_Obj, OBJPROP_COLOR);
               _Txt = ObjectDescription(_Name_Obj); 
               _Len_Str = StringLen(_Txt);
               _i--;
               _PozStr = _Dist*_i;
               _Name_Obj = NAME_EXPERT + "_Mov_" + _i;
               ObjectCreate (_Name_Obj, OBJ_LABEL, 0, 0, 0);
               ObjectSet    (_Name_Obj, OBJPROP_CORNER, 0);
               ObjectSet    (_Name_Obj, OBJPROP_XDISTANCE, 5);
               ObjectSet    (_Name_Obj, OBJPROP_YDISTANCE, _PozStr+_ShiftPoz);
               ObjectSetText(_Name_Obj, _Txt, 10, "Lucida Console", _Color_Txt);
               //------ ðèñóåì ïîäëîæêó
               _Name_Obj = "A_" + _Name_Obj + "_";
               for(_x=0;_x<_Len_Str;_x++)
               {  ObjectCreate (_Name_Obj+_x, OBJ_LABEL, 0, 0, 0);
                  ObjectSet    (_Name_Obj+_x, OBJPROP_CORNER, 0);
                  ObjectSet    (_Name_Obj+_x, OBJPROP_XDISTANCE, 4+_x*8);
                  ObjectSet    (_Name_Obj+_x, OBJPROP_YDISTANCE, _PozStr+_ShiftPoz);
                  ObjectSetText(_Name_Obj+_x, CharToStr(110),10,"Wingdings",Black);
               }  
            }
            _Cnt_Mov_Str--;
         }
      }
   }
   return;
}
//+------------------------------------------------------------------+
//+-------
//+-------
//+-------------------------------------------------------------------
//| output ADVERT                                          2011_04_11
//+------------------------------------------------------------------+
int
   _Cnt_Advert = 0,
   _Time_Start_Advert = 0;
   string 
      _Txt_Advert;   
void output_ADVERT()
{  int 
      _Time_Chenge_Advert = 30;
   if(TimeCurrent() > _Time_Start_Advert + _Time_Chenge_Advert)
   {  switch(_Cnt_Advert)
      {  case 0:
            _Txt_Advert = ADVERT; 
            _Time_Start_Advert = TimeCurrent();
            _Cnt_Advert = 1;
         break;
         case 1:
            _Txt_Advert = URL; 
            _Time_Start_Advert = TimeCurrent();
            _Cnt_Advert = 2;
         break;
         case 2:
            _Txt_Advert = AUTOR; 
            _Time_Start_Advert = TimeCurrent();
            _Cnt_Advert = 3;
         break;
         case 3:
            _Txt_Advert = ADVERT2; 
            _Time_Start_Advert = TimeCurrent();
            _Cnt_Advert = 0;
         break;
      }
   }
   ObjectCreate ("Advert", OBJ_LABEL, 0, 0, 0);
   ObjectSet    ("Advert", OBJPROP_CORNER, 2);
   ObjectSet    ("Advert", OBJPROP_XDISTANCE, 5);
   ObjectSet    ("Advert", OBJPROP_YDISTANCE, 5);
   ObjectSetText("Advert", _Txt_Advert, 10, "Arial", LimeGreen);
   return;
}
//+-------------------------------------------------------------------
//+-------
//+-------
//+------------------------------------------------------------------+
//| ïåðåâîä òèïà îðäåðà â òåêñòîâûé ôîðìàò                 2011_04_07 
//+------------------------------------------------------------------+
string Txt_Order_Type(int _Type)
{  string _Txt_Return = "";
   switch(_Type)
   {  case 0: _Txt_Return = "BUY"; break;
      case 1: _Txt_Return = "SELL";break;
      case 2: _Txt_Return = "BUYLIMIT"; break;
      case 3: _Txt_Return = "SELLLIMIT"; break;
      case 4: _Txt_Return = "BUYSTOP"; break;
      case 5: _Txt_Return = "SELLSTOP"; break;
      default: _Txt_Return = "Îøèáêà òèïà îðäåðà"; break;
   }
   return(_Txt_Return);
}
//+-------------------------------------------------------------------
//+-------

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 ---