/*------------------------------------------------------------------------------------ Name: TMS-Osc Histo-MTF.mq4 Copyright ©2010, Xaphod, http://forexwhiz.appspot.com Description: MTF tape chart of the Trading made Simple System Oscillator. Similar to the TDI RSI Signal Line and Trade Signal Line. Requires TMS_Osc.ex4 to be installed. Change log: 011-05-22. Xaphod, v1.01 - Removed dependancy on external indicator TMS-Osc.ex4 - Fixed repaint of current HTF bar 2011-05-16. Xaphod, v1.00 - First Release -------------------------------------------------------------------------------------*/ // Indicator properties #property copyright "Copyright © 2010, Xaphod" #property link "http://forexwhiz.appspot.com" #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Yellow #property indicator_width1 4 #property indicator_color2 Green #property indicator_width2 4 #property indicator_color3 Red #property indicator_width3 4 #property indicator_maximum 1 #property indicator_minimum 0 //#include // Constant definitions #define INDICATOR_NAME "TMS-Osc Histo" #define INDICATOR_VERSION "1.01" #define INDICATOR_DISP_VC "1.01, ©2011, Xaphod" // Indicator parameters extern string IndiVersion= INDICATOR_DISP_VC; extern string TimeFrameSettings="——————————————————————————————"; extern int TimeFrameTF=0; // Timeframe: 0,1,5,15,30,60,240,1440 etc. Current Timeframe=0. extern int TimeFrameAuto=1; // Automatically select higher TF. M15 and M30 -> H1. Off=0, 1st HTF=1, 2nd HTF=2 extern bool TimeFrameRepaint=True; // Repaint the bars of the open higher time-frame candle extern string RSISettings="——————————————————————————————"; extern int RSIPeriod=13; // RSI Period extern int RSIPrice=PRICE_CLOSE; // RSI Price Type: CLOSE=0, OPEN=1, HIGH=2, LOW=3, MEDIAN=4, TYPICAL=5, WEIGHTED=6 extern string RSISignalSettings="——————————————————————————————"; extern int RSISignalPeriod=2; // RSI Signal MA-Filter Period extern int RSISignalMode=MODE_SMA; // MA-Filter Method: SMA=0, EMA=1, SMMA=2, LWMA=4 extern string TradeSignalSettings="——————————————————————————————"; extern int TradeSignalPeriod=7; // Trade Signal MA-Filter Period extern int TradeSignalMode=MODE_SMA; // MA-Filter Method: SMA=0, EMA=1, SMMA=2, LWMA=4 input bool alertsOn = true; // Alerts on true/false? input bool alertsOnCurrent = false; // Alerts on open bar true/false? input bool alertsMessage = true; // Alerts message true/false? input bool alertsSound = false; // Alerts sound true/false? input bool alertsNotify = false; // Alerts notification true/false? input bool alertsEmail = false; // Alerts email true/false? input string soundFile = "alert2.wav"; // Sound file // Global module varables double gadTrendNo[]; double gadTrendUp[]; double gadTrendDn[]; double gadRSI[]; double gadRMAFast[]; double gadRMASlow[]; int giRepaintBars; int giTimeFrame; //----------------------------------------------------------------------------- // function: init() // Description: Custom indicator initialization function. //----------------------------------------------------------------------------- int init() { SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,gadTrendNo); SetIndexLabel(0,"Trend Level"); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexBuffer(1,gadTrendUp); SetIndexLabel(1,"Trend Up"); SetIndexStyle(2,DRAW_HISTOGRAM); SetIndexBuffer(2,gadTrendDn); SetIndexLabel(2,"Trend Down"); // Set Timeframe switch(TimeFrameAuto) { case 1: giTimeFrame=NextHigherTF(TimeFrameTF); giRepaintBars=giTimeFrame/Period()+2; break; case 2: giTimeFrame=NextHigherTF(NextHigherTF(TimeFrameTF)); giRepaintBars=giTimeFrame/Period()+2; break; default: giTimeFrame=TimeFrameTF; giRepaintBars=0; break; } // Name & Stuff IndicatorShortName(INDICATOR_NAME+","+TF2Str(giTimeFrame)); IndicatorDigits(1); return(0); } //----------------------------------------------------------------------------- // function: deinit() // Description: Custom indicator deinitialization function. //----------------------------------------------------------------------------- int deinit() { return (0); } ///----------------------------------------------------------------------------- // function: start() // Description: Custom indicator iteration function. //----------------------------------------------------------------------------- int start() { int iNewBars; int iCountedBars; int i; double gdRSISig; double gdTradeSig; // Get unprocessed ticks iCountedBars=IndicatorCounted(); if(iCountedBars < 0) return (-1); if(iCountedBars>0) iCountedBars--; iNewBars=Bars-iCountedBars; // Set bars to redraw if (TimeFrameRepaint && iNewBars=0; i--) { gdRSISig=gadRMAFast[iBarShift(Symbol(), giTimeFrame, Time[i])]; gdTradeSig=gadRMASlow[iBarShift(Symbol(), giTimeFrame, Time[i])]; gadTrendNo[i]=EMPTY_VALUE; gadTrendUp[i]=EMPTY_VALUE; gadTrendDn[i]=EMPTY_VALUE; if (gdRSISig>gdTradeSig) gadTrendUp[i]=1; else if (gdRSISig=0; i--) { gadRSI[i]=iRSI(Symbol(),iTimeFrame,RSIPeriod,RSIPrice,i); } for (i=iCalcBars; i>=0; i--) { gadRMAFast[i]=iMAOnArray(gadRSI,0,RSISignalPeriod,0,RSISignalMode,i); gadRMASlow[i]=iMAOnArray(gadRSI,0,TradeSignalPeriod,0,TradeSignalMode,i); } //return(0); } //----------------------------------------------------------------------------- // function: TF2Str() // Description: Convert time-frame to a string //----------------------------------------------------------------------------- string TF2Str(int iPeriod) { switch(iPeriod) { case PERIOD_M1: return("M1"); case PERIOD_M5: return("M5"); case PERIOD_M15: return("M15"); case PERIOD_M30: return("M30"); case PERIOD_H1: return("H1"); case PERIOD_H4: return("H4"); case PERIOD_D1: return("D1"); case PERIOD_W1: return("W1"); case PERIOD_MN1: return("MN1"); default: return("M"+iPeriod); } } //----------------------------------------------------------------------------- // function: NextHigherTF() // Description: Select the next higher time-frame. // Note: M15 and M30 both select H1 as next higher TF. //----------------------------------------------------------------------------- int NextHigherTF(int iPeriod) { if (iPeriod==0) iPeriod=Period(); switch(iPeriod) { case PERIOD_M1: return(PERIOD_M5); case PERIOD_M5: return(PERIOD_M15); case PERIOD_M15: return(PERIOD_H1); case PERIOD_M30: return(PERIOD_H1); case PERIOD_H1: return(PERIOD_H4); case PERIOD_H4: return(PERIOD_D1); case PERIOD_D1: return(PERIOD_W1); case PERIOD_W1: return(PERIOD_MN1); case PERIOD_MN1: return(PERIOD_MN1); default: return(Period()); } } // // // // // void doAlert(datetime& previousTime, string& previousAlert, int forBar, string doWhat) { string message; if (previousAlert != doWhat || previousTime != Time[forBar]) { previousAlert = doWhat; previousTime = Time[forBar]; // // // // // message = TF2Str(_Period)+" "+_Symbol+" at "+TimeToStr(TimeLocal(),TIME_SECONDS)+" TMS Osc "+doWhat; if (alertsMessage) Alert(message); if (alertsNotify) SendNotification(message); if (alertsEmail) SendMail(_Symbol+" TMS - Osc ",message); if (alertsSound) PlaySound(soundFile); } }