Скачать MetaTrader 5

помогите пожалуйста разобраться с фракталами

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликовал программу в Маркете? Опубликуй ее и в блоге - виджет поможет!
3veriek
27
3veriek 2010.10.20 19:58 

Вывод фракталов я сделал так:

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 Blue

#property indicator_color2 Red

#property indicator_width1 1

#property indicator_width2 1


extern int prmBars = 1000;

extern int prmLength = 5;


///////////////////////////////////////////////////////////

double MarkNord[];

double MarkZuid[];


void init()

{

IndicatorDigits(Digits);


SetIndexStyle (0, DRAW_ARROW); SetIndexArrow(0, 163);

SetIndexBuffer(0, MarkNord);

SetIndexStyle (1, DRAW_ARROW); SetIndexArrow(1, 163);

SetIndexBuffer(1, MarkZuid);


IndicatorShortName("Frct:"+prmLength);

SetIndexLabel(0, "top:"+prmLength);

SetIndexLabel(1, "bot");

}

//=========================================================


void start()

{

int nMax = prmBars; //количество бар

if (nMax < 10 || nMax > Bars)

nMax = Bars;


int nRight = (prmLength-1)/2;

int prevTop = nMax+prmLength; //количество бар перед верхним фракталом

int prevBot = nMax+prmLength; //количество бар перед нижним фракталом

int nOffset = prmLength/2;

if (prmLength%2 == 0)

nOffset--;


///////////////////////////////////////////////////////

for (int k = nMax-prmLength/2; nRight <= k; k--) {


if (nOffset < prevTop-k && true == GetTopFrac(k, prmLength)) {

MarkNord[k] = High[k];

Print("MarkNord[k]: ",MarkNord[k]);

prevTop = k;

Print("prevTop: ",prevTop);

}


if (nOffset < prevBot-k && true == GetBotFrac(k, prmLength)) {

MarkZuid[k] = Low[k];

Print("MarkZuid[k]: ",MarkZuid[k]);

prevBot = k;

Print("prevBot: ",prevBot);

}

}

}

//=========================================================


bool GetTopFrac (int shift, int nLength)

// Bерхние фракталы

{

int j, nVl, nVr;


// Левая часть

for (j = nLength/2; j > 0; j--) {

nVl = 0.5 + High[shift+j ]/Point;

nVr = 0.5 + High[shift+j-1]/Point;

if (nVr >= nVl) {

}

else

return(false);

}


// Правая часть

int nRight = (nLength-1)/2;

for (j = 1; j <= nRight; j++) {

nVl = 0.5 + High[shift-j+1]/Point;

nVr = 0.5 + High[shift-j ]/Point;

if (nVl >= nVr) {

}

else

return(false);

}

return(true);

}

//=========================================================


bool GetBotFrac (int shift, int nLength)

// Нижние фракталы

{

int j, nVl, nVr;


// Левая часть

for (j = nLength/2; j > 0; j--) {

nVl = 0.5 + Low[shift+j ]/Point;

nVr = 0.5 + Low[shift+j-1]/Point;

if (nVr <= nVl) {

}

else

return(false);

}


// Правая часть

int nRight = (nLength-1)/2;

for (j = 1; j <= nRight; j++) {

nVl = 0.5 + Low[shift-j+1]/Point;

nVr = 0.5 + Low[shift-j ]/Point;

if (nVl <= nVr) {

}

else

return(false);

}

return(true);

}

//=========================================================


Т.е. программным образом выделить среди всех фракталов самые популярные зоны (как на рисунке, т.е. зоны с наибольшим скоплением фракталов), нарисовать их и подсчитать количество таких фракталов в каждой зоне, которые отклоняются от заданной тенденции конкретной зоны.


Vasiliy Orlov
1175
Vasiliy Orlov 2010.10.20 20:02  
3veriek:

Т.е. программным образом выделить среди всех фракталов такие поулярные зоны (как на рисунке), нарисовать их и подсчитать кольчество фракталов в каждой такой зоне, которые отклоняются от заданной тенденции конкретной зоны.


поулярные - полярные как на северном полюсе, Это вам не к программистам а к медведям.

Вопрос то в чем вообще?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий