bleh
[mqlkit.git] / indicators / 3c_JMACD.mq4
blobb0a5164c1652c414cf62f9d391ac198304809506
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 //|                                                     3c_JMACD.mq4 | \r
11 //|                 JMA code: Copyright © 2005, Weld, Jurik Research | \r
12 //|                                          http://weld.torguem.net | \r
13 //|                 3c_JMACD: Copyright © 2006,     Nikolay Kositsin | \r
14 //|                              Khabarovsk,   farria@mail.redcom.ru | \r
15 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ \r
16 #property copyright "Nikolay Kositsin"\r
17 #property link "farria@mail.redcom.ru" \r
18 //---- îòðèñîâêà èíäèêàòîðà â îòäåëüíîì îêíå\r
19 #property indicator_separate_window\r
20 //---- êîëè÷åñòâî èíäèêàòîðíûõ áóôôåðîâ\r
21 #property indicator_buffers 5\r
22 //---- öâåòà èíäèêàòîðà\r
23 #property indicator_color1  BlueViolet \r
24 #property indicator_color2  Blue\r
25 #property indicator_color3  Magenta\r
26 #property indicator_color4  Gray\r
27 #property indicator_color5  Red\r
28 //---- òîëùèíà èíäèêàòîðíûõ ëèíèé\r
29 #property indicator_width1 0\r
30 #property indicator_width2 3 \r
31 #property indicator_width3 3\r
32 #property indicator_width4 4\r
33 //---- ñòèëü îãèáàþùåé ëèíèè èíäèêàòîðà\r
34 #property indicator_style1 4\r
35 //---- ñòèëü ñèãíàëüíîé ëèíèè èíäèêàòîðà\r
36 #property indicator_style5 4\r
37 //---- ïàðàìåòðû ãîðèçîíòàëüíûõ óðîâíåé èíäèêàòîðà\r
38 #property indicator_level1 0.0\r
39 #property indicator_levelcolor Red \r
40 #property indicator_levelstyle 4\r
41 //---- ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÈÍÄÈÊÀÒÎÐÀ þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþææ+\r
42 extern int FastJMA=12;   // ãëóáèíà ñãëàæèâàíèÿ áûñòðîé JMA\r
43 extern int SlowJMA=26;   // ãëóáèíà ñãëàæèâàíèÿ ìåäëåííîé JMA\r
44 extern int SignalJMA=9;  // ãëóáèíà ñãëàæèâàíèÿ ñèãíàëüíîé JMA\r
45 extern int JMACD_Phase  = 100; // ïàðàìåòð, èçìåíÿþùèéñÿ â ïðåäåëàõ -100 ... +100, âëèÿåò íà êà÷åñòâî ïåðåõîäíûx ïðîöåññîâ JMACD \r
46 extern int Signal_Phase = 100; // ïàðàìåòð, èçìåíÿþùèéñÿ â ïðåäåëàõ -100 ... +100, âëèÿåò íà êà÷åñòâî ïåðåõîäíûx ïðîöåññîâ ñèãíàëüíîé ëèíèè \r
47 extern int Input_Price_Customs = 0;//Âûáîð öåí, ïî êîòîðûì ïðîèçâîäèòñÿ ðàñ÷¸ò èíäèêàòîðà \r
48 //(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
49 //11-Heiken Ashi Low, 12-Heiken Ashi High,  13-Heiken Ashi Open, 14-Heiken Ashi Close.)\r
50 //---- æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ+\r
51 //---- èíäèêàòîðíûå áóôôåðû\r
52 double Ind_buffer1[];\r
53 double Ind_buffer2[];\r
54 double Ind_buffer3[];\r
55 double Ind_buffer4[];\r
56 double Ind_buffer5[];\r
57 //---- ïåðåìåííûå ñ ïëàâàþùåé òî÷êîé \r
58 double F.JMA,S.JMA,JMACD,Series,trend,Signal;\r
59 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
60 //| JMACD initialization function                                    |\r
61 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
62 int init()\r
63   {\r
64 //---- ñòèëè èçîáðàæåíèÿ èíäèêàòîðà\r
65    SetIndexStyle(0,DRAW_LINE);\r
66    SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID);\r
67    SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID);\r
68    SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID);\r
69    SetIndexStyle(4,DRAW_LINE);\r
70 //---- 4 èíäèêàòîðíûõ áóôôåðà èñïîëüçîâàíû äëÿ ñ÷¸òà.\r
71 if(!SetIndexBuffer(0,Ind_buffer1)&& \r
72    !SetIndexBuffer(1,Ind_buffer2)&& \r
73    !SetIndexBuffer(2,Ind_buffer3)&& \r
74    !SetIndexBuffer(3,Ind_buffer4)&& \r
75    !SetIndexBuffer(4,Ind_buffer5))\r
76    Print("cannot set indicator buffers!");\r
77 //---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå\r
78    SetIndexEmptyValue(0,0.0);  \r
79    SetIndexEmptyValue(1,0.0); \r
80    SetIndexEmptyValue(2,0.0); \r
81    SetIndexEmptyValue(3,0.0);\r
82    SetIndexEmptyValue(4,0.0);  \r
83 //---- èìåíà äëÿ îêîí äàííûõ è ëýéáû äëÿ ñóáúîêîí.\r
84    IndicatorShortName("JMACD("+FastJMA+","+SlowJMA+","+SignalJMA+")");\r
85    SetIndexLabel(0,NULL);\r
86    SetIndexLabel(1,"Up_Trend");\r
87    SetIndexLabel(2,"Down_Trend");\r
88    SetIndexLabel(3,"Straight_Trend");\r
89    SetIndexLabel(4,"Signal");\r
90    //---- Óñòàíîâêà ôîðìàòà òî÷íîñòè (êîëè÷åñòâî çíàêîâ ïîñëå äåñÿòè÷íîé òî÷êè) äëÿ âèçóàëèçàöèè çíà÷åíèé èíäèêàòîðà    \r
91    IndicatorDigits(0);\r
92 //---- óñòàíîâêà àëåðòîâ íà íåäîïóñòèìûå çíà÷åíèÿ âõîäíûõ ïàðàìåòðîâ =====================================================================================+ \r
93 if(JMACD_Phase<-100) {Alert("Ïàðàìåòð JMACD_Phase äîëæåí áûòü îò -100 äî +100" +  " Âû ââåëè íåäîïóñòèìîå " +JMACD_Phase+    " áóäåò èñïîëüçîâàíî -100");}\r
94 if(JMACD_Phase> 100) {Alert("Ïàðàìåòð JMACD_Phase äîëæåí áûòü îò -100 äî +100" +  " Âû ââåëè íåäîïóñòèìîå " +JMACD_Phase+    " áóäåò èñïîëüçîâàíî  100");}\r
95 if(Signal_Phase<-100){Alert("Ïàðàìåòð Signal_Phase äîëæåí áûòü îò -100 äî +100" + " Âû ââåëè íåäîïóñòèìîå " +Signal_Phase+   " áóäåò èñïîëüçîâàíî -100");}\r
96 if(Signal_Phase> 100){Alert("Ïàðàìåòð Signal_Phase äîëæåí áûòü îò -100 äî +100" + " Âû ââåëè íåäîïóñòèìîå " +Signal_Phase+   " áóäåò èñïîëüçîâàíî  100");}\r
97 if(FastJMA<  1){Alert("Ïàðàìåòð FastJMA äîëæåí áûòü íå ìåíåå 1"     + " Âû ââåëè íåäîïóñòèìîå " +FastJMA+  " áóäåò èñïîëüçîâàíî  1"  );}\r
98 if(SlowJMA<  1){Alert("Ïàðàìåòð SlowJMA äîëæåí áûòü íå ìåíåå 1"     + " Âû ââåëè íåäîïóñòèìîå " +SlowJMA+  " áóäåò èñïîëüçîâàíî  1"  );}\r
99 if(SignalJMA<1){Alert("Ïàðàìåòð SignalJMA äîëæåí áûòü íå ìåíåå 1"   + " Âû ââåëè íåäîïóñòèìîå " +SignalJMA+" áóäåò èñïîëüçîâàíî  1"  );}\r
100 PriceSeriesAlert(Input_Price_Customs);\r
101 //+=======================================================================================================================================================+    \r
102 //---- çàâåðøåíèå èíèöèàëèçàöèè\r
103    return(0);\r
104   }\r
105 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
106 //| JMACD iteration function                                         |\r
107 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
108 int start()\r
109   {\r
110    //----+ Ââåäåíèå öåëûõ ïåðåìåííûõ è ïîëó÷åíèå óæå ïîäñ÷èòàííûõ áàðîâ\r
111    //---- áëîêèðîâàíèå ïåðåñ÷¸òà âñåõ ïîäñ÷èòàííûõ è îòðèñîâàííûõ áàðîâ ïðè ïîäêëþ÷åíèè ê èíòåðíåòó\r
112    int reset,limit,MaxBar,MaxBarS,counted_bars=INDICATOR_COUNTED(0); INDICATOR_COUNTED(1);\r
113    //---- ïðîâåðêà íà âîçìîæíûå îøèáêè\r
114    if (counted_bars<0){INDICATOR_COUNTED(-1);return(-1);}\r
115    //---- ïîñëåäíèé ïîäñ÷èòàííûé áàð äîëæåí áûòü ïåðåñ÷èòàí\r
116    if (counted_bars>0) counted_bars--;\r
117    //----+ Ââåäåíèå è èíèöèàëèçàöèÿ âíóòðåííèõ ïåðåìåííûõ ôóíêöèè JJMASeries, nJMAJMAnumber=3(Òðè îáðàùåííèÿ ê ôóíêöèè) \r
118    if (counted_bars==0)JJMASeriesReset(3);\r
119    //---- îïðåäåëåíèå íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò íîâûõ áàðîâ\r
120    limit=Bars-counted_bars-1; MaxBar=Bars-1; MaxBarS=MaxBar-30;\r
121    \r
122    //----+ ÎÑÍÎÂÍÎÉ ÖÈÊË ÂÛ×ÈÑËÅÍÈß ÈÍÄÈÊÀÒÎÐÀ JMACD\r
123    for(int bar=limit; bar>=0; bar--)\r
124     {\r
125      //----+ Îáðàùåíèå ê ôóíêöèè PriceSeries äëÿ ïîëó÷åíèÿ âõîäíîé öåíû Series\r
126      Series=PriceSeries(Input_Price_Customs, bar);  \r
127        \r
128      //----+ Äâà Îáðàùåíèÿ ê ôóíêöèè JJMASeries çà íîìåðàìè 0, 1. Ïàðàìåòðû nJMAPhase è nJMALength íå ìåíÿþòñÿ íà êàæäîì áàðå (nJMAdin=0)\r
129      F.JMA=JJMASeries(0,0,MaxBar,limit,JMACD_Phase,FastJMA,Series,bar,reset);\r
130      //----+ ïðîâåðêà íà îòñóòñòâèå îøèáêè â ïðåäûäóùåé îïåðàöèè\r
131      if(reset!=0){INDICATOR_COUNTED(-1);return(-1);} \r
132      //+---------------------------------------------------------------------+\r
133      S.JMA=JJMASeries(1,0,MaxBar,limit,JMACD_Phase,SlowJMA,Series,bar,reset);\r
134      //----+ ïðîâåðêà íà îòñóòñòâèå îøèáêè â ïðåäûäóùåé îïåðàöèè\r
135      if(reset!=0){INDICATOR_COUNTED(-1);return(-1);} \r
136      //+---------------------------------------------------------------------+\r
137      //----+ Ôîðìóëà äëÿ JMACD\r
138      JMACD=F.JMA-S.JMA;\r
139      //----+ èçìåíåíèå åäèíèöû èçìåðåíèÿ JMACD äî ïóíêòîâ  \r
140      JMACD = JMACD/Point;\r
141      Ind_buffer1[bar]=JMACD;\r
142      \r
143      //---- +SSSSSSSSSSSSSSSS <<< Òð¸õöâåòíûé êîä èíäèêàòîðà >>> SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
144      trend=JMACD-Ind_buffer1[bar+1];     \r
145      if(trend>0.0)     {Ind_buffer2[bar]=JMACD;  Ind_buffer3[bar]=0.0;    Ind_buffer4[bar]=0.0;}\r
146      else{if(trend<0.0){Ind_buffer2[bar]=0.0;    Ind_buffer3[bar]=JMACD;  Ind_buffer4[bar]=0.0;}\r
147      else              {Ind_buffer2[bar]=0.0;    Ind_buffer3[bar]=0.0;    Ind_buffer4[bar]=JMACD;}}    \r
148      //---- +SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
149      \r
150      //----+ Îáðàùåíèå ê ôóíêöèè JJMASeries çà íîìåðîì 2, (nJMAdin=0, Â ýòîì îáðàùåíèè ïàðàìåòð nJMAMaxBar óìåíüøåí íà 30  ò. ê. ýòî ïîâòîðíîå JMA ñãëàæèâàíèå) \r
151      Signal=JJMASeries(2,0,MaxBarS,limit,Signal_Phase,SignalJMA,JMACD,bar,reset);\r
152      //----+ ïðîâåðêà íà îòñóòñòâèå îøèáêè â ïðåäûäóùåé îïåðàöèè\r
153      if(reset!=0){INDICATOR_COUNTED(-1);return(-1);} \r
154      Ind_buffer5[bar]=Signal;\r
155    }\r
156    if(limit>=MaxBar-31){int iii=MaxBar-31;Ind_buffer2[iii]=0;Ind_buffer3[iii]=0;Ind_buffer4[iii]=0;} \r
157 //---- çàâåðøåíèå âû÷èñëåíèé çíà÷åíèé èíäèêàòîðà\r
158    return(0);\r
159   } \r
160 //+---------------------------------------------------------------------------------------------------------------------------+\r
161 //----+ Ââåäåíèå ôóíêöèè JJMASeries (ôàéë JJMASeries.mqh ñëåäóåò ïîëîæèòü â ïàïêó (äèðåêòîðèþ): MetaTrader\experts\include)\r
162 //----+ Ââåäåíèå ôóíêöèè JJMASeriesReset  (äîïîëíèòåëüíàÿ ôóíêöèÿ ôàéëà JJMASeries.mqh)\r
163 //----+ Ââåäåíèå ôóíêöèè INDICATOR_COUNTED(äîïîëíèòåëüíàÿ ôóíêöèÿ ôàéëà JJMASeries.mqh)\r
164 #include <JJMASeries.mqh> \r
165 //+---------------------------------------------------------------------------------------------------------------------------+\r
166 //----+ Ââåäåíèå ôóíêöèè PriceSeries, ôàéë PriceSeries.mqh ñëåäóåò ïîëîæèòü â ïàïêó (äèðåêòîðèþ): MetaTrader\experts\include\r
167 //----+ Ââåäåíèå ôóíêöèè PriceSeriesAlert (äîïîëíèòåëüíàÿ ôóíêöèÿ ôàéëà PriceSeries.mqh)\r
168 #include <PriceSeries.mqh>\r
169 //+---------------------------------------------------------------------------------------------------------------------------+