WATR_HTF_Signal

Author: Copyright © 2017, Nikolay Kositsin
Price Data Components
Miscellaneous
It plays sound alerts
0 Views
0 Downloads
0 Favorites
WATR_HTF_Signal
ÿþ//+------------------------------------------------------------------+ 

//|                                              WATR_HTF_Signal.mq5 | 

//|                               Copyright © 2017, Nikolay Kositsin | 

//|                              Khabarovsk,   farria@mail.redcom.ru | 

//+------------------------------------------------------------------+ 

#property copyright "Copyright © 2017, Nikolay Kositsin"

#property link "farria@mail.redcom.ru" 

//---- =><5@ 25@A88 8=48:0B>@0

#property version   "1.60"

//+------------------------------------------------+ 

//|  0@0<5B@K >B@8A>2:8 8=48:0B>@0                |

//+------------------------------------------------+ 

//---- >B@8A>2:0 8=48:0B>@0 2 3;02=>< >:=5

#property indicator_chart_window 

#property indicator_buffers 1

#property indicator_plots   1

//+------------------------------------------------+ 

//|  1JO2;5=85 :>=AB0=B                           |

//+------------------------------------------------+

#define INDICATOR_NAME      "WATR"              // <O 8=48:0B>@0

#define RESET               0                   // >=AB0=B0 4;O 2>72@0B0 B5@<8=0;C :><0=4K =0 ?5@5AG5B 8=48:0B>@0

#define NAMES_SYMBOLS_FONT  "Georgia"           // (@8DB 4;O =0720=8O 8=48:0B>@0

#define SIGNAL_SYMBOLS_FONT "Wingdings 3"       // (@8DB 4;O A8<2>;0 2E>40 2 ?>78F8N

#define TREND_SYMBOLS_FONT  "Wingdings 3"       // (@8DB 4;O A8<2>;0 B@5=40

#define UP_SIGNAL_SYMBOL    "6"                 // !8<2>; 4;O >B:@K20=8O long

#define DN_SIGNAL_SYMBOL    "8"                 // !8<2>; 4;O >B:@K20=8O short

#define UP_TREND_SYMBOL     "2"                 // !8<2>; 4;O @0ABCI53> B@5=40

#define DN_TREND_SYMBOL     "2"                 // !8<2>; 4;O ?040NI53> B@5=40

#define BUY_SOUND           "alert.wav"         // 2C:>2>9 D09; 4;O 2E>40 2 long

#define SELL_SOUND          "alert.wav"         // 2C:>2>9 D09; 4;O 2E>40 2 short

#define BUY_ALERT_TEXT      "Buy signal"        // "5:AB 0;5@B0 4;O 2E>40 2 long

#define SELL_ALERT_TEXT     "Sell signal"       // "5:AB 0;5@B0 4;O 2E>40 2 short

//+------------------------------------------------+ 

//| 5@5G8A;5=85 4;O 8=48:0F88 A@010BK20=8O C@>2=O |

//+------------------------------------------------+ 

enum ENUM_ALERT_MODE // B8? :>=AB0=BK

  {

   OnlySound,   // B>;L:> 72C:

   OnlyAlert    // B>;L:> 0;5@B

  };

//+------------------------------------------------+ 

//|  E>4=K5 ?0@0<5B@K 8=48:0B>@0                  |

//+------------------------------------------------+ 

input string Symbol_="";                               // $8=0=A>2K9 0:B82

input ENUM_TIMEFRAMES Timeframe=PERIOD_H6;             // "09<D@59< 8=48:0B>@0 4;O @0AG5B0 8=48:0B>@0

input uint    WATR_K = 10;

input double WATR_M = 4.0;

input uint    ATR=21;

//---- =0AB@>9:8 287C0;L=>3> >B>1@065=8O 8=48:0B>@0

input uint SignalBar=0;                                // ><5@ 10@0 4;O ?>;CG5=8O A83=0;0 (0 - B5:CI89 10@)

input string Symbols_Sirname=INDICATOR_NAME"_Label_";  // 0720=85 4;O <5B>: 8=48:0B>@0

input color Upsymbol_Color=clrAqua;                    // &25B A8<2>;0 @>AB0

input color Dnsymbol_Color=clrMagenta;                 // &25B A8<2>;0 ?045=8O

input color IndName_Color=clrGray;                     // &25B =0720=8O 8=48:0B>@0

input uint Symbols_Size=60;                            //  07<5@ A8<2>;>2 A83=0;0

input uint Font_Size=10;                               //  07<5@ H@8DB0 =0720=8O 8=48:0B>@0

input int X_1=5;                                       // !<5I5=85 =0720=8O ?> 3>@87>=B0;8

input int Y_1=-15;                                     // !<5I5=85 =0720=8O ?> 25@B8:0;8

input bool ShowIndName=true;                           // B>1@065=85 =0720=8O 8=48:0B>@0

input ENUM_BASE_CORNER  WhatCorner=CORNER_RIGHT_UPPER; // #3>; @0A?>;>65=8O

input uint X_=0;                                       // !<5I5=85 ?> 3>@87>=B0;8

input uint Y_=20;                                      // !<5I5=85 ?> 25@B8:0;8

//---- =0AB@>9:8 0;5@B>2

input ENUM_ALERT_MODE alert_mode=OnlySound;            // 0@80=B 8=48:0F88 A@010BK20=8O

input uint AlertCount=0;                               // >;8G5AB2> ?>40205<KE 0;5@B>2

//+-----------------------------------+

//---- >1JO2;5=85 F5;>G8A;5==KE ?5@5<5==KE 4;O E5=4;>2 8=48:0B>@>2

int WATR_Handle;

//---- >1JO2;5=85 F5;>G8A;5==KE ?5@5<5==KE =0G0;0 >BAG5B0 40==KE

int min_rates_total;

//---- >1JO2;5=85 F5;>G8A;5==KE ?5@5<5==KE @0A?>;>65=8O 8=45:A>2 ?> 3>@87>=B0;8 8 25@B8:0;8

uint X_0,Yn,X_1_,Y_1_;

//---- >1JO2;5=85 ?5@5<5==KE 4;O 8<5= <5B>:

string name0,name1,IndName,Symb;

//+------------------------------------------------------------------+

//|  >;CG5=85 B09<D@59<0 2 2845 AB@>:8                              |

//+------------------------------------------------------------------+

string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)

  {

//----

   return(StringSubstr(EnumToString(timeframe),7,-1));

//----

  }

//+------------------------------------------------------------------+

//|  !>740=85 B5:AB>2>9 <5B:8                                        |

//+------------------------------------------------------------------+

void CreateTLabel(long   chart_id,         // 845=B8D8:0B>@ 3@0D8:0

                  string name,             // 8<O >1J5:B0

                  int    nwin,             // 8=45:A >:=0

                  ENUM_BASE_CORNER corner, // ?>;>65=85 C3;0 ?@82O7:8

                  ENUM_ANCHOR_POINT point, // ?>;>65=85 B>G:8 ?@82O7:8

                  int    X,                // 48AB0=F8O 2 ?8:A5;OE ?> >A8 X >B C3;0 ?@82O7:8

                  int    Y,                // 48AB0=F8O 2 ?8:A5;OE ?> >A8 Y >B C3;0 ?@82O7:8

                  string text,             // B5:AB

                  string textTT,           // B5:AB 2A?;K20NI59 ?>4A:07:8

                  color  Color,            // F25B B5:AB0

                  string Font,             // H@8DB B5:AB0

                  int    Size)             // @07<5@ H@8DB0

  {

//----

   ObjectCreate(chart_id,name,OBJ_LABEL,0,0,0);

   ObjectSetInteger(chart_id,name,OBJPROP_CORNER,corner);

   ObjectSetInteger(chart_id,name,OBJPROP_ANCHOR,point);

   ObjectSetInteger(chart_id,name,OBJPROP_XDISTANCE,X);

   ObjectSetInteger(chart_id,name,OBJPROP_YDISTANCE,Y);

   ObjectSetString(chart_id,name,OBJPROP_TEXT,text);

   ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);

   ObjectSetString(chart_id,name,OBJPROP_FONT,Font);

   ObjectSetInteger(chart_id,name,OBJPROP_FONTSIZE,Size);

   ObjectSetString(chart_id,name,OBJPROP_TOOLTIP,textTT);

   ObjectSetInteger(chart_id,name,OBJPROP_BACK,true); //>1J5:B =0 704=5< ?;0=5

//----

  }

//+------------------------------------------------------------------+

//|  5@5CAB0=>2:0 B5:AB>2>9 <5B:8                                   |

//+------------------------------------------------------------------+

void SetTLabel(long   chart_id,         // 845=B8D8:0B>@ 3@0D8:0

               string name,             // 8<O >1J5:B0

               int    nwin,             // 8=45:A >:=0

               ENUM_BASE_CORNER corner, // ?>;>65=85 C3;0 ?@82O7:8

               ENUM_ANCHOR_POINT point, // ?>;>65=85 B>G:8 ?@82O7:8

               int    X,                // 48AB0=F8O 2 ?8:A5;OE ?> >A8 X >B C3;0 ?@82O7:8

               int    Y,                // 48AB0=F8O 2 ?8:A5;OE ?> >A8 Y >B C3;0 ?@82O7:8

               string text,             // B5:AB

               string textTT,           // B5:AB 2A?;K20NI59 ?>4A:07:8

               color  Color,            // F25B B5:AB0

               string Font,             // H@8DB B5:AB0

               int    Size)             // @07<5@ H@8DB0

  {

//----

   if(ObjectFind(chart_id,name)==-1)

     {

      CreateTLabel(chart_id,name,nwin,corner,point,X,Y,text,textTT,Color,Font,Size);

     }

   else

     {

      ObjectSetString(chart_id,name,OBJPROP_TEXT,text);

      ObjectSetInteger(chart_id,name,OBJPROP_XDISTANCE,X);

      ObjectSetInteger(chart_id,name,OBJPROP_YDISTANCE,Y);

      ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);

      ObjectSetInteger(chart_id,name,OBJPROP_FONTSIZE,Size);

     }

//----

  }

//+------------------------------------------------------------------+    

//| Custom indicator initialization function                         | 

//+------------------------------------------------------------------+  

int OnInit()

  {

//---- 8=8F80;870F8O ?5@5<5==KE =0G0;0 >BAG5B0 40==KE

   min_rates_total=int(ATR);

   min_rates_total+=3+int(SignalBar);



//---- 8=8F80;870F8O ?5@5<5==KE

   if(Symbol_!="") Symb=Symbol_;

   else Symb=Symbol();



   X_0=X_;

   Yn=Y_+5;



   name0=Symbols_Sirname+"0";

   if(ShowIndName)

     {

      Y_1_=Yn+Y_1;

      X_1_=X_0+X_1;

      name1=Symbols_Sirname+"1";

      StringConcatenate(IndName,INDICATOR_NAME,"(",Symb," ",GetStringTimeframe(Timeframe),")");

     }



//---- ?>;CG5=85 E5=4;0 8=48:0B>@0 WATR

   WATR_Handle=iCustom(Symb,Timeframe,"WATR",WATR_K,WATR_M,ATR,0);

   if(WATR_Handle==INVALID_HANDLE)

     {

      Print(" 5 C40;>AL ?>;CG8BL E5=4; 8=48:0B>@0 WATR");

      return(INIT_FAILED);

     }



//---- 8=8F80;870F88 ?5@5<5==>9 4;O :>@>B:>3> 8<5=8 8=48:0B>@0

   string shortname;

   StringConcatenate(shortname,INDICATOR_NAME,"( ",WATR_K,", ",DoubleToString(WATR_M,4),", ",ATR," )");

//--- A>740=85 8<5=8 4;O >B>1@065=8O 2 >B45;L=>< ?>4>:=5 8 2> 2A?;K20NI59 ?>4A:07:5

   IndicatorSetString(INDICATOR_SHORTNAME,shortname);

//--- >?@545;5=85 B>G=>AB8 >B>1@065=8O 7=0G5=89 8=48:0B>@0

   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);

//--- 7025@H5=85 8=8F80;870F88

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function                       |

//+------------------------------------------------------------------+    

void Deinit()

  {

//----

   if(ObjectFind(0,name0)!=-1) ObjectDelete(0,name0);

   if(ObjectFind(0,name1)!=-1) ObjectDelete(0,name1);

//----

  }

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function                       |

//+------------------------------------------------------------------+    

void OnDeinit(const int reason)

  {

//----

   Deinit();

//----

   ChartRedraw(0);

  }

//+------------------------------------------------------------------+  

//| Custom indicator iteration function                              | 

//+------------------------------------------------------------------+  

int OnCalculate(const int rates_total,    // :>;8G5AB2> 8AB>@88 2 10@0E =0 B5:CI5< B8:5

                const int prev_calculated,// :>;8G5AB2> 8AB>@88 2 10@0E =0 ?@54K4CI5< B8:5

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

  {

//---- ?@>25@:0 :>;8G5AB20 10@>2 =0 4>AB0B>G=>ABL 4;O @0AG5B0

   if(BarsCalculated(WATR_Handle)<min_rates_total) return(RESET);

   if(BarsCalculated(WATR_Handle)<Bars(Symb,Timeframe)) return(prev_calculated);



//---- >1JO2;5=85 ;>:0;L=KE ?5@5<5==KE

   int limit,trend;

   double UpSign[],DnSign[];

   datetime rates_time,TIME[1];

   color Color0=clrNONE;

   string SignSymbol;

   static datetime prev_time;

   static int trend_;

   bool signal=false;

   static uint buycount=0,sellcount=0;



//---- :>?8@C5< 2=>2L ?>O282H85AO 40==K5 2 <0AA82K

   if(CopyTime(Symb,Timeframe,SignalBar,1,TIME)<=0) return(RESET);



//---- @0AG5BK =5>1E>48<>3> :>;8G5AB20 :>?8@C5<KE 40==KE 4;O DC=:F88 CopyBuffer

   if(prev_calculated>rates_total || prev_calculated<=0)// ?@>25@:0 =0 ?5@2K9 AB0@B @0AG5B0 8=48:0B>@0

     {

      prev_time=time[0];

      trend_=0;

     }



   rates_time=TimeCurrent();

//---- :>?8@C5< 2=>2L ?>O282H85AO 40==K5 2 <0AA82K

   if(CopyBuffer(WATR_Handle,3,rates_time,prev_time,DnSign)<=0) return(RESET);

   if(CopyBuffer(WATR_Handle,2,rates_time,prev_time,UpSign)<=0) return(RESET);



//---- @0AG5BK AB0@B>2>3> =><5@0 limit 4;O F8:;0 ?5@5AG5B0 10@>2  

   limit=ArraySize(UpSign)-1;

   trend=trend_;



//---- 8=45:A0F8O M;5<5=B>2 2 <0AA820E, :0: 2 B09<A5@8OE  

   ArraySetAsSeries(DnSign,true);

   ArraySetAsSeries(UpSign,true);



//---- AB028< AG5BG8:8 0;5@B>2 2 8AE>4=>5 ?>;>65=85   

   if(TIME[0]!=prev_time && AlertCount)

     {

      buycount=AlertCount;

      sellcount=AlertCount;

     }



//---- >A=>2=>9 F8:; @0AG5B0 8=48:0B>@0

   for(int bar=limit; bar>=0 && !IsStopped(); bar--)

     {

      if(UpSign[bar]&&UpSign[bar]!=EMPTY_VALUE) {trend=+1; if(!bar) signal=true;}

      if(DnSign[bar]&&DnSign[bar]!=EMPTY_VALUE) {trend=-1; if(!bar) signal=true;}

      if(bar|| SignalBar) trend_=trend;

     }



   if(trend>0)

     {

      Color0=Upsymbol_Color;



      if(signal)

        {

         SignSymbol=UP_SIGNAL_SYMBOL;

         if(buycount)

           {

            switch(alert_mode)

              {

               case OnlyAlert: Alert(IndName+": "+BUY_ALERT_TEXT); break;

               case OnlySound: PlaySound(BUY_SOUND); break;

              }



            buycount--;

           }

        }

      else SignSymbol=UP_TREND_SYMBOL;

     }



   if(trend<0)

     {

      Color0=Dnsymbol_Color;



      if(signal)

        {

         SignSymbol=DN_SIGNAL_SYMBOL;

         if(sellcount)

           {

            switch(alert_mode)

              {

               case OnlyAlert: Alert(IndName+": "+SELL_ALERT_TEXT); break;

               case OnlySound: PlaySound(SELL_SOUND); break;

              }



            sellcount--;

           }



        }

      else SignSymbol=DN_TREND_SYMBOL;

     }



   if(trend)

     {

      if(ShowIndName)

         SetTLabel(0,name1,0,WhatCorner,ENUM_ANCHOR_POINT(2*WhatCorner),X_1_,Y_1_,IndName,IndName,IndName_Color,NAMES_SYMBOLS_FONT,Font_Size);

      if(signal) SetTLabel(0,name0,0,WhatCorner,ENUM_ANCHOR_POINT(2*WhatCorner),X_0,Yn,SignSymbol,IndName,Color0,SIGNAL_SYMBOLS_FONT,Symbols_Size);

      else SetTLabel(0,name0,0,WhatCorner,ENUM_ANCHOR_POINT(2*WhatCorner),X_0,Yn,SignSymbol,IndName,Color0,TREND_SYMBOLS_FONT,Symbols_Size);

     }

   else Deinit();



//----

   ChartRedraw(0);

   prev_time=TIME[0];

//----     

   return(rates_total);

  }

//+------------------------------------------------------------------+

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