Автор |
Сообщение |
DMITRY
Зарегистрирован: 18.09.2009
Сообщения: 179
|
Нписал систему, с функциями, все красиво, профит больше 2 лимонов, в общем грааль, крутил, вертел, почти поверил что правда, в общем проглядел в коде ref(r,1), ну хоть немного радости хапнул. Так что на свой вопрос ответ нашол. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
xxxspeed
Зарегистрирован: 11.01.2011
Сообщения: 22
|
Допишите пожалуйста нахождения долгосрочных минимумов и максимумов. Пытался понять, что здесь нужно поменять для сравнивания среднесрочных макс и мин, но чет ниче не получилось.
Код: |
Hm = Hi > 0;
Lm = Lo > 0;
mup = Hm & ValueWhen(Hm, H, 2) < H & ValueWhen(Hm, H, 0) < H;
mdw = Lm & ValueWhen(Lm, L, 2) > L & ValueWhen(Lm, L, 0) > L;
mswing = 1; // принимаем начальное значение 1 (просто так)
mLine = Null;
function mswingline(x0, x, y0, y)
{
m = (y-y0)/(x-x0);
for(j = x0; j <= x; j++)
{
mLine[j] = y0 + (j-x0)*m;
}
return mLine;
}
x = 0;
x0 = 0;
y = 0;
y0 = 0;
mup1 = 0;
for( i = 1; i < BarCount; i++ )
{
if(mswing == 1)
{
if(mup[i]) // проверяем только бары на которых среднесрочн. максимум
{
if(H[i] > mup1) // ищем самый высокий mup (если их несколько подряд)
{
x = i;
y = H[i];
mup1 = H[i]; // запоминаем новое значение mup
mswingline(x0, x, y0, y);
}
}
else if(mdw[i]) // реверс
{
mswing = 0;
mdw1 = L[i]; // запоминаем значение для последующего сравнения и поиска минимального
x0 = x;
y0 = y;
x = i;
y = L[i];
mswingline(x0, x, y0, y); // рисуем новую линию свинга
}
}
else
{
if(mdw[i]) // проверяем только бары на которых среднесрочн. мин.
{
if(L[i] < mdw1)
{
x = i;
y = L[i];
mdw1 = L[i]; // запоминаем новое значение mdw
mswingline(x0, x, y0, y);
}
}
else if(mup[i]) // реверс
{
mswing = 1;
mup1 = H[i]; // запоминаем значение для последующего сравнения и поиска максимального
x0 = x;
y0 = y;
x = i;
y = H[i];
mswingline(x0, x, y0, y); // рисуем новую линию свинга
}
}
}
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А как определяются долгосрочные минимумы и максимумы? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
xxxspeed
Зарегистрирован: 11.01.2011
Сообщения: 22
|
Долгосрочный максимум - это среднесрочный максимум, с более низкими среднесрочными максимумами по обеим сторонам, соответственно долгосрочный минимум - это среднесрочный минимум с более высокими среднесрочными минимумами по обеим сторонам. Не буду копировать весь код по нахождения краткосрочных и среднесрочных макс/мин (ты его написал на 2-ой стр). |
|
|
Посмотреть профиль Отправить личное сообщение |
|
xxxspeed
Зарегистрирован: 11.01.2011
Сообщения: 22
|
точнее
Цитата: |
Добавлено: Пн Апр 07, 2008 11:05 pm |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Mechel
Зарегистрирован: 21.12.2013
Сообщения: 7
Откуда: Москва
|
Скрипт замечательный, но, по моему, есть что доделать до идеала.
На графике газп-240мин отметил на рисунке две проблемы
отрисовки.
Моих текущих познаний хватило, только, чтобы поправить отрисовку внизу.
up = L > Ref(L, -1) & (H >= Ref(H, -1) OR H >= Ref(H, -2));
dw = (L <= Ref(L, -1) OR L <= Ref(L, -2)) & H < Ref(H, -1);
Но теперь появился лишний значок низа.
И остается непонятным, как исправить вторую проблему: когда цена резко меняет направление, и скрипт не отрисовывает правильную последовательность движений цены. |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Для начала напиши какой именно код использовал. Тут их целая ветка. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Mechel
Зарегистрирован: 21.12.2013
Сообщения: 7
Откуда: Москва
|
000 писал(а): |
Для начала напиши какой именно код использовал. Тут их целая ветка. |
Вот код, который, я назвал "исходный скрипт" на верхнем рисунке:
Код: |
SetBarsRequired(1000000, 0);
up = L > Ref(L, -1) & H >= Ref(H, -1);
dw = L <= Ref(L, -1) & H < Ref(H, -1);
up = ExRem(up, dw);
dw = ExRem(dw, up);
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);
}
}
}
Hm = Hi > 0;
Lm = Lo > 0;
mup = Hm & ValueWhen(Hm, H, 2) < H & ValueWhen(Hm, H, 0) < H;
mdw = Lm & ValueWhen(Lm, L, 2) > L & ValueWhen(Lm, L, 0) > L;
mswing = 1; // принимаем начальное значение 1 (просто так)
mLine = Null;
function mswingline(x0, x, y0, y)
{
m = (y-y0)/(x-x0);
for(j = x0; j <= x; j++)
{
mLine[j] = y0 + (j-x0)*m;
}
return mLine;
}
x = 0;
x0 = 0;
y = 0;
y0 = 0;
for( i = 1; i < BarCount; i++ )
{
if(mswing == 1)
{
if(mup[i]) // проверяем только бары на которых среднесрочн. максимум
{
if(H[i] > mup[i]) // ищем самый высокий mup (если их несколько подряд)
{
x = i;
y = H[i];
mup1 = H[i]; // запоминаем новое значение mup
mswingline(x0, x, y0, y);
}
}
else if(mdw[i]) // реверс
{
mswingline(x0, x, y0, y); // рисуем новую линию свинга
mswing = 0;
mdw1 = L[i]; // запоминаем значение для последующего сравнения и поиска минимального
x0 = x;
y0 = y;
x = i;
y = L[i];
mswingline(x0, x, y0, y);
}
}
else
{
if(mdw[i]) // проверяем только бары на которых среднесрочн. мин.
{
if(L[i] < mdw1)
{
x = i;
y = L[i];
mdw1 = L[i]; // запоминаем новое значение mdw
mswingline(x0, x, y0, y);
}
}
else if(mup[i]) // реверс
{
mswingline(x0, x, y0, y); // рисуем новую линию свинга
mswing = 1;
mup1 = H[i]; // запоминаем значение для последующего сравнения и поиска максимального
x0 = x;
y0 = y;
x = i;
y = H[i];
mswingline(x0, x, y0, y); // рисуем новую линию свинга
}
}
}
Plot(C, "", colorBlack, styleBar);
PlotShapes((Hi>0)*shapeHollowSmallCircle , colorGreen, 0, H, offset = 5);
PlotShapes((Lo>0)*shapeHollowSmallCircle , colorRed, 0, L, offset = -5);
Plot(mup, "", colorGreen, styleHistogram|styleOwnScale);
Plot(mdw, "", colorRed, styleHistogram|styleOwnScale);
Plot(Line, "", colorBlack);
Plot(mLine, "", colorBlue);
|
|
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
У меня дает другую картинку. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Mechel
Зарегистрирован: 21.12.2013
Сообщения: 7
Откуда: Москва
|
000 писал(а): |
У меня дает другую картинку. |
Возможно, у вас другие настройки. У меня импорт из квика часовых (плагином) , а в настройках ами - "intraday settings" дневная сессия с 8:00 до 20:00. (тогда 4х часовые бары получаются точно как к квике). |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Да. Теперь так.
Однако вопросы остались. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Dmitriy
Зарегистрирован: 22.11.2016
Сообщения: 22
|
Камрады, помогите решить вопрос.
На графике нарисовалась некая свеча (см. рисунок) и теперь нужно дождаться пробития её хая или лоу, т.е нужно будет сравнивать текущую цену не с предыдущей свечой, как в коде, а с заранее запомненной ценой.
По логике нужно запоминать хай и лоу последней свечи и при формировании новой свечи сравнивать её с запомненной ценой, и как только цена будет больше или меньше запомненной свечи, а она может быть и через 50 свечек, перезаписывать значения и в дальнейшем сравнивать уже с ними.
На рисунке синей линией нарисовал, что должно получиться в итоге.
Код: |
SetBarsRequired(1000000, 0);
up = L > Ref(L, -1) & H >= Ref(H, -1);
dw = L <= Ref(L, -1) & H < Ref(H, -1);
up = ExRem(up, dw);
dw = ExRem(dw, up);
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);
}
}
}
Hm = Hi > 0;
Lm = Lo > 0;
mup = Hm & ValueWhen(Hm, H, 2) < H & ValueWhen(Hm, H, 0) < H;
mdw = Lm & ValueWhen(Lm, L, 2) > L & ValueWhen(Lm, L, 0) > L;
mswing = 1; // принимаем начальное значение 1 (просто так)
mLine = Null;
function mswingline(x0, x, y0, y)
{
m = (y-y0)/(x-x0);
for(j = x0; j <= x; j++)
{
mLine[j] = y0 + (j-x0)*m;
}
return mLine;
}
x = 0;
x0 = 0;
y = 0;
y0 = 0;
for( i = 1; i < BarCount; i++ )
{
if(mswing == 1)
{
if(mup[i]) // проверяем только бары на которых среднесрочн. максимум
{
if(H[i] > mup[i]) // ищем самый высокий mup (если их несколько подряд)
{
x = i;
y = H[i];
mup1 = H[i]; // запоминаем новое значение mup
mswingline(x0, x, y0, y);
}
}
else if(mdw[i]) // реверс
{
mswingline(x0, x, y0, y); // рисуем новую линию свинга
mswing = 0;
mdw1 = L[i]; // запоминаем значение для последующего сравнения и поиска минимального
x0 = x;
y0 = y;
x = i;
y = L[i];
mswingline(x0, x, y0, y);
}
}
else
{
if(mdw[i]) // проверяем только бары на которых среднесрочн. мин.
{
if(L[i] < mdw1)
{
x = i;
y = L[i];
mdw1 = L[i]; // запоминаем новое значение mdw
mswingline(x0, x, y0, y);
}
}
else if(mup[i]) // реверс
{
mswingline(x0, x, y0, y); // рисуем новую линию свинга
mswing = 1;
mup1 = H[i]; // запоминаем значение для последующего сравнения и поиска максимального
x0 = x;
y0 = y;
x = i;
y = H[i];
mswingline(x0, x, y0, y); // рисуем новую линию свинга
}
}
}
Plot(C, "", colorBlack, styleBar);
PlotShapes((Hi>0)*shapeHollowSmallCircle , colorGreen, 0, H, offset = 5);
PlotShapes((Lo>0)*shapeHollowSmallCircle , colorRed, 0, L, offset = -5);
Plot(mup, "", colorGreen, styleHistogram|styleOwnScale);
Plot(mdw, "", colorRed, styleHistogram|styleOwnScale);
Plot(Line, "", colorBlack);
Plot(mLine, "", colorBlue);
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вопрос.
Нарисовалась свечка.
Запомнили ее канал. Дождались пробития нижней границы. Перерисовываем нижнюю границу ниже. А тчо происходит с верхней границей? Остается старой?
Тогда имеем просто расширяющийся канал.
highest(H) и lowest(L)... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Dmitriy
Зарегистрирован: 22.11.2016
Сообщения: 22
|
000 писал(а): |
Вопрос.
Нарисовалась свечка.
Запомнили ее канал. Дождались пробития нижней границы. Перерисовываем нижнюю границу ниже. А тчо происходит с верхней границей? Остается старой?
Тогда имеем просто расширяющийся канал.
highest(H) и lowest(L)... |
Как только пробита любая граница, то старые, запомненные значения, переписываются новыми H и L.
Если по примеру, то сразу после пробития нижней границы, H и L перезаписываются на значения красной свечки (выделенная овалом). |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Например типа так.
Код: |
MyCandle = .....;
Begin = 0;
for(i = 0; i < BarCount; i++)
{
if(Begin == 0)
{
if(i == 1)
{
Begin = 1;
Hi[i] = H[i];
Lo[i] = L[i];
}
}
else
{
if(L[i] < Lo[i-1] OR H[i] > Hi[i-1])
{
Hi[i] = H[i];
Lo[i] = L[i];
}
else
{
Hi[i] = Hi[i-1];
Lo[i] = Lo[i-1];
}
}
}
Plot(C, "", colorBlack, styleCandle);
Plot(Hi, "hi", colorGreen);
Plot(Lo, "lo", colorRed);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|