slopedirectionline_htf_signal

Author: Copyright � 2015, Nikolay Kositsin
Price Data Components
0 Views
0 Downloads
0 Favorites
slopedirectionline_htf_signal
//+------------------------------------------------------------------+
//|                                SlopeDirectionLine_HTF_Signal.mq5 |
//|                               Copyright © 2015, Nikolay Kositsin |
//|                              Khabarovsk,   farria@mail.redcom.ru |
//+------------------------------------------------------------------+
//| Äëÿ ðàáîòû èíäèêàòîðà ôàéë SmoothAlgorithms.mqh                  |
//| ñëåäóåò ïîëîæèòü â ïàïêó: êàòàëîã_äàííûõ_òåðìèíàëà\MQL5\Include  |
//+------------------------------------------------------------------+ 
#property copyright "Copyright © 2015, Nikolay Kositsin"
#property link "farria@mail.redcom.ru" 
//--- íîìåð âåðñèè èíäèêàòîðà
#property version   "1.60"
//+----------------------------------------------+ 
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà               |
//+----------------------------------------------+ 
//--- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window 
#property indicator_buffers 1
#property indicator_plots   1
//+-----------------------------------+
//| Îáúÿâëåíèå êîíñòàíò               |
//+-----------------------------------+
#define RESET  0 // êîíñòàíòà äëÿ âîçâðàòà òåðìèíàëó êîìàíäû íà ïåðåñ÷åò èíäèêàòîðà
//+-----------------------------------+    
//| Îïèñàíèå êëàññîâ óñðåäíåíèé       |
//+-----------------------------------+    
#include <SmoothAlgorithms.mqh>
//+-----------------------------------+
//| Îáúÿâëåíèå ïåðå÷èñëåíèé           |
//+-----------------------------------+
enum APPLIED_PRICE // òèï êîíñòàíòû
  {
   PRICE_CLOSE_ = 1,     // Close
   PRICE_OPEN_,          // Open
   PRICE_HIGH_,          // High
   PRICE_LOW_,           // Low
   PRICE_MEDIAN_,        // Median Price (HL/2)
   PRICE_TYPICAL_,       // Typical Price (HLC/3)
   PRICE_WEIGHTED_,      // Weighted Close (HLCC/4)
   PRICE_SIMPLE,         // Simple Price (OC/2)
   PRICE_QUARTER_,       // Quarted Price (HLOC/4) 
   PRICE_TRENDFOLLOW0_,  // TrendFollow_1 Price 
   PRICE_TRENDFOLLOW1_,  //TrendFollow_2 Price
   PRICE_DEMARK_         //Demark Price
  };
//+-----------------------------------+
/*enum Smooth_Method - ïåðå÷èñëåíèå îáúÿâëåíî â ôàéëå SmoothAlgorithms.mqh
  {
   MODE_SMA_,  //SMA
   MODE_EMA_,  //EMA
   MODE_SMMA_, //SMMA
   MODE_LWMA_, //LWMA
   MODE_JJMA,  //JJMA
   MODE_JurX,  //JurX
   MODE_ParMA, //ParMA
   MODE_T3,    //T3
   MODE_VIDYA, //VIDYA
   MODE_AMA,   //AMA
  }; */
//+-----------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà      |
//+-----------------------------------+
input string Symbol_="";                   // Ôèíàíñîâûé àêòèâ
input ENUM_TIMEFRAMES Timeframe=PERIOD_H6; // Òàéìôðåéì èíäèêàòîðà äëÿ ðàñ÷åòà èíäèêàòîðà
input Smooth_Method MA_Method1=MODE_LWMA;  // Ìåòîä ïåðâîãî óñðåäíåíèÿ
input uint Length1=12; // Ãëóáèíà ïåðâîãî óñðåäíåíèÿ
input int Phase1=15;   // Ïàðàìåòð ïåðâîãî óñðåäíåíèÿ
//--- äëÿ JJMA èçìåíÿþùèéñÿ â ïðåäåëàõ -100 ... +100, âëèÿåò íà êà÷åñòâî ïåðåõîäíîãî ïðîöåññà;
//--- äëÿ VIDIA ýòî ïåðèîä CMO, äëÿ AMA ýòî ïåðèîä ìåäëåííîé ñêîëüçÿùåé
input Smooth_Method MA_Method2=MODE_SMA; // Ìåòîä óñðåäíåíèÿ âòîðîãî ñãëàæèâàíèÿ
input int Phase2=15;  // Ïàðàìåòð âòîðîãî ñãëàæèâàíèÿ
//--- äëÿ JJMA èçìåíÿþùèéñÿ â ïðåäåëàõ -100 ... +100, âëèÿåò íà êà÷åñòâî ïåðåõîäíîãî ïðîöåññà;
//--- äëÿ VIDIA ýòî ïåðèîä CMO, äëÿ AMA ýòî ïåðèîä ìåäëåííîé ñêîëüçÿùåé
input APPLIED_PRICE IPC=PRICE_CLOSE;//öåíîâàÿ êîíñòàíòà
input bool On_Push = false;                           // Ðàçðåøåíèå íà ïåðåäà÷ó push-ñîîáùåíèé
input bool On_Email = false;                          // Ðàçðåøåíèå íà îòïðàâêó ïî÷òû
input bool On_Alert = true;                           // Ðàçðåøåíèå íà ïîäà÷ó àëåðòà
input bool On_Play_Sound = false;                     // Ðàçðåøåíèå íà ïîäà÷ó çâóêîâîãî ñèãíàëà
input string NameFileSound = "expert.wav";            // Èìÿ äëÿ ôàéëà çâóêîâîãî ñèãíàëà
input string  CommentSirName="SlopeDirectionLine: ";  // Ïåðâàÿ ÷àñòü àëåðò-êîììåíòà
input uint SignalBar=1;                               // Íîìåð áàðà äëÿ ñèãíàëà
//--- íàñòðîéêè îòîáðàæåíèÿ èíäèêàòîðà
input string Symbols_Sirname="SlopeDirectionLine_Label_"; // Íàçâàíèå äëÿ ìåòîê èíäèêàòîðà
input color UpSymbol_Color=clrBlue;        // Öâåò ñèìâîëà ðîñòà
input color DnSymbol_Color=clrRed;         // Öâåò ñèìâîëà ïàäåíèÿ
input color IndName_Color=clrDarkOrchid;   // Öâåò íàçâàíèÿ èíäèêàòîðà
input uint Symbols_Size=34;                // Ðàçìåð ñèìâîëîâ ñèãíàëà
input uint Font_Size=15;                   // Ðàçìåð øðèôòà íàçâàíèÿ èíäèêàòîðà
input int X_3=120;                         // Ñìåùåíèå íàçâàíèÿ ïî ãîðèçîíòàëè
input int Y_3=10;                          // Ñìåùåíèå íàçâàíèÿ ïî âåðòèêàëè
input bool ShowIndName=true;               // Îòîáðàæåíèå íàçâàíèÿ èíäèêàòîðà
input ENUM_BASE_CORNER  WhatCorner=CORNER_RIGHT_UPPER; // Óãîë ðàñïîëîæåíèÿ
input uint X_=0;                           // Ñìåùåíèå ïî ãîðèçîíòàëè
input uint Y_=0;                           // Ñìåùåíèå ïî âåðòèêàëè
//+-----------------------------------+
//--- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ äëÿ õåíäëîâ èíäèêàòîðîâ
int SlopeDirectionLine_Handle;
//--- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//--- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ ðàñïîëîæåíèÿ èíäåêñîâ ïî ãîðèçîíòàëè è âåðòèêàëè
uint X_0,X_1,X_2,X_3_,Yn,Y_3_;
//--- îáúÿâëåíèå ïåðåìåííûõ äëÿ èìåí ìåòîê
string name0,name1,name2,name3,IndName,Symb;
//+------------------------------------------------------------------+
//| Ïîëó÷åíèå òàéìôðåéìà â âèäå ñòðîêè                               |
//+------------------------------------------------------------------+
string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
  {
//---
   return(StringSubstr(EnumToString(timeframe),7,-1));
  }
//+------------------------------------------------------------------+
//| Ñîçäàíèå òåêñòîâîé ìåòêè                                         |
//+------------------------------------------------------------------+
void CreateTLabel(long   chart_id,         // èäåíòèôèêàòîð ãðàôèêà
                  string name,             // èìÿ îáúåêòà
                  int    nwin,             // èíäåêñ îêíà
                  ENUM_BASE_CORNER corner, // ïîëîæåíèå óãëà ïðèâÿçêè
                  ENUM_ANCHOR_POINT point, // ïîëîæåíèå òî÷êè ïðèâÿçêè
                  int    X,                // äèñòàíöèÿ â ïèêñåëÿõ ïî îñè X îò óãëà ïðèâÿçêè
                  int    Y,                // äèñòàíöèÿ â ïèêñåëÿõ ïî îñè Y îò óãëà ïðèâÿçêè
                  string text,             // òåêñò
                  color  Color,            // öâåò òåêñòà
                  string Font,             // øðèôò òåêñòà
                  int    Size)             // ðàçìåð øðèôòà
  {
//---
   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);
   ObjectSetInteger(chart_id,name,OBJPROP_BACK,true);
  }
//+------------------------------------------------------------------+
//| Ïåðåóñòàíîâêà òåêñòîâîé ìåòêè                                    |
//+------------------------------------------------------------------+
void SetTLabel(long   chart_id,         // èäåíòèôèêàòîð ãðàôèêà
               string name,             // èìÿ îáúåêòà
               int    nwin,             // èíäåêñ îêíà
               ENUM_BASE_CORNER corner, // ïîëîæåíèå óãëà ïðèâÿçêè
               ENUM_ANCHOR_POINT point, // ïîëîæåíèå òî÷êè ïðèâÿçêè
               int    X,                // äèñòàíöèÿ â ïèêñåëÿõ ïî îñè X îò óãëà ïðèâÿçêè
               int    Y,                // äèñòàíöèÿ â ïèêñåëÿõ ïî îñè Y îò óãëà ïðèâÿçêè
               string text,             // òåêñò
               color  Color,            // öâåò òåêñòà
               string Font,             // øðèôò òåêñòà
               int    Size)             // ðàçìåð øðèôòà
  {
//---
   if(ObjectFind(chart_id,name)==-1) CreateTLabel(chart_id,name,nwin,corner,point,X,Y,text,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);
     }
  }
//+------------------------------------------------------------------+    
//| SlopeDirectionLine indicator initialization function             | 
//+------------------------------------------------------------------+  
void OnInit()
  {
//--- îáúÿâëåíèå ïåðåìåííûõ êëàññà CXMA èç ôàéëà SmoothAlgorithms.mqh
   CXMA XMA;
//--- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
   int LengthR=int(MathMax(MathSqrt(Length1),1));
   min_rates_total=GetStartBars(MA_Method1,Length1,Phase1);
   min_rates_total+=int(GetStartBars(MA_Method2,LengthR,Phase2)+4+SignalBar);
//--- èíèöèàëèçàöèÿ ïåðåìåííûõ
   if(Symbol_!="") Symb=Symbol_;
   else Symb=Symbol();
//---
   X_0=X_;
   X_1=uint(X_0+Symbols_Size*1.1);
   X_2=uint(X_1+Symbols_Size*1.1);
   Yn=Y_+5;
//---
   name0=Symbols_Sirname+"0";
   name1=Symbols_Sirname+"1";
   name2=Symbols_Sirname+"2";
   if(ShowIndName)
     {
      Y_3_=Yn+Y_3;
      X_3_=X_0+X_3;
      name3=Symbols_Sirname+"3";
      StringConcatenate(IndName,"SlopeDirectionLine(",Symb," ",GetStringTimeframe(Timeframe),")");
     }
//--- ïîëó÷åíèå õåíäëà èíäèêàòîðà SlopeDirectionLine
   SlopeDirectionLine_Handle=iCustom(Symb,Timeframe,"SlopeDirectionLine",MA_Method1,Length1,Phase1,MA_Method2,Phase2,IPC,0,0,On_Push,On_Email,On_Alert,On_Play_Sound,NameFileSound,CommentSirName,SignalBar);
   if(SlopeDirectionLine_Handle==INVALID_HANDLE) Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà SlopeDirectionLine");
//--- èíèöèàëèçàöèÿ ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
   string shortname;
   string Smooth1=XMA.GetString_MA_Method(MA_Method1);
   string Smooth2=XMA.GetString_MA_Method(MA_Method2);
   StringConcatenate(shortname,"SlopeDirectionLine(",Length1,", ",Smooth1,", ",Smooth2,")");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
   IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//--- çàâåðøåíèå èíèöèàëèçàöèè
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+    
void Deinit()
  {
//---
   if(ObjectFind(0,name0)!=-1) ObjectDelete(0,name0);
   if(ObjectFind(0,name1)!=-1) ObjectDelete(0,name1);
   if(ObjectFind(0,name2)!=-1) ObjectDelete(0,name2);
   if(ObjectFind(0,name3)!=-1) ObjectDelete(0,name3);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+    
void OnDeinit(const int reason)
  {
//---
   Deinit();
//---
   ChartRedraw(0);
  }
//+------------------------------------------------------------------+  
//| SlopeDirectionLine iteration function                            | 
//+------------------------------------------------------------------+  
int OnCalculate(const int rates_total,    // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
                const int prev_calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
                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[])
  {
//--- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
   if(BarsCalculated(SlopeDirectionLine_Handle)<min_rates_total) return(RESET);
   if(BarsCalculated(SlopeDirectionLine_Handle)<Bars(Symb,Timeframe)) return(prev_calculated);
//--- îáúÿâëåíèå ëîêàëüíûõõ ïåðåìåííûõ
   int to_copy=4;
   double dind0,dind1,dind2;
   double SlopeDirectionLine[4];
   color Color0,Color1,Color2;
//--- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâû
   if(CopyBuffer(SlopeDirectionLine_Handle,0,SignalBar,to_copy,SlopeDirectionLine)<=0) return(RESET);
//---
   dind0=SlopeDirectionLine[3]-SlopeDirectionLine[2];
   dind1=SlopeDirectionLine[2]-SlopeDirectionLine[1];
   dind2=SlopeDirectionLine[1]-SlopeDirectionLine[0];
//---
   if(dind0<0) Color0=DnSymbol_Color; else Color0=UpSymbol_Color;
   if(dind1<0) Color1=DnSymbol_Color; else Color1=UpSymbol_Color;
   if(dind2<0) Color2=DnSymbol_Color; else Color2=UpSymbol_Color;
//---
   SetTLabel(0,name0,0,WhatCorner,ENUM_ANCHOR_POINT(2*WhatCorner),X_0,Yn,"t",Color0,"Wingdings 2",Symbols_Size);
   SetTLabel(0,name1,0,WhatCorner,ENUM_ANCHOR_POINT(2*WhatCorner),X_1,Yn,"u",Color1,"Wingdings 2",Symbols_Size);
   SetTLabel(0,name2,0,WhatCorner,ENUM_ANCHOR_POINT(2*WhatCorner),X_2,Yn,"v",Color2,"Wingdings 2",Symbols_Size);
   if(ShowIndName) SetTLabel(0,name3,0,WhatCorner,ENUM_ANCHOR_POINT(2*WhatCorner),X_3_,Y_3_,IndName,IndName_Color,"Georgia",Font_Size);
//---
   ChartRedraw(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 ---