//+--------------------------------------------------------------------------------+ //| RSIOMA_v3 by Mladen & fxbs Kalenzo fxtsd.com | //| Hornet(RSIOnArray) 2007, FxTSD.com MetaQuotes Software Corp. | //| Hist & Levels 20/80;30/70 CrossSig web: http://www.fxservice.eu | //| Rsioma/MaRsioma X sig () +alertsD email: bartlomiej.gorski@gmail.com | //+--------------------------------------------------------------------------------+ #property copyright "Copyright © 2007, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/ Kalenzo|bartlomiej.gorski@gmail.com " #property indicator_separate_window #property indicator_buffers 8 #property indicator_minimum -20 #property indicator_maximum 110 #property indicator_color1 Blue #property indicator_color2 Red #property indicator_color3 Green #property indicator_color4 Magenta #property indicator_color5 DodgerBlue #property indicator_color6 BlueViolet #property indicator_color7 Aqua //DeepSkyBlue #property indicator_color8 DeepPink //Crimson // #property indicator_width1 2 #property indicator_width4 2 #property indicator_width5 2 #property indicator_width7 1 #property indicator_width8 1 // #property indicator_level1 100 #property indicator_level2 80 //76.4 #property indicator_level3 70 //61.8 #property indicator_level4 50 #property indicator_level5 30 //38.2 #property indicator_level6 20 //23.6 #property indicator_levelcolor DarkSlateGray //------------------------------------------ //---- input parameters extern int RSIOMA = 14; extern int RSIOMA_MODE = MODE_EMA; extern int RSIOMA_PRICE = PRICE_CLOSE; extern int Ma_RSIOMA = 21; extern int Ma_RSIOMA_MODE = MODE_EMA; extern double SellTrigger_OBLevel = 80.00; extern double BuyTrigger_OSLevel = 20.00; extern color SellTriggerLevelColor = DodgerBlue; extern color BuyTriggerLevelColor = Magenta; extern double MainTrend_OBLevel = 70.00; extern double MainTrend_OSLevel = 30.00; extern color MainTrend_OBLevelColor = Green; extern color MainTrend_OSLevelColor = Red; extern double MajorTrend = 50; extern color marsiomaXupSigColor = Aqua; //DeepSkyBlue extern color marsiomaXdnSigColor = DeepPink; //Crimson extern int BarsToCount = 1500; extern bool SoundAlerts = false; //Alerts extern int SoundAlertsDelay_Bars = 0; extern bool BoxAlerts = true; extern bool EmailAlerts = false; extern int AlertsDelay_Bars = 1; extern bool RSIOMA_MaRsiomaCross = true; extern bool RSIOMA_TriggerLevelCross = true; extern bool RSIOMA_MainTrendLevelCross = false; extern string AlertsSoundFile = "alert2.wav"; datetime TimeStamp, TimeStamp1, TimeStamp2; datetime TimeStampS, TimeStampS1, TimeStampS2; //---- buffers // // // "indexes" // double MABuffer1[]; double RSIBuffer1[]; // // // indexes // // double RSIBuffer[]; double bdn[]; double bup[]; double sdn[]; double sup[]; double marsioma[]; double marsiomaXupSig[]; double marsiomaXdnSig[]; // // // // // int correction; datetime lastBarTime; string short_name; //+------------------------------------------------------------------+ int init() { short_name = StringConcatenate("RSIOMA [",RSIOMA,"] (",Ma_RSIOMA,")"); IndicatorShortName(short_name); // // // // // SetIndexBuffer(0,RSIBuffer); SetIndexBuffer(2,bup); SetIndexBuffer(1,bdn); SetIndexBuffer(3,sdn);//Magneta SetIndexBuffer(4,sup);//DodgerBlue SetIndexBuffer(5,marsioma); SetIndexBuffer(6,marsiomaXupSig); SetIndexBuffer(7,marsiomaXdnSig); SetIndexStyle(2,DRAW_HISTOGRAM); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexStyle(3,DRAW_HISTOGRAM); SetIndexStyle(4,DRAW_HISTOGRAM); SetIndexStyle(6,DRAW_ARROW); SetIndexStyle(7,DRAW_ARROW); SetIndexArrow(6,159); SetIndexArrow(7,159); SetIndexLabel(0,"Rsioma("+RSIOMA+")"); SetIndexLabel(5,"MaRsioma("+Ma_RSIOMA+")"); SetIndexLabel(1,"TrendDn"); SetIndexLabel(2,"TrendUp"); SetIndexLabel(6,"UpXsig"); SetIndexLabel(7,"DnXsig"); // // // additional buffer(s) // // correction = RSIOMA+RSIOMA+Ma_RSIOMA; BarsToCount = MathMin(Bars,MathMax(BarsToCount,300)); ArrayResize( MABuffer1 ,BarsToCount+correction); ArrayResize( RSIBuffer1,BarsToCount+correction); ArraySetAsSeries(MABuffer1 ,true); ArraySetAsSeries(RSIBuffer1,true); lastBarTime = EMPTY_VALUE; // // // // // return(0); } //+------------------------------------------------------------------+ int start() { static bool init=false; int counted_bars=IndicatorCounted(); int limit,i=0; // // // // // if(!init) { init=true; drawLine(BuyTrigger_OSLevel,"BuyTrigger", BuyTriggerLevelColor); drawLine(SellTrigger_OBLevel,"SellTrigger", SellTriggerLevelColor); drawLine(MainTrend_OBLevel,"MainTrendLong", MainTrend_OBLevelColor); drawLine(MainTrend_OSLevel,"MainTrendShort",MainTrend_OSLevelColor); } // // // // // if(counted_bars<0) return(-1); if(lastBarTime != Time[0]) { lastBarTime = Time[0]; counted_bars = 0; } if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; limit=MathMin(limit,BarsToCount+correction); // // // // // for(i=limit;i>=0;i--) MABuffer1[i] = iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,i); for(i=limit;i>=0;i--) RSIBuffer1[i] = iRSIOnArray(MABuffer1,0,RSIOMA,i); for(i=limit;i>=0;i--) { RSIBuffer[i]= RSIBuffer1[i]; marsioma[i] = iMAOnArray(RSIBuffer1,0,Ma_RSIOMA,0,Ma_RSIOMA_MODE,i); // // // // // bup[i] = EMPTY_VALUE; bdn[i] = EMPTY_VALUE; sup[i] = EMPTY_VALUE; sdn[i] = EMPTY_VALUE; if(RSIBuffer[i] > 50) bup[i] = 6; if(RSIBuffer[i] < 50) bdn[i] = -6; if(RSIBuffer[i] > MainTrend_OBLevel) bup[i] = 12; if(RSIBuffer[i] < MainTrend_OSLevel) bdn[i] = -12; if(RSIBuffer[i]<20 && RSIBuffer[i]>RSIBuffer[i+1]) sup[i] = -3; if(RSIBuffer[i]>80 && RSIBuffer[i]<RSIBuffer[i+1]) sdn[i] = 4; if(RSIBuffer[i]>20 && RSIBuffer[i+1]<=20) sup[i] = 5; if(RSIBuffer[i+1]>=80 && RSIBuffer[i]<80) sdn[i] = -5; if(RSIBuffer[i+1]<=MainTrend_OSLevel && RSIBuffer[i]>MainTrend_OSLevel) sup[i] = 12; if(RSIBuffer[i+1]>=MainTrend_OBLevel && RSIBuffer[i]<MainTrend_OBLevel ) sdn[i] = -12; marsiomaXupSig[i] = EMPTY_VALUE; marsiomaXdnSig[i] = EMPTY_VALUE; if(RSIBuffer[i+1]<=marsioma[i+1] && RSIBuffer[i]>marsioma[i]) marsiomaXupSig[i] = -11; if(RSIBuffer[i+1]>=marsioma[i+1] && RSIBuffer[i]<marsioma[i]) marsiomaXdnSig[i] = 11; //-------------- Alerts ------------- // sound alerts if (RSIBuffer[SoundAlertsDelay_Bars+1]<=marsioma[SoundAlertsDelay_Bars+1] && RSIBuffer[SoundAlertsDelay_Bars] > marsioma[SoundAlertsDelay_Bars] && TimeStampS != Time[0]&& Volume[0]>1) { if (SoundAlerts) PlaySound(AlertsSoundFile); TimeStampS = Time[0]; } if (RSIBuffer[SoundAlertsDelay_Bars+1]>=marsioma[SoundAlertsDelay_Bars+1] && RSIBuffer[SoundAlertsDelay_Bars] < marsioma[SoundAlertsDelay_Bars] && TimeStampS != Time[0]&& Volume[0]>1) { if (SoundAlerts) PlaySound(AlertsSoundFile); TimeStampS = Time[0]; } if (RSIBuffer[SoundAlertsDelay_Bars+1]>=SellTrigger_OBLevel && RSIBuffer[SoundAlertsDelay_Bars] < SellTrigger_OBLevel && TimeStampS1 != Time[0]&& Volume[0]>1) { if (SoundAlerts) PlaySound(AlertsSoundFile); TimeStampS1 = Time[0]; } if (RSIBuffer[SoundAlertsDelay_Bars+1]<=BuyTrigger_OSLevel && RSIBuffer[SoundAlertsDelay_Bars] > BuyTrigger_OSLevel && TimeStampS1 != Time[0]&& Volume[0]>1) { if (SoundAlerts) PlaySound(AlertsSoundFile); TimeStampS1 = Time[0]; } if (RSIBuffer[SoundAlertsDelay_Bars+1]>=MainTrend_OBLevel && RSIBuffer[SoundAlertsDelay_Bars] < MainTrend_OBLevel && TimeStampS2 != Time[0]&& Volume[0]>1) { if (SoundAlerts) PlaySound(AlertsSoundFile); TimeStampS2 = Time[0]; } if (RSIBuffer[SoundAlertsDelay_Bars+1]<=MainTrend_OSLevel && RSIBuffer[SoundAlertsDelay_Bars] > MainTrend_OSLevel && TimeStampS2 != Time[0]&& Volume[0]>1) { if (SoundAlerts) PlaySound(AlertsSoundFile); TimeStampS2 = Time[0]; } //-- Box with e-male string alertmessage = "RSIOMA " +Symbol()+" chart M"+Period()+" Bid price "+DoubleToStr(Bid,4)+" " ; if (RSIBuffer[AlertsDelay_Bars+1]<=marsioma[AlertsDelay_Bars+1] && RSIBuffer[AlertsDelay_Bars] > marsioma[AlertsDelay_Bars] && TimeStamp != Time[0]&& Volume[0]>1) { alertmessage = (alertmessage +" RSIOMA_Crossed_MaRsioma_Up"); if (BoxAlerts && RSIOMA_MaRsiomaCross) Alert (alertmessage); if (EmailAlerts) SendMail (alertmessage,""); TimeStamp = Time[0]; } if (RSIBuffer[AlertsDelay_Bars+1]>=marsioma[AlertsDelay_Bars+1] && RSIBuffer[AlertsDelay_Bars] < marsioma[AlertsDelay_Bars] && TimeStamp != Time[0]&& Volume[0]>1) { alertmessage = (alertmessage +" RSIOMA_Crossed_MaRsioma_Dn"); if (BoxAlerts && RSIOMA_MaRsiomaCross) Alert (alertmessage); if (EmailAlerts) SendMail (alertmessage,""); TimeStamp = Time[0]; } if (RSIBuffer[AlertsDelay_Bars+1]>=SellTrigger_OBLevel && RSIBuffer[AlertsDelay_Bars] < SellTrigger_OBLevel && TimeStamp1 != Time[0]&& Volume[0]>1) { alertmessage = (alertmessage +" RSIOMA_Crossed_SellTriggerOBLevel_Dn"); if (BoxAlerts && RSIOMA_TriggerLevelCross) Alert (alertmessage); if (EmailAlerts) SendMail (alertmessage,""); TimeStamp1 = Time[0]; } if (RSIBuffer[AlertsDelay_Bars+1]<=BuyTrigger_OSLevel && RSIBuffer[AlertsDelay_Bars] > BuyTrigger_OSLevel && TimeStamp1 != Time[0]&& Volume[0]>1) { alertmessage = (alertmessage +" RSIOMA_Crossed_BuyTriggerOSLevel_Up"); if (BoxAlerts && RSIOMA_TriggerLevelCross) Alert (alertmessage); if (EmailAlerts) SendMail (alertmessage,""); TimeStamp1 = Time[0]; } if (RSIBuffer[AlertsDelay_Bars+1]>=MainTrend_OBLevel && RSIBuffer[AlertsDelay_Bars] < MainTrend_OBLevel && TimeStamp2 != Time[0]&& Volume[0]>1) { alertmessage = (alertmessage +" RSIOMA_Crossed_MainTrend_OBLevel_Dn"); if (BoxAlerts && RSIOMA_MainTrendLevelCross) Alert (alertmessage); if (EmailAlerts) SendMail (alertmessage,""); TimeStamp2 = Time[0]; } if (RSIBuffer[AlertsDelay_Bars+1]<=MainTrend_OSLevel && RSIBuffer[AlertsDelay_Bars] > MainTrend_OSLevel && TimeStamp2 != Time[0]&& Volume[0]>1) { alertmessage = (alertmessage +" RSIOMA_Crossed_MainTrend_OSLevel_Up"); if (BoxAlerts && RSIOMA_MainTrendLevelCross) Alert (alertmessage); if (EmailAlerts) SendMail (alertmessage,""); TimeStamp2 = Time[0]; } //----- // // // // // } for (i=0;i<indicator_buffers;i++) SetIndexDrawBegin(i,Bars-BarsToCount); 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); }
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Series array that contains tick volumes of each bar
Indicator Curves created:
Implements a curve of type DRAW_HISTOGRAM
Implements a curve of type DRAW_ARROW
Indicators Used:
Moving average indicator
Relative strength index
Custom Indicators Used:
Order Management characteristics:
Other Features:
It plays sound alerts