Filter overStochastic
Download scriptThis tool is designed to act as a visual filter for traders who use the Stochastic Oscillator to identify market trends. Rather than just showing the raw data of the oscillator, this script interprets the price action to categorize the market into four distinct momentum states, providing a clearer picture of whether the market is currently strong, weak, or transitioning.
How the Logic Works
The script analyzes two primary lines from the Stochastic Oscillator: the Main line (representing current momentum) and the Signal line (representing the moving average of that momentum). By comparing the values of these two lines against specific numerical thresholds, the script identifies four unique market conditions:
- Strong Bullish Momentum: When the main line is rising above the signal line and sits within a specific "growth" zone (between 20 and 40), the tool identifies this as a period of healthy upward movement.
- Strong Bearish Momentum: Conversely, if the main line drops into extreme oversold territory (at or below 20), the tool flags this as a dominant downward move.
- Potential Bullish Transition: When the price action enters a high-range zone (between 60 and 80) but the main line is trending below the signal line, the script identifies a potential shift in sentiment.
- Potential Bearish Transition: If the main line exceeds the high threshold of 80, it flags the market as being in an overbought state with a high probability of downward pressure.
Visual Representation
Instead of complex numbers, the script translates these calculations into four distinct visual indicators on your chart's sub-window:
- Strong Bulls: Highlights confirmed upward momentum.
- Strong Bears: Highlights confirmed downward momentum.
- Potential to Bulls: Alerts you to areas where the market may be preparing for a move.
- Potential to Bears: Alerts you to areas where the market may be reaching a peak.
By filtering the "noise" of the standard Stochastic Oscillator into these four categories, the tool helps traders quickly distinguish between established trends and potential turning points in the market.
//+------------------------------------------------------------------+
//| Filter overWPR.mq4 |
//| Copyright © 2006, Indoforex Groups - Primajaya |
//| http://primaforex.blogspot.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Indoforex Groups"
#property link "http://primaforex.blogspot.com"
#property indicator_separate_window
#property indicator_minimum -0.05
#property indicator_maximum 1.00
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 SteelBlue
#property indicator_color4 Orange
//---- input parameters
extern int PeriodeStoch=14;
extern int PercentD=3;
extern int Smooth=5;
//---- indicator buffers
double UpBuffer1[];
double DnBuffer1[];
double UpBuffer2[];
double DnBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
//---- indicator line
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);
SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2);
SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,2);
SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,2);
SetIndexBuffer(0,UpBuffer1);
SetIndexBuffer(1,DnBuffer1);
SetIndexBuffer(2,UpBuffer2);
SetIndexBuffer(3,DnBuffer2);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
//---- name for DataWindow and indicator subwindow label
short_name="Primajaya overSTOCH("+PeriodeStoch+")";
IndicatorShortName(short_name);
SetIndexLabel(0,"Strong Bears");
SetIndexLabel(1,"Strong Bulls");
SetIndexLabel(2,"Potential to Bulls");
SetIndexLabel(3,"Potential to Bears");
//----
SetIndexDrawBegin(0,PeriodeStoch);
SetIndexDrawBegin(1,PeriodeStoch);
SetIndexDrawBegin(2,PeriodeStoch);
SetIndexDrawBegin(3,PeriodeStoch);
//----
return(0);
}
//+------------------------------------------------------------------+
//| ProSol Confirmation |
//+------------------------------------------------------------------+
int start()
{
int shift,trend;
double PK;
double PD;
for(shift=Bars-PeriodeStoch-1;shift>=0;shift--)
{
PK=iStochastic(NULL, 0,PeriodeStoch,PercentD,Smooth,MODE_EMA,1,MODE_MAIN,shift);
PD=iStochastic(NULL, 0,PeriodeStoch,PercentD,Smooth,MODE_EMA,1,MODE_SIGNAL,shift);
if (PK>20 && PK>PD && PK<40 && PD<40) trend=1;
if (PK<=20) trend=2;
if (PK<80 && PK<PD && PK>60 && PD>60) trend=3;
if (PK>=80) trend=4;
if (trend==1)
{
UpBuffer1[shift]=0;
UpBuffer2[shift]=1;
DnBuffer1[shift]=0;
DnBuffer2[shift]=0;
}
if (trend==2)
{
UpBuffer1[shift]=1;
UpBuffer2[shift]=0;
DnBuffer1[shift]=0;
DnBuffer2[shift]=0;
}
if (trend==3)
{
UpBuffer1[shift]=0;
UpBuffer2[shift]=0;
DnBuffer1[shift]=0;
DnBuffer2[shift]=1;
}
if (trend==4)
{
UpBuffer1[shift]=0;
UpBuffer2[shift]=0;
DnBuffer1[shift]=1;
DnBuffer2[shift]=0;
}
}
return(0);
}
Comments