/* //+------------------------------------------------------------------+ //| Momentum with Alert Cross and signal.mq4 | //| | //| Original: RSI with Trend Catcher signal by Matsu | //| Modified: Momentum with cross signal by Linuxser for Forex-TSD | //| Modified by kalenzo, bartlomiej.gorski@gmail.com //+------------------------------------------------------------------+ */ //mod #property indicator_separate_window #property indicator_buffers 6 #property indicator_color1 LimeGreen #property indicator_color2 LimeGreen #property indicator_color3 Orange #property indicator_color4 Orange #property indicator_color5 LimeGreen #property indicator_color6 Orange #property indicator_levelcolor Brown #property indicator_levelstyle STYLE_DOT extern int MOMPeriod=14; extern int MOMPrice=0; extern double obLevel2= 0.8; extern double obLevel1= 0.5; extern double Level0 = 0; extern double osLevel1=-0.5; extern double osLevel2=-0.8; extern bool Alerts = true; extern bool alertLevels2 =1; extern bool alertLevels1 =1; extern bool alertLevel0 =1; extern bool alertOBCrossUp=1; extern bool alertOBCrossDn=1; extern bool alertOSCrossUp=1; extern bool alertOSCrossDn=1; double MOM[]; double Buy[]; double Sell[]; double DnMOM[]; double Levela[]; double hUP[],hDN[]; int Level= 0; int init() { IndicatorBuffers(6); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,MOM); SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID); SetIndexArrow(1,159); SetIndexBuffer(1,Buy); SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID); SetIndexArrow(2,159); SetIndexBuffer(2,Sell); SetIndexStyle(3,DRAW_LINE); SetIndexBuffer(3,DnMOM); SetIndexBuffer(4,hUP); SetIndexStyle(4,DRAW_HISTOGRAM,STYLE_SOLID,1); SetIndexBuffer(5,hDN); SetIndexStyle(5,DRAW_HISTOGRAM,STYLE_SOLID,1); SetLevelValue(0,obLevel2); SetLevelValue(1,obLevel1); SetLevelValue(2,osLevel1); SetLevelValue(3,osLevel2); IndicatorShortName("Momentum ("+MOMPeriod+")"); IndicatorDigits(2); return(0); } int start() { int counted_bars=IndicatorCounted(); int shift,limit,ob,os; bool TrendUp, TrendDn; bool dn = false; double BuyNow, BuyPrevious, SellNow, SellPrevious; static datetime prevtime = 0; if (counted_bars<0) return(-1); if (counted_bars>0) counted_bars--; limit=Bars-31; if(counted_bars>=31) limit=Bars-counted_bars-1; for (shift=limit;shift>=0;shift--) { MOM[shift]=iMomentum(NULL,0,MOMPeriod,MOMPrice,shift)-100; ob = Level; os = Level; TrendUp=false; TrendDn=false; if(MOM[shift]>Level0) { TrendUp=true; hUP[shift] = MOM[shift]; hDN[shift] = 0; } else if(MOM[shift]<=Level) { TrendDn=true; hDN[shift] = MOM[shift]; hUP[shift] = 0; } if (dn==true) { if (MOM[shift]>Level) { dn=false; DnMOM[shift]=EMPTY_VALUE; } else { dn=true; DnMOM[shift]=MOM[shift]; } } else { if (MOM[shift]<Level) { dn=true; DnMOM[shift]=MOM[shift]; } else { dn=false; DnMOM[shift]=EMPTY_VALUE; } } if(TrendUp==true) { Buy[shift]=ob; Sell[shift]=EMPTY_VALUE; } else if(TrendDn==true) { Buy[shift]=EMPTY_VALUE; Sell[shift]=os; } else { Buy[shift]=EMPTY_VALUE; Sell[shift]=EMPTY_VALUE; } } // ======= Alert ========= if(Alerts) { // if(prevtime == Time[0]) return(0); double MOMNow = MOM[0]; double MOMPrev = MOM[1]; bool cross=0, lv0cross=0, lv1cross=0, lv2cross=0; string mess; if (MOMNow >Level0 && MOMPrev<=Level0 && alertLevel0) {cross=1; mess = "0 UP";} if (MOMNow <Level0 && MOMPrev>=Level0 && alertLevel0) {cross=1; mess = "0 DN";} if (MOMNow >obLevel1 && MOMPrev<=obLevel1 && alertLevels1 && alertOBCrossUp) {cross =1; mess = DoubleToStr(obLevel1,2)+" UP";} if (MOMNow <obLevel1 && MOMPrev>=obLevel1 && alertLevels1 && alertOBCrossDn) {cross =1; mess = DoubleToStr(obLevel1,2)+" DN";} if (MOMNow >obLevel2 && MOMPrev<=obLevel2 && alertLevels2 && alertOBCrossUp) {cross =1; mess = DoubleToStr(obLevel2,2)+" UP";} if (MOMNow <obLevel2 && MOMPrev>=obLevel2 && alertLevels2&& alertOBCrossDn) {cross =1; mess = DoubleToStr(obLevel1,2)+" DN";} if (MOMNow >osLevel1 && MOMPrev<=osLevel1 && alertLevels1 && alertOSCrossUp) {cross =1; mess = DoubleToStr(osLevel1,2)+" UP";} if (MOMNow <osLevel1 && MOMPrev>=osLevel1 && alertLevels1 && alertOSCrossDn) {cross =1; mess = DoubleToStr(osLevel1,2)+" DN";} if (MOMNow >osLevel2 && MOMPrev<=osLevel2 && alertLevels2 && alertOSCrossUp) {cross =1; mess = DoubleToStr(osLevel2,2)+" UP";} if (MOMNow <osLevel2 && MOMPrev>=osLevel2 && alertLevels2 && alertOSCrossDn) {cross =1; mess = DoubleToStr(osLevel2,2)+" DN";} if (cross && prevtime != Time[0]) { Alert(Symbol(), " M", Period(), " Momentum Cross level " +mess ); IndicatorShortName("Momentum ("+MOMPeriod+") (alerts on)"); prevtime = Time[0]; } } // ======= Alert End ========= return(0); }
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Indicator Curves created:
Implements a curve of type DRAW_LINE
Implements a curve of type DRAW_ARROW
Implements a curve of type DRAW_HISTOGRAM
Indicators Used:
Momentum indicator
Custom Indicators Used:
Order Management characteristics:
Other Features:
It issuies visual alerts to the screen