#MTF Stochastic_ks01

#MTF Stochastic_ks01
Price Data Components
Series array that contains open time of each bar
Indicators Used
Stochastic oscillator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
#MTF Stochastic_ks01
//+------------------------------------------------------------------+
//|                                               MTF Stochastic.mq4 |
//|													2007, Christof Risch (iya)	|
//| Stochastic indicator from any timeframe.									|
//+------------------------------------------------------------------+
#property link "http://www.forexfactory.com/showthread.php?t=30109"
#property indicator_separate_window
#property indicator_buffers	2
#property indicator_color1		LightSeaGreen
#property indicator_color2		Red
#property indicator_level1		80
#property indicator_level2		20
#property indicator_maximum	100
#property indicator_minimum	0

//---- input parameters
extern int	TimeFrame	= 0,		// {1=M1, 5=M5, 15=M15, ..., 1440=D1, 10080=W1, 43200=MN1}
				KPeriod		= 5,
				DPeriod		= 3,
				Slowing		= 3,
				MAMethod		= 0,		// {0=SMA, 1=EMA, 2=SMMA, 3=LWMA}
				PriceField	= 0;		// {0=Hi/Low, 1=Close/Close}

//---- indicator buffers
double		Buffer1[],
				Buffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
//---- indicator lines
	SetIndexBuffer(0,Buffer1);
	SetIndexBuffer(1,Buffer2);
 	SetIndexStyle(0,DRAW_LINE);
	SetIndexStyle(1,DRAW_LINE);

//---- name for DataWindow and indicator subwindow label
	string TimeFrameStr;
	switch(TimeFrame)
	{
		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";
	}

	IndicatorShortName(TimeFrameStr+" Stoch("+KPeriod+","+DPeriod+","+Slowing+")");  
}


//+------------------------------------------------------------------+
//| MTF Stochastic                                                   |
//+------------------------------------------------------------------+
int start()
{
//	for(int i = Bars-1-IndicatorCounted(); i >= 10; i--)
	for(int i = Bars-1-IndicatorCounted(); i >= 0; i--)
	{
		int shift1 = iBarShift(NULL,TimeFrame,Time[i]),
			 time1  = iTime    (NULL,TimeFrame,shift1),
			 time2  = iTime    (NULL,TimeFrame,shift1-1),
			 shift2 = iBarShift(NULL,0,time1),
			 shift3 = iBarShift(NULL,0,time2);
			 
		int n;
		double factor;

      if (shift1 == 0)
      {
			Buffer1[0] = iStochastic(NULL,TimeFrame,KPeriod,DPeriod,Slowing,MAMethod,PriceField,0,0);
			Buffer2[0] = iStochastic(NULL,TimeFrame,KPeriod,DPeriod,Slowing,MAMethod,PriceField,1,0);
		}
		else
		{		
       int shift4 = shift3 + 1;
    
		Buffer1[shift4] = iStochastic(NULL,TimeFrame,KPeriod,DPeriod,Slowing,MAMethod,PriceField,0,shift1);
		Buffer2[shift4] = iStochastic(NULL,TimeFrame,KPeriod,DPeriod,Slowing,MAMethod,PriceField,1,shift1);
      }
	//----
	//	linear interpolation for indicators from a higher timeframe
		if(TimeFrame <= Period())
			continue;

	//----
	//	current candle
/*		if(shift1==0)
			for(int n = 1; shift2-n >= 0; n++)
			{
				Buffer1[shift2-n] = Buffer1[shift2];
				Buffer2[shift2-n] = Buffer2[shift2];
			}
*/
	//----
	//	count number of intermediate bars
	if(shift1==0)
		{	
		  int time4  = iTime    (NULL,TimeFrame,0);
		  int shift5 = iBarShift(NULL,0,time4);
		  n = shift5 +1;

			Buffer1[1] = iStochastic(NULL,TimeFrame,KPeriod,DPeriod,Slowing,MAMethod,PriceField,0,0);
			Buffer2[1] = iStochastic(NULL,TimeFrame,KPeriod,DPeriod,Slowing,MAMethod,PriceField,1,0);
	  
		    
		  factor = 1.0 / n;
		  
		  for(int k = 1; k < n ; k++)
		   {
  		    Buffer1[k] = k*factor*Buffer1[n] + (1.0-k*factor)*Buffer1[1];
		    Buffer2[k] = k*factor*Buffer2[n] + (1.0-k*factor)*Buffer2[1];
		    }
         			
		 }
	else
	  {

//		for(int n = 1; shift2+n < Bars && Time[shift2+n] > iTime(NULL,TimeFrame,iBarShift(NULL,TimeFrame,Time[shift2+n],true)); n++)
//			continue;

      n = shift2 - shift3;

//      shift3 = shift2 + n -1;
	//----
	//	apply interpolation
		factor = 1.0 / n;
		for( k = 1; k < n; k++)
		{
			Buffer1[shift4+k] = k*factor*Buffer1[shift4+n] + (1.0-k*factor)*Buffer1[shift4];
			Buffer2[shift4+k] = k*factor*Buffer2[shift4+n] + (1.0-k*factor)*Buffer2[shift4];
		}
      }
	}


	return(0);
}


Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---