//+------------------------------------------------------------------+ //| Stochastic_5M+15M.mq4 | //| Zen_Leow | //| | //+------------------------------------------------------------------+ #property copyright "Zen_Leow" #property link "" #property indicator_separate_window #property indicator_minimum 0 #property indicator_maximum 100 #property indicator_buffers 4 #property indicator_color1 Green #property indicator_color2 Red #property indicator_color3 Blue #property indicator_color4 Yellow #property indicator_width1 1 #property indicator_width2 1 #property indicator_level1 80 #property indicator_level2 20 extern string _ = "Stochastic Inputs"; extern int Timeframe1 = PERIOD_M5; extern int K_Period1 = 14; extern int D_Period1 = 1; extern int Slowing1 = 1; extern string PriceField_Setting1 = "0 - Low/High or 1 - Close/Close"; extern int PriceField1 = 0; extern string MA_Method_Setting1 = "0 - SMA, 1 - EMA, 2 - SMMA, 3 - LWMA"; extern int MA_Method1 = 0; extern int Timeframe2 = PERIOD_M15; extern int K_Period2 = 14; extern int D_Period2 = 3; extern int Slowing2 = 3; extern string PriceField_Setting2 = "0 - Low/High or 1 - Close/Close"; extern int PriceField2 = 0; extern string MA_Method_Setting2 = "0 - SMA, 1 - EMA, 2 - SMMA, 3 - LWMA"; extern int MA_Method2 = 0; extern bool AudioAlertActive = true; int ArrowCode = 251; // This is the wingdings code for the TF15 Stochastic symbol int ArrowDist = 10; double TF1Buffer[]; double TF2Buffer[]; double UpBuffer[]; double DownBuffer[]; double LastClosed15MStoch; datetime TimeOfCrossConfirmation; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(4); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2, TF1Buffer); SetIndexStyle(3,DRAW_ARROW); SetIndexArrow(3,ArrowCode); SetIndexBuffer(3, TF2Buffer); SetIndexStyle(0,DRAW_ARROW); SetIndexArrow(0,233); SetIndexBuffer(0, UpBuffer); SetIndexStyle(1,DRAW_ARROW); SetIndexArrow(1,234); SetIndexBuffer(1, DownBuffer); //---- name for DataWindow and indicator subwindow label string short_name="Stoch_5M+15M("+K_Period1+","+D_Period1+","+Slowing1+"--"+K_Period2+","+D_Period2+","+Slowing2+")"; IndicatorShortName(short_name); SetIndexLabel(0,"5M_Stoch"); SetIndexLabel(1,"15M_Stoch"); //---- Set Start point of drawing int draw_begin1=K_Period1+Slowing1; int draw_begin2=K_Period2+Slowing2; SetIndexDrawBegin(2,draw_begin1); SetIndexDrawBegin(3,draw_begin1); SetIndexDrawBegin(0,draw_begin1); SetIndexDrawBegin(1,draw_begin2); //---- // Alert("Done"); LastClosed15MStoch = EMPTY_VALUE; return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { PlotTimeFrame2Graph(); PlotTimeFrame1Graph(); PlotTimeFrame2Graph(); if (Time[0] > TimeOfCrossConfirmation && AudioAlertActive) { CheckForAlerts(); } return(0); } double GetStochasticValueTF1(int index) { return (iStochastic( Symbol(), Timeframe1, K_Period1, D_Period1, Slowing1, MA_Method1, PriceField1, 0, index)); } double GetStochasticValueTF2(int index) { return (iStochastic( Symbol(), Timeframe2, K_Period2, D_Period2, Slowing2, MA_Method2, PriceField2, 0, index)); } // Draw the 15M Stochastic // For this I count from bar 0 onwards. void PlotTimeFrame2Graph() { int i=0; // Bar index int x=0; // Timeframe2 index int Counted_bars; // Number of counted bars //-------------------------------------------------------------------- Counted_bars=IndicatorCounted(); // Number of counted bars while(i<=Bars-Counted_bars-1) // Loop for uncounted bars { if (MathMod(TimeMinute(Time[i]),Timeframe2)==0) { TF2Buffer[i]=GetStochasticValueTF2(x); x++; } else { TF2Buffer[i]=EMPTY_VALUE; } i++; // Calculating index of the next bar } } // Draws 5M Stochastic and Up down arrows when cross occurs void PlotTimeFrame1Graph() { int i; // Bar index int Counted_bars; // Number of counted bars //-------------------------------------------------------------------- Counted_bars=IndicatorCounted(); // Number of counted bars i=Bars-Counted_bars-1; // Index of the first uncounted while(i>=0) // Loop for uncounted bars { TF1Buffer[i]=GetStochasticValueTF1(i); if (TF2Buffer[i+1]!=EMPTY_VALUE) { LastClosed15MStoch = TF2Buffer[i+1]; } if (TF1Buffer[i+1] > LastClosed15MStoch) { if (TF1Buffer[i+2] < LastClosed15MStoch) { UpBuffer[i+1] = TF1Buffer[i+1] - ArrowDist; if (UpBuffer[i+1] > 100) { UpBuffer[i+1] = 100; } if (UpBuffer[i+1] < 0) { UpBuffer[i+1] = 0; } } else { UpBuffer[i+1] = EMPTY_VALUE; } } else { UpBuffer[i+1] = EMPTY_VALUE; } if (TF1Buffer[i+1] < LastClosed15MStoch) { if (TF1Buffer[i+2] > LastClosed15MStoch) { DownBuffer[i+1] = TF1Buffer[i+1] + ArrowDist; if (DownBuffer[i+1] > 100) { DownBuffer[i+1] = 100; } if (DownBuffer[i+1] < 0) { DownBuffer[i+1] = 0; } } else { DownBuffer[i+1] = EMPTY_VALUE; } } else { DownBuffer[i+1] = EMPTY_VALUE; } i--; // Calculating index of the next bar } } // Codes here for the alert are independent from the visual indicator. void CheckForAlerts() { if(GetStochasticValueTF1(1) > GetStochasticValueTF2(1)) { if(GetStochasticValueTF1(2) < GetStochasticValueTF2(1)) // Confirmed there was a cross { TimeOfCrossConfirmation = TimeCurrent(); Alert("5M Stoch has crossed ABOVE 15M Stoch!!!"); } } if(GetStochasticValueTF1(1) < GetStochasticValueTF2(1)) { if(GetStochasticValueTF1(2) > GetStochasticValueTF2(1)) // Confirmed there was a cross { TimeOfCrossConfirmation = TimeCurrent(); Alert("5M Stoch has crossed BELOW 15M Stoch!!!"); } } } //+------------------------------------------------------------------+
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
Indicators Used:
Stochastic oscillator
Custom Indicators Used:
Order Management characteristics:
Other Features:
It issuies visual alerts to the screen