//+------------------------------------------------------------------+ //| MTF CJA Alert MTF_Waddah_Attar_ExplosionSA M2.mq4 ik| //| standalone Copyright © 2006, MetaQuotes Software Corp. | //| fxTSD.com http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //+------------------------------------------------------------------+ //| Waddah_Attar_Explosion.mq4 | //| Copyright © 2006, Eng. Waddah Attar | //| waddahattar@hotmail.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Eng. Waddah Attar" #property link "waddahattar@hotmail.com" //---- #property indicator_separate_window #property indicator_buffers 4 #property indicator_color1 Green #property indicator_color2 Red #property indicator_color3 Gold #property indicator_color4 Aqua #property indicator_minimum 0.0 #property indicator_width1 2 #property indicator_width2 2 #property indicator_width3 1 #property indicator_width4 1 //---- extern int Minutes=0; extern int Sensetive=150; extern int DeadZonePip=15; extern int ExplosionPower=15; extern int TrendPower=15; extern bool AlertWindow=false; extern int AlertCount=20; extern bool AlertLong=true; extern bool AlertShort=true; extern bool AlertExitLong=true; extern bool AlertExitShort=true; extern string note_TF_Minutes="5,15,30,60H1,240H4,1440D1,10080W1,43200MN1"; //---- double ind_buffer1[]; double ind_buffer2[]; double ind_buffer3[]; double ind_buffer4[]; //---- int LastTime1=1; int LastTime2=1; int LastTime3=1; int LastTime4=1; int Status=0, PrevStatus=-1; double bask, bbid; string TimeFrameStr; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID); SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID); SetIndexStyle(2, DRAW_LINE, STYLE_SOLID); SetIndexStyle(3, DRAW_LINE); //---- SetIndexBuffer(0, ind_buffer1); SetIndexBuffer(1, ind_buffer2); SetIndexBuffer(2, ind_buffer3); SetIndexBuffer(3, ind_buffer4); //---- IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)); switch(Minutes) { case 1 : TimeFrameStr=" Period M1 "; break; case 5 : TimeFrameStr=" Period M5 "; break; case 15 : TimeFrameStr=" Period M15 "; break; case 30 : TimeFrameStr=" Period M30 "; break; case 60 : TimeFrameStr=" Period H1 "; break; case 240 : TimeFrameStr=" Period H4 "; break; case 1440 : TimeFrameStr=" Period D1 "; break; case 10080 : TimeFrameStr=" Period W1 "; break; case 43200 : TimeFrameStr=" Period MN1 "; break; default : TimeFrameStr=" Current TimeFrame "; Minutes=0; } //---- if (Minutes<=Period()) Minutes=Period(); IndicatorShortName("WadAttExpl:|"+TimeFrameStr+"|[S-" + Sensetive +"][DZ-"+ DeadZonePip +"][EP-"+ ExplosionPower +"][TrP-"+ TrendPower +"])"); // Comment("copyright waddahwttar@hotmail.com"); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { datetime TimeArray[]; double Trend1, Trend2, Explo1, Explo2, Dead; double pwrt, pwre; int limit, i, y=0,counted_bars=IndicatorCounted(); //---- ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),Minutes); if(counted_bars < 0) return(-1); //---- if(counted_bars > 0) counted_bars--; //limit = Bars - counted_bars; limit=Bars-counted_bars+Minutes/Period(); //---- // for(i = limit - 1; i >= 0; i--) for(i=0,y=0;i<limit;i++) { if (Time[i]<TimeArray[y]) y++; Trend1=(iMACD(NULL, Minutes, 20, 40, 9, PRICE_CLOSE, MODE_MAIN, y) - iMACD(NULL, Minutes, 20, 40, 9, PRICE_CLOSE, MODE_MAIN, y + 1))*Sensetive; Trend2=(iMACD(NULL, Minutes, 20, 40, 9, PRICE_CLOSE, MODE_MAIN, y + 2) - iMACD(NULL, Minutes, 20, 40, 9, PRICE_CLOSE, MODE_MAIN, y + 3))*Sensetive; Explo1=(iBands(NULL, Minutes, 20, 2, 0, PRICE_CLOSE, MODE_UPPER, y) - iBands(NULL, Minutes, 20, 2, 0, PRICE_CLOSE, MODE_LOWER, y)); Explo2=(iBands(NULL, Minutes, 20, 2, 0, PRICE_CLOSE, MODE_UPPER, y + 1) - iBands(NULL, Minutes, 20, 2, 0, PRICE_CLOSE, MODE_LOWER, y + 1)); Dead=Point * DeadZonePip; ind_buffer1[i]=0; ind_buffer2[i]=0; ind_buffer3[i]=0; ind_buffer4[i]=0; if(Trend1>=0) ind_buffer1[i]=Trend1; if(Trend1 < 0) ind_buffer2[i]=(-1*Trend1); ind_buffer3[i]=Explo1; ind_buffer4[i]=Dead; if(i==0) { if(Trend1 > 0 && Trend1 > Explo1 && Trend1 > Dead && Explo1 > Dead && Explo1 > Explo2 && Trend1 > Trend2 && LastTime1 < AlertCount && AlertLong==true && Ask!=bask) { pwrt=100*(Trend1 - Trend2)/Trend1; pwre=100*(Explo1 - Explo2)/Explo1; bask=Ask; if(pwre>=ExplosionPower && pwrt>=TrendPower) { if(AlertWindow==true) { Alert("WAE",LastTime1, "- ", Symbol(), " - BUY ", " (", DoubleToStr(bask, Digits) , ") Trend PWR " , DoubleToStr(pwrt,0), " - Exp PWR ", DoubleToStr(pwre, 0)); } else { Print("WAE",LastTime1, "- ", Symbol(), " - BUY ", " (", DoubleToStr(bask, Digits), ") Trend PWR ", DoubleToStr(pwrt, 0), " - Exp PWR ", DoubleToStr(pwre, 0)); } LastTime1++; } Status=1; } if(Trend1 < 0 && MathAbs(Trend1) > Explo1 && MathAbs(Trend1) > Dead && Explo1 > Dead && Explo1 > Explo2 && MathAbs(Trend1) > MathAbs(Trend2) && LastTime2 < AlertCount && AlertShort==true && Bid!=bbid) { pwrt=100*(MathAbs(Trend1) - MathAbs(Trend2))/MathAbs(Trend1); pwre=100*(Explo1 - Explo2)/Explo1; bbid=Bid; if(pwre>=ExplosionPower && pwrt>=TrendPower) { if(AlertWindow==true) { Alert("WAE",LastTime2, "- ", Symbol(), " - SELL ", " (", DoubleToStr(bbid, Digits), ") Trend PWR ", DoubleToStr(pwrt,0), " - Exp PWR ", DoubleToStr(pwre, 0)); } else { Print("WAE",LastTime2, "- ", Symbol(), " - SELL ", " (", DoubleToStr(bbid, Digits), ") Trend PWR " , DoubleToStr(pwrt, 0), " - Exp PWR ", DoubleToStr(pwre, 0)); } LastTime2++; } Status=2; } if(Trend1 > 0 && Trend1 < Explo1 && Trend1 < Trend2 && Trend2 > Explo2 && Trend1 > Dead && Explo1 > Dead && LastTime3<=AlertCount && AlertExitLong==true && Bid!=bbid) { bbid=Bid; if(AlertWindow==true) { Alert("WAE",LastTime3, "- ", Symbol(), " - Exit BUY ", " ", DoubleToStr(bbid, Digits)); } else { Print("WAE",LastTime3, "- ", Symbol(), " - Exit BUY ", " ", DoubleToStr(bbid, Digits)); } Status=3; LastTime3++; } if(Trend1 < 0 && MathAbs(Trend1) < Explo1 && MathAbs(Trend1) < MathAbs(Trend2) && MathAbs(Trend2) > Explo2 && Trend1 > Dead && Explo1 > Dead && LastTime4<=AlertCount && AlertExitShort==true && Ask!=bask) { bask=Ask; if(AlertWindow==true) { Alert("WAE",LastTime4, "- ", Symbol(), " - Exit SELL ", " ", DoubleToStr(bask, Digits)); } else { Print("WAE",LastTime4, "- ", Symbol(), " - Exit SELL ", " ", DoubleToStr(bask, Digits)); } Status=4; LastTime4++; } PrevStatus=Status; } if(Status!=PrevStatus) { LastTime1=1; LastTime2=1; LastTime3=1; LastTime4=1; } } //---- Refresh buffers +++++++++++++++++++++++++ Raff if (Minutes>Period()) { int PerINT=Minutes/Period()+1; datetime TimeArr[]; ArrayResize(TimeArr,PerINT); ArrayCopySeries(TimeArr,MODE_TIME,Symbol(),Period()); for(i=0;i<PerINT+1;i++) { if (TimeArr[i]>=TimeArray[0]) { /******************************************************** Refresh buffers: buffer[i] = buffer[0]; ********************************************************/ ind_buffer1[i]=ind_buffer1[0]; ind_buffer2[i]=ind_buffer2[0]; ind_buffer3[i]=ind_buffer3[0]; ind_buffer4[i]=ind_buffer4[0]; } } } //++++++++++++++++++++++++++++++++++++++++ upgrade by Raff 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_HISTOGRAM
Implements a curve of type DRAW_LINE
Indicators Used:
MACD Histogram
Bollinger bands indicator
Custom Indicators Used:
Order Management characteristics:
Other Features:
It issuies visual alerts to the screen