Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- */
- #property copyright "RSIoMA V2 TSI"
- #property link "RSIoMA V2 TSI"
- #property indicator_separate_window
- #property indicator_minimum 0
- #property indicator_maximum 100
- #property indicator_buffers 6
- #property indicator_color1 Blue
- #property indicator_color2 Red
- #property indicator_color3 Blue
- #property indicator_color4 Magenta
- #property indicator_color5 DodgerBlue
- #property indicator_color6 BlueViolet
- //---- input parameters
- extern int RSIOMA = 14;
- extern int RSIOMA_MODE = MODE_EMA;
- extern int RSIOMA_PRICE = PRICE_CLOSE;
- extern int Ma_RSIOMA = 21,
- Ma_RSIOMA_MODE = MODE_EMA;
- extern int BuyTrigger = 70;
- extern int SellTrigger = 30;
- extern color BuyTriggerColor = Blue;
- extern color SellTriggerColor = Red;
- extern int MainTrendLong = 50;
- extern int MainTrendShort = 50;
- extern color MainTrendLongColor = Red;
- extern color MainTrendShortColor = Blue;
- input int TriggerCandle=1;
- input bool EnableNativeAlerts = true;
- input bool EnableSoundAlerts = true;
- input bool EnableEmailAlerts = true;
- input bool EnablePushAlerts=true;
- input string AlertEmailSubject="";
- input string AlertText="";
- input string SoundFileName="alert.wav";
- datetime LastAlertTime = D'01.01.1970';
- int LastAlertDirection = 0;
- //---- buffers
- double RSIBuffer[];
- double PosBuffer[];
- double NegBuffer[];
- double bdn[],bup[];
- double sdn[],sup[];
- double marsioma[];
- string short_name;
- //+------------------------------------------------------------------+
- //| Custom indicator initialization function |
- //+------------------------------------------------------------------+
- int init()
- {
- short_name=StringConcatenate("RSIOMA(",RSIOMA,")");
- IndicatorBuffers(8);
- SetIndexBuffer(0,RSIBuffer);
- SetIndexBuffer(2,bup);
- SetIndexBuffer(1,bdn);
- SetIndexBuffer(3,sdn);
- SetIndexBuffer(4,sup);
- SetIndexBuffer(5,marsioma);
- SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3);
- SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,4);
- SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,4);
- SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,4);
- SetIndexStyle(4,DRAW_HISTOGRAM,STYLE_SOLID,4);
- SetIndexStyle(5,DRAW_LINE,STYLE_SOLID,1);
- SetIndexBuffer(6,PosBuffer);
- SetIndexBuffer(7,NegBuffer);
- IndicatorShortName(short_name);
- SetIndexDrawBegin(0,RSIOMA);
- SetIndexDrawBegin(1,RSIOMA);
- SetIndexDrawBegin(2,RSIOMA);
- SetIndexDrawBegin(3,RSIOMA);
- SetIndexDrawBegin(4,RSIOMA);
- SetIndexDrawBegin(5,RSIOMA);
- SetIndexDrawBegin(6,RSIOMA);
- SetIndexDrawBegin(7,RSIOMA);
- //----
- drawLine(BuyTrigger,"BuyTrigger",BuyTriggerColor);
- drawLine(SellTrigger,"SellTrigger",SellTriggerColor);
- drawLine(MainTrendLong,"MainTrendLong",MainTrendLongColor);
- drawLine(MainTrendShort,"MainTrendShort",MainTrendShortColor);
- return(0);
- }
- //+------------------------------------------------------------------+
- //| Relative Strength Index |
- //+------------------------------------------------------------------+
- int start()
- {
- int i,counted_bars=IndicatorCounted();
- double rel,negative,positive;
- //----
- if(Bars<=RSIOMA) return(0);
- //---- initial zero
- if(counted_bars<1)
- for(i=1;i<=RSIOMA;i++) RSIBuffer[Bars-i]=0.0;
- //----
- i=Bars-RSIOMA-1;
- int ma=i;
- if(counted_bars>=RSIOMA) i=Bars-counted_bars-1;
- while(i>=0)
- {
- double sumn=0.0,sump=0.0;
- if(i==Bars-RSIOMA-1)
- {
- int k=Bars-2;
- //---- initial accumulation
- while(k>=i)
- {
- double cma = iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,k);
- double pma = iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,k+1);
- rel=cma-pma;
- if(rel>0) sump+=rel;
- else sumn-=rel;
- k--;
- }
- positive=sump/RSIOMA;
- negative=sumn/RSIOMA;
- }
- else
- {
- //---- smoothed moving average
- double ccma = iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,i);
- double ppma = iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,i+1);
- rel=ccma-ppma;
- if(rel>0) sump=rel;
- else sumn=-rel;
- positive=(PosBuffer[i+1]*(RSIOMA-1)+sump)/RSIOMA;
- negative=(NegBuffer[i+1]*(RSIOMA-1)+sumn)/RSIOMA;
- }
- PosBuffer[i]=positive;
- NegBuffer[i]=negative;
- if(negative==0.0) RSIBuffer[i]=0.0;
- else
- {
- RSIBuffer[i]=100.0-100.0/(1+positive/negative);
- bdn[i] = 0;
- bup[i] = 0;
- sdn[i] = 0;
- sup[i] = 0;
- if(RSIBuffer[i]>MainTrendLong)
- bup[i]=-10;
- if(RSIBuffer[i]<MainTrendShort)
- bdn[i]=-10;
- if(RSIBuffer[i]<20 && RSIBuffer[i]>RSIBuffer[i+1])
- sup[i]=-10;
- if(RSIBuffer[i]>80 && RSIBuffer[i]<RSIBuffer[i+1])
- sdn[i]=-10;
- }
- i--;
- }
- while(ma>=0)
- {
- marsioma[ma]=iMAOnArray(RSIBuffer,0,Ma_RSIOMA,0,Ma_RSIOMA_MODE,ma);
- ma--;
- }
- if(((TriggerCandle>50) && (Time[0]>LastAlertTime)) || (TriggerCandle==50))
- {
- string Text;
- // Above Zero Alert
- if(((RSIBuffer[TriggerCandle]>50) && (RSIBuffer[TriggerCandle+1]<=50)) && ((TriggerCandle>50) || ((TriggerCandle==50) && (LastAlertDirection!=1))))
- {
- Text=AlertText+"RSIBuffer: "+Symbol()+" - "+EnumToString((ENUM_TIMEFRAMES)Period())+" - Above Zero.";
- if(EnableNativeAlerts) Alert(Text);
- if(EnableEmailAlerts) SendMail(AlertEmailSubject+"RSIBuffer Alert",Text);
- if(EnableSoundAlerts) PlaySound(SoundFileName);
- if(EnablePushAlerts) SendNotification(Text);
- LastAlertTime=Time[0];
- LastAlertDirection=1;
- }
- // Below Zero Alert
- if(((RSIBuffer[TriggerCandle]<50) && (RSIBuffer[TriggerCandle+1]>=50)) && ((TriggerCandle>50) || ((TriggerCandle==50) && (LastAlertDirection!=-1))))
- {
- Text=AlertText+"RSIBuffer: "+Symbol()+" - "+EnumToString((ENUM_TIMEFRAMES)Period())+" - Below Zero.";
- if(EnableNativeAlerts) Alert(Text);
- if(EnableEmailAlerts) SendMail(AlertEmailSubject+"RSIBuffer Alert",Text);
- if(EnableSoundAlerts) PlaySound(SoundFileName);
- if(EnablePushAlerts) SendNotification(Text);
- LastAlertTime=Time[0];
- LastAlertDirection=-1;
- }
- }
- return(0);
- }
- //+------------------------------------------------------------------+
- void drawLine(double lvl,string name,color Col)
- {
- ObjectDelete(name);
- ObjectCreate(name,OBJ_HLINE,WindowFind(short_name),Time[0],lvl,Time[0],lvl);
- ObjectSet(name,OBJPROP_STYLE,STYLE_DOT);
- ObjectSet(name,OBJPROP_COLOR,Col);
- ObjectSet(name,OBJPROP_WIDTH,1);
- }
- //+------------------------------------------------------------------+
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement