//---------------------------------------------------------------------
//	Îáçîð ðûíêà.
//	Ïîçâîëÿåò â îäíîì ýêðàíå âèäåòü äâèæåíèå äî 16 èíñòðóìåíòîâ
//	ïî 4 òàéì-ôðåéìàì.
//---------------------------------------------------------------------
//---------------------------------------------------------------------
//	Èñòîðèÿ âåðñèé:
//---------------------------------------------------------------------
//	30.09.2009ã. - V1b01
//	 - íà÷àëüíàÿ âåðñèÿ;
//
//	01.10.2009ã. - V1b02
//	 - èñïðàâëåíà îøèáêà ïðè èçìåíåíèè â ñïèñêå ÒÔ ( íå óäàëÿëèñü îáúåêòû
//		 äëÿ ñòàðûõ ÒÔ );
//	 - ñäåëàíî îãðàíè÷åíèå ÷èñëà ÒÔ ( äî 4 ) è ÷èñëà âàëþò ( äî 16 ),
//		 îäíîâðåìåííî îòîáðàæàåìûõ â îêíå;
//
//	02.10.2009ã. - V1b03
//	 - äîáàâëåí âûâîä äîïîëíèòåëüíûõ ïîëåé ( ñïðýä, ñòîï-ëåâåë, äíåâíîé
//		 äèàïàçîí, ñðåäíèé äíåâíîé äèàïàçîí );
//
//	13.10.2009ã. - V1b04
//	 - ñäåëàí âûâîä öèôðîâûõ ïîëåé â ãëàâíîå îêíî âìåñòî äîïîëíèòåëüíîãî;
//---------------------------------------------------------------------
//---------------------------------------------------------------------
#property copyright "Copyright © 2009, Dima S."
#property link      "ddd003@mail.ru"
//---------------------------------------------------------------------
//---------------------------------------------------------------------
////#property indicator_chart_window
#property indicator_separate_window
//---------------------------------------------------------------------
//---------------------------------------------------------------------
#property  indicator_minimum	-3.0
#property  indicator_maximum	+3.0
//---------------------------------------------------------------------
#property  indicator_level1		-1.5
#property  indicator_level2		-1.0
#property  indicator_level3		-0.5
#property  indicator_level4		+1.5
#property  indicator_level5		+1.0
#property  indicator_level6		+0.5
#property  indicator_level7		+0.0
//---------------------------------------------------------------------
//---------------------------------------------------------------------
#define INDICATOR_NAME					"CurrencyDeviation"
#define INDICATOR_VERSION				"V1"
#define INDICATOR_SUB_VERSION		"b04"
//---------------------------------------------------------------------
//---------------------------------------------------------------------
#define TREND_UP					1
#define TREND_DN				 -1
#define NO_TREND					0
//---------------------------------------------------------------------
//---------------------------------------------------------------------
//	Âíåøíèå ïîäêëþ÷àåìûå ìîäóëè:
//---------------------------------------------------------------------
#include <stdlib.mqh>														// ñòàíäàðòíàÿ áèáëèîòåêà
#include <lib_display.mq4>											// áèáëèîòåêà äëÿ âûâîäà äàííûõ íà ýêðàí
//---------------------------------------------------------------------
//	Ãëîáàëüíûå ïåðåìåííûå:
//---------------------------------------------------------------------
extern string	CurrencyList = "EURUSD; GBPUSD; AUDUSD; NZDUSD; USDCHF; USDCAD; USDJPY; CADJPY; EURJPY; GBPJPY; AUDJPY; NZDJPY; CHFJPY; EURCHF; GBPCHF; GOLD";
extern string	TimeFrameList = "H1; H4; D1; W1";
//---------------------------------------------------------------------
extern int		ShowAddingFields = 1;							// âûâîä äîïîëíèòåëüíûõ ïîëåé ( ñïðýä è ò.ä. )
//---------------------------------------------------------------------
extern int		InfoTopShift = 20;								// ñìåùåíèå ñâåðõó äëÿ âûâîäèìîé íà ýêðàí èíôîðìàöèè
extern int		InfoLeftShift = 5;								// ñìåùåíèå ñëåâà äëÿ âûâîäèìîé íà ýêðàí èíôîðìàöèè
extern int		FontSize = 10;										// ðàçìåð øðèôòà äëÿ âûâîäà òàáëèöû
//---------------------------------------------------------------------
static string	timeframes[ ];
static int		timeframes_count = 0;
//---------------------------------------------------------------------
static string	currencies[ ];
static int		currencies_count = 0;
//---------------------------------------------------------------------
static int		currency_x[ ] = { 0,   50,  120, 190, 260, 330, 400, 470, 540, 610, 680, 750, 820, 890, 960, 1030, 1110 };
static int		rect_x[ ]     = { 267, 249, 231, 214, 197, 179, 162, 145, 127, 110,  92,  75,  57,  40,  22,    2 };
//---------------------------------------------------------------------
static int		rect_w[ ] = { 1, 1, 2, 2, 4 };		// òîëùèíà ëèíèé ïðÿìîóãîëüíèêîâ
static int		rect_s[ ] = { 4, 6, 8, 12, 14 };	// øèðèíà ïðÿìîóãîëüíèêîâ
static color	rect_c_up[ ] = { PaleGreen, Lime, Lime, Green, Lime };
static color	rect_c_dn[ ] = { Pink, Red, Red, Brown, Red };
static bool		rect_back[ ] = { TRUE, FALSE, FALSE, FALSE, FALSE };
static string	columns[ ] = { "Bid:", "Sprd:", "StLev:", "Hi-Lo:", "AvrgD:" };
//---------------------------------------------------------------------
//---------------------------------------------------------------------
int		tf_start_row;
int		bid_row_count;
//---------------------------------------------------------------------
int		is_initialised = 0;
int		indicator_wnd;
//---------------------------------------------------------------------
double		current_point_multiplier;							// ìíîæèòåëü ïðè âûâîäå íà ýêðàí ïóíêòîâ
double		current_digits;
double		current_point;
//---------------------------------------------------------------------
//	Èíèöèàëèçàöèÿ:
//---------------------------------------------------------------------
int
init( )
{
	is_initialised = 0;
	return( 0 );
}
//---------------------------------------------------------------------
//	Äåèíèöèàëèçàöèÿ:
//---------------------------------------------------------------------
int
deinit( )
{
	delete_table( );
	delete_rects( );
	is_initialised = 0;
	return( 0 );
}
//---------------------------------------------------------------------
//	Âûçûâàåòñÿ ïðè êàæäîì òèêå ïî äàííîìó èíñòðóìåíòó:
//---------------------------------------------------------------------
#define LEFT_SHIFT		260
//---------------------------------------------------------------------
color		price_color;
double	price;
double	price_ma;
//---------------------------------------------------------------------
int
start( )
{
	if( is_initialised == 0 )
	{
		initialise( );
		is_initialised = 1;
	}
	for( int curr_index = 0; curr_index < currencies_count; curr_index++ )
	{
		price = MarketInfo( currencies[ curr_index ], MODE_BID );
		price_ma = iMA( currencies[ curr_index ], PERIOD_M1, 1, 0, MODE_EMA, PRICE_CLOSE, 1 );
		current_digits = MarketInfo( currencies[ curr_index ], MODE_DIGITS );
		if( current_digits == 5 || current_digits == 3 )
		{
			current_point_multiplier = 0.1;
		}
		else
		{
			current_point_multiplier = 1.0;
		}
		current_point = MarketInfo( currencies[ curr_index ], MODE_POINT );
		if( price < price_ma )
			price_color = Red;
		else if ( price > price_ma )
			price_color = Lime;
		else if( price == price_ma )
			price_color = Orange;
		set_cell_text( 1, curr_index + 1, DoubleToStr( price, current_digits ), price_color );
		if( ShowAddingFields == 1 )
		{
			double	R1 = 0, R5 = 0, R10 = 0, R20 = 0, RAvg = 0, AV_Yest, spread, stoplevel, hilo;
			R1 = ( iHigh( currencies[ curr_index ], PERIOD_D1, 1 ) - iLow( currencies[ curr_index ], PERIOD_D1, 1 )) / current_point;
			for( int i = 1; i <= 5; i++ )
			{
				R5 = R5 + ( iHigh( currencies[ curr_index ], PERIOD_D1, i ) - iLow( currencies[ curr_index ], PERIOD_D1, i )) / current_point;
			}
			for( i = 1; i <= 10; i++ )
			{
				R10 = R10 + ( iHigh( currencies[ curr_index ], PERIOD_D1, i ) - iLow( currencies[ curr_index ], PERIOD_D1, i )) / current_point;
			}
			for( i = 1; i <= 20; i++ )
			{
				R20 = R20 + ( iHigh( currencies[ curr_index ], PERIOD_D1, i ) - iLow( currencies[ curr_index ], PERIOD_D1, i )) / current_point;
			}
			RAvg = ( R1 + R5 / 5.0 + R10 / 10.0 + R20 / 20.0 ) / 4.0 * current_point_multiplier;    
			AV_Yest = ( iHigh( currencies[ curr_index ], PERIOD_D1, 1 ) - iLow( currencies[ curr_index ], PERIOD_D1, 1 )) / current_point * current_point_multiplier;
			spread = current_point_multiplier * MarketInfo( currencies[ curr_index ], MODE_SPREAD );
			stoplevel = current_point_multiplier * MarketInfo( currencies[ curr_index ], MODE_STOPLEVEL );
			hilo = ( iHigh( currencies[ curr_index ], PERIOD_D1, 0 ) - iLow( currencies[ curr_index ], PERIOD_D1, 0 )) * current_point_multiplier / current_point;
			string	adding;
			if( spread >= 10.0 )
			{
				adding = "  ";
			}
			else
			{
				adding = "   ";
			}
			set_cell_text( 2, curr_index + 1, adding + DoubleToStr( spread, 1 ), LemonChiffon );
			if( stoplevel >= 100.0 )
			{
				adding = " ";
			}
			else if( stoplevel >= 10.0 )
			{
				adding = "  ";
			}
			else
			{
				adding = "   ";
			}
			set_cell_text( 3, curr_index + 1, adding + DoubleToStr( stoplevel, 1 ), LemonChiffon );
			if( hilo >= 100.0 )
			{
				adding = "";
			}
			else if( hilo >= 10.0 )
			{
				adding = "  ";
			}
			else
			{
				adding = "   ";
			}
			set_cell_text( 4, curr_index + 1, adding + DoubleToStr( hilo, 1 ), LightSteelBlue );
			if( RAvg >= 100.0 )
			{
				adding = "";
			}
			else if( RAvg >= 10.0 )
			{
				adding = "  ";
			}
			else
			{
				adding = "   ";
			}
			if( RAvg >= AV_Yest )
			{
				set_cell_text( 5, curr_index + 1, adding + DoubleToStr( RAvg, 1 ), Lime );
			}
			else
			{
				set_cell_text( 5, curr_index + 1, adding + DoubleToStr( RAvg, 1 ), Red );
			}
		}
		for( int tf_index = 0; tf_index < timeframes_count; tf_index++ )
		{
			int			tf = get_timeframe_from_string( timeframes[ tf_index ] );
			double	dev = get_deviation( currencies[ curr_index ], tf, 0 );
			if( dev > 0.0005 )
			{
				set_cell_text( tf_index + 1 + bid_row_count, curr_index + 1, "+" + DoubleToStr( dev, 3 ) + " %", get_number_color( 0.0005, dev, PaleGreen, Pink, Silver ));
			}
			else if( dev < -0.0005 )
			{
				set_cell_text( tf_index + 1 + bid_row_count, curr_index + 1, " " + DoubleToStr( dev, 3 ) + " %", get_number_color( 0.0005, dev, PaleGreen, Pink, Silver ));
			}
			else
			{
				set_cell_text( tf_index + 1 + bid_row_count, curr_index + 1, " " + DoubleToStr( 0.0, 3 ) + " %", get_number_color( 0.0005, dev, PaleGreen, Pink, Silver ));
			}
	
			create_rect( 0.0, dev, currencies[ curr_index ], timeframes[ tf_index ], rect_x[ curr_index ], rect_s[ tf_index ], rect_w[ tf_index ], get_number_color( 0.0005, dev, rect_c_up[ tf_index ], rect_c_dn[ tf_index ], Silver ), rect_back[ tf_index ] );
		}
	}
	return( 0 );
}
//---------------------------------------------------------------------
//	Óäàëåíèå ãðàôè÷åñêèõ îáúåêòîâ:
//---------------------------------------------------------------------
void
delete_rects( )
{
	for( int column = 0; column < currencies_count; column++ )
	{
		for( int row = 0; row < timeframes_count; row++ )
		{
			ObjectDelete( currencies[ column ] + "-" + timeframes[ row ] );
		}
	}
}
//---------------------------------------------------------------------
//---------------------------------------------------------------------
void
create_rect( double _low, double _high, string _symbol, string _timeframe, int _shift, int _size, int _width, color _color, bool _solid )
{
	string	name = _symbol + "-" + _timeframe;
	if( ObjectFind( name ) != indicator_wnd )
	{
		ObjectCreate( name, OBJ_RECTANGLE, indicator_wnd, Time[ _shift + 10 ], _low, Time[ _shift + 20 ], _high );
	}
	else
	{
		ObjectSet( name, OBJPROP_TIME1, Time[ _shift + 10 + ( 12 - _size ) / 2 ] );
		ObjectSet( name, OBJPROP_PRICE1, _low );
		ObjectSet( name, OBJPROP_TIME2, Time[ _shift + 20 - ( 12 - _size ) / 2 ] );
		ObjectSet( name, OBJPROP_PRICE2, _high );
	}
	ObjectSet( name, OBJPROP_WIDTH, _width );
	ObjectSet( name, OBJPROP_BACK, _solid );
	ObjectSet( name, OBJPROP_COLOR, _color );
}
//---------------------------------------------------------------------
//---------------------------------------------------------------------
double
get_deviation( string _symbol, int _timeframe, int _shift )
{
	double	dev = 100.0 * ( iClose( _symbol, _timeframe, _shift ) - iOpen( _symbol, _timeframe, _shift )) / iOpen( _symbol, _timeframe, _shift );
	return( dev );
}
//---------------------------------------------------------------------
//	Ïðåîáðàçóåò ÒÔ èç ñòðîêè â ÷èñëî:
//---------------------------------------------------------------------
int
get_timeframe_from_string( string _str )
{
	if( _str == "M1" )
	{
		return( PERIOD_M1 );
	}
	if( _str == "M5" )
	{
		return( PERIOD_M5 );
	}
	if( _str == "M15" )
	{
		return( PERIOD_M15 );
	}
	if( _str == "M30" )
	{
		return( PERIOD_M30 );
	}
	if( _str == "H1" )
	{
		return( PERIOD_H1 );
	}
	if( _str == "H4" )
	{
		return( PERIOD_H4 );
	}
	if( _str == "D1" )
	{
		return( PERIOD_D1 );
	}
	if( _str == "W1" )
	{
		return( PERIOD_W1 );
	}
	if( _str == "MN1" )
	{
		return( PERIOD_MN1 );
	}
	return( PERIOD_D1 );
}
//---------------------------------------------------------------------
//	Íà÷àëüíàÿ èíèöèàëèçàöèÿ:
//---------------------------------------------------------------------
void
initialise( )
{
	indicator_wnd = WindowFind( WindowExpertName( ));
	if( indicator_wnd == -1 )
	{
		indicator_wnd = WindowsTotal( );
	}
	currencies_count = StringToArrayString( CurrencyList, currencies );
	if( currencies_count > 16 )
	{
		currencies_count = 16;
	}
	timeframes_count = StringToArrayString( TimeFrameList, timeframes );
	if( timeframes_count > 4 )
	{
		timeframes_count = 4;
	}
//	Íàñòðîèì íà÷àëüíûå êîîðäèíàòû ñòðîê:
	if( ShowAddingFields == 0 )
	{
		tf_start_row = 2;
		bid_row_count = 1;
	}
	else
	{
		tf_start_row = 6;
		bid_row_count = 5;
	}
	create_table( 0, "CurrencyTable", timeframes_count + 1 + bid_row_count, currencies_count + 1 );
	clear_table( );
//	Èíèöèàëèçèðóåì ïåðâóþ ñòðîêó ( íàçâàíèÿ èíñòðóìåíòîâ ):
	for( int column = 0; column < currencies_count + 1; column++ )
	{
		set_cell_attributes( 0, column, InfoLeftShift + currency_x[ column ], InfoTopShift, LightCyan, FontSize );
		if( column == 0 )
		{
			set_cell_text( 0, column, "", Black );
		}
		else
		{
			set_cell_text( 0, column, currencies[ column - 1 ], get_currency_color( currencies[ column - 1 ] ));
		}
	}
//	Èíèöèàëèçèðóåì âòîðóþ ñòðîêó äëÿ âûâîäà òåêóùèõ êîòèðîâîê:
	for( column = 0; column < currencies_count; column++ )
	{
		for( int row = 0; row < bid_row_count; row++ )
		{
			set_cell_attributes( row + 1, column + 1, InfoLeftShift + currency_x[ column + 1 ] + 3, InfoTopShift + ( row + 1 ) * FontSize * 2, LightCyan, FontSize );
		}
	}
//	Èíèöèàëèçèðóåì ïåðâóþ êîëîíêó äëÿ âûâîäà íàçâàíèé ÒÔ:
	for( int tf_index = 0; tf_index < timeframes_count; tf_index++ )
	{
		set_cell_attributes( tf_index + 1 + bid_row_count, 0, InfoLeftShift + 3, InfoTopShift + 10 + ( tf_index + 1 + bid_row_count ) * FontSize * 2, LightCyan, FontSize );
		set_cell_text( tf_index + 1 + bid_row_count, 0, "%" + timeframes[ tf_index ] + ":", Silver );
	}
//	Èíèöèàëèçèðóåì ïåðâóþ êîëîíêó äëÿ âûâîäà äîïîëíèòåëüíûõ ïîëåé:
	for( int add_index = 0; add_index < bid_row_count; add_index++ )
	{
		set_cell_attributes( add_index + 1, 0, InfoLeftShift + 3, InfoTopShift + ( add_index + 1 ) * FontSize * 2, LightCyan, FontSize );
		set_cell_text( add_index + 1, 0, columns[ add_index ], Silver );
	}
//	Èíèöèàëèçèðóåì ÿ÷åéêè äëÿ âûâîäà èíôîðìàöèè ïî èíñòðóìåíòàì:
	for( tf_index = 0; tf_index < timeframes_count; tf_index++ )
	{
		for( int curr_index = 0; curr_index < currencies_count; curr_index++ )
		{
			set_cell_attributes( tf_index + 1 + bid_row_count, curr_index + 1, InfoLeftShift + currency_x[ curr_index + 1 ], InfoTopShift + 10 + ( tf_index + 1 + bid_row_count ) * FontSize * 2, LightCyan, FontSize );
		}
	}
}
//---------------------------------------------------------------------
//	Ïîëó÷åíèå öâåòà â çàâèñèìîñòè îò íàçâàíèÿ èíñòðóìåíòà:
//---------------------------------------------------------------------
color
get_currency_color( string _currency )
{
	int		i;
	for( i = 0; i < currencies_count; i++ )
	{
		if( StringFind( currencies[ i ], _currency ) != -1 )
		{
			if( StringFind( _currency, "GOLD" ) != -1 )
				return( Gold );
			else if( StringFind( _currency, "JPY" ) != -1 )
				return( NavajoWhite );
			else if( StringFind( _currency, "EUR" ) != -1 )
				return( DeepSkyBlue );
			else if( StringFind( _currency, "GBP" ) != -1 )
				return( DeepSkyBlue );
			else if( StringFind( _currency, "QM" ) != -1 )
				return( Brown );
			else if( StringFind( _currency, "ES" ) != -1 )
				return( LightSalmon );
			else if( StringFind( _currency, "NQ" ) != -1 )
				return( LightSalmon );
			else if( StringFind( _currency, "CHF" ) != -1 )
				return( SpringGreen );
			else if( StringFind( _currency, "CAD" ) != -1 )
				return( SpringGreen );
			else if( StringFind( _currency, "AUD" ) != -1 )
				return( GreenYellow );
			else if( StringFind( _currency, "NZD" ) != -1 )
				return( GreenYellow );
			return( Silver );
		}
	}
	return( Silver );
}
//---------------------------------------------------------------------
//	Ïðîâåðêà íàïðàâëåíèÿ òðåíäà ïî MACD:
//---------------------------------------------------------------------
//	Âîçâðàùàåò:
//		TREND_UP - òðåíä âåðõ;
//		NO_TREND - òðåíä íåîïðåäåëåí;
//		TREND_DN - òðåíä âíèç;
//---------------------------------------------------------------------
int
get_trend_direction_MACD( string _symbol, int _timeframe, int _fast_ma_period, int _slow_ma_period )
{
	HideTestIndicators( true );
	double	macd_value = iMACD( _symbol, _timeframe, _fast_ma_period, _slow_ma_period, 1, PRICE_CLOSE, MODE_MAIN, 0 );
	HideTestIndicators( false );
	if( NormalizeDouble( macd_value, 4 ) > 0.0001 )
		return( TREND_UP );
	if( NormalizeDouble( macd_value, 4 ) < -0.0001 )
		return( TREND_DN );
	return( NO_TREND );
}
//---------------------------------------------------------------------
//	Ïðîâåðêà íàïðàâëåíèÿ òðåíäà ïî RSI:
//---------------------------------------------------------------------
//	Âîçâðàùàåò:
//		TREND_UP - òðåíä âåðõ;
//		NO_TREND - òðåíä íåîïðåäåëåí;
//		TREND_DN - òðåíä âíèç;
//---------------------------------------------------------------------
int
get_trend_direction_RSI( string _symbol, int _timeframe, int _period )
{
	HideTestIndicators( true );
	double	macd_value = iRSI( _symbol, _timeframe, _period, PRICE_CLOSE, 0 );
	HideTestIndicators( false );
	if( NormalizeDouble( macd_value, 4 ) > 50.0 )
		return( TREND_UP );
	if( NormalizeDouble( macd_value, 4 ) < 50.0 )
		return( TREND_DN );
	return( NO_TREND );
}
//---------------------------------------------------------------------
//	Ïðîâåðêà íàïðàâëåíèÿ òðåíäà ïî EMA8 è SMA89 (ðûíî÷íûé ðèòì):
//---------------------------------------------------------------------
//	Âîçâðàùàåò:
//		TREND_UP - òðåíä âåðõ;
//		NO_TREND - òðåíä íåîïðåäåëåí;
//		TREND_DN - òðåíä âíèç;
//---------------------------------------------------------------------
int
get_trend_direction_MarketRithm( string _symbol, int _timeframe, int _fast_ma_period, int _slow_ma_period )
{
	int		market_rithm = 0;
	HideTestIndicators( true );
	double	price_value = NormalizeDouble( iClose( _symbol, _timeframe, 1 ), Digits );
	double	fast_ma_value = NormalizeDouble( iMA( _symbol, _timeframe, _fast_ma_period, 0, MODE_EMA, PRICE_CLOSE, 1 ), Digits );
	double	slow_ma_value = NormalizeDouble( iMA( _symbol, _timeframe, _slow_ma_period, 0, MODE_SMA, PRICE_CLOSE, 1 ), Digits );
	HideTestIndicators( false );
	if( price_value > slow_ma_value )
	{
		market_rithm++;
	}
	
	if( fast_ma_value > fast_ma_value )
	{
		market_rithm++;
	}
	
	if( price_value < slow_ma_value )
	{
		market_rithm--;
	}
	
	if( fast_ma_value < fast_ma_value )
	{
		market_rithm--;
	}
	
	if( market_rithm >= 1 )
		return( TREND_UP );
	if( market_rithm <= -1 )
		return( TREND_DN );
	return( NO_TREND );
}
//---------------------------------------------------------------------
//	Ïðîâåðêà íàïðàâëåíèÿ òðåíäà:
//---------------------------------------------------------------------
//	Âîçâðàùàåò:
//		TREND_UP - òðåíä âåðõ;
//		NO_TREND - òðåíä íåîïðåäåëåí;
//		TREND_DN - òðåíä âíèç;
//---------------------------------------------------------------------
int
TrendDetector( int _mode, string _symbol, int _timeframe, int _fast_ma_period, int _slow_ma_period )
{
	int		trend_direction = NO_TREND;
	switch( _mode )
	{
		case		0:																	//  0 - ïî MACD
			trend_direction = get_trend_direction_MACD( _symbol, _timeframe, _fast_ma_period, _slow_ma_period );
			break;
		case		1:																	//  1 - ïî ìóâèíãó è òåêóùåìó áàðó ( ïî çàêðûòèþ )
			break;
		case		2:																	//  2 - ïî äâóì ìóâèíãàì
			trend_direction = get_trend_direction_MarketRithm( _symbol, _timeframe, _fast_ma_period, _slow_ma_period );
			break;
		case		3:																	//  3 - ïî WPR
			break;
		case		4:																	//  4 - ïî RSI(14)
			trend_direction = get_trend_direction_RSI( _symbol, _timeframe, 14 );
			break;
		default:
			break;
	}
	return( trend_direction );
}
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 10.10.2008                                                     |
//|  Îïèñàíèå : Ïåðåíîñ âåùåñòâåííûõ ÷èñåë èç ñòðîêè â ìàññèâ                  |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    st - ñòðîêà âåùåñòâåííûõ ÷èñåë ÷åðåç òî÷êó ñ çàïÿòîé                    |
//|    ad - ìàññèâ âåùåñòâåííûõ ÷èñåë                                          |
//+----------------------------------------------------------------------------+
//|  Âîçâðàò:                                                                  |
//|    Êîëè÷åñòâî ýëåìåíòîâ â ìàññèâå                                          |
//+----------------------------------------------------------------------------+
int
StringToArrayString( string st, string &ad[ ], string _delimiter = ";" )
{
  int    i=0, np;
  string stp;
  ArrayResize(ad, 0);
  while (StringLen(st)>0)
  {
    np = StringFind( st, _delimiter );
    if (np<0) {
      stp=st;
      st="";
    } else {
      stp=StringSubstr(st, 0, np);
      st=StringSubstr(st, np+1);
    }
    i++;
    ArrayResize( ad, i );
    ad[ i - 1 ] = StringTrimLeft( stp );
  }
	return( ArraySize( ad ));
}
//---------------------------------------------------------------------
//	Ïîëó÷åíèå öâåòà â çàâèñèìîñòè îò çíàêà ÷èñëà:
//---------------------------------------------------------------------
color
get_number_color( double _precision, double _number, color _plus, color _minus, color _null )
{
	if( _number > _precision )
	{
		return( _plus );
	}
	if( _number < ( -_precision ))
	{
		return( _minus );
	}
	return( _null );
}
             
            
            
            
Comments