bleh
[mqlkit.git] / indicators / RSIOMA_v3_LSMA_RSI_LSMA.mq4
blobf5b6f3a62bc726e09cce3a7cd7148d02664e2441
1 //+--------------------------------------------------------------------------------+\r
2 //|  RSIOMA_v3 by  fxbs & mladen    temp5      Kalenzo              | fxtsd.com |ik|\r
3 //|  Hornet(i-RSI)  2007, FxTSD.com;           MetaQuotes Software Corp.           |\r
4 //|  Hist & Levels 20/80;30/70 CrossSig        web: http://www.fxservice.eu        |\r
5 //|  Rsioma/MaRsioma X sig (fxbs)              email: bartlomiej.gorski@gmail.com  |\r
6 //+--------------------------------------------------------------------------------+\r
7 \r
8 #property copyright "Copyright © 2007, MetaQuotes Software Corp."\r
9 #property link      "http://www.metaquotes.net/ Kalenzo|bartlomiej.gorski@gmail.com "\r
11 #property indicator_separate_window\r
12 #property indicator_buffers   8\r
13 #property indicator_minimum -20\r
14 #property indicator_maximum 120\r
15 #property indicator_color1     Blue\r
16 #property indicator_color2     Red\r
17 #property indicator_color3     Green\r
18 #property indicator_color4     Magenta\r
19 #property indicator_color5     DodgerBlue\r
20 #property indicator_color6     BlueViolet\r
21 #property indicator_color7     Aqua//DeepSkyBlue\r
22 #property indicator_color8     DeepPink //Crimson\r
23 //\r
24 #property indicator_width1  2   \r
25 #property indicator_width4  2\r
26 #property indicator_width5  2\r
27 #property indicator_width7  1\r
28 #property indicator_width8  1\r
29 //\r
30 #property indicator_level1 100\r
31 #property indicator_level2 80   //76.4\r
32 #property indicator_level3 70   //61.8\r
33 #property indicator_level4 50\r
34 #property indicator_level5 30   //38.2\r
35 #property indicator_level6 20   //23.6\r
36 #property indicator_levelcolor DarkSlateGray\r
37 //------------------------------------------\r
39 //---- input parameters\r
40 //\r
42 extern int    RSIOMA          = 14;\r
43 extern int    RSIOMA_MODE     = MODE_EMA;\r
44 extern int    RSIOMA_PRICE    = PRICE_CLOSE;\r
45 extern int    Ma_RSIOMA       = 21;\r
46 extern int    Ma_RSIOMA_MODE  = MODE_EMA;\r
48 extern double BuyTrigger          = 20.00;\r
49 extern double SellTrigger         = 80.00;\r
50 extern color  BuyTriggerColor     = Magenta;\r
51 extern color  SellTriggerColor    = DodgerBlue;\r
53 extern double MainTrendLong       = 70.00;\r
54 extern double MainTrendShort      = 30.00;\r
55 extern color  MainTrendLongColor  = Green;\r
56 extern color  MainTrendShortColor = Red;\r
57 extern double MajorTrend          = 50;\r
58 extern color  marsiomaXupSigColor = Aqua;//DeepSkyBlue\r
59 extern color  marsiomaXdnSigColor = DeepPink; //Crimson\r
61 extern int    BarsToCount         = 500;\r
64 //---- buffers\r
65 //\r
66 //\r
67 //    fake indexes\r
68 //\r
70 double MABuffer1[];\r
71 double RSIBuffer1[];\r
73 //\r
74 //\r
75 //    indexes\r
76 //\r
77 //\r
79 double RSIBuffer[];\r
80 double bdn[];\r
81 double bup[];\r
82 double sdn[];\r
83 double sup[];\r
84 double marsioma[];\r
85 double marsiomaXupSig[];\r
86 double marsiomaXdnSig[];\r
88 //\r
89 //\r
90 //\r
91 //\r
92 //\r
94 int      correction;\r
95 datetime lastBarTime;\r
96 string   short_name;\r
97 double   lengthvar;\r
100 //+------------------------------------------------------------------+\r
101 //| Custom indicator initialization function                         |\r
102 //+------------------------------------------------------------------+\r
104 int init()\r
106    short_name = StringConcatenate("RSIOMA lsma[",RSIOMA,"](",Ma_RSIOMA,")");   \r
107    IndicatorShortName(short_name);\r
108    \r
109    //\r
110    //\r
111    //\r
112    //\r
113    //\r
114    \r
115    SetIndexBuffer(0,RSIBuffer);\r
116    SetIndexBuffer(2,bup);\r
117    SetIndexBuffer(1,bdn);\r
118    SetIndexBuffer(3,sdn);//Magnet\r
119    SetIndexBuffer(4,sup);//DodgerBlue\r
120    SetIndexBuffer(5,marsioma);\r
121    SetIndexBuffer(6,marsiomaXupSig);\r
122    SetIndexBuffer(7,marsiomaXdnSig);\r
124       SetIndexStyle(2,DRAW_HISTOGRAM);\r
125       SetIndexStyle(1,DRAW_HISTOGRAM);\r
126       SetIndexStyle(3,DRAW_HISTOGRAM);\r
127       SetIndexStyle(4,DRAW_HISTOGRAM);\r
128       SetIndexStyle(6,DRAW_ARROW);\r
129          SetIndexArrow(6,159);\r
130       SetIndexStyle(7,DRAW_ARROW);\r
131          SetIndexArrow(7,159);\r
132    SetIndexLabel(0,"Rsioma");\r
133    SetIndexLabel(5,"MaRsioma");\r
134    SetIndexLabel(1,"TrendDn");\r
135    SetIndexLabel(2,"TrendUp");\r
136    SetIndexLabel(6,"UpXsig");\r
137    SetIndexLabel(7,"DnXsig");\r
138  \r
139  \r
140    //\r
141    //\r
142    //    additional buffer(s)\r
143    //\r
144    //\r
147       correction  = RSIOMA+RSIOMA+Ma_RSIOMA;\r
148       BarsToCount = MathMin(Bars,MathMax(BarsToCount,300));\r
149           ArrayResize( MABuffer1 ,BarsToCount+correction);\r
150           ArrayResize( RSIBuffer1,BarsToCount+correction);\r
151           ArraySetAsSeries(MABuffer1 ,true);\r
152           ArraySetAsSeries(RSIBuffer1,true);\r
153                  lastBarTime = EMPTY_VALUE;\r
155       //\r
156       //\r
157       //\r
158       //\r
159       //\r
160    \r
161    return(0);\r
165 //+------------------------------------------------------------------+\r
166 //|                                                                  |\r
167 //+------------------------------------------------------------------+\r
169 int start()\r
171    static bool init=false;\r
172    int    counted_bars=IndicatorCounted();\r
173    int    limit,i=0;\r
174 //\r
175 //\r
176 //\r
178          if(!init) {\r
179        init=true;\r
180          drawLine(BuyTrigger,"BuyTrigger", BuyTriggerColor);\r
181          drawLine(SellTrigger,"SellTrigger", SellTriggerColor );\r
182          drawLine(MainTrendLong,"MainTrendLong", MainTrendLongColor );\r
183          drawLine(MainTrendShort,"MainTrendShort",MainTrendShortColor );\r
184       }         \r
186    //\r
187    //\r
188    //\r
189    //\r
190    //\r
191                \r
192    if(counted_bars<0) return(-1);\r
193    if(lastBarTime != Time[0]) {\r
194       lastBarTime  = Time[0];\r
195                   counted_bars = 0;\r
196       }         \r
197       if(counted_bars>0) counted_bars--;\r
198               limit=Bars-counted_bars;\r
199               limit=MathMin(limit,BarsToCount+correction);\r
200    \r
201    //\r
202    //\r
203    //\r
204    //\r
205    //\r
206    \r
207       for(i=limit;i>=0;i--) MABuffer1[i]  = LSMA(i,RSIOMA,false,RSIBuffer1);\r
208 //      for(i=limit;i>=0;i--) RSIBuffer1[i] = iRSIOnArray(MABuffer1,0,RSIOMA,i);\r
209   //Sample:     double val=iCustom(NULL, 0, "SampleInd",13,1,0);\r
210  \r
211        for(i=limit;i>=0;i--) RSIBuffer1[i] = iRSIOnArray(MABuffer1,0,RSIOMA,i);\r
212 //       for(i=limit;i>=0;i--) RSIBuffer1[i] = iCCIOnArray(MABuffer1,0,RSIOMA,i);\r
213 //double iRSIOnArray( double array[], int total, int period, int shift) \r
214 //double iCCIOnArray( double array[], int total, int period, int shift) \r
215 //double iMomentumOnArray( double array[], int total, int period, int shift) \r
217       for(i=limit;i>=0;i--)\r
218       {\r
219          RSIBuffer[i]= RSIBuffer1[i];\r
220          marsioma[i] = LSMA(i,Ma_RSIOMA,true,RSIBuffer1);\r
221       \r
222          //\r
223          //\r
224          //\r
225          //\r
226          //\r
228             bup[i] = EMPTY_VALUE; bdn[i] = EMPTY_VALUE;\r
229             sup[i] = EMPTY_VALUE; sdn[i] = EMPTY_VALUE;\r
230             \r
231                if(RSIBuffer[i] > 50)               bup[i] =   6;\r
232                if(RSIBuffer[i] < 50)               bdn[i] =  -6;      \r
233                if(RSIBuffer[i] > MainTrendLong)    bup[i] =  12;\r
234                if(RSIBuffer[i] < MainTrendShort)   bdn[i] = -12;\r
235             \r
236                if(RSIBuffer[i]<20 && RSIBuffer[i]>RSIBuffer[i+1])                sup[i] =  -3;\r
237                if(RSIBuffer[i]>80 && RSIBuffer[i]<RSIBuffer[i+1])                sdn[i] =   4;\r
238                if(RSIBuffer[i]>20 && RSIBuffer[i+1]<=20)                         sup[i] =   5;\r
239                if(RSIBuffer[i+1]>=80 && RSIBuffer[i]<80)                         sdn[i] =  -5;\r
240                if(RSIBuffer[i+1]<=MainTrendShort && RSIBuffer[i]>MainTrendShort) sup[i] =  12;  \r
241                if(RSIBuffer[i]<MainTrendLong && RSIBuffer[i+1]>=MainTrendLong)   sdn[i] = -12;\r
243             marsiomaXupSig[i] = EMPTY_VALUE;\r
244             marsiomaXdnSig[i] = EMPTY_VALUE;\r
245             \r
246                if(RSIBuffer[i+1]<=marsioma[i+1]&&RSIBuffer[i]>marsioma[i]) marsiomaXupSig[i] = -11; \r
247                if(RSIBuffer[i+1]>=marsioma[i+1]&&RSIBuffer[i]<marsioma[i]) marsiomaXdnSig[i] =  11;\r
248    }\r
250    //\r
251    //\r
252    //\r
253    //\r
254    //\r
255    \r
256    for (i=0;i<indicator_buffers;i++) SetIndexDrawBegin(i,Bars-BarsToCount);\r
257  \r
258  \r
259    return(0);\r
261 //\r
264 //+------------------------------------------------------------------+\r
265 //|                                                                  |\r
266 //+------------------------------------------------------------------+\r
268 void drawLine(double lvl,string name, color Col )\r
270    ObjectDelete(name);\r
271    ObjectCreate(name, OBJ_HLINE, WindowFind(short_name), Time[0], lvl,Time[0], lvl);\r
272    ObjectSet(name   , OBJPROP_STYLE, STYLE_DOT);\r
273    ObjectSet(name   , OBJPROP_COLOR, Col);        \r
274    ObjectSet(name   , OBJPROP_WIDTH, 1);\r
277 double LSMA(int shift,int period,bool onArray,double& values[])\r
279    double sum = 0;\r
280    double res = 0;\r
283    lengthvar   = period + 1;\r
284    lengthvar   /= 3;\r
286    //\r
287    //\r
288    //\r
289    //\r
290    //\r
291    \r
292    for(int i = period; i >= 1 ; i--)\r
293       if (onArray && (shift+period-i) <= (BarsToCount+correction))\r
294                sum += (i-lengthvar)*values[shift+period-i];\r
295       else     sum += (i-lengthvar)* Close[shift+period-i];\r
296       res = sum*6/(period*(period+1));\r
297    \r
298    //\r
299    //\r
300    //\r
301    //\r
302    //\r
303    \r
304    return(res);\r
306 //\r
307 //\r
308 //\r
309 //\r
313 //  {  MABuffer1[i]=iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,i);\r
314 //double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift) \r
315 //double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift) \r
316 /////\r
317 //  { marsioma[i] = iMAOnArray(RSIBuffer,0,Ma_RSIOMA,0,Ma_RSIOMA_MODE,i); \r
318 //  double iMAOnArray( double array[], int total, int period, int ma_shift, int ma_method, int shift) \r
319 ////////\r
320 //double iRSIOnArray( double array[], int total, int period, int shift) \r
321 //double iCCIOnArray( double array[], int total, int period, int shift) \r
322 //double iMomentumOnArray( double array[], int total, int period, int shift) \r
323 //double iStdDevOnArray( double array[], int total, int ma_period, int ma_shift, int ma_method, int shift) \r
324 //double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift) \r
325 //Sample:     double val=iCustom(NULL, 0, "SampleInd",13,1,0);\r