196 lines
9.1 KiB
Plaintext
196 lines
9.1 KiB
Plaintext
//+---------------------------------------------------------------------+
|
|
//| XEnvelopes2.mq5 |
|
|
//| Copyright © 2016, Nikolay Kositsin |
|
|
//| Khabarovsk, farria@mail.redcom.ru |
|
|
//+---------------------------------------------------------------------+
|
|
//| Äëÿ ðàáîòû èíäèêàòîðà ñëåäóåò ïîëîæèòü ôàéë SmoothAlgorithms.mqh |
|
|
//| â ïàïêó (äèðåêòîðèþ): êàòàëîã_äàííûõ_òåðìèíàëà\\MQL5\Include |
|
|
//+---------------------------------------------------------------------+
|
|
#property copyright "Copyright © 2016, Nikolay Kositsin"
|
|
#property link "farria@mail.redcom.ru"
|
|
#property description ""
|
|
//---- íîìåð âåðñèè èíäèêàòîðà
|
|
#property version "1.00"
|
|
//---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
|
|
#property indicator_chart_window
|
|
//---- êîëè÷åñòâî èíäèêàòîðíûõ áóôåðîâ 6
|
|
#property indicator_buffers 6
|
|
//---- èñïîëüçîâàíî âñåãî òðè ãðàôè÷åñêèõ ïîñòðîåíèÿ
|
|
#property indicator_plots 3
|
|
//+----------------------------------------------+
|
|
//| Ïàðàìåòðû îòðèñîâêè îáëàêà |
|
|
//+----------------------------------------------+
|
|
//---- îòðèñîâêà èíäèêàòîðà â âèäå öâåòíîãî îáëàêà
|
|
#property indicator_type1 DRAW_FILLING
|
|
//---- â êà÷åñòâå öâåòà îáëàêà èñïîëüçîâàí
|
|
#property indicator_color1 clrPaleGreen
|
|
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
|
|
#property indicator_label1 "Upper XEnvelopes2 Cloud"
|
|
//+----------------------------------------------+
|
|
//| Ïàðàìåòðû îòðèñîâêè îáëàêà |
|
|
//+----------------------------------------------+
|
|
//---- îòðèñîâêà èíäèêàòîðà â âèäå öâåòíîãî îáëàêà
|
|
#property indicator_type2 DRAW_FILLING
|
|
//---- â êà÷åñòâå öâåòà îáëàêà èñïîëüçîâàí
|
|
#property indicator_color2 clrLavender
|
|
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
|
|
#property indicator_label2 "XEnvelopes1 Cloud"
|
|
//+----------------------------------------------+
|
|
//| Ïàðàìåòðû îòðèñîâêè îáëàêà |
|
|
//+----------------------------------------------+
|
|
//---- îòðèñîâêà èíäèêàòîðà â âèäå öâåòíîãî îáëàêà
|
|
#property indicator_type3 DRAW_FILLING
|
|
//---- â êà÷åñòâå öâåòà îáëàêà èñïîëüçîâàí
|
|
#property indicator_color3 clrPink
|
|
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
|
|
#property indicator_label3 "Lower XEnvelopes2 Cloud"
|
|
//+----------------------------------------------+
|
|
//| Îïèñàíèå êëàññà CXMA |
|
|
//+----------------------------------------------+
|
|
#include <SmoothAlgorithms.mqh>
|
|
//+----------------------------------------------+
|
|
//---- îáúÿâëåíèå ïåðåìåííûõ êëàññà CXMA èç ôàéëà SmoothAlgorithms.mqh
|
|
CXMA XMA1;
|
|
//+----------------------------------------------+
|
|
//| Îáúÿâëåíèå ïåðå÷èñëåíèé |
|
|
//+----------------------------------------------+
|
|
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_SIMPL_, //Simpl Price (OC/2)
|
|
PRICE_QUARTER_, //Quarted Price (HLOC/4)
|
|
PRICE_TRENDFOLLOW0_, //TrendFollow_1 Price
|
|
PRICE_TRENDFOLLOW1_, //TrendFollow_2 Price
|
|
PRICE_DEMARK_ //Demark Price
|
|
};
|
|
//+----------------------------------------------+
|
|
//| Îáúÿâëåíèå ïåðå÷èñëåíèé |
|
|
//+----------------------------------------------+
|
|
/*enum SmoothMethod - ïåðå÷èñëåíèå îáúÿâëåíî â ôàéëå 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 Smooth_Method XMA_Method=MODE_SMA; // Ìåòîä óñðåäíåíèÿ
|
|
input uint XLength=12; // Ãëóáèíà ñãëàæèâàíèÿ
|
|
input int XPhase=15; // Ïàðàìåòð ñãëàæèâàíèÿ
|
|
//---- äëÿ JJMA èçìåíÿþùèéñÿ â ïðåäåëàõ -100 ... +100, âëèÿåò íà êà÷åñòâî ïåðåõîäíîãî ïðîöåññà;
|
|
//---- äëÿ VIDIA ýòî ïåðèîä CMO, äëÿ AMA ýòî ïåðèîä ìåäëåííîé ñêîëüçÿùåé
|
|
input Applied_price_ IPC=PRICE_CLOSE; // Öåíîâàÿ êîíñòàíòà
|
|
input double Deviation1=0.1; // Äåâèàöèÿ 1
|
|
input double Deviation2=0.3; // Äåâèàöèÿ 2
|
|
input int Shift=0; // Ñäâèã èíäèêàòîðà ïî ãîðèçîíòàëè â áàðàõ
|
|
input int PriceShift=0; // Ñäâèã èíäèêàòîðà ïî âåðòèêàëè â ïóíêòàõ
|
|
//+----------------------------------------------+
|
|
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò â
|
|
//---- äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
|
|
double UpBuffer1[],DnBuffer1[],UpBuffer2[],DnBuffer2[],UpBuffer3[],DnBuffer3[];
|
|
//---- îáúÿâëåíèå ïåðåìåííûõ çíà÷åíèÿ âåðòèêàëüíîãî ñäâèãà ìóâèíãà è êîýôôèöèåíòîâ äåâèàöèè
|
|
double dPriceShift,UpKdev1,DnKdev1,UpKdev2,DnKdev2;
|
|
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
|
|
int min_rates_total;
|
|
//+------------------------------------------------------------------+
|
|
//| Custom indicator initialization function |
|
|
//+------------------------------------------------------------------+
|
|
int OnInit()
|
|
{
|
|
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
|
|
min_rates_total=XMA1.GetStartBars(XMA_Method,XLength,XPhase);
|
|
//---- óñòàíîâêà àëåðòîâ íà íåäîïóñòèìûå çíà÷åíèÿ âíåøíèõ ïåðåìåííûõ
|
|
XMA1.XMALengthCheck("XLength",XLength);
|
|
XMA1.XMAPhaseCheck("XPhase",XPhase,XMA_Method);
|
|
//---- èíèöèàëèçàöèÿ ñäâèãà ïî âåðòèêàëè
|
|
dPriceShift=_Point*PriceShift;
|
|
|
|
if(Deviation1>=Deviation2)
|
|
{
|
|
Print("Âõîäíîé ïàðàìåòð Äåâèàöèÿ 2 âñåãäà äîëæåí áûòü áîëüøå âõîäíîãî ïàðàìåòðà Äåâèàöèÿ 1! Èñïðàâüòå çíà÷åíèÿ ýòèõ âõîäíûõ ïàðàìåòðîâ èíäèêàòîðà!");
|
|
return(INIT_FAILED);
|
|
}
|
|
//---- èíèöèàëèçàöèÿ êîýôôèöèåíòîâ äåâèàöèè
|
|
UpKdev1=(1+Deviation1/100.0);
|
|
DnKdev1=(1-Deviation1/100.0);
|
|
UpKdev2=(1+Deviation2/100.0);
|
|
DnKdev2=(1-Deviation2/100.0);
|
|
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
|
|
SetIndexBuffer(0,UpBuffer2,INDICATOR_DATA);
|
|
SetIndexBuffer(1,DnBuffer2,INDICATOR_DATA);
|
|
SetIndexBuffer(2,UpBuffer1,INDICATOR_DATA);
|
|
SetIndexBuffer(3,DnBuffer1,INDICATOR_DATA);
|
|
SetIndexBuffer(4,UpBuffer3,INDICATOR_DATA);
|
|
SetIndexBuffer(5,DnBuffer3,INDICATOR_DATA);
|
|
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà ïî ãîðèçîíòàëè
|
|
PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
|
|
PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
|
|
PlotIndexSetInteger(2,PLOT_SHIFT,Shift);
|
|
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà
|
|
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
|
|
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
|
|
PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
|
|
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
|
|
IndicatorSetString(INDICATOR_SHORTNAME,"Env("+string(XLength)+")");
|
|
PlotIndexSetString(0,PLOT_LABEL,"Env("+string(XLength)+")Upper Cloud2");
|
|
PlotIndexSetString(1,PLOT_LABEL,"Env("+string(XLength)+")Cloud1");
|
|
PlotIndexSetString(2,PLOT_LABEL,"Env("+string(XLength)+")Lower Cloud2");
|
|
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
|
|
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
|
|
//---- çàâåðøåíèå èíèöèàëèçàöèè
|
|
return(INIT_SUCCEEDED);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Custom indicator 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(rates_total<min_rates_total) return(0);
|
|
//---- îáúÿâëåíèå ïåðåìåííûõ ñ ïëàâàþùåé òî÷êîé
|
|
double price,xma;
|
|
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ è ïîëó÷åíèå óæå ïîñ÷èòàííûõ áàðîâ
|
|
int first,bar;
|
|
//---- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
|
|
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
|
|
first=0; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
|
|
else first=prev_calculated-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
|
|
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
|
|
for(bar=first; bar<rates_total && !IsStopped(); bar++)
|
|
{
|
|
price=PriceSeries(IPC,bar,open,low,high,close);
|
|
xma=XMA1.XMASeries(0,prev_calculated,rates_total,XMA_Method,XPhase,XLength,price,bar,false);
|
|
UpBuffer1[bar]=DnBuffer2[bar]=UpKdev1*xma+dPriceShift;
|
|
DnBuffer1[bar]=UpBuffer3[bar]=DnKdev1*xma+dPriceShift;
|
|
//----
|
|
UpBuffer2[bar]=UpKdev2*xma+dPriceShift;
|
|
DnBuffer3[bar]=DnKdev2*xma+dPriceShift;
|
|
}
|
|
//----
|
|
return(rates_total);
|
|
}
|
|
//+------------------------------------------------------------------+
|