Автор |
Сообщение |
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Цитата: |
Система ктороая заглядывает в будущее действитеьно никому не нужна, а вот из кода который заглядывает в будущее можно сделать систему которая в будущее не заглядывает. Smile |
Как раз над этим сейчас работаю. Думаю как правильно написать условия, тк есть ощущения что тут не нужно заглядываниеив будущеее и при ручном тестировании я тоже не заглядываю и код следовательно не должен |
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
Kukulkan
Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург
|
Я использую код, созданный на первой странице(спасибо создателям ), для построения зигзага по условию "мах/мин значение показателя на участке образованном пересечением средних". Классно работает, но: иногда свечи, удовлетворяющей условию не существует на участке между пересечениями средних, но код всё равно там что-то находит, внося сумятицу в очень стройную картинку. Что нужно поменять?
Код: |
SetBarsRequired(100000, 100000);
q=100*((C-O)/O);//показатель
HQ=IIf(C>O AND C>Ref(H,-1) AND C<Ref(C,1),q,False);//условия
LQ=IIf(C<O AND C<Ref(L,-1) AND C>Ref(C,1),q,False);//условия
per1=Param("per1",6);
per2=Param("per2",12);
bar1 = Cross( EMA(C,per1), EMA (C,per2)) OR Cross( EMA(C,per2), EMA (C,per1));
Hi = ValueWhen(Bar1, Ref(HighestSince( bar1, HQ),-1),0);
Lo = ValueWhen(Bar1, Ref(LowestSince ( bar1, LQ), -1), 0);
HV=IIf(HQ==Hi,C,False);
LV=IIf(LQ ==Lo ,C,False);
Hilo = IIf(EMA(C,per1) > EMA (C,per2), HV,LV);
x0 = C[1]; x = 0;
y0 = 1; y = 0;
d = 0;
Line = 0;
procedure swingline(x0, x, y0, y)
{
m = (y-y0)/(x-x0);
for(j = x0; j <= x; j++)
{
Line[j] = y0 + (j-x0)*m;
}
}
for(i = 12; i < BarCount; i++)
{
if(C[i] == HiLo[i] AND C[i] != y) {
x0 = x; y0 = y;
x = i; y = C[i];
swingline(x0, x, y0, y);
}
if(i == (BarCount-1))
{
x0 = x; y0 = y;
x = i; y = C[i];
swingline(x0, x, y0, y);
}
}
Plot(EMA(C,per1), "", 11,4096);
Plot(EMA(C,per2), "", 29,4096);
Plot(Line, "", 34,4096);
|
|
_________________ Не ходи за мной, я сам заблудился. |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Не очень понял что не так. Приведи пример, желательно с картинкой. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Kukulkan
Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург
|
на картинке свечи 1 и 2 не соответствуют ВСЕМ условиям кода: следующие за ними свечи по условию должны иметь более высокий close. Т.е. можно ли сделать так, что если на этом участке искомой свечи нет, то и перегиба код бы там не создавал?
Огромное пасибо, разумеется
|
_________________ Не ходи за мной, я сам заблудился. |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Так. Мне теперь вообще не нравиться тот код.
Вот держи другой. Более точный.
Код: |
SetBarsRequired(100000, 100000);
per1 = Param("per1",6);
per2 = Param("per2",12);
UpCross = Cross( EMA(C, per1), EMA(C, per2));
DwCross = Cross(EMA(C, per2), EMA(C, per1));
x0 = C[1]; x = 0;
y0 = 1; y = 0;
Line = 0;
Cr = 0;
procedure swingline(x0, x, y0, y)
{
m = (y-y0)/(x-x0);
for(j = x0; j <= x; j++)
{
Line[j] = y0 + (j-x0)*m;
}
}
for(i = 12; i < BarCount; i++)
{
if(UpCross[i])
{
Cr = 1;
x0 = x; y0 = y;
x = i; y = C[i];
swingline(x0, x, y0, y);
}
else if(DwCross[i])
{
Cr = -1;
x0 = x; y0 = y;
x = i; y = C[i];
swingline(x0, x, y0, y);
}
else if(Cr == 1)
{
if(C[i] >= y)
{
y = C[i];
x = i;
}
swingline(x0, x, y0, y);
}
else if(Cr == -1)
{
if(C[i] <= y)
{
y = C[i];
x = i;
}
swingline(x0, x, y0, y);
}
}
Plot(EMA(C,per1), "", 11,4096);
Plot(EMA(C,per2), "", 29,4096);
Plot(Line, "", 34,4096);
|
Посмотри его и давай замечания. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Kukulkan
Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург
|
Олег, спасибо, буду разбираться.
За что отвечает параметр "Сr"? |
_________________ Не ходи за мной, я сам заблудился. |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Cr это от Cross.
Текущее направление. Типа если короткая выше длинной, то Cr == 1, а если ниже то Cr == -1. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
belin
Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user
|
В бар реплеер график "плющит" иногда, swingline=0 на нескольких барах |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ага. Есть такой косяк. Исправил.
Код: |
SetBarsRequired(100000, 100000);
per1 = Param("per1",6);
per2 = Param("per2",12);
UpCross = Cross( EMA(C, per1), EMA(C, per2));
DwCross = Cross(EMA(C, per2), EMA(C, per1));
x0 = C[1]; x = 0;
y0 = 1; y = 0;
Line = Null;
Cr = 0;
procedure swingline(x0, x, y0, y)
{
m = (y-y0)/(x-x0);
for(j = x0; j <= x; j++)
{
Line[j] = y0 + (j-x0)*m;
}
}
for(i = 12; i < BarCount; i++)
{
if(UpCross[i])
{
Cr = 1;
x0 = x; y0 = y;
x = i; y = C[i];
swingline(x0, x, y0, y);
}
else if(DwCross[i])
{
Cr = -1;
x0 = x; y0 = y;
x = i; y = C[i];
swingline(x0, x, y0, y);
}
else if(Cr == 1)
{
if(C[i] >= y)
{
y = C[i];
x = i;
}
swingline(x0, x, y0, y);
}
else if(Cr == -1)
{
if(C[i] <= y)
{
y = C[i];
x = i;
}
swingline(x0, x, y0, y);
}
}
Plot(EMA(C,per1), "", 11,4096);
Plot(EMA(C,per2), "", 29,4096);
Plot(Line, "", 34,4096);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Kukulkan
Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург
|
Олег, отличная получилась исправленная версия!
Вопрос остался один: почему код игнорирует условие C<Ref(C,1) в строке HVC и условие C>Ref(C,1) в строке LVC? Это не фатально, но хочу понять.
Код: |
SetBarsRequired(100000, 100000);
per1 = Param("per1",6);
per2 = Param("per2",12);
UpCross = Ref(Cross(EMA(C, per1), EMA(C, per2)),-1);
DwCross = Ref(Cross(EMA(C, per2), EMA(C, per1)),-1);
q=100*((C-O)/O);
HVq=HighestSince(UpCross,q,1);
LVq=LowestSince(DwCross,q,1);
HVC=IIf(Ref(H,-1)<C<Ref(C,1) AND q==HVq ,C,False);
LVC=IIf(Ref(L,-1)>C>Ref(C,1) AND q==LVq,C,False);
g=IIf(EMA(C,per1)>EMA(C,per2),HVC,LVC);
x0 = g[1]; x = 0;
y0 = 1; y = 0;
Line = 0;
Cr = 0;
procedure swingline(x0, x, y0, y)
{
m = (y-y0)/(x-x0);
for(j = x0; j <= x; j++)
{
Line[j] = y0 + (j-x0)*m;
}
}
for(i = 12; i < BarCount; i++)
{
if(UpCross[i])
{
Cr = 1;
x0 = x; y0 = y;
x = i; y = C[i];
swingline(x0, x, y0, y);
}
else if(DwCross[i])
{
Cr = -1;
x0 = x; y0 = y;
x = i; y = C[i];
swingline(x0, x, y0, y);
}
else if(i==(BarCount-1))
{
x0=x; y0=y;
x=i;y=C[i];
swingline(x0,x,y0,y);
}
else if(Cr == 1 AND C[i]==g[i])
{
if(C[i] >= y)
{
y = C[i];
x = i;
}
swingline(x0, x, y0, y);
}
else if(Cr == -1 AND C[i]==g[i])
{
if(C[i] <= y)
{
y = C[i];
x = i;
}
swingline(x0, x, y0, y);
}
}
Plot(EMA(C,per1), "", 11,4096);
Plot(EMA(C,per2), "", 29,4096);
Plot(Line, "", 34,4096);
shape=UpCross*shapeHollowSmallUpTriangle +DwCross*shapeHollowSmallDownTriangle;
PlotShapes(shape,IIf(UpCross,30,30),0,Graph1,-54);
|
P.S и ещё один вопрос: можно ли как-то выделить, подписать, раскрасить свечи, в которых происходит перегиб. Shape лучше всего, но его ведь сюда не прикрутишь... |
_________________ Не ходи за мной, я сам заблудился. |
|
Посмотреть профиль Отправить личное сообщение |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
Ref(H,-1)<C<Ref(C,1) - так нельзя писать.
Вот так надо:
Ref(H,-1)<C AND C<Ref(C,1) |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Kukulkan писал(а): |
P.S и ещё один вопрос: можно ли как-то выделить, подписать, раскрасить свечи, в которых происходит перегиб. Shape лучше всего, но его ведь сюда не прикрутишь... |
А что мешает?
Код: |
u = Line < Ref(Line, -1) AND Line < Ref(Line, 1);
D = Line > Ref(Line, -1) AND Line > Ref(Line, 1);
PlotShapes(U * shapeHollowSmallUpTriangle, colorRed, 0, L, -15);
PlotShapes(D * shapeHollowSmallDownTriangle, colorBlue, 0, H, -15);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Kukulkan
Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург
|
Mechanic писал(а): |
Ref(H,-1)<C<Ref(C,1) - так нельзя писать.
Вот так надо:
Ref(H,-1)<C AND C<Ref(C,1) |
писал и так. Всё равно сбоит код в этой части, не берёт его земля.
Т.е. я вижу, что он когда находит свечу, удовлетворяющую всем условиям - он метит её... если нет, то код не исключает участок из проверки, а отмечает свечи, которые соответствуют условию Highestsince/Lowestsince. О! |
_________________ Не ходи за мной, я сам заблудился. |
|
Посмотреть профиль Отправить личное сообщение |
|
Kukulkan
Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург
|
000 писал(а): |
Код: |
u = Line < Ref(Line, -1) AND Line < Ref(Line, 1);
D = Line > Ref(Line, -1) AND Line > Ref(Line, 1);
PlotShapes(U * shapeHollowSmallUpTriangle, colorRed, 0, L, -15);
PlotShapes(D * shapeHollowSmallDownTriangle, colorBlue, 0, H, -15);
|
|
спасибо, очень красиво! прикрутить shape к line я не догадался.
в моём случае, правда, перелом line не всегда означает экстремум.
Надо будет, наверное к этой строке обращаться m = (y-y0)/(x-x0); |
_________________ Не ходи за мной, я сам заблудился. |
|
Посмотреть профиль Отправить личное сообщение |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
Kukulkan писал(а): |
Mechanic писал(а): |
Ref(H,-1)<C<Ref(C,1) - так нельзя писать.
Вот так надо:
Ref(H,-1)<C AND C<Ref(C,1) |
писал и так. Всё равно сбоит код в этой части, не берёт его земля.
Т.е. я вижу, что он когда находит свечу, удовлетворяющую всем условиям - он метит её... если нет, то код не исключает участок из проверки, а отмечает свечи, которые соответствуют условию Highestsince/Lowestsince. О! |
Я не вникал в код, но множественные условия нужно писать только так. Если же написать Ref(H,-1)<C<Ref(C,1), то Ами сперва вычислит первое выражение Ref(H,-1)<C, результат которого, в зависимости от выполнения условия, будет либо 0, либо 1, а потом сравнит этот результат с Ref(C,1). |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|