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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---