Автор |
Сообщение |
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вон как. Хм. Подумаю как это сделать. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Так?
Код: |
SetBarsRequired(sbrAll, sbrAll);
LMin = 0;
LMax = 0;
lo1 = lo2 = Hi1 = Hi2 = 0;
bar2L = bar2H = 0;
jL = jH = 0;
lo1 = L[0];
hi1 = H[0];
for( i = 1; i<BarCount; i++ )
{
if( bar2L == 0 )
{
if( L[i] < lo1 )
{
lo2 = L[i];
hi2 = H[i];
bar2L = 1;
jL = i;
}
else
{
lo1 = L[i];
}
}
else if( bar2L )
{
if( L[i] >= lo2 AND H[i] > hi2 )
{
LMin[jL] = 1;
lo1 = L[i];
lo2 = jL = bar2L = 0;
}
else if( L[i] < lo2 )
{
lo1 = lo2;
lo2 = L[i];
hi2 = H[i];
jL = i;
}
}
}
for( i = 1; i<BarCount; i++ )
{
if( bar2H == 0 )
{
if( H[i] > hi1 )
{
hi2 = H[i];
lo2 = L[i];
bar2H = 1;
jH = i;
}
else
{
hi1 = H[i];
}
}
else if( bar2H )
{
if( H[i] <= hi2 AND L[i] < lo2 )
{
LMax[jH] = 1;
hi1 = H[i];
hi2 = jH = bar2H = 0;
}
else if( H[i] > hi2 )
{
hi1 = hi2;
hi2 = H[i];
lo2 = L[i];
jH = i;
}
}
}
Plot(C, "", colorBlack, styleCandle);
PlotShapes(LMax * shapeUpTriangle, colorGreen, 0, H, 12);
PlotShapes(LMin * shapeDownTriangle, colorRed, 0, L, 12);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Dmitriy
Зарегистрирован: 22.11.2016
Сообщения: 22
|
Во блин, красавчик. То, что надо.
Правда есть нюанс: несколько минимумов или максимумов подряд. Причём в 1-м случаи, каждый последующий минимум (треугольник) выше предыдущего, тут реальный минимум - самый первый минимум. А вот 2-м случаи реальный минимум - второй минимум.
Как можно убрать лишнее безобразие? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Я тебя спрашивал как быть в таком случае. Ты сказал, что такого быть не может...
А сейчас мне нет времени возится... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Dmitriy
Зарегистрирован: 22.11.2016
Сообщения: 22
|
000 писал(а): |
Я тебя спрашивал как быть в таком случае. Ты сказал, что такого быть не может...
А сейчас мне нет времени возится... |
Ну в первом варианте их и недолжно быть. А вот второй вариант действительно не предусмотрел. Мой косяк.
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Dmitriy
Зарегистрирован: 22.11.2016
Сообщения: 22
|
А вот и нашлось решение.
Скрестил два твоих кода, свежий и раннее выложенный (с линиями).
Вот что получилось:
Код: |
SetBarsRequired(sbrAll, sbrAll);
LMin = 0;
LMax = 0;
lo1 = lo2 = Hi1 = Hi2 = 0;
bar2L = bar2H = 0;
jL = jH = 0;
lo1 = L[0];
hi1 = H[0];
for( i = 1; i<BarCount; i++ )
{
if( bar2L == 0 )
{
if( L[i] < lo1 )
{
lo2 = L[i];
hi2 = H[i];
bar2L = 1;
jL = i;
}
else
{
lo1 = L[i];
}
}
else if( bar2L )
{
if( L[i] >= lo2 AND H[i] > hi2 )
{
LMin[jL] = 1;
lo1 = L[i];
lo2 = jL = bar2L = 0;
}
else if( L[i] < lo2 )
{
lo1 = lo2;
lo2 = L[i];
hi2 = H[i];
jL = i;
}
}
}
for( i = 1; i<BarCount; i++ )
{
if( bar2H == 0 )
{
if( H[i] > hi1 )
{
hi2 = H[i];
lo2 = L[i];
bar2H = 1;
jH = i;
}
else
{
hi1 = H[i];
}
}
else if( bar2H )
{
if( H[i] <= hi2 AND L[i] < lo2 )
{
LMax[jH] = 1;
hi1 = H[i];
hi2 = jH = bar2H = 0;
}
else if( H[i] > hi2 )
{
hi1 = hi2;
hi2 = H[i];
lo2 = L[i];
jH = i;
}
}
}
SetBarsRequired(1000000, 0);
up = ExRem(LMax, LMin);
dw = ExRem(LMin, LMax);
swing = Flip(up, dw);
x = 0;
x0 = 0;
y = 0;
y0 = 0;
Hi = 0;
Lo = 0;
Line = Null;
function swingline(x0, x, y0, y)
{
m = (y-y0)/(x-x0);
for(j = x0; j <= x; j++)
{
Line[j] = y0 + (j-x0)*m;
}
return Line;
}
for( i = 1; i < BarCount; i++ )
{
if(swing[i] == 1)
{
if(up[i] == 1)
{
Lo[x] = y;
y0 = y;
x0 = x;
y = H[i];
x = i;
swingline(x0, x, y0, y);
}
else if(H[i] > y)
{
y = H[i];
x = i;
swingline(x0, x, y0, y);
}
}
else
{
if(dw[i] == 1)
{
Hi[x] = y;
y0 = y;
x0 = x;
y = L[i];
x = i;
swingline(x0, x, y0, y);
}
else if(L[i] < y)
{
y = L[i];
x = i;
swingline(x0, x, y0, y);
}
}
}
Plot(C, "", colorBlack, styleBar);
Plot(Line, "", colorRed);
PlotShapes(LMax * shapeUpTriangle, colorGreen, 0, H, 12);
PlotShapes(LMin * shapeDownTriangle, colorRed, 0, L, 12);
|
В целом всё рисуется отлично, лишние минимумы и максимумы игнорируются.
Есть косяк, на рисунке. Попробую разобраться. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
bealtrader
Зарегистрирован: 05.05.2014
Сообщения: 40
|
В будущее не заглядывает?
Dmitriy писал(а): |
А вот и нашлось решение.
Скрестил два твоих кода, свежий и раннее выложенный (с линиями).
Вот что получилось:
Код: |
SetBarsRequired(sbrAll, sbrAll);
LMin = 0;
LMax = 0;
lo1 = lo2 = Hi1 = Hi2 = 0;
bar2L = bar2H = 0;
jL = jH = 0;
lo1 = L[0];
hi1 = H[0];
for( i = 1; i<BarCount; i++ )
{
if( bar2L == 0 )
{
if( L[i] < lo1 )
{
lo2 = L[i];
hi2 = H[i];
bar2L = 1;
jL = i;
}
else
{
lo1 = L[i];
}
}
else if( bar2L )
{
if( L[i] >= lo2 AND H[i] > hi2 )
{
LMin[jL] = 1;
lo1 = L[i];
lo2 = jL = bar2L = 0;
}
else if( L[i] < lo2 )
{
lo1 = lo2;
lo2 = L[i];
hi2 = H[i];
jL = i;
}
}
}
for( i = 1; i<BarCount; i++ )
{
if( bar2H == 0 )
{
if( H[i] > hi1 )
{
hi2 = H[i];
lo2 = L[i];
bar2H = 1;
jH = i;
}
else
{
hi1 = H[i];
}
}
else if( bar2H )
{
if( H[i] <= hi2 AND L[i] < lo2 )
{
LMax[jH] = 1;
hi1 = H[i];
hi2 = jH = bar2H = 0;
}
else if( H[i] > hi2 )
{
hi1 = hi2;
hi2 = H[i];
lo2 = L[i];
jH = i;
}
}
}
SetBarsRequired(1000000, 0);
up = ExRem(LMax, LMin);
dw = ExRem(LMin, LMax);
swing = Flip(up, dw);
x = 0;
x0 = 0;
y = 0;
y0 = 0;
Hi = 0;
Lo = 0;
Line = Null;
function swingline(x0, x, y0, y)
{
m = (y-y0)/(x-x0);
for(j = x0; j <= x; j++)
{
Line[j] = y0 + (j-x0)*m;
}
return Line;
}
for( i = 1; i < BarCount; i++ )
{
if(swing[i] == 1)
{
if(up[i] == 1)
{
Lo[x] = y;
y0 = y;
x0 = x;
y = H[i];
x = i;
swingline(x0, x, y0, y);
}
else if(H[i] > y)
{
y = H[i];
x = i;
swingline(x0, x, y0, y);
}
}
else
{
if(dw[i] == 1)
{
Hi[x] = y;
y0 = y;
x0 = x;
y = L[i];
x = i;
swingline(x0, x, y0, y);
}
else if(L[i] < y)
{
y = L[i];
x = i;
swingline(x0, x, y0, y);
}
}
}
Plot(C, "", colorBlack, styleBar);
Plot(Line, "", colorRed);
PlotShapes(LMax * shapeUpTriangle, colorGreen, 0, H, 12);
PlotShapes(LMin * shapeDownTriangle, colorRed, 0, L, 12);
|
В целом всё рисуется отлично, лишние минимумы и максимумы игнорируются.
Есть косяк, на рисунке. Попробую разобраться. |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
MrDzenLi
Зарегистрирован: 20.04.2015
Сообщения: 383
Откуда: VRN
|
bealtrader писал(а): |
В будущее не заглядывает? |
Заглядывает, одним глазом |
_________________ Нам не дано знать всего. |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number |
|
Dmitriy
Зарегистрирован: 22.11.2016
Сообщения: 22
|
Олег, график при прокрутке сильно тормозит. Видимо слишком много данных для расчета. Подскажи, пожалуйста, как задать в цикле начальную и конечную дату расчета? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Просто убери
Код: |
SetBarsRequired(sbrAll, sbrAll); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Dmitriy
Зарегистрирован: 22.11.2016
Сообщения: 22
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|