/*+------------------------------------------------------------------+
 | FileName: i_DCG_ModStDev.mq4
 | Author: Copyright © 2005, Fermin Da Costa Gomez
 | Description: This indicator measures 
 | 
 | Version: 000 20050728 14:52 GMT
 +------------------------------------------------------------------------------------------+*/
#property copyright "Copyright © 2005, Fermin Da Costa Gomez"
#property link      "http://forex.viahetweb.nl"

#property indicator_separate_window
#property indicator_buffers 2

#property indicator_color1 Silver
#property indicator_color2 Red
#property indicator_color3 Lime
#property indicator_color4 SkyBlue

//---- External parameters
extern int _maPeriod=12;

//---- indicator buffers
double _sd[];
double _sdMa[];
double _sdMa2[];
double _sdPower[];
double _sdPowerMa[];

//----
int ExtCountedBars=0;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
	int    draw_begin;
	string short_name;
	IndicatorBuffers(5);

	//---- indicator buffers mapping
	SetIndexBuffer(0, _sdPower);
	SetIndexEmptyValue(0, 0.0);
	SetIndexStyle(0, DRAW_HISTOGRAM);
	
	SetIndexBuffer(1, _sdPowerMa);
	SetIndexEmptyValue(1, 0.0);
	SetIndexStyle(1, DRAW_LINE);

	SetIndexBuffer(3, _sd);
	SetIndexEmptyValue(3, 0.0);
	SetIndexStyle(3, DRAW_LINE);
	
	SetIndexBuffer(4, _sdMa);
	SetIndexEmptyValue(4, 0.0);
	SetIndexStyle(4, DRAW_LINE);

	SetIndexBuffer(2, _sdMa2);
	SetIndexEmptyValue(2, 0.0);
	SetIndexStyle(2, DRAW_LINE);
	
	IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));

	//---- initialization done
	return(0);
}

//+------------------------------------------------------------------+
//| CalculateIndicators                                                                 |
//+------------------------------------------------------------------+
void calculateIndicators(int i) {
	double m10, m11, m20, m21;
	int fastPeriod=_maPeriod*0.382;
	
	_sd[i] = iStdDev(Symbol(), 0, _maPeriod, MODE_LWMA, 0, PRICE_CLOSE, i);
	_sdMa[i] = iMAOnArray(_sd, 0, _maPeriod, 0, MODE_LWMA, i); 
	_sdMa2[i] = iMAOnArray(_sd, 0, _maPeriod*MathSqrt(_maPeriod), 0, MODE_LWMA, i); 
	_sdPower[i]= _sdMa[i]-_sdMa2[i];
	_sdPowerMa[i] = iMAOnArray(_sdPower, 0, _maPeriod*1.618, 0, MODE_LWMA, i); 
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start() {
	int i, shift, counted_bars=IndicatorCounted();

	//---- last counted bar will be recounted
	int limit=Bars-counted_bars;
	if(counted_bars>0) limit++;
	
	//---- moving average
	for(i=limit; i>=0; i--) {
		//calculateIndicators(i);
		
		double m10, m11, m20, m21;
		int fastPeriod=_maPeriod*0.382;
	
		_sd[i] = iStdDev(Symbol(), 0, _maPeriod, MODE_LWMA, 0, PRICE_CLOSE, i);
		_sdMa[i] = iMAOnArray(_sd, 0, _maPeriod, 0, MODE_LWMA, i); 
		_sdMa2[i] = iMAOnArray(_sd, 0, _maPeriod*MathSqrt(_maPeriod), 0, MODE_LWMA, i); 
		_sdPower[i]= _sdMa[i]-_sdMa2[i];
		_sdPowerMa[i] = iMAOnArray(_sdPower, 0, _maPeriod*1.618, 0, MODE_LWMA, i); 
	} 

	return(0);
}

