bleh
[mqlkit.git] / indicators / JMACD.MQ4
blobaf5eb9d71c8852636d1d3bcca3cbfc8a4af636ee
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 //|                                                        JMACD.mq4 | \r
11 //|                 JMA code: Copyright © 2005, Weld, Jurik Research | \r
12 //|                                          http://weld.torguem.net | \r
13 //|                    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 2\r
22 //---- öâåòà èíäèêàòîðà \r
23 #property indicator_color1  Gray\r
24 #property indicator_color2  Red\r
25 //---- òîëùèíà èíäèêàòîðíûõ ëèíèé\r
26 #property indicator_width1 3\r
27 //---- ñòèëü ñèãíàëüíîé ëèíèè èíäèêàòîðà\r
28 #property indicator_style2 4\r
29 //---- ïàðàìåòðû ãîðèçîíòàëüíûõ óðîâíåé èíäèêàòîðà\r
30 #property indicator_level1 0.0\r
31 #property indicator_levelcolor Blue \r
32 #property indicator_levelstyle 4\r
33 //---- ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÈÍÄÈÊÀÒÎÐÀ þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþææ+\r
34 extern int FastJMA=12;   // ãëóáèíà ñãëàæèâàíèÿ áûñòðîé JMA\r
35 extern int SlowJMA=26;   // ãëóáèíà ñãëàæèâàíèÿ ìåäëåííîé JMA\r
36 extern int SignalJMA=9;  // ãëóáèíà ñãëàæèâàíèÿ ñèãíàëüíîé JMA\r
37 extern int JMACD_Phase  = 100; // ïàðàìåòð, èçìåíÿþùèéñÿ â ïðåäåëàõ -100 ... +100, âëèÿåò íà êà÷åñòâî ïåðåõîäíûx ïðîöåññîâ JMACD \r
38 extern int Signal_Phase = 100; // ïàðàìåòð, èçìåíÿþùèéñÿ â ïðåäåëàõ -100 ... +100, âëèÿåò íà êà÷åñòâî ïåðåõîäíûx ïðîöåññîâ ñèãíàëüíîé ëèíèè \r
39 extern int Input_Price_Customs = 0;//Âûáîð öåí, ïî êîòîðûì ïðîèçâîäèòñÿ ðàñ÷¸ò èíäèêàòîðà \r
40 //(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
41 //11-Heiken Ashi Low, 12-Heiken Ashi High,  13-Heiken Ashi Open, 14-Heiken Ashi Close.)\r
42 //---- æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ+\r
43 //---- èíäèêàòîðíûå áóôôåðû\r
44 double Ind_buffer1[];\r
45 double Ind_buffer2[];\r
46 //---- ïåðåìåííûå ñ ïëàâàþùåé òî÷êîé \r
47 double F.JMA,S.JMA,JMACD,Series,Signal;\r
48 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
49 //| JMACD initialization function                                    |\r
50 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
51 int init()\r
52   {\r
53 //---- ñòèëè èçîáðàæåíèÿ èíäèêàòîðà\r
54    SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID);\r
55    SetIndexStyle(1,DRAW_LINE);\r
56 //---- 4 èíäèêàòîðíûõ áóôôåðà èñïîëüçîâàíû äëÿ ñ÷¸òà.\r
57 if(!SetIndexBuffer(0,Ind_buffer1)&& \r
58    !SetIndexBuffer(1,Ind_buffer2))\r
59    Print("cannot set indicator buffers!");\r
60    //---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå\r
61    SetIndexEmptyValue(0,0.0);  \r
62    SetIndexEmptyValue(1,0.0); \r
63 //---- èìåíà äëÿ îêîí äàííûõ è ëýéáû äëÿ ñóáúîêîí.\r
64    IndicatorShortName("JMACD("+FastJMA+","+SlowJMA+","+SignalJMA+")");\r
65    SetIndexLabel(0,"JMACD");\r
66    SetIndexLabel(1,"Signal");\r
67    //---- Óñòàíîâêà ôîðìàòà òî÷íîñòè (êîëè÷åñòâî çíàêîâ ïîñëå äåñÿòè÷íîé òî÷êè) äëÿ âèçóàëèçàöèè çíà÷åíèé èíäèêàòîðà    \r
68    IndicatorDigits(0);\r
69 //---- óñòàíîâêà àëåðòîâ íà íåäîïóñòèìûå çíà÷åíèÿ âõîäíûõ ïàðàìåòðîâ =====================================================================================+ \r
70 if(JMACD_Phase<-100) {Alert("Ïàðàìåòð JMACD_Phase äîëæåí áûòü îò -100 äî +100" +  " Âû ââåëè íåäîïóñòèìîå " +JMACD_Phase+    " áóäåò èñïîëüçîâàíî -100");}\r
71 if(JMACD_Phase> 100) {Alert("Ïàðàìåòð JMACD_Phase äîëæåí áûòü îò -100 äî +100" +  " Âû ââåëè íåäîïóñòèìîå " +JMACD_Phase+    " áóäåò èñïîëüçîâàíî  100");}\r
72 if(Signal_Phase<-100){Alert("Ïàðàìåòð Signal_Phase äîëæåí áûòü îò -100 äî +100" + " Âû ââåëè íåäîïóñòèìîå " +Signal_Phase+   " áóäåò èñïîëüçîâàíî -100");}\r
73 if(Signal_Phase> 100){Alert("Ïàðàìåòð Signal_Phase äîëæåí áûòü îò -100 äî +100" + " Âû ââåëè íåäîïóñòèìîå " +Signal_Phase+   " áóäåò èñïîëüçîâàíî  100");}\r
74 if(FastJMA<  1){Alert("Ïàðàìåòð FastJMA äîëæåí áûòü íå ìåíåå 1"     + " Âû ââåëè íåäîïóñòèìîå " +FastJMA+  " áóäåò èñïîëüçîâàíî  1"  );}\r
75 if(SlowJMA<  1){Alert("Ïàðàìåòð SlowJMA äîëæåí áûòü íå ìåíåå 1"     + " Âû ââåëè íåäîïóñòèìîå " +SlowJMA+  " áóäåò èñïîëüçîâàíî  1"  );}\r
76 if(SignalJMA<1){Alert("Ïàðàìåòð SignalJMA äîëæåí áûòü íå ìåíåå 1"   + " Âû ââåëè íåäîïóñòèìîå " +SignalJMA+" áóäåò èñïîëüçîâàíî  1"  );}\r
77 PriceSeriesAlert(Input_Price_Customs);\r
78 //+=======================================================================================================================================================+    \r
79 //---- çàâåðøåíèå èíèöèàëèçàöèè\r
80    return(0);\r
81   }\r
82 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
83 //| JMACD iteration function                                         |\r
84 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
85 int start()\r
86   {\r
87    //----+ Ââåäåíèå öåëûõ ïåðåìåííûõ è ïîëó÷åíèå óæå ïîäñ÷èòàííûõ áàðîâ\r
88    //---- áëîêèðîâàíèå ïåðåñ÷¸òà âñåõ ïîäñ÷èòàííûõ è îòðèñîâàííûõ áàðîâ ïðè ïîäêëþ÷åíèè ê èíòåðíåòó\r
89    int reset,limit,MaxBar,MaxBarS,counted_bars=INDICATOR_COUNTED(0); INDICATOR_COUNTED(1);\r
90    //---- ïðîâåðêà íà âîçìîæíûå îøèáêè\r
91    if (counted_bars<0){INDICATOR_COUNTED(-1);return(-1);}\r
92    //---- ïîñëåäíèé ïîäñ÷èòàííûé áàð äîëæåí áûòü ïåðåñ÷èòàí\r
93    if (counted_bars>0) counted_bars--;\r
94    //----+ Ââåäåíèå è èíèöèàëèçàöèÿ âíóòðåííèõ ïåðåìåííûõ ôóíêöèè JJMASeries, nJMAnumber=3(Òðè îáðàùåíèÿ ê ôóíêöèè)  \r
95    if (counted_bars==0)JJMASeriesReset(3);\r
96    //---- îïðåäåëåíèå íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò íîâûõ áàðîâ\r
97    limit=Bars-counted_bars-1; MaxBar=Bars-1; MaxBarS=MaxBar-30;\r
98    \r
99    //----+ ÎÑÍÎÂÍÎÉ ÖÈÊË ÂÛ×ÈÑËÅÍÈß ÈÍÄÈÊÀÒÎÐÀ JMACD\r
100    for(int bar=limit; bar>=0; bar--)\r
101     {\r
102      //----+ Îáðàùåíèå ê ôóíêöèè PriceSeries äëÿ ïîëó÷åíèÿ âõîäíîé öåíû Series\r
103      Series=PriceSeries(Input_Price_Customs, bar);  \r
104        \r
105      //----+ Äâà Îáðàùåíèÿ ê ôóíêöèè JJMASeries çà íîìåðàìè 0, 1. Ïàðàìåòðû nJMAPhase è nJMALength íå ìåíÿþòñÿ íà êàæäîì áàðå (nJMAdin=0)\r
106      F.JMA=JJMASeries(0,0,MaxBar,limit,JMACD_Phase,FastJMA,Series,bar,reset);\r
107      //----+ ïðîâåðêà íà îòñóòñòâèå îøèáêè â ïðåäûäóùåé îïåðàöèè\r
108      if(reset!=0){INDICATOR_COUNTED(-1);return(-1);} \r
109      \r
110      S.JMA=JJMASeries(1,0,MaxBar,limit,JMACD_Phase,SlowJMA,Series,bar,reset);\r
111      //----+ ïðîâåðêà íà îòñóòñòâèå îøèáêè â ïðåäûäóùåé îïåðàöèè\r
112      if(reset!=0){INDICATOR_COUNTED(-1);return(-1);} \r
113      \r
114      //----+ Ôîðìóëà äëÿ JMACD\r
115      JMACD=F.JMA-S.JMA;\r
116      //----+ èçìåíåíèå åäèíèöû èçìåðåíèÿ JMACD äî ïóíêòîâ  \r
117      JMACD = JMACD/Point;\r
118      Ind_buffer1[bar]=JMACD;     \r
119      //----+ Îáðàùåíèå ê ôóíêöèè JJMASeries çà íîìåðîì 2, (nJMAdin=0, Â ýòîì îáðàùåíèè ïàðàìåòð nJMAMaxBar óìåíüøåí íà 30  ò. ê. ýòî ïîâòîðíîå JMA ñãëàæèâàíèå) \r
120      Signal=JJMASeries(2,0,MaxBarS,limit,Signal_Phase,SignalJMA,JMACD,bar,reset);\r
121      //----+ ïðîâåðêà íà îòñóòñòâèå îøèáêè â ïðåäûäóùåé îïåðàöèè\r
122      if(reset!=0){INDICATOR_COUNTED(-1);return(-1);}\r
123      Ind_buffer2[bar]=Signal; \r
124    }\r
125 //---- çàâåðøåíèå âû÷èñëåíèé çíà÷åíèé èíäèêàòîðà\r
126    return(0);\r
127   } \r
129 //+---------------------------------------------------------------------------------------------------------------------------+\r
130 //----+ Ââåäåíèå ôóíêöèè JJMASeries (ôàéë JJMASeries.mqh ñëåäóåò ïîëîæèòü â ïàïêó (äèðåêòîðèþ): MetaTrader\experts\include)\r
131 //----+ Ââåäåíèå ôóíêöèè JJMASeriesReset  (äîïîëíèòåëüíàÿ ôóíêöèÿ ôàéëà JJMASeries.mqh)\r
132 //----+ Ââåäåíèå ôóíêöèè INDICATOR_COUNTED(äîïîëíèòåëüíàÿ ôóíêöèÿ ôàéëà JJMASeries.mqh)\r
133 #include <JJMASeries.mqh> \r
134 //+---------------------------------------------------------------------------------------------------------------------------+\r
135 //----+ Ââåäåíèå ôóíêöèè PriceSeries, ôàéë PriceSeries.mqh ñëåäóåò ïîëîæèòü â ïàïêó (äèðåêòîðèþ): MetaTrader\experts\include\r
136 //----+ Ââåäåíèå ôóíêöèè PriceSeriesAlert (äîïîëíèòåëüíàÿ ôóíêöèÿ ôàéëà PriceSeries.mqh)\r
137 #include <PriceSeries.mqh>\r
138 //+---------------------------------------------------------------------------------------------------------------------------+\r