bleh
[mqlkit.git] / include / JJMASeries.mqh
blobf894dd02eb973d1c70bdc18b77430637dfd9b4ca
1 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
2 //|                                                   JJMASeries.mqh |\r
3 //|                 JMA code: Copyright © 2005, Weld, Jurik Research |\r
4 //|                                          http://weld.torguem.net |\r
5 //|                MQL4+JJMA: Copyright © 2006,     Nikolay Kositsin | \r
6 //|                              Khabarovsk,   farria@mail.redcom.ru | \r
7 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ \r
8 #property copyright "Nikolay Kositsin"\r
9 #property link "farria@mail.redcom.ru" \r
10   /*\r
11   SSSSSS <<< Ôóíêöèÿ JJMASeries >>> SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS\r
13   ----------------------------- Íàçíà÷åíèå -------------------------------\r
15   Ôóíêöèÿ JJMASeries ïðåäíàçíà÷åíà äëÿ èñïîëüçîâàíèÿ àëãîðèòìà JMA. ïðè íàïèñàíèè ëþáûõ èíäèêàòîðîâ òåõàíàëèçà, äëÿ çàìåíû ðàñ÷¸òà\r
16   êëàññè÷åñêîãî óñðåäíåíèÿ íà ýòîò àëãîðèòì. Ôóíêöèÿ íå  ðàáîòàåò,  åñëè   ïàðàìåòð   nJMA.limit   ïðèíèìàåò çíà÷åíèå, ðàâíîå íóëþ! \r
17   Âñå èíäèêàòîðû, ñäåëàííûå  ìíîþ  äëÿ  JJMASeries,  âûïîëíåíû  ñ  ó÷¸òîì  ýòîãî  îãðàíè÷åíèÿ.       Ôàéë ñëåäóåò ïîëîæèòü â ïàïêó\r
18   MetaTrader\experts\include\\r
20   -------------------------- âõîäíûå ïàðàìåòðû  --------------------------\r
22   nJMA.number - ïîðÿäêîâûé íîìåð îáðàùåíèÿ ê ôóíêöèè JJMASeries. (0, 1, 2, 3 è.ò.ä....)\r
23   nJMA.dinJ   - ïàðàìåòð, ïîçâîëÿþùèé èçìåíÿòü ïàðàìåòðû nJMA.Length è nJMA.Phase íà êàæäîì áàðå. 0 - çàïðåò èçìåíåíèÿ ïàðàìåòðîâ, ëþáîå äðóãîå çíà÷åíèå - ðàçðåøåíèå.\r
24   nJMA.MaxBar - Ìàêñèìàëüíîå çíà÷åíèå, êîòîðîå ìîæåò ïðèíèìàòü íîìåð ðàñ÷èòûâàåìîãî áàðà(bar). Îáû÷íî ðàâíî Bars-1;\r
25   nJMA.limit  - Êîëè÷åñòâî åù¸ íå ïîäñ÷èòàííûõ áàðîâ ïëþñ îäèí èëè íîìåð ïîñåäíåãî íåïîäñ÷èòàííîãî áàðà, Äîëæíî áûòü îáÿçàòåëüíî ðàâíî: Bars-IndicatorCounted()-1;\r
26   nJMA.Length - ãëóáèíà ñãëàæèâàíèÿ\r
27   nJMA.Phase  - ïàðàìåòð, èçìåíÿþùèéñÿ â ïðåäåëàõ -100 ... +100, âëèÿåò íà êà÷åñòâî ïåðåõîäíîãî ïðîöåññà;\r
28   dJMA.series - Âõîäíîé  ïàðàìåòð, ïî êîòîðîìó ïðîèçâîäèòñÿ ðàñ÷¸ò ôóíêöèè JJMASeries;\r
29   nJMA.bar    - íîìåð ðàñ÷èòûâàåìîãî áàðà, ïàðàìåòð äîëæåí èçìåíÿòüñÿ îïåðàòîðîì öèêëà îò ìàêñèìàëüíîãî çíà÷åíèÿ ê íóëåâîìó.\r
30   nJMA.reset  - ïàðàìåòð, ïðè çíà÷åíèè êîòîðîãî ðàâíûì -1 ïðîèñõîäèò ââåäåíèå è èíèöèàëèçàöèÿ âíóòðåííèõ ïåðåìåííûõ ôóíêöèè JJMASeries.\r
32   ------------------------- âûõîäíûå ïàðàìåòðû ---------------------------\r
34   JJMASeries() - çíà÷åíèå ôóíêöèè dJMA.JMA\r
35   nJMA.reset   - ïàðàìåòð, âîçâðàùàþùèé ïî ññûëêå çíà÷åíèå, îòëè÷èííîå îò 0 , åñëè ïðîèçîøëà îøèáêà â ðàñ÷¸òå ôóíêöèè,\r
36    0, åñëè ðàñ÷¸ò ïðîø¸ë íîðìàëüíî. Ýòîò ïàðàìåòð ìîæåò áûòü òîëüêî ïåðåìåííîé, íî íå çíà÷åíèåì!!!\r
38   --------------------- Ìåõàíèçì îáðàùåíèÿ ê ôóíêöèè ---------------------\r
40   Ïåðåä îáðàùåíèÿìè ê ôóíêöèè JJMASeries , êîãäà êîëè÷åñòâî óæå ïîäñ÷èòàííûõ áàðîâ ðàâíî 0, ñëåäóåò ââåñòè è èíèöèàëèçèðîâàòü\r
41   âíóòðåííèå ïåðåìåííûå ôóíêöèè, äëÿ ýòîãî íåîáõîäèìî îáðàòèòüñÿ ê ôóíêöèè ñî ñëåäóþùèìè ïàðàìåòðàìè:\r
42   reset=-1; JJMA(0,MaxJMA.number+1,0,0,0,0,0,0,reset); èëè èëè JJMASeriesReset(MaxJMA.number+1);\r
43   íåîáõîäèìî ñäåëàòü ïàðàìåòð nJMA.number(MaxJMA.number) ðàâíûì êîëè÷åñòâó îáðàùåíèé ê ôóíêöèè JJMASeries,  òî åñòü íà åäèíèöó áîëüøå, ÷åì\r
44   ìàêñèìàëüíûé nJMA.number. À ïàðàìåòðó nJMA.reset ïðèñâîèòü ÷åðåç ïåðåìåííóþ reset çíà÷åíèå -1( ñàìó ôóíêöèþ ïîäñòàâëÿòü -1 íåëüçÿ!\r
45   Òîëüêî ÷åðåç ïàðàìåòð). Îñòàëüíûì ïàðàìåòðàì ïðèñâîèòü 0. Ïðè íàïèñàíèè èíäèêàòîðîâ è ýêñïåðòîâ ñ èñïîëüçîâàíèåì ôóíêöèè JJMASeries, íå\r
46   ðåêîìåíäóåòñÿ ïåðåìåííûì äàâàòü èìåíà íà÷èíàþùèåñÿ ñ nJMA.... èëè dJMA....\r
48   --------------------- Ïðèìåð îáðàùåíèÿ ê ôóíêöèè -----------------------\r
49 int start()\r
50 {\r
51 //----+ Ââåäåíèå öåëûõ ïåðåìåííûõ è ïîëó÷åíèå óæå ïîäñ÷èòàííûõ áàðîâ\r
52 int reset,bar,MaxBar,limit,counted_bars=IndicatorCounted(); \r
53 //---- ïðîâåðêà íà âîçìîæíûå îøèáêè\r
54 if (counted_bars<0)return(-1);\r
55 //---- ïîñëåäíèé ïîäñ÷èòàííûé áàð äîëæåí áûòü ïåðåñ÷èòàí\r
56 if (counted_bars>0) counted_bars--;\r
57 //---- îïðåäåëåíèå íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò íîâûõ áàðîâ\r
58 int limit=Bars-counted_bars-1;\r
59 MaxBar=Bars-1;\r
60 //----+ Ââåäåíèå è èíèöèàëèçàöèÿ âíóòðåííèõ ïåðåìåííûõ ôóíêöèè JJMASeries, nJMA.number=1(Îäíî îáðàùåíèå ê ôóíêöèè JJMASeries)\r
61 if(limit==Bars-1)JJMASeriesReset(1);\r
62 //----+ Îáðàùåíèå ê ôóíêöèè JJMASeries çà íîìåðîì 0 äëÿ ðàñ÷¸òà áóôåðà Ind_Buffer[], ïàðàìåòðû nJMA.Phase è nJMA.Length íå ìåíÿþòñÿ íà êàæäîì áàðå (nJMA.din=0)\r
63 for(bar=limit;bar>=0;bar--)\r
64  (\r
65   Series=Close[bar];\r
66   Resalt=JJMASeries(0,0,Bars-1,limit,Phase,Length,Series,bar,reset);\r
67   if (reset!=0)return(-1);\r
68   Ind_Buffer[bar]=Resalt;\r
69  }\r
70 return(0);\r
71 }\r
72 //----+ îïðåäåëåíèå ôóíêöèè JJMASeries\r
73 #include <JJMASeries.mqh>\r
75   ---------- Ïðèìåð îáðàùåíèÿ ê ôóíêöèè ñ INDICATOR_COUNTED() ------------\r
76 int start()\r
77 {\r
78 //----+ Ââåäåíèå öåëûõ ïåðåìåííûõ è ïîëó÷åíèå óæå ïîäñ÷èòàííûõ áàðîâ\r
79 //---- áëîêèðîâàíèå ïåðåñ÷¸òà âñåõ ïîäñ÷èòàííûõ è îòðèñîâàííûõ áàðîâ ïðè ïîäêëþ÷åíèè ê èíòåðíåòó\r
80 int reset,bar,MaxBar,limit,counted_bars=INDICATOR_COUNTED(0); INDICATOR_COUNTED(1);\r
81 //---- ïðîâåðêà íà âîçìîæíûå îøèáêè\r
82 if (counted_bars<0){INDICATOR_COUNTED(-1);return(-1);}\r
83 //---- ïîñëåäíèé ïîäñ÷èòàííûé áàð äîëæåí áûòü ïåðåñ÷èòàí\r
84 if (counted_bars>0) counted_bars--;\r
85 //---- îïðåäåëåíèå íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò íîâûõ áàðîâ\r
86 int limit=Bars-counted_bars-1;\r
87 MaxBar=Bars-1;\r
88 //----+ Ââåäåíèå è èíèöèàëèçàöèÿ âíóòðåííèõ ïåðåìåííûõ ôóíêöèè JJMASeries, nJMA.number=1(Îäíî îáðàùåíèå ê ôóíêöèè JJMASeries)\r
89 if(limit==Bars-1)JJMASeriesReset(1);\r
90 //----+ Îáðàùåíèå ê ôóíêöèè JJMASeries çà íîìåðîì 0 äëÿ ðàñ÷¸òà áóôåðà Ind_Buffer[], ïàðàìåòðû nJMA.Phase è nJMA.Length íå ìåíÿþòñÿ íà êàæäîì áàðå (nJMA.din=0)\r
91 for(bar=limit;bar>=0;bar--)\r
92  (\r
93   Series=Close[bar];\r
94   Resalt=JJMASeries(0,0,Bars-1,limit,Phase,Length,Series,bar,reset);\r
95   if (reset!=0){INDICATOR_COUNTED(-1);return(-1);}\r
96   Ind_Buffer[bar]=Resalt;\r
97  }\r
98 return(0);\r
99 }\r
100 //----+ îïðåäåëåíèå ôóíêöèé JJMASeries è INDICATOR_COUNTED\r
101 #include <JJMASeries.mqh>\r
103   */\r
104 //SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
105 //+++++++++++++++++++++++++++++++++++++++++++++++++++++ <<< JJMASeries >>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++|\r
106 //SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
108 double JJMASeries\r
109 (int nJMA.number,int nJMA.din,int nJMA.MaxBar,int nJMA.limit,int nJMA.Phase,int nJMA.Length,double dJMA.series,int nJMA.bar,int& nJMA.reset)\r
111 if(nJMA.reset==-1)\r
113 //----++ <<< Ââåäåíèå è èíèöèàëèçàöèÿ ïåðåìåííûõ >>> +SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
114 static double dJMA.f18[1],dJMA.f38[1],dJMA.fA0,dJMA.fA8[1],dJMA.fC0[1],dJMA.fC8[1],dJMA.s8[1],dJMA.s18[1],dJMA.vv,dJMA.v1[1],dJMA.v2[1];\r
115 static double dJMA.v3[1],dJMA.v4,dJMA.f90[1],dJMA.f78[1],dJMA.f88[1],dJMA.f98[1],dJMA.JMA[1],dJMA.list[1][128],dJMA.ring1[1][128];\r
116 static double dJMA.ring2[1][11],dJMA.buffer[1][62],dJMA.mem1[1][8],dJMA.mem3[1][128],dJMA.mem4[1][128],dJMA.mem5[1][11],dJMA.f70;\r
117 static double dJMA.mem8[1][128],dJMA.Kg[1],dJMA.Pf[1],dJMA.s20,dJMA.s10,dJMA.fB0,dJMA.fD0,dJMA.f8,dJMA.f60,dJMA.f20,dJMA.f28;\r
118 static double dJMA.f30,dJMA.f40,dJMA.f48,dJMA.f58,dJMA.f68;\r
119 static int    nJMA.s28[1],nJMA.s30[1],nJMA.s38[1],nJMA.s40[1],nJMA.v5,nJMA.v6,nJMA.fE0,nJMA.fD8,nJMA.fE8,nJMA.val,nJMA.s48[1];\r
120 static int    nJMA.s58,nJMA.s60,nJMA.s68,nJMA.f0[1],nJMA.aa,nJMA.temp,nJMA.size,nJMA.s50[1],nJMA.s70[1],nJMA.LP2[1],nJMA.LP1[1];\r
121 static int    nJMA.countR1[1],nJMA.countR2[1],nJMA.countL[1],nJMA.ii,nJMA.jj,nJMA.n,nJMA.m,nJMA.mem2[1][9],nJMA.mem6[1][128];\r
122 static int    nJMA.mem7[1][11],nJMA.mem9[1][128];\r
123 //--+\r
124 nJMA.m=nJMA.number;\r
125 if(ArrayResize(dJMA.list,   nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(dJMA.ring1,  nJMA.m)==0){nJMA.reset=1;return(0);}\r
126 if(ArrayResize(dJMA.ring2,  nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(dJMA.buffer, nJMA.m)==0){nJMA.reset=1;return(0);}\r
127 if(ArrayResize(dJMA.mem1,   nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(nJMA.mem6,   nJMA.m)==0){nJMA.reset=1;return(0);}\r
128 if(ArrayResize(nJMA.mem2,   nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(nJMA.mem7,   nJMA.m)==0){nJMA.reset=1;return(0);}\r
129 if(ArrayResize(dJMA.mem3,   nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(dJMA.mem8,   nJMA.m)==0){nJMA.reset=1;return(0);}\r
130 if(ArrayResize(dJMA.mem4,   nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(nJMA.mem9,   nJMA.m)==0){nJMA.reset=1;return(0);}\r
131 if(ArrayResize(dJMA.mem5,   nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(nJMA.countR1,nJMA.m)==0){nJMA.reset=1;return(0);}\r
132 if(ArrayResize(nJMA.countR2,nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(nJMA.countL ,nJMA.m)==0){nJMA.reset=1;return(0);}\r
133 if(ArrayResize(dJMA.Kg,     nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(dJMA.Pf,     nJMA.m)==0){nJMA.reset=1;return(0);}\r
134 if(ArrayResize(dJMA.f18,    nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(dJMA.f38,    nJMA.m)==0){nJMA.reset=1;return(0);}\r
135 if(ArrayResize(dJMA.fA8,    nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(dJMA.fC0,    nJMA.m)==0){nJMA.reset=1;return(0);}\r
136 if(ArrayResize(dJMA.fC8,    nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(dJMA.s8,     nJMA.m)==0){nJMA.reset=1;return(0);}\r
137 if(ArrayResize(dJMA.s18,    nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(dJMA.JMA,    nJMA.m)==0){nJMA.reset=1;return(0);}\r
138 if(ArrayResize(nJMA.s50,    nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(nJMA.s70,    nJMA.m)==0){nJMA.reset=1;return(0);}\r
139 if(ArrayResize(nJMA.LP2,    nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(nJMA.LP1,    nJMA.m)==0){nJMA.reset=1;return(0);}\r
140 if(ArrayResize(nJMA.s38,    nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(nJMA.s40,    nJMA.m)==0){nJMA.reset=1;return(0);}\r
141 if(ArrayResize(nJMA.s48,    nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(dJMA.v1,     nJMA.m)==0){nJMA.reset=1;return(0);}\r
142 if(ArrayResize(dJMA.v2,     nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(dJMA.v3,     nJMA.m)==0){nJMA.reset=1;return(0);}\r
143 if(ArrayResize(dJMA.f90,    nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(dJMA.f78,    nJMA.m)==0){nJMA.reset=1;return(0);}\r
144 if(ArrayResize(dJMA.f88,    nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(dJMA.f98,    nJMA.m)==0){nJMA.reset=1;return(0);}\r
145 if(ArrayResize(nJMA.s28,    nJMA.m)==0){nJMA.reset=1;return(0);}if(ArrayResize(nJMA.s30,    nJMA.m)==0){nJMA.reset=1;return(0);}\r
146 if(ArrayResize(nJMA.f0,     nJMA.m)==0){nJMA.reset=1;return(0);}\r
147 //--+\r
148 ArrayInitialize(dJMA.list,0.0);ArrayInitialize(dJMA.ring1,0.0);ArrayInitialize(dJMA.ring2,0.0);ArrayInitialize(dJMA.buffer,0.0);\r
149 ArrayInitialize(dJMA.mem1,0.0);ArrayInitialize(nJMA.mem2, 0  );ArrayInitialize(dJMA.mem3, 0.0);ArrayInitialize(dJMA.mem4,  0.0);\r
150 ArrayInitialize(dJMA.mem5,0.0);ArrayInitialize(nJMA.mem6, 0  );ArrayInitialize(nJMA.mem7, 0  );ArrayInitialize(dJMA.mem8,  0.0);\r
151 ArrayInitialize(nJMA.mem9,0  );ArrayInitialize(nJMA.countR1,0);ArrayInitialize(nJMA.countR2,0);ArrayInitialize(nJMA.countL,0  );\r
152 ArrayInitialize(dJMA.Kg,  0.0);ArrayInitialize(dJMA.Pf,   0.0);ArrayInitialize(dJMA.f18,  0.0);ArrayInitialize(dJMA.f38,   0.0);\r
153 ArrayInitialize(dJMA.fA8, 0.0);ArrayInitialize(dJMA.fC0,  0.0);ArrayInitialize(dJMA.fC8,  0.0);ArrayInitialize(dJMA.s8,    0.0);\r
154 ArrayInitialize(dJMA.s18, 0.0);ArrayInitialize(dJMA.JMA,  0.0);ArrayInitialize(nJMA.s50,  0  );ArrayInitialize(nJMA.s70,   0  );\r
155 ArrayInitialize(nJMA.LP2, 0  );ArrayInitialize(nJMA.LP1,  0  );ArrayInitialize(nJMA.s38,  0  );ArrayInitialize(nJMA.s40,   0  );\r
156 ArrayInitialize(nJMA.s48, 0  );ArrayInitialize(dJMA.v1,   0  );ArrayInitialize(dJMA.v2,   0  );ArrayInitialize(dJMA.v3,    0  );\r
157 ArrayInitialize(dJMA.f90, 0.0);ArrayInitialize(dJMA.f78,  0.0);ArrayInitialize(dJMA.f88,  0.0);ArrayInitialize(dJMA.f98,   0.0);\r
158 ArrayInitialize(nJMA.s28, 0  );ArrayInitialize(nJMA.s30,  0  );ArrayInitialize(nJMA.f0,   1  );\r
159 //--+\r
160 nJMA.reset=0;return(1);\r
161 //----++SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
164 nJMA.reset=1;\r
165 if (nJMA.bar> nJMA.MaxBar){nJMA.reset=0;return(0.0);}\r
166 nJMA.n=nJMA.number;\r
167 if((nJMA.bar==nJMA.MaxBar)||(nJMA.din!=0))\r
169 //----++ <<< Ðàñ÷¸ò êîýôôèöèåíòîâ  >>> +SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
170 double Dr,Ds,Dl;\r
171 if(nJMA.Length < 1.0000000002) Dr = 0.0000000001;\r
172 else Dr= (nJMA.Length - 1.0) / 2.0;\r
173 if((nJMA.Phase >= -100)&&(nJMA.Phase <= 100))dJMA.Pf[nJMA.n] = nJMA.Phase / 100.0 + 1.5;\r
174 if (nJMA.Phase > 100) dJMA.Pf[nJMA.n] = 2.5;\r
175 if (nJMA.Phase < -100) dJMA.Pf[nJMA.n] = 0.5;\r
176 Dr = Dr * 0.9; dJMA.Kg[nJMA.n] = Dr/(Dr + 2.0);\r
177 Ds=MathSqrt(Dr);Dl=MathLog(Ds); dJMA.v1[nJMA.n]= Dl;dJMA.v2[nJMA.n] = dJMA.v1[nJMA.n];\r
178 if((dJMA.v1[nJMA.n] / MathLog(2.0)) + 2.0 < 0.0) dJMA.v3[nJMA.n]= 0.0;\r
179 else dJMA.v3[nJMA.n]=(dJMA.v2[nJMA.n]/MathLog(2.0))+ 2.0;\r
180 dJMA.f98[nJMA.n]= dJMA.v3[nJMA.n];\r
181 if( dJMA.f98[nJMA.n] >= 2.5 ) dJMA.f88[nJMA.n] = dJMA.f98[nJMA.n] - 2.0;\r
182 else dJMA.f88[nJMA.n]= 0.5;\r
183 dJMA.f78[nJMA.n]= Ds * dJMA.f98[nJMA.n]; dJMA.f90[nJMA.n]= dJMA.f78[nJMA.n] / (dJMA.f78[nJMA.n] + 1.0);\r
184 //----++SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
186 if(nJMA.bar==nJMA.MaxBar)\r
188 //----+----------------------------------------------------------------+\r
189 nJMA.f0[nJMA.n]=1; nJMA.s28[nJMA.n]=63; nJMA.s30[nJMA.n]=64;\r
190 for(int kk=0;kk<=nJMA.s28[nJMA.n];kk++)dJMA.list[nJMA.n][kk]=-1000000.0;\r
191 for(kk=nJMA.s30[nJMA.n]; kk<=127; kk++)dJMA.list[nJMA.n][kk]= 1000000.0;\r
192 //----+----------------------------------------------------------------+\r
194 //--+\r
195 if((nJMA.bar==nJMA.limit)&&(nJMA.limit<nJMA.MaxBar))\r
197 //----+ <<< Âîññòàíîâëåíèå çíà÷åíèé ïåðåìåííûõ >>> +SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
198   int nJMA.Tnew=Time[nJMA.limit+1];\r
199   //--+ ïðîâåðêà íà îøèáêè\r
200   if(nJMA.Tnew!=nJMA.mem2[nJMA.n][01])\r
201     {\r
202      nJMA.reset=-1;\r
203      //--+ èíäèêàöèÿ îøèáêè â ðàñ÷¸òå âõîäíîãî ïàðàìåòðà nJMA.limit ôóíêöèè JJMASeries()\r
204      if (nJMA.Tnew>nJMA.mem2[nJMA.n][01])\r
205        {\r
206        Print("JJMASeries number ="+nJMA.n+". ERROR01");\r
207        Print("JJMASeries number ="+nJMA.n+". Ïàðàìåòð nJMA.limit ôóíêöèè JJMASeries ìåíüøå, ÷åì íåîáõîäèìî");\r
208        }\r
209     else \r
210        { \r
211        int nJMA.LimitERROR=nJMA.limit+1-iBarShift(NULL,0,nJMA.mem2[nJMA.n][01],TRUE);\r
212        Print("JMASerries number ="+nJMA.n+". ERROR02");\r
213        Print("JJMASeries number ="+nJMA.n+". Ïàðàìåòð nJMA.limit ôóíêöèè JJMASeries áîëüøå, ÷åì íåîáõîäèìî íà"+nJMA.LimitERROR+"");\r
214        }\r
215   //--+ Âîçâðàò ÷åðåç nJMA.reset=-1; îøèáêè â ðàñ÷¸òå ôóíêöèè JJMASeries\r
216   return(0);\r
217   }\r
218 //--+\r
219 for(nJMA.ii=nJMA.countL [nJMA.n]-1;nJMA.ii>=0;nJMA.ii--)\r
220                      {nJMA.temp=nJMA.mem9[nJMA.n][nJMA.ii];dJMA.list [nJMA.n][nJMA.temp]=dJMA.mem8[nJMA.n][nJMA.ii];}\r
221   \r
222 for(nJMA.ii=nJMA.countR1[nJMA.n]-1;nJMA.ii>=0;nJMA.ii--)\r
223                      {nJMA.temp=nJMA.mem6[nJMA.n][nJMA.ii];dJMA.ring1[nJMA.n][nJMA.temp]=dJMA.mem4[nJMA.n][nJMA.ii];}\r
224   \r
225 for(nJMA.ii=nJMA.countR2[nJMA.n]-1;nJMA.ii>=0;nJMA.ii--)\r
226                      {nJMA.temp=nJMA.mem7[nJMA.n][nJMA.ii];dJMA.ring2[nJMA.n][nJMA.temp]=dJMA.mem5[nJMA.n][nJMA.ii];}\r
227 //--+\r
228 dJMA.fC0[nJMA.n]=dJMA.mem1[nJMA.n][00];dJMA.fC8[nJMA.n]=dJMA.mem1[nJMA.n][01];dJMA.fA8[nJMA.n]=dJMA.mem1[nJMA.n][02];\r
229 dJMA.s8 [nJMA.n]=dJMA.mem1[nJMA.n][03];dJMA.f18[nJMA.n]=dJMA.mem1[nJMA.n][04];dJMA.f38[nJMA.n]=dJMA.mem1[nJMA.n][05];\r
230 dJMA.s18[nJMA.n]=dJMA.mem1[nJMA.n][06];dJMA.JMA[nJMA.n]=dJMA.mem1[nJMA.n][07];nJMA.s38[nJMA.n]=nJMA.mem2[nJMA.n][02];\r
231 nJMA.s48[nJMA.n]=nJMA.mem2[nJMA.n][03];nJMA.s50[nJMA.n]=nJMA.mem2[nJMA.n][04];nJMA.LP1[nJMA.n]=nJMA.mem2[nJMA.n][05];\r
232 nJMA.LP2[nJMA.n]=nJMA.mem2[nJMA.n][06];nJMA.s40[nJMA.n]=nJMA.mem2[nJMA.n][07];nJMA.s70[nJMA.n]=nJMA.mem2[nJMA.n][08];\r
233 //----+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
235 if (nJMA.bar>1){nJMA.countR1[nJMA.n]=0;nJMA.countR2[nJMA.n]=0;nJMA.countL[nJMA.n]=0;}\r
236 //----+\r
237 if (nJMA.LP1[nJMA.n]<61){nJMA.LP1[nJMA.n]++; dJMA.buffer[nJMA.n][nJMA.LP1[nJMA.n]]=dJMA.series;}\r
238 if (nJMA.LP1[nJMA.n]>30)\r
240 //++++++++++++++++++\r
241 if (nJMA.f0[nJMA.n] != 0)\r
243 nJMA.f0[nJMA.n] = 0; nJMA.v5 = 0;\r
244 for( nJMA.ii=0; nJMA.ii<=29; nJMA.ii++) if (dJMA.buffer[nJMA.n][nJMA.ii+1] != dJMA.buffer[nJMA.n][nJMA.ii]){ nJMA.v5 = 1; break; }\r
245 nJMA.fD8 = nJMA.v5*30;\r
246 if (nJMA.fD8 == 0) dJMA.f38[nJMA.n] = dJMA.series; else dJMA.f38[nJMA.n] = dJMA.buffer[nJMA.n][1];\r
247 dJMA.f18[nJMA.n] = dJMA.f38[nJMA.n];\r
248 if (nJMA.fD8 > 29) nJMA.fD8 = 29;\r
250 else nJMA.fD8 = 0;\r
251 for(nJMA.ii=nJMA.fD8; nJMA.ii>=0; nJMA.ii--)\r
253 nJMA.val=31-nJMA.ii;\r
254 if (nJMA.ii == 0) dJMA.f8 = dJMA.series; else dJMA.f8 = dJMA.buffer[nJMA.n][nJMA.val];\r
255 dJMA.f28 = dJMA.f8 - dJMA.f18[nJMA.n]; dJMA.f48 = dJMA.f8 - dJMA.f38[nJMA.n];\r
256 if (MathAbs(dJMA.f28) > MathAbs(dJMA.f48)) dJMA.v2[nJMA.n] = MathAbs(dJMA.f28); else dJMA.v2[nJMA.n] = MathAbs(dJMA.f48);\r
257 dJMA.fA0 = dJMA.v2[nJMA.n]; dJMA.vv = dJMA.fA0 + 0.0000000001; //{1.0e-10;}\r
258 if (nJMA.s48[nJMA.n] <= 1) nJMA.s48[nJMA.n] = 127; else nJMA.s48[nJMA.n] = nJMA.s48[nJMA.n] - 1;\r
259 if (nJMA.s50[nJMA.n] <= 1) nJMA.s50[nJMA.n] = 10;  else nJMA.s50[nJMA.n] = nJMA.s50[nJMA.n] - 1;\r
260 if (nJMA.s70[nJMA.n] < 128) nJMA.s70[nJMA.n] = nJMA.s70[nJMA.n] + 1;\r
261 dJMA.s8[nJMA.n] = dJMA.s8[nJMA.n] + dJMA.vv - dJMA.ring2[nJMA.n][nJMA.s50[nJMA.n]];\r
263 if(nJMA.bar<=1)\r
265 //--+ <<< Ñîõðàíåíèå çíà÷åíèé äëÿ âîññòàíîâëåíèÿ áóôåðà >>> +ssssssssssssssssss+\r
266 dJMA.mem5[nJMA.n][nJMA.countR2[nJMA.n]]=dJMA.ring2[nJMA.n][nJMA.s50[nJMA.n]];\r
267 nJMA.mem7[nJMA.n][nJMA.countR2[nJMA.n]]=nJMA.s50[nJMA.n];nJMA.countR2[nJMA.n]++;\r
268 //--++sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss+\r
270 dJMA.ring2[nJMA.n][nJMA.s50[nJMA.n]] = dJMA.vv;\r
271 if (nJMA.s70[nJMA.n] > 10) dJMA.s20 = dJMA.s8[nJMA.n] / 10.0; else dJMA.s20 = dJMA.s8[nJMA.n] / nJMA.s70[nJMA.n];\r
272 if (nJMA.s70[nJMA.n] > 127)\r
274 dJMA.s10 = dJMA.ring1[nJMA.n][nJMA.s48[nJMA.n]];\r
276 if(nJMA.bar<=1)\r
278 //--+ <<< Ñîõðàíåíèå çíà÷åíèé äëÿ âîññòàíîâëåíèÿ áóôåðà >>> +sssssssssssssssssss+\r
279 dJMA.mem4[nJMA.n][nJMA.countR1[nJMA.n]]=dJMA.ring1[nJMA.n][nJMA.s48[nJMA.n]];\r
280 nJMA.mem6[nJMA.n][nJMA.countR1[nJMA.n]]=nJMA.s48[nJMA.n];nJMA.countR1[nJMA.n]++;\r
281 //--++ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss+\r
283 dJMA.ring1[nJMA.n][nJMA.s48[nJMA.n]] = dJMA.s20; nJMA.s68 = 64; nJMA.s58 = nJMA.s68;\r
284 while (nJMA.s68 > 1)\r
286 if (dJMA.list[nJMA.n][nJMA.s58] < dJMA.s10){nJMA.s68 = nJMA.s68 *0.5; nJMA.s58 = nJMA.s58 + nJMA.s68;}\r
287 else \r
288 if (dJMA.list[nJMA.n][nJMA.s58]<= dJMA.s10) nJMA.s68 = 1; else{nJMA.s68 = nJMA.s68 *0.5; nJMA.s58 = nJMA.s58 - nJMA.s68;}\r
291 else\r
293 if(nJMA.bar<=1)\r
295 //--+ <<< Ñîõðàíåíèå çíà÷åíèé äëÿ âîññòàíîâëåíèÿ áóôåðà >>> +sssssssssssssssssss+\r
296 dJMA.mem4[nJMA.n][nJMA.countR1[nJMA.n]]=dJMA.ring1[nJMA.n][nJMA.s48[nJMA.n]];\r
297 nJMA.mem6[nJMA.n][nJMA.countR1[nJMA.n]]=nJMA.s48[nJMA.n];nJMA.countR1[nJMA.n]++;\r
298 //--++ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss+\r
300 dJMA.ring1[nJMA.n][nJMA.s48[nJMA.n]] = dJMA.s20;\r
301 if  (nJMA.s28[nJMA.n] + nJMA.s30[nJMA.n] > 127){nJMA.s30[nJMA.n] = nJMA.s30[nJMA.n] - 1; nJMA.s58 = nJMA.s30[nJMA.n];}\r
302 else{nJMA.s28[nJMA.n] = nJMA.s28[nJMA.n] + 1; nJMA.s58 = nJMA.s28[nJMA.n];}\r
303 if  (nJMA.s28[nJMA.n] > 96) nJMA.s38[nJMA.n] = 96; else nJMA.s38[nJMA.n] = nJMA.s28[nJMA.n];\r
304 if  (nJMA.s30[nJMA.n] < 32) nJMA.s40[nJMA.n] = 32; else nJMA.s40[nJMA.n] = nJMA.s30[nJMA.n];\r
306 nJMA.s68 = 64; nJMA.s60 = nJMA.s68;\r
307 while (nJMA.s68 > 1)\r
309 if (dJMA.list[nJMA.n][nJMA.s60] >= dJMA.s20)\r
311 if (dJMA.list[nJMA.n][nJMA.s60 - 1] <= dJMA.s20) nJMA.s68 = 1; else {nJMA.s68 = nJMA.s68 *0.5; nJMA.s60 = nJMA.s60 - nJMA.s68; }\r
313 else{nJMA.s68 = nJMA.s68 *0.5; nJMA.s60 = nJMA.s60 + nJMA.s68;}\r
314 if ((nJMA.s60 == 127) && (dJMA.s20 > dJMA.list[nJMA.n][127])) nJMA.s60 = 128;\r
316 if (nJMA.s70[nJMA.n] > 127)\r
318 if (nJMA.s58 >= nJMA.s60)\r
320 if ((nJMA.s38[nJMA.n] + 1 > nJMA.s60) && (nJMA.s40[nJMA.n] - 1 < nJMA.s60)) dJMA.s18[nJMA.n] = dJMA.s18[nJMA.n] + dJMA.s20;\r
321 else \r
322 if ((nJMA.s40[nJMA.n] + 0 > nJMA.s60) && (nJMA.s40[nJMA.n] - 1 < nJMA.s58)) dJMA.s18[nJMA.n] \r
323 = dJMA.s18[nJMA.n] + dJMA.list[nJMA.n][nJMA.s40[nJMA.n] - 1];\r
325 else\r
326 if (nJMA.s40[nJMA.n] >= nJMA.s60) {if ((nJMA.s38[nJMA.n] + 1 < nJMA.s60) && (nJMA.s38[nJMA.n] + 1 > nJMA.s58)) dJMA.s18[nJMA.n] \r
327 = dJMA.s18[nJMA.n] + dJMA.list[nJMA.n][nJMA.s38[nJMA.n] + 1]; }\r
328 else if  (nJMA.s38[nJMA.n] + 2 > nJMA.s60) dJMA.s18[nJMA.n] = dJMA.s18[nJMA.n] + dJMA.s20; \r
329 else if ((nJMA.s38[nJMA.n] + 1 < nJMA.s60) && (nJMA.s38[nJMA.n] + 1 > nJMA.s58)) dJMA.s18[nJMA.n] \r
330 = dJMA.s18[nJMA.n] + dJMA.list[nJMA.n][nJMA.s38[nJMA.n] + 1];\r
331 if (nJMA.s58 > nJMA.s60)\r
333 if ((nJMA.s40[nJMA.n] - 1 < nJMA.s58) && (nJMA.s38[nJMA.n] + 1 > nJMA.s58)) dJMA.s18[nJMA.n] = dJMA.s18[nJMA.n] - dJMA.list[nJMA.n][nJMA.s58];\r
334 else \r
335 if ((nJMA.s38[nJMA.n]     < nJMA.s58) && (nJMA.s38[nJMA.n] + 1 > nJMA.s60)) dJMA.s18[nJMA.n] = dJMA.s18[nJMA.n] - dJMA.list[nJMA.n][nJMA.s38[nJMA.n]];\r
337 else\r
339 if ((nJMA.s38[nJMA.n] + 1 > nJMA.s58) && (nJMA.s40[nJMA.n] - 1 < nJMA.s58)) dJMA.s18[nJMA.n] = dJMA.s18[nJMA.n] - dJMA.list[nJMA.n][nJMA.s58];\r
340 else\r
341 if ((nJMA.s40[nJMA.n] + 0 > nJMA.s58) && (nJMA.s40[nJMA.n] - 0 < nJMA.s60)) dJMA.s18[nJMA.n] = dJMA.s18[nJMA.n] - dJMA.list[nJMA.n][nJMA.s40[nJMA.n]];\r
344 if (nJMA.s58 <= nJMA.s60)\r
346 if (nJMA.s58 >= nJMA.s60)\r
348 if(nJMA.bar<=1)\r
350 //--+ <<< Ñîõðàíåíèå çíà÷åíèé äëÿ âîññòàíîâëåíèÿ áóôåðà >>> +ssssssssss+\r
351 dJMA.mem8[nJMA.n][nJMA.countL[nJMA.n]]=dJMA.list[nJMA.n][nJMA.s60];\r
352 nJMA.mem9[nJMA.n][nJMA.countL[nJMA.n]]=nJMA.s60;nJMA.countL[nJMA.n]++;\r
353 //--++sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss+\r
355 dJMA.list[nJMA.n][nJMA.s60] = dJMA.s20;\r
357 else\r
359 if(nJMA.bar<=1)\r
361 //--+ <<< Ñîõðàíåíèå çíà÷åíèé äëÿ âîññòàíîâëåíèÿ áóôåðà >>> +sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss+\r
362 nJMA.size=nJMA.s60-nJMA.s58;for(nJMA.aa=0; nJMA.aa<=nJMA.size-2;nJMA.aa++){dJMA.mem8[nJMA.n][nJMA.countL[nJMA.n]+nJMA.aa]\r
363 =dJMA.list[nJMA.n][nJMA.s58+nJMA.aa];nJMA.mem9[nJMA.n][nJMA.countL[nJMA.n]+nJMA.aa]=nJMA.s58+1+nJMA.aa;}\r
364 nJMA.countL[nJMA.n]=nJMA.countL[nJMA.n]+nJMA.size;dJMA.mem8[nJMA.n][nJMA.countL[nJMA.n]]=dJMA.list[nJMA.n][nJMA.s60-1];\r
365 nJMA.mem9[nJMA.n][nJMA.countL[nJMA.n]]=nJMA.s60-1;nJMA.countL[nJMA.n]++;\r
366 //--++ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss+\r
368 for( nJMA.jj = nJMA.s58 + 1; nJMA.jj<=nJMA.s60 - 1 ;nJMA.jj++)dJMA.list[nJMA.n][nJMA.jj - 1] = dJMA.list[nJMA.n][nJMA.jj];\r
369 dJMA.list[nJMA.n][nJMA.s60 - 1] = dJMA.s20;\r
372 else\r
374 if(nJMA.bar<=1)\r
376 //--+ <<< Ñîõðàíåíèå çíà÷åíèé äëÿ âîññòàíîâëåíèÿ áóôåðà >>> +ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss+\r
377 nJMA.size=nJMA.s58-nJMA.s60+1;for(nJMA.aa=0; nJMA.aa<=nJMA.size-2;nJMA.aa++){dJMA.mem8[nJMA.n][nJMA.countL[nJMA.n]+nJMA.aa]\r
378 =dJMA.list[nJMA.n][nJMA.s58-nJMA.aa];nJMA.mem9[nJMA.n][nJMA.countL[nJMA.n]+nJMA.aa]=nJMA.s58-1-nJMA.aa;}\r
379 nJMA.countL[nJMA.n]=nJMA.countL[nJMA.n]+nJMA.size;dJMA.mem8[nJMA.n][nJMA.countL[nJMA.n]]=dJMA.list[nJMA.n][nJMA.s60];\r
380 nJMA.mem9[nJMA.n][nJMA.countL[nJMA.n]]=nJMA.s60;nJMA.countL[nJMA.n]++;\r
381 //--++sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss+\r
383 for( nJMA.jj = nJMA.s58 - 1; nJMA.jj>=nJMA.s60 ;nJMA.jj--) dJMA.list[nJMA.n][nJMA.jj + 1] = dJMA.list[nJMA.n][nJMA.jj];\r
384 dJMA.list[nJMA.n][nJMA.s60] = dJMA.s20;\r
386 if (nJMA.s70[nJMA.n] <= 127)\r
388 dJMA.s18[nJMA.n] = 0;\r
389 for( nJMA.jj = nJMA.s40[nJMA.n] ; nJMA.jj<=nJMA.s38[nJMA.n] ;nJMA.jj++) dJMA.s18[nJMA.n] = dJMA.s18[nJMA.n] + dJMA.list[nJMA.n][nJMA.jj];\r
391 dJMA.f60 = dJMA.s18[nJMA.n] / (nJMA.s38[nJMA.n] - nJMA.s40[nJMA.n] + 1.0);\r
392 if (nJMA.LP2[nJMA.n] + 1 > 31) nJMA.LP2[nJMA.n] = 31; else nJMA.LP2[nJMA.n] = nJMA.LP2[nJMA.n] + 1;\r
393 if (nJMA.LP2[nJMA.n] <= 30)\r
395 if (dJMA.f28 > 0.0) dJMA.f18[nJMA.n] = dJMA.f8; else dJMA.f18[nJMA.n] = dJMA.f8 - dJMA.f28 * dJMA.f90[nJMA.n];\r
396 if (dJMA.f48 < 0.0) dJMA.f38[nJMA.n] = dJMA.f8; else dJMA.f38[nJMA.n] = dJMA.f8 - dJMA.f48 * dJMA.f90[nJMA.n];\r
397 dJMA.JMA[nJMA.n] = dJMA.series;\r
398 if (nJMA.LP2[nJMA.n]!=30) continue;\r
399 if (nJMA.LP2[nJMA.n]==30)\r
401 dJMA.fC0[nJMA.n] = dJMA.series;\r
402 if ( MathCeil(dJMA.f78[nJMA.n]) >= 1) dJMA.v4 = MathCeil(dJMA.f78[nJMA.n]); else dJMA.v4 = 1.0;\r
404 if(dJMA.v4>0)nJMA.fE8 = MathFloor(dJMA.v4);else{if(dJMA.v4<0)nJMA.fE8 = MathCeil (dJMA.v4);else nJMA.fE8 = 0.0;}\r
406 if (MathFloor(dJMA.f78[nJMA.n]) >= 1) dJMA.v2[nJMA.n] = MathFloor(dJMA.f78[nJMA.n]); else dJMA.v2[nJMA.n] = 1.0;\r
408 if(dJMA.v2[nJMA.n]>0)nJMA.fE0 = MathFloor(dJMA.v2[nJMA.n]);else{if(dJMA.v2[nJMA.n]<0)nJMA.fE0 = MathCeil (dJMA.v2[nJMA.n]);else nJMA.fE0 = 0.0;}\r
410 if (nJMA.fE8== nJMA.fE0) dJMA.f68 = 1.0; else {dJMA.v4 = nJMA.fE8 - nJMA.fE0; dJMA.f68 = (dJMA.f78[nJMA.n] - nJMA.fE0) / dJMA.v4;}\r
411 if (nJMA.fE0 <= 29) nJMA.v5 = nJMA.fE0; else nJMA.v5 = 29;\r
412 if (nJMA.fE8 <= 29) nJMA.v6 = nJMA.fE8; else nJMA.v6 = 29;\r
413 dJMA.fA8[nJMA.n] = (dJMA.series - dJMA.buffer[nJMA.n][nJMA.LP1[nJMA.n] - nJMA.v5]) * (1.0 - dJMA.f68) / nJMA.fE0 + (dJMA.series \r
414 - dJMA.buffer[nJMA.n][nJMA.LP1[nJMA.n] - nJMA.v6]) * dJMA.f68 / nJMA.fE8;\r
417 else\r
419 if (dJMA.f98[nJMA.n] >= MathPow(dJMA.fA0/dJMA.f60, dJMA.f88[nJMA.n])) dJMA.v1[nJMA.n] = MathPow(dJMA.fA0/dJMA.f60, dJMA.f88[nJMA.n]);\r
420 else dJMA.v1[nJMA.n] = dJMA.f98[nJMA.n];\r
421 if (dJMA.v1[nJMA.n] < 1.0) dJMA.v2[nJMA.n] = 1.0;\r
422 else\r
423 {if(dJMA.f98[nJMA.n] >= MathPow(dJMA.fA0/dJMA.f60, dJMA.f88[nJMA.n])) dJMA.v3[nJMA.n] = MathPow(dJMA.fA0/dJMA.f60, dJMA.f88[nJMA.n]);\r
424 else dJMA.v3[nJMA.n] = dJMA.f98[nJMA.n]; dJMA.v2[nJMA.n] = dJMA.v3[nJMA.n];}\r
425 dJMA.f58 = dJMA.v2[nJMA.n]; dJMA.f70 = MathPow(dJMA.f90[nJMA.n], MathSqrt(dJMA.f58));\r
426 if (dJMA.f28 > 0.0) dJMA.f18[nJMA.n] = dJMA.f8; else dJMA.f18[nJMA.n] = dJMA.f8 - dJMA.f28 * dJMA.f70;\r
427 if (dJMA.f48 < 0.0) dJMA.f38[nJMA.n] = dJMA.f8; else dJMA.f38[nJMA.n] = dJMA.f8 - dJMA.f48 * dJMA.f70;\r
430 if (nJMA.LP2[nJMA.n] >30)\r
432 dJMA.f30 = MathPow(dJMA.Kg[nJMA.n], dJMA.f58);\r
433 dJMA.fC0[nJMA.n] =(1.0 - dJMA.f30) * dJMA.series + dJMA.f30 * dJMA.fC0[nJMA.n];\r
434 dJMA.fC8[nJMA.n] =(dJMA.series - dJMA.fC0[nJMA.n]) * (1.0 - dJMA.Kg[nJMA.n]) + dJMA.Kg[nJMA.n] * dJMA.fC8[nJMA.n];\r
435 dJMA.fD0 = dJMA.Pf[nJMA.n] * dJMA.fC8[nJMA.n] + dJMA.fC0[nJMA.n];\r
436 dJMA.f20 = dJMA.f30 *(-2.0);\r
437 dJMA.f40 = dJMA.f30 * dJMA.f30;\r
438 dJMA.fB0 = dJMA.f20 + dJMA.f40 + 1.0;\r
439 dJMA.fA8[nJMA.n] =(dJMA.fD0 - dJMA.JMA[nJMA.n]) * dJMA.fB0 + dJMA.f40 * dJMA.fA8[nJMA.n];\r
440 dJMA.JMA[nJMA.n] = dJMA.JMA[nJMA.n] + dJMA.fA8[nJMA.n];\r
443 //++++++++++++++++++\r
444 if (nJMA.LP1[nJMA.n] <=30)dJMA.JMA[nJMA.n]=0.0;\r
445 if (nJMA.bar==2)\r
447 //--+ <<< Ñîõðàíåíèå çíà÷åíèé ïåðåìåííûõ >>> +SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
448 dJMA.mem1[nJMA.n][00]=dJMA.fC0[nJMA.n];dJMA.mem1[nJMA.n][01]=dJMA.fC8[nJMA.n];dJMA.mem1[nJMA.n][02]=dJMA.fA8[nJMA.n];\r
449 dJMA.mem1[nJMA.n][03]= dJMA.s8[nJMA.n];dJMA.mem1[nJMA.n][04]=dJMA.f18[nJMA.n];dJMA.mem1[nJMA.n][05]=dJMA.f38[nJMA.n];\r
450 dJMA.mem1[nJMA.n][06]=dJMA.s18[nJMA.n];dJMA.mem1[nJMA.n][07]=dJMA.JMA[nJMA.n];nJMA.mem2[nJMA.n][02]=nJMA.s38[nJMA.n];\r
451 nJMA.mem2[nJMA.n][03]=nJMA.s48[nJMA.n];nJMA.mem2[nJMA.n][04]=nJMA.s50[nJMA.n];nJMA.mem2[nJMA.n][05]=nJMA.LP1[nJMA.n];\r
452 nJMA.mem2[nJMA.n][06]=nJMA.LP2[nJMA.n];nJMA.mem2[nJMA.n][07]=nJMA.s40[nJMA.n];nJMA.mem2[nJMA.n][08]=nJMA.s70[nJMA.n];\r
453 nJMA.mem2[nJMA.n][00]=Time[1];nJMA.mem2[nJMA.n][01]=Time[2];\r
454 //--+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
456 //----+  done --------------------------+\r
457 nJMA.reset=0;\r
458 return(dJMA.JMA[nJMA.n]);\r
461 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
462 // JJMASeriesReset - Ýòî äîïîëíèòåëüíàÿ ôóíêöèÿ äëÿ èíèöèàëèçàöèè âíóòðåííèõ ïåðåìåííûõ ôóíêöèè   | \r
463 // JJMASeries. Ïðèìåð îáðàùåíèÿ: if (limit==Bars-1)JJMASeriesReset(5); ãäå 5 - ýòî êîëè÷åñòâî     | \r
464 // îáðàùåíèé ê JJMASeries â òåêñòå èíäèêàòîðà                                                     |\r
465 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
466 void JJMASeriesReset(int nJJMAReset.Number)\r
467  {\r
468   int nJJMAReset.reset=-1;\r
469   int nJJMAReset.set=JJMASeries(nJJMAReset.Number,0,0,0,0,0,0,0,nJJMAReset.reset);\r
470   if((nJJMAReset.set==1)&&(nJJMAReset.reset==0))Print("JJMASeriesReset is OK!!!");\r
471   else Print("JJMASeriesReset is ERROR!!!");\r
472  }\r
473 //--+ --------------------------------------------------------------------------------------------+\r
475 /*\r
476 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
477  INDICATOR_COUNTED() - Ýòî äîïîëíèòåëüíàÿ ôóíêöèÿ äëÿ âîçâðàòà êîëè÷åñòâà óæå ïîäñ÷èòàííûõ áàðîâ  | \r
478  èíäèêàòîðà. Å¸ ãëàâíàÿ îñîáåííîñòü çàêëþ÷àåòñÿ â òîì, ÷òî îíà ïîçâîëÿåò íå ïåðåñ÷èòûâàòü         |\r
479  èíäèêàòîð íà âñåõ áàðàõ ïðè ïîäêëþ÷åíèè ê èíòåðíåòó. Òî åñòü ïðè ïîäêëþ÷åíèè ê èíòåðíåòó ýòà     |\r
480  ôóíêöèÿ â îòëè÷èå îò  ñòàíäàðòíîé ôóíêöèè IndicatorCounted() âñ¸ ðàâíî âîçâðàùàåò êîëè÷åñòâî     |\r
481  ïîäñ÷èòàííûõ äî ïîäêëþ÷åíèÿ ê èíòåðíåòó áàðîâ, à íå íîëü!          Ôóíêöèÿ  INDICATOR_COUNTED()  | \r
482  ïðåäíàçíà÷åíà äëÿ çàìåíû ôóíêöèè IndicatorCounted() Ïðè çíà÷åíèè ïàðàìåòðà                       |\r
483  INDICATOR_COUNTED.Input=0; ôóíêöèÿ âîçâðàùàåò êîëè÷åñòâî óæå ïîäñ÷èòàííûõ áàðîâ, ïðè çíà÷åíèè    |\r
484  ïàðàìåòðà INDICATOR_COUNTED.Input = 1; ïðîèñõîäèò ôèêñàöèÿ âðåìåíè íóëåâîãî áàðà, äëÿ ðàñ÷¸òà    |\r
485  ïî åãî íîìåðó ïðè ñëåäóþùåì ñòàðòå ôóíêöèè int start() èñòèííîãî çíà÷åíèÿ êîëè÷åñòâà óæå         | \r
486  ïîäñ÷èòàííûõ áàðîâ.    Ïðè çíà÷åíèè ïàðàìåòðà INDICATOR_COUNTED.Input = -1; ïðîèñõîäèò           |             \r
487  îáíóëåíèå âðåìåíè íóëåâîãî áàðà, åñëè ýòî íåîáõîäèìî, ïðè èñïîëüçîâàíèè îïåðàòîðà return(-1);    |\r
488  äëÿ ôóíêöèè int start().                                                                         |\r
489  Ïðèìåð îáðàùåíèÿ:                                                                                |\r
490                                                                                                   |\r
491 //----+ Ââåäåíèå öåëûõ ïåðåìåííûõ è ïîëó÷åíèå óæå ïîäñ÷èòàííûõ áàðîâ                              |\r
492 //---- áëîêèðîâàíèå ïåðåñ÷¸òà âñåõ ïîäñ÷èòàííûõ è îòðèñîâàííûõ áàðîâ ïðè ïîäêëþ÷åíèè ê èíòåðíåòó  |\r
493 incounted_bars=INDICATOR_COUNTED(0); INDICATOR_COUNTED(1);                                        |\r
494 //---- ïðîâåðêà íà âîçìîæíûå îøèáêè                                                               |\r
495 if (counted_bars<0){INDICATOR_COUNTED(-1); return(-1);}                                           |\r
496 //---- ïîñëåäíèé ïîäñ÷èòàííûé áàð äîëæåí áûòü ïåðåñ÷èòàí                                          |\r
497 if (counted_bars>0) counted_bars--;                                                               |\r
498 //---- îïðåäåëåíèå íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò  áàðîâ |\r
499 int limit=Bars-1-counted_bars;                                                                    |\r
500 //----                                                                                            |\r
501 for(bar=limit;bar>=0;bar--) { êîä âàøåãî èíäèêàòîðà }                                             |\r
502 Åñëè â òåêñòå èíäèêàòîðà åñòü âûðàæåíèå return(-1) äëÿ ôóíêöèè int start(); òî åãî ñëåäóåò        |\r
503 çàìåíèòü íà {INDICATOR_COUNTED(-1);return(-1);}                                                   |\r
504 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
505 */\r
506 int  INDICATOR_COUNTED(int INDICATOR_COUNTED.Input) \r
507 //----+ \r
508 {   \r
509   int INDICATOR_COUNTED.counted_bars;\r
510   //----+ xxxxxxxxxxx\r
511   if (INDICATOR_COUNTED.Input == 1)\r
512     {\r
513       //---- ââåäåíèå ïåðåìåííûõ è ïîëó÷åíèå èõ çíà÷åíèé\r
514       static int INDICATOR_COUNTED.T2, INDICATOR_COUNTED.Period; \r
515       INDICATOR_COUNTED.counted_bars=IndicatorCounted(); \r
516       if (INDICATOR_COUNTED.counted_bars<0)\r
517        {\r
518         //INDICATOR_COUNTED.T2=0; \r
519         return(INDICATOR_COUNTED.counted_bars);\r
520        }\r
521        //----+ ôèêñàöèÿ âðåìåíè îòêðûòèÿ ïðåäïîñëåäíåãî ïîäñ÷èòàííîãî áàðà \r
522       INDICATOR_COUNTED.T2 =Time[2]; \r
523       INDICATOR_COUNTED.Period=Period();\r
524       return(INDICATOR_COUNTED.counted_bars);\r
525     }\r
526   INDICATOR_COUNTED.counted_bars=IndicatorCounted(); \r
527   if (INDICATOR_COUNTED.counted_bars<0)\r
528     {\r
529     INDICATOR_COUNTED.T2=0; \r
530     return(INDICATOR_COUNTED.counted_bars);\r
531     }\r
532   //----+\r
533   if((INDICATOR_COUNTED.counted_bars!=0)&&(IsConnected()==TRUE)&&(INDICATOR_COUNTED.T2==0))\r
534          {\r
535           //Ïå÷àòü ðåçóëüòàòà îáðàùåíèÿ ê ôóíêöèè INDICATOR_COUNTED ïðè íåêîððåêòíîé ðàáîòå èíäèêàòîðà \r
536           Print("INDICATOR_COUNTED: Òîðãîâûé Òåðìèíàë òîëüêî ÷òî ïîäêëþ÷èëñÿ ê èíòåðíåòó");\r
537           Print("INDICATOR_COUNTED: Ïðåäïîñëåäíèé ïîäñ÷èòàííûé áàð íå íàéäåí");\r
538           Print("INDICATOR_COUNTED: Èñòèííîå êîëè÷åñòâî óæå ïîäñ÷èòàííûõ áàðîâ îïðåäåëèòü íåâîçìîæíî ");\r
539           Print("INDICATOR_COUNTED: Ôóíêöèÿ âåðí¸ò êîëè÷åñòâî óæå ïîäñ÷èòàííûõ áàðîâ ðàâíîå íóëþ");\r
540           Print("INDICATOR_COUNTED: Áóäåò ïðîèçâåä¸í ïîëíûé ïåðåñ÷¸ò èíäèêàòîðà íà âñåõ áàðàõ");\r
541         //PlaySound("wait.wav");\r
542           return(0); \r
543          }\r
544   //----+ xxxxxxxxxxx\r
545   if ((INDICATOR_COUNTED.Input==0)&&(INDICATOR_COUNTED.Period==Period()))\r
546     {\r
547      if((INDICATOR_COUNTED.counted_bars==0)&&(IsConnected()==TRUE))\r
548       { \r
549        //Print("INDICATOR_COUNTED: Òîðãîâûé Òåðìèíàë òîëüêî ÷òî ïîäêëþ÷èëñÿ ê èíòåðíåòó");  \r
550        //Print("INDICATOR_COUNTED: Ñåé÷àñ Ôóíêöèÿ INDICATOR_COUNTED() îïðåäåëèò êîëè÷åñòâî ôàêòè÷åñêè ïîäñ÷èòàííûõ áàðîâ");\r
551        if (INDICATOR_COUNTED.T2 == 0)\r
552          {\r
553           //Ïå÷àòü ðåçóëüòàòà îáðàùåíèÿ ê ôóíêöèè INDICATOR_COUNTED ïðè íåêîððåêòíîé ðàáîòå èíäèêàòîðà \r
554           Print("INDICATOR_COUNTED: Òîðãîâûé Òåðìèíàë òîëüêî ÷òî ïîäêëþ÷èëñÿ ê èíòåðíåòó");\r
555           Print("INDICATOR_COUNTED: Ïðåäïîñëåäíèé ïîäñ÷èòàííûé áàð íå íàéäåí");\r
556           Print("INDICATOR_COUNTED: Èñòèííîå êîëè÷åñòâî óæå ïîäñ÷èòàííûõ áàðîâ îïðåäåëèòü íåâîçìîæíî ");\r
557           Print("INDICATOR_COUNTED: Ôóíêöèÿ âåðí¸ò êîëè÷åñòâî óæå ïîäñ÷èòàííûõ áàðîâ ðàâíîå íóëþ");\r
558           Print("INDICATOR_COUNTED: Áóäåò ïðîèçâåä¸í ïîëíûé ïåðåñ÷¸ò èíäèêàòîðà íà âñåõ áàðàõ");\r
559         //PlaySound("wait.wav");\r
560           return(0); \r
561          }\r
562         //----+ ïîèñê ïðåäïîñëåäíåãî ïîäñ÷èòàííîãî áàðà ïî âðåìåíè åãî îòêðûòèÿ \r
563        int INDICATOR_COUNTED.BarShift=iBarShift(NULL,0,INDICATOR_COUNTED.T2,TRUE); \r
564        if ((INDICATOR_COUNTED.BarShift<2)||(INDICATOR_COUNTED.T2!=Time[INDICATOR_COUNTED.BarShift]))\r
565          {\r
566           //Ïå÷àòü ðåçóëüòàòà îáðàùåíèÿ ê ôóíêöèè INDICATOR_COUNTED ïðè íåêîððåêòíîé ðàáîòå èíäèêàòîðà \r
567           Print("INDICATOR_COUNTED: Òîðãîâûé Òåðìèíàë òîëüêî ÷òî ïîäêëþ÷èëñÿ ê èíòåðíåòó");\r
568           Print("INDICATOR_COUNTED: Ïðåäïîñëåäíèé ïîäñ÷èòàííûé áàð íå íàéäåí");\r
569           Print("INDICATOR_COUNTED: Èñòèííîå êîëè÷åñòâî óæå ïîäñ÷èòàííûõ áàðîâ îïðåäåëèòü íåâîçìîæíî ");\r
570           Print("INDICATOR_COUNTED: Ôóíêöèÿ âåðí¸ò êîëè÷åñòâî óæå ïîäñ÷èòàííûõ áàðîâ ðàâíîå íóëþ");\r
571           Print("INDICATOR_COUNTED: Áóäåò ïðîèçâåä¸í ïîëíûé ïåðåñ÷¸ò èíäèêàòîðà íà âñåõ áàðàõ");\r
572         //PlaySound("wait.wav");\r
573           return(0); \r
574          }\r
575        int INDICATOR_COUNTED.Resalt=Bars-1-INDICATOR_COUNTED.BarShift+2;\r
576        //Ïå÷àòü ðåçóëüòàòà îáðàùåíèÿ ê ôóíêöèè INDICATOR_COUNTED ïðè êîððåêòíîé ðàáîòå èíäèêàòîðà \r
577      //Print("INDICATOR_COUNTED: Òîðãîâûé Òåðìèíàë òîëüêî ÷òî ïîäêëþ÷èëñÿ ê èíòåðíåòó"); \r
578      //Print("INDICATOR_COUNTED: Ñåé÷àñ Ôóíêöèÿ îïðåäåëèò êîëè÷åñòâî ôàêòè÷åñêè ïîäñ÷èòàííûõ áàðîâ"); \r
579      //Print("INDICATOR_COUNTED: Ïðåäïîñëåäíèé ïîäñ÷èòàííûé áàð íàéäåí");\r
580      //Print("INDICATOR_COUNTED: Êîëè÷åñòâî óæå ïîäñ÷èòàííûõ áàðîâ áóäåò ðàâíî "+INDICATOR_COUNTED.Resalt+"");\r
581      //Print("INDICATOR_COUNTED: Áóäåò ïðîèçâåä¸í ïåðåñ÷¸ò èíäèêàòîðà âñåãî íà "+INDICATOR_COUNTED.BarShift+" áàðàõ");\r
582      //Print("INDICATOR_COUNTED: BarShift ="+INDICATOR_COUNTED.BarShift+" INDICATOR_COUNTED.T2 ="+INDICATOR_COUNTED.T2+""); \r
583        return(INDICATOR_COUNTED.Resalt); \r
584       }\r
585      else return(INDICATOR_COUNTED.counted_bars);\r
586     }\r
587    //----+ xxxxxxxxxxx\r
588   if (INDICATOR_COUNTED.Input ==-1)\r
589    { \r
590     INDICATOR_COUNTED.T2 =0; \r
591     INDICATOR_COUNTED.Period=-1; \r
592     Print("INDICATOR_COUNTED: Îøèáêà â ðàñ÷¸òå èíäèêàòîðà");\r
593     Print("INDICATOR_COUNTED: Ðàáîòà ôóíêöèè int start() áóäåò ïðåðâàíà îïåðàòîðîì return(-1)");\r
594   //PlaySound("stops.wav");  \r
595     return(0); \r
596    }\r
597   return(INDICATOR_COUNTED.counted_bars);\r
599 //--+ --------------------------------------------------------------------------------------------+\r