Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пополняй свой счет с помощью банковских карт через Gate2Shop
3veriek
27
3veriek 2010.10.21 09:16 

Вывод фракталов

#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);
}
//=========================================================

Необходимо на отдельном временном промежутке, который я задаю как количество бар prmBars, найти зоны с наибольшим скоплением фракталов и посмотреть находятся ли они в районе "красивых" чисел.

На рисунке представлены примерно 3 "популярные" зоны в которых может встретиться фракталов больше, чем в остальных. Эти зоны можно изменять по ширине и, тогда может измениться их расположение и количество, т.к. изменится количество фракталов, которые встречаются в зоне. Так же нужно проверить сосредоточение этих зон в районе "красивых" чисел, т.е. целых. Например верхняя зона очень близка к "красивому" числу 1,5745, а следующая - к числу 1,5430.


Vasiliy Orlov
1175
Vasiliy Orlov 2010.10.21 12:16  

вы хотите, чтобы вам готовый код написали?

3veriek
27
3veriek 2010.10.22 18:41  
vasya_vasya:

вы хотите, чтобы вам готовый код написали?



да, не бесплатно 3veriek@mail.ru
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий