//+------------------------------------------------------------------+ //| Sidus v.2 Entry Indicator.mq4 | //| | //| Ideas by Sidus | //+------------------------------------------------------------------+ #property copyright "Sidus" #property link "" #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 Blue #property indicator_color2 Red #property indicator_color3 Blue #property indicator_color4 DodgerBlue #property indicator_width1 1 #property indicator_width2 1 #property indicator_width3 5 #property indicator_width4 5 #include //---- input parameters extern int FastEMA=14; extern int SlowEMA=21; extern int RSIPeriod=17; extern bool Alerts=false; extern int ArrowOffset = 5; //---- buffers double FastMA_Buffer[]; double SlowMA_Buffer[]; double UpArrowBuffer[]; double DownArrowBuffer[]; //double rsi_sig[]; //---- variables int sigCurrent=0; int sigPrevious=0; double pipdiffCurrent=0; double pipdiffPrevious=0; double myPoint; // this handles 5 digit pricing correctly //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexBuffer(0,FastMA_Buffer); SetIndexLabel (0,"Fast"); SetIndexStyle (0,DRAW_LINE); SetIndexBuffer(1,SlowMA_Buffer); SetIndexLabel (1,"Slow"); SetIndexStyle (1,DRAW_LINE); SetIndexBuffer(2,UpArrowBuffer); SetIndexLabel (2,"Buy"); SetIndexStyle (2,DRAW_ARROW); SetIndexArrow (2,241); SetIndexEmptyValue(2,0.0); SetIndexBuffer(3,DownArrowBuffer); SetIndexLabel (3,"Sell"); SetIndexStyle (3,DRAW_ARROW); SetIndexArrow (3,242); SetIndexEmptyValue(3,0.0); myPoint = SetPoint(); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); double rsi_sig=0; bool entry=false; double entry_point=0; //---- check for possible errors if(counted_bars<0) return(-1); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; if (limit < 5) limit = 5; //---- main loop for(int i=limit; i>= 0; i--) { //---- ma_shift set to 0 because SetIndexShift called abowe FastMA_Buffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i); SlowMA_Buffer[i]=iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i); rsi_sig = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i); pipdiffCurrent=(FastMA_Buffer[i]-SlowMA_Buffer[i]); Comment("pipdiffCurrent = "+pipdiffCurrent+" "); if (pipdiffCurrent>0 && rsi_sig>50) { sigCurrent = 1; //Up } else if (pipdiffCurrent<0 && rsi_sig<50) { sigCurrent = 2; //Down } /* if (pipdiffCurrent>0) { sigCurrent = 1; //Up } else if (pipdiffCurrent<0) { sigCurrent = 2; //Down } */ if (sigCurrent==1 && sigPrevious==2) { DownArrowBuffer[i] = High[i]+ArrowOffset*myPoint; //ExtMapBuffer3[i] = Ask; entry=true; entry_point=Ask; } else if (sigCurrent==2 && sigPrevious==1) { UpArrowBuffer[i] = Low[i]-ArrowOffset*myPoint; //ExtMapBuffer4[i] = Bid; entry=true; entry_point=Bid; } sigPrevious=sigCurrent; pipdiffPrevious=pipdiffCurrent; } //---- if(Alerts && entry) { PlaySound("alert.wav"); if (sigPrevious==1) { MessageBox("Entry point: buy at "+entry_point+"!!", "Entry Point", MB_OK); } else if (sigPrevious==2) { MessageBox("Entry point: sell at "+entry_point+"!!", "Entry Point", MB_OK); } entry=false; } RefreshRates(); //---- return(0); } double SetPoint() { double mPoint; if (Digits < 4) mPoint = 0.01; else mPoint = 0.0001; return(mPoint); } //+------------------------------------------------------------------+