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