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
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
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
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
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
71 double RSIBuffer1[];
\r
85 double marsiomaXupSig[];
\r
86 double marsiomaXdnSig[];
\r
95 datetime lastBarTime;
\r
100 //+------------------------------------------------------------------+
\r
101 //| Custom indicator initialization function |
\r
102 //+------------------------------------------------------------------+
\r
106 short_name = StringConcatenate("RSIOMA lsma[",RSIOMA,"](",Ma_RSIOMA,")");
\r
107 IndicatorShortName(short_name);
\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
142 // additional buffer(s)
\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
165 //+------------------------------------------------------------------+
\r
167 //+------------------------------------------------------------------+
\r
171 static bool init=false;
\r
172 int counted_bars=IndicatorCounted();
\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
192 if(counted_bars<0) return(-1);
\r
193 if(lastBarTime != Time[0]) {
\r
194 lastBarTime = Time[0];
\r
197 if(counted_bars>0) counted_bars--;
\r
198 limit=Bars-counted_bars;
\r
199 limit=MathMin(limit,BarsToCount+correction);
\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
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
219 RSIBuffer[i]= RSIBuffer1[i];
\r
220 marsioma[i] = LSMA(i,Ma_RSIOMA,true,RSIBuffer1);
\r
228 bup[i] = EMPTY_VALUE; bdn[i] = EMPTY_VALUE;
\r
229 sup[i] = EMPTY_VALUE; sdn[i] = EMPTY_VALUE;
\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
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
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
256 for (i=0;i<indicator_buffers;i++) SetIndexDrawBegin(i,Bars-BarsToCount);
\r
264 //+------------------------------------------------------------------+
\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
283 lengthvar = period + 1;
\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
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
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
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