Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вывод фракталов я сделал так:
#property copyright ""
#property link ""
#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;
extern double width=0.05;
///////////////////////////////////////////////////////////
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;
ObjectsDeleteAll();
int nRight = (prmLength-1)/2;
int prevTop = nMax+prmLength; //количество бар перед верхним фракталом
int prevBot = nMax+prmLength; //количество бар перед нижним фракталом
int nOffset = prmLength/2;
if (prmLength%2 == 0)
nOffset--;
int shift=iTime(NULL,0,prmBars);
string t=TimeToStr(shift,TIME_DATE|TIME_SECONDS);
Print("shift of bar with open time ",t," is ",shift);
///////////////////////////////////////////////////////
for (int k = nMax-prmLength/2; nRight <= k; k--) {
if (nOffset < prevTop-k && true == GetTopFrac(k, prmLength)) {
MarkNord[k] = High[k]; //EMPTY_VALUE
// Print("MarkNord[k]: ",MarkNord[k]);
prevTop = k;
//
}
//Print("High[k]: ",High[k]);
if (nOffset < prevBot-k && true == GetBotFrac(k, prmLength)) {
MarkZuid[k] = Low[k];
// Print("MarkZuid[k]: ",MarkZuid[k]);
prevBot = k;
// Print("prevBot: ",prevBot);
}
//Print("Low[k]: ",Low[k]);
}
/* bool test = true;
if (MarkNord[0] == EMPTY_VALUE) test = false;
Print("prevTop: ", test, " ", DoubleToStr(MarkNord[0],4));*/
}
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);
}
//=========================================================
Т.е. программным образом выделить среди всех фракталов самые популярные зоны (как на рисунке, т.е. зоны с наибольшим скоплением фракталов), нарисовать их и подсчитать количество таких фракталов в каждой зоне, которые отклоняются от заданной тенденции конкретной зоны.
нужен технический индикатор, если можете сделать, отзовитесь, пожалуйста 3veriek@mail.ru