Merge branch 'master' of git://repo.or.cz/mqlkit
[mqlkit.git] / indicators / JFatls_Channel.mq4
blobd181debc835b513a0bc7ec0d2342cb3be5eeea86
1 /*\r
2 Äëÿ  ðàáîòû  èíäèêàòîðà  ñëåäóåò  ïîëîæèòü ôàéëû \r
3 JJMASeries.mqh \r
4 PriceSeries.mqh \r
5 â ïàïêó (äèðåêòîðèþ): MetaTrader\experts\include\\r
6 Heiken Ashi#.mq4\r
7 â ïàïêó (äèðåêòîðèþ): MetaTrader\indicators\\r
8 */\r
9 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ \r
10 //|                                               JFatls_Channel.mq4 | \r
11 //|                           Copyright © 2006,     Nikolay Kositsin | \r
12 //|                              Khabarovsk,   farria@mail.redcom.ru | \r
13 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ \r
14 #property copyright "Nikolay Kositsin"\r
15 #property link "farria@mail.redcom.ru" \r
16 //---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå\r
17 #property indicator_chart_window \r
18 //---- êîëè÷åñòâî èíäèêàòîðíûõ áóôôåðîâ\r
19 #property indicator_buffers 3\r
20 //---- öâåòà èíäèêàòîðà\r
21 #property indicator_color1 Blue\r
22 #property indicator_color2 Magenta\r
23 #property indicator_color3 Blue\r
24 //---- ñòèëü ëèíèé èíäèêàòîðà\r
25 #property indicator_style1 4\r
26 #property indicator_style2 0\r
27 #property indicator_style3 4\r
28 //---- ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÈÍÄÈÊÀÒÎÐÀ þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþææ+\r
29 extern int Channel_width = 100; // øèðèíà êàíàëà â ïóíêòàõ\r
30 extern int        Length = 3;   // ãëóáèíà ñãëàæèâàíèÿ \r
31 extern int        Phase  = 100; // ïàðàìåòð, èçìåíÿþùèéñÿ â ïðåäåëàõ -100 ... +100, âëèÿåò íà êà÷åñòâî ïåðåõîäíîãî ïðîöåññà; \r
32 extern int        Shift  = 0;   // cäâèã èíäèêàòîðà âäîëü îñè âðåìåíè \r
33 extern int Input_Price_Customs = 0;//Âûáîð öåí, ïî êîòîðûì ïðîèçâîäèòñÿ ðàñ÷¸ò èíäèêàòîðà \r
34 //(0-CLOSE, 1-OPEN, 2-HIGH, 3-LOW, 4-MEDIAN, 5-TYPICAL, 6-WEIGHTED, 7-Heiken Ashi Close, 8-SIMPL, 9-TRENDFOLLOW, 10-0.5*TRENDFOLLOW,\r
35 //11-Heiken Ashi Low, 12-Heiken Ashi High,  13-Heiken Ashi Open, 14-Heiken Ashi Close.)\r
36 //---- æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ+\r
37 //---- áóôôåð êîýôôèöèåíòîâ öèôðîâîãî ôèëüòðà\r
38 double Filter[1];\r
39 //---- èíäèêàòîðíûå áóôôåðû\r
40 double JFilter[];\r
41 double UpperBuffer[];\r
42 double LowerBuffer[];\r
43 //---- öåëûå ïåðåìåííûå\r
44 int nf; \r
45 //---- ïåðåìåííûå ñ ïëàâàþùåé òî÷êîé \r
46 double FILTER,Series,Half_Width,Resalt;\r
47 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
48 //| JFatls_Channel initialization function                           |\r
49 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
50 int init() \r
51 \r
52 //---- îïðåäåëåíèå ñòèëÿ èñïîëíåíèÿ ãðàôèêà\r
53 SetIndexStyle (0,DRAW_LINE);\r
54 SetIndexStyle (1,DRAW_LINE);\r
55 SetIndexStyle (2,DRAW_LINE); \r
56 //---- 3 èíäèêàòîðíûõ áóôôåðà èñïîëüçîâàíû äëÿ ñ÷¸òà\r
57 SetIndexBuffer(0,UpperBuffer); \r
58 SetIndexBuffer(1,JFilter);  \r
59 SetIndexBuffer(2,LowerBuffer); \r
60 //---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå\r
61 SetIndexEmptyValue(0,0.0);  \r
62 SetIndexEmptyValue(1,0.0); \r
63 SetIndexEmptyValue(2,0.0); \r
64 //---- èçìåíåíèå ðåçìåðà áóôôåðà Filter[]\r
65 nf=38;int count=ArrayResize(Filter,nf+1);if(count==0){Alert("Íåâîçìîæíî âûäåëèòü ïàìÿòü ïîä ìàññèâ Filter");return(0);}\r
66 //+=== Èíèöèàëèçàöèÿ êîýôôèöèåíòîâ öèôðîâîãî ôèëüòðà =======================================================================+\r
67 Filter[00]=+0.4360409450;Filter[01]=+0.3658689069;Filter[02]=+0.2460452079;Filter[03]=+0.1104506886;Filter[04]=-0.0054034585;\r
68 Filter[05]=-0.0760367731;Filter[06]=-0.0933058722;Filter[07]=-0.0670110374;Filter[08]=-0.0190795053;Filter[09]=+0.0259609206;\r
69 Filter[10]=+0.0502044896;Filter[11]=+0.0477818607;Filter[12]=+0.0249252327;Filter[13]=-0.0047706151;Filter[14]=-0.0272432537;\r
70 Filter[15]=-0.0338917071;Filter[16]=-0.0244141482;Filter[17]=-0.0055774838;Filter[18]=+0.0128149838;Filter[19]=+0.0226522218; \r
71 Filter[20]=+0.0208778257;Filter[21]=+0.0100299086;Filter[22]=-0.0036771622;Filter[23]=-0.0136744850;Filter[24]=-0.0160483392;\r
72 Filter[25]=-0.0108597376;Filter[26]=-0.0016060704;Filter[27]=+0.0069480557;Filter[28]=+0.0110573605;Filter[29]=+0.0095711419;\r
73 Filter[30]=+0.0040444064;Filter[31]=-0.0023824623;Filter[32]=-0.0067093714;Filter[33]=-0.0072003400;Filter[34]=-0.0047717710;\r
74 Filter[35]=+0.0005541115;Filter[36]=+0.0007860160;Filter[37]=+0.0130129076;Filter[38]=+0.0040364019;\r
75 //+=========================================================================================================================+\r
76 //---- óñòàíîâêà àëåðòîâ íà íåäîïóñòèìûå çíà÷åíèÿ âõîäíûõ ïàðàìåòðîâ ==============================================================+ \r
77 if(Phase<-100){Alert("Ïàðàìåòð Phase äîëæåí áûòü îò -100 äî +100" + " Âû ââåëè íåäîïóñòèìîå " +Phase+  " áóäåò èñïîëüçîâàíî -100");}\r
78 if(Phase> 100){Alert("Ïàðàìåòð Phase äîëæåí áûòü îò -100 äî +100" + " Âû ââåëè íåäîïóñòèìîå " +Phase+  " áóäåò èñïîëüçîâàíî  100");}\r
79 if(Length<  1){Alert("Ïàðàìåòð Length äîëæåí áûòü íå ìåíåå 1"     + " Âû ââåëè íåäîïóñòèìîå " +Length+ " áóäåò èñïîëüçîâàíî  1"  );}\r
80 PriceSeriesAlert(Input_Price_Customs);////PriceSeriesAlert///////PriceSeriesAlert//////////PriceSeriesAlert/////////PriceSeriesAlert////|\r
81 //+================================================================================================================================+\r
82 //---- óñòàíîâêà íîìåðà áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò îòðèñîâûâàòüñÿ èíäèêàòîð \r
83 int draw_begin=nf+30; \r
84 SetIndexDrawBegin(0,draw_begin);\r
85 SetIndexDrawBegin(1,draw_begin);\r
86 SetIndexDrawBegin(2,draw_begin); \r
87 //---- ðàçìåð êàíàëà â ïóíêòàõ\r
88 Half_Width = Channel_width*Point/2;\r
89 //---- çàâåðøåíèå èíèöèàëèçàöèè\r
90 return(0); \r
91 }\r
92 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
93 //| JFATL iteration function                                         |\r
94 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ \r
95 int start() \r
96 \r
97 //---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷¸òà\r
98 if(Bars-1<=nf)return(0);\r
99 //----+ Ââåäåíèå öåëûõ ïåðåìåííûõ è ïîëó÷åíèå óæå ïîäñ÷èòàííûõ áàðîâ\r
100 //---- áëîêèðîâàíèå ïåðåñ÷¸òà âñåõ ïîäñ÷èòàííûõ è îòðèñîâàííûõ áàðîâ ïðè ïîäêëþ÷åíèè ê èíòåðíåòó\r
101 int reset,limit,MaxBar,bar,counted_bars=INDICATOR_COUNTED(0); INDICATOR_COUNTED(1);\r
102 //---- ïðîâåðêà íà âîçìîæíûå îøèáêè\r
103 if (counted_bars<0){INDICATOR_COUNTED(-1);return(-1);}\r
104 //---- ïîñëåäíèé ïîäñ÷èòàííûé áàð äîëæåí áûòü ïåðåñ÷èòàí\r
105 if (counted_bars>0) counted_bars--;\r
106 //----+ Ââåäåíèå è èíèöèàëèçàöèÿ âíóòðåííèõ ïåðåìåííûõ ôóíêöèè JJMASeries, nJMAnumber=1(Îäíî îáðàùåíèå ê ôóíêöèè) \r
107 if (counted_bars==0)JJMASeriesReset(1);\r
108 //---- îïðåäåëåíèå íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò íîâûõ áàðîâ\r
109 limit=Bars-counted_bars-1; \r
110 MaxBar=Bars-1-nf;\r
111 //---- êîðåêöèÿ ìàêñèìàëüíîãî íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò íîâûõ áàðîâ \r
112 //---- èíèöèàëèçàöèÿ íóëÿ          \r
113 if (limit>=MaxBar)\r
114  {\r
115   for(bar=limit;bar>=MaxBar;bar--)\r
116    {\r
117     JFilter[bar]=0.0; \r
118     UpperBuffer[bar]=0.0;    \r
119     LowerBuffer[bar]=0.0; \r
120    }\r
121   limit=MaxBar;\r
122  }\r
124 //----+  Âû÷èñëåíèå öèôðîâîãî ôèëüòðà Fatl\r
125 for(bar=limit;bar>=0;bar--)\r
126   {\r
127    FILTER=0.0;\r
128    for(int ii=0;ii<=nf;ii++)\r
129     {\r
130      //----+ Îáðàùåíèå ê ôóíêöèè PriceSeries äëÿ ïîëó÷åíèÿ âõîäíîé öåíû Series\r
131      Series=PriceSeries(Input_Price_Customs, bar+ii);\r
132      FILTER=FILTER+Filter[ii]*Series;\r
133     }\r
134    //----+ JMA ñãëàæèâàíèå ïîëó÷åííîãî èíäèêàòîðà, ïàðàìåòð nJMAMaxBar óìåíüøåí íà ðàçìåð ôèëüòðà nf  MaxBar=Bars-1-nf\r
135    //----+ Îáðàùåíèå ê ôóíêöèè JJMASeries çà íîìåðîì 0, ïàðàìåòðû nJMAPhase è nJMALength íå ìåíÿþòñÿ íà êàæäîì áàðå (nJMAdin=0)\r
136    Resalt=JJMASeries(0,0,MaxBar,limit,Phase,Length,FILTER,bar,reset);\r
137    //----+ ïðîâåðêà íà îòñóòñòâèå îøèáêè â ïðåäûäóùåé îïåðàöèè\r
138    if(reset!=0){INDICATOR_COUNTED(-1);return(-1);} \r
139    JFilter[bar]=Resalt; \r
140    //----+ ðàñ÷¸ò êàíàëà\r
141    UpperBuffer[bar]=Resalt+Half_Width;     \r
142    LowerBuffer[bar]=Resalt-Half_Width;\r
143    //---- çàâåðøåíèå âû÷èñëåíèé çíà÷åíèé èíäèêàòîðà        \r
144   }\r
145 return(0); \r
146 \r
147 //+---------------------------------------------------------------------------------------------------------------------------+\r
148 //----+ Ââåäåíèå ôóíêöèè JJMASeries (ôàéë JJMASeries.mqh ñëåäóåò ïîëîæèòü â ïàïêó (äèðåêòîðèþ): MetaTrader\experts\include)\r
149 //----+ Ââåäåíèå ôóíêöèè JJMASeriesReset  (äîïîëíèòåëüíàÿ ôóíêöèÿ ôàéëà JJMASeries.mqh)\r
150 //----+ Ââåäåíèå ôóíêöèè INDICATOR_COUNTED(äîïîëíèòåëüíàÿ ôóíêöèÿ ôàéëà JJMASeries.mqh)\r
151 #include <JJMASeries.mqh> \r
152 //+---------------------------------------------------------------------------------------------------------------------------+\r
153 //----+ Ââåäåíèå ôóíêöèè PriceSeries, ôàéë PriceSeries.mqh ñëåäóåò ïîëîæèòü â ïàïêó (äèðåêòîðèþ): MetaTrader\experts\include\r
154 //----+ Ââåäåíèå ôóíêöèè PriceSeriesAlert (äîïîëíèòåëüíàÿ ôóíêöèÿ ôàéëà PriceSeries.mqh)\r
155 #include <PriceSeries.mqh>\r
156 //+---------------------------------------------------------------------------------------------------------------------------+