//|------------------------------------------------------------------+ //| SHI_Slope.mq4 | //| Shimodax, Shurka & Kevin | //| | //+------------------------------------------------------------------+ #property copyright "Shimodax, based on SHI-Channel from Shurka & Kevin" #property link "http://www.strategybuilderfx.com/forums/showthread.php?t=15112" #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 LimeGreen #property indicator_color2 Red double UpSlopeBuf[]; double DownSlopeBuf[]; //---- input parameters extern bool AlertRedGreenChange= false; // signal changes in slope extern int HistorySize= 1000; // number of slope-values in history extern int SHIBars= 240; // bars to use to find a channel extern int BarsForFract= 0; #include "fxoe-lib.mqh" //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0, DRAW_HISTOGRAM,STYLE_SOLID); SetIndexBuffer(0, UpSlopeBuf); SetIndexDrawBegin(0, Bars - HistorySize); SetIndexStyle(1, DRAW_HISTOGRAM,STYLE_SOLID); SetIndexBuffer(1, DownSlopeBuf); SetIndexDrawBegin(1, Bars - HistorySize); IndicatorShortName("FXOE-Slope(Hist= "+HistorySize+" bars)= "); return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { double rcslope, dummy1[100], dummy2[100], dummy3[100], dummy4[100]; int counted_bars= IndicatorCounted(), lastbar, rc; if (counted_bars>0) counted_bars--; lastbar= Bars - counted_bars; lastbar= MathMin(lastbar, HistorySize-2); for (int i= lastbar; i>=0; i--) { rc= SHIChannels(i, SHIBars, UpSlopeBuf, DownSlopeBuf, dummy1, dummy2, dummy3, dummy4, rcslope, BarsForFract, false); if (AlertRedGreenChange && i==0) { static bool didalert= false; double thisslope= UpSlopeBuf[0] + DownSlopeBuf[0], // one of the two will be zero lastslope= UpSlopeBuf[1] + DownSlopeBuf[1]; // one of the two will be zero if ((thisslope>0 && lastslope<=0) || (thisslope<0 && lastslope>=0)) { if (!didalert) { Alert("FXOE-SHISlope signals change in channel direction on ", Symbol(),"/",Period()); didalert= true; } } else { didalert= false; } } } return (0); }