Price Data Components
Indicators Used
0
Views
0
Downloads
0
Favorites
CurrencyDeviation-V1b04
//---------------------------------------------------------------------
// Îáçîð ðûíêà.
// Ïîçâîëÿåò â îäíîì ýêðàíå âèäåòü äâèæåíèå äî 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
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---