iMAonArray ??? что то я не понимаю:( - страница 2

 
Rosh, посмотри пример:
//+------------------------------------------------------------------+
//|                                                  My_Momentum.mq4 |
//|                                                        komposter |
//|                                             komposterius@mail.ru |
//+------------------------------------------------------------------+
#property copyright "komposter"
#property link      "komposterius@mail.ru"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Red

extern string _Symbol = "0";
extern int TimeFrame = 0;
extern int MomentumPeriod = 7;
extern int Applied_Price = PRICE_MEDIAN;

double buf1[];
double buf2[];

int init()
  {
	if ( _Symbol == "0" ) { _Symbol = Symbol(); }
	if ( TimeFrame == 0 ) { TimeFrame = Period(); }
	string TimeFrame_str;
	switch ( TimeFrame )
	{
		case 1: TimeFrame_str = "M1"; break;
		case 5: TimeFrame_str = "M5"; break;
		case 15: TimeFrame_str = "M15"; break;
		case 30: TimeFrame_str = "M30"; break;
		case 60: TimeFrame_str = "H1"; break;
		case 240: TimeFrame_str = "H4"; break;
		case 1440: TimeFrame_str = "Daily"; break;
		case 10080: TimeFrame_str = "Weekly"; break;
	}
	IndicatorShortName( "My_Momentum (" + MomentumPeriod + ") - " + _Symbol + ", " + TimeFrame_str + "   -   " );
	IndicatorDigits ( MarketInfo( _Symbol, MODE_DIGITS ) );

	SetIndexBuffer( 0 , buf1 );
	SetIndexStyle ( 0 , DRAW_LINE , STYLE_SOLID , 1 );
                SetIndexDrawBegin( 0 , MomentumPeriod );
	SetIndexLabel( 0 , "Momentum");
	SetIndexBuffer( 1 , buf2 );
	SetIndexStyle ( 1 , DRAW_LINE , STYLE_SOLID , 2 );
                SetIndexDrawBegin( 1 , MomentumPeriod+13 );
	SetIndexLabel( 1 , "MA");

	return(0);
}
int start()
{
   if ( Bars <= MomentumPeriod ) { return(0); }
	int counted_bars = IndicatorCounted();
	if ( counted_bars < 0 ) return(-1);
	if ( counted_bars > 0 ) counted_bars -- ;

   int limit = Bars - MomentumPeriod - 1 - 13;
   if ( counted_bars >= MomentumPeriod ) { limit = Bars - counted_bars - 1 - 13; }

	double high[], low[], close[], open[];
	ArrayCopySeries ( high, MODE_HIGH, _Symbol, TimeFrame );
	ArrayCopySeries ( low, MODE_LOW, _Symbol, TimeFrame );
	ArrayCopySeries ( close, MODE_CLOSE, _Symbol, TimeFrame );
	ArrayCopySeries ( open, MODE_OPEN, _Symbol, TimeFrame );
	double _Price1, _Price2;
	
           for ( int i = limit; i >= 0; i -- )
           {
		switch ( Applied_Price )
		{
			case 0: _Price1 = close[i]; _Price2 = close[i + MomentumPeriod]; break;
			case 1: _Price1 = open[i]; _Price2 = open[i + MomentumPeriod]; break; 
			case 2: _Price1 = high[i]; _Price2 = high[i + MomentumPeriod]; break;
			case 3: _Price1 = low[i]; _Price2 = low[i + MomentumPeriod]; break;
			case 4: _Price1 = ( high[i] + low[i] )/2; _Price2 = ( high[i + MomentumPeriod] +
                                                          low[i + MomentumPeriod] )/2; break;
			case 5: _Price1 = ( high[i] + low[i] + close[i] )/3; _Price2 = ( high[i + MomentumPeriod] + 
                                                           low[i + MomentumPeriod] + close[i + MomentumPeriod] )/3; break;
			case 6: _Price1 = ( high[i] + low[i] + close[i] + close[i] )/4;
                                                           _Price2 = ( high[i + MomentumPeriod] + low[i + MomentumPeriod] + 
                                                           close[i + MomentumPeriod] + close[i + MomentumPeriod] )/4; break;
		}
		buf1[i] = _Price1 - _Price2;
		buf2[i] = iMAOnArray ( buf1, Bars - counted_bars, 13, 0, MODE_EMA, i );
	}
	
return(0);
}


строится ЕМА (13) на моментум. Полностью совпадает с настоящей :) т.е. метаквотовской

 
Большое спасибо, komposter. Теперь с массивами у меня, надеюсь, не будет проблем. Один вопрос: объявление массивов
double high[], low[], close[], open[];
внутри цикла насколько корректно? Будет ли это пожирать память или ресурсы процессора. Или это не является объявлением.
Как то не могу уложить в голове. Может мне шаблоны мешают...
 
а какой смысл объявлять внутри цикла?
есстественно, будут жраться ресурсы



зы: посмотрел, оказывается у меня так же =))). Обьявление надо вынести из цикла, оставить только ArrayCopySeries...
 
Во-во ;)
Именно об этом и была речь. Значит я прав. Еще раз спасибо!
 
По поводу 1 примера в этой ветке!
Перепробавл все пришедшие мне в голову варианты! неработает! будьте добры, исправьте пример! я понимаю что там изменить надо совсем немного, но увы незнаю как и что... информации на эту тему тоже не удалось найти. То описание которое есть, можно сказать что его нет... буду очень признателен, и думаю что не только я...
 
to Leonsi

Тупо скопировал твой индикатор, скомпилировал, но МТ4 отказыватеся его вешать. Он его за эксперта принимает.
Expert 'Leonsi' is not custon indicator and will be removed.

Так что , выкладывай полностью, а то неохота самому извращаться, чтобы он заработал. Думал помочь.
Свой вопрос по индикатору я полностью решил с помощью массивов, работает красиво. Всем спасибо.
 
Rosh и komposter, а на кой ArrayCopySeries оставлять в цикле? Зачем они там нужны, что мешает вынести их из цикла? Да и _Price1, _Price2 совсем, по моему, ни к чему там объявлять (в теле цикла я имею ввиду).
 
Согласен, просто я на это не смотрел.
 
LeonSi, правильно Rosh написал - советник у тебя, а не индикатор. Вот выдержка с сайта MQ, раздел "Особенности написания пользовательских индикаторов":

Для того, чтобы программа считалась пользовательским индикатором необходимо наличие одного из двух дефиниций:
#property indicator_chart_window // индикатор рисуется в главном окне графика
или
#property indicator_separate_window // индикатор рисуется в отдельном окне

Да там вообще много интересного написано )))
"Особенности написания Пользовательских Индикаторов"
 
Для того, чтобы программа считалась пользовательским индикатором необходимо наличие одного из двух дефиниций:
#property indicator_chart_window // индикатор рисуется в главном окне графика
или
#property indicator_separate_window // индикатор рисуется в отдельном окне
Спасибо! Все это я читал... я и хочу сделать эксперта, а не индикатор... индикатор у меня есть и он работает но с одним таймфреймом! с ним нет проблем...
а вот как сделать что бы эксперт расчитывал тоже самое что и индикатор у меня не выходит!