RE Slawa - ответ на зигзаг :)

 
Если еще не ушел в отпуск - есть продолжение :))
 
я в отпуске.
 
Rosh, если у тебя нет нормального зигзага, могу поделиться. Скажи, куда кидать :)
 
Кинь в личку на Альпари или ФорексСистемз. Зигзаг у меня есть, но и твой посмотрю с удовольствием. :) Заранее спасибо - если бросишь, если не бросишь - не обижусь.
 
Послал... по-моему... :)
 
Quark, Вы можете и с нами поделиться. в своё время мы обещади внести зигзаг в число стандартных индикаторов. теперь постепенно собираем информацию о правильном зигзаге
 

Quark, Вы можете и с нами поделиться. в своё время мы обещади внести зигзаг в число стандартных индикаторов. теперь постепенно собираем информацию о правильном зигзаге


Сторгуемся :) Ускоренную навигацию по окнам с указанием того, какие там эксперты (Window - More Windows) сделаете?



Сейчас, архив найду.
 
#property copyright "Copyright Quark"
#property link      ""

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red

// indicator parameters
extern int nMinMaxPoints = 25;

// indicator buffers
double arrExtMapBuffer[];

int nExtCountedBars = 0;
int nLastMinMaxBar = 0;
int nLastMinMaxType = 0;
double dLastMin, dLastMax;

////////////////////////
int init()
{
	string strIndicatorShortName;

	// drawing settings
	SetIndexStyle(0, DRAW_SECTION);
	SetIndexShift(0, 0);
	SetIndexEmptyValue(0,0.0);
		
	IndicatorDigits(4);
		
	strIndicatorShortName = "Zigzag(" + nMinMaxPoints + ")";  
	IndicatorShortName(strIndicatorShortName);

	// indicator buffers mapping
	SetIndexBuffer(0, arrExtMapBuffer);

	dLastMin = Low[Bars - 1];
	dLastMax = High[Bars - 1];
		
	return(0);
}
///////////////////////////
int start()
{
	nExtCountedBars = IndicatorCounted();
	if(nExtCountedBars < 0) 
		return(-1);

	// last counted bar will be recounted
	if(nExtCountedBars > 0) 
		nExtCountedBars--;
		
	Zigzag();  

	return(0);
}
///////////////////
void Zigzag()
{
	int nPos = Bars - nExtCountedBars;
	nPos = MathMax(nLastMinMaxBar, nPos);

	dLastMin = Low[nPos];
	dLastMax = High[nPos];

	while(nPos >= 0)
	{
		arrExtMapBuffer[nPos] = 0.0;
		
		if(nLastMinMaxType != 1)	// Expecting maximum
		{
			if(dLastMax <= High[nPos])
			{
				dLastMax = High[nPos];
				nLastMinMaxBar = nPos;
			}
			else if(Low[nPos] < dLastMax - nMinMaxPoints * Point)	// Maximum found
			{
				arrExtMapBuffer[nLastMinMaxBar] = High[nLastMinMaxBar];
				nLastMinMaxType = 1;
				dLastMin = Low[nPos];
				nLastMinMaxBar = nPos;
			}
		}
		else if(nLastMinMaxType != -1)	// Expecting minimum
		{
			if(dLastMin >= Low[nPos])
			{
				dLastMin = Low[nPos];
				nLastMinMaxBar = nPos;
			}
			else if(High[nPos] > dLastMin + nMinMaxPoints * Point)	// Maximum found
			{
				arrExtMapBuffer[nLastMinMaxBar] = Low[nLastMinMaxBar];
				nLastMinMaxType = -1;
				dLastMax = High[nPos];
				nLastMinMaxBar = nPos;
			}
		}

		nPos--;
	}
}
///////////////////

 
Фы... Это _не_правильный зигзаг ! Он пропускает хаи или лои иногда.
Вобщем в штат его брать нельзя.
Сорри Quark :) без обид.
 
Это мое видение зигзага :) Если хаи и лои ему не соответствуют - тем хуже для них. Впрочем, возможно, они были слишком близки к последнему экстремуму - там логика такая, что ловит прайс мув больше заданного.
 
Это мое видение зигзага :) Если хаи и лои ему не соответствуют - тем хуже для них. Впрочем, возможно, они были слишком близки к последнему экстремуму - там логика такая, что ловит прайс мув больше заданного.

В том то и дело что такой реализации зигзага уже наверное лет 10 и все всегда показывают пальцем на пропущенные хаилои а какойнить вумный перец говорит что типа так и нуна :)
Причина обращения: