Автор |
Сообщение |
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Прикладываю код индикатора, который определяет экстремумы по правилам
up = L > Ref(L, -1) & H >= Ref(H, -1);
dw = L <= Ref(L, -1) & H < Ref(H, -1);
Я пытаюсь поменять принцип определения, сделав его следующим, когда быстрая скользящая выше медленной мы выбираем максимально закрытие - и это будет UP, и наоборот на промежутке когда медленная ск.ср. выше быстрой, мы ищем минимальное закрытие - это будет ВЦ
в коде (почти в самом верху, я пытался написать этот алгоритм, но тщетно)
Код: |
SetBarsRequired(1000000, 0);
/*
barN = 0;
//нужно замонить первый бар
for( i = 1; i < BarCount; i++ )
{
bar1= ValueWhen( EMA(C,10) > EMA (C,15),1);
//запоминаем номер бара, на котором скользящие пересеклись
bar2= ValueWhen( EMA(C,10) < EMA (C,15),1);
//barssince(
//когда скользящие обратно пересеклись, запоминаем номер второго бара, на котором это произошло EMA(C,10) < EMA (C,15)
per = bar2-bar1
далее вычитаем второй номер из первого и получаем за сколько периодов нужно искать эстреммум
ищем экстреммум up = HHV(C, per);
}
*/
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);
}
}
}
Plot(C, "", colorBlack, styleBar);
Plot(Line, "", colorBlue, styleLine); |
|
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
bar1 = Cross( EMA(C,10), EMA (C,15)) OR Cross( EMA(C,15), EMA (C,10)); //Точки пересечения
Hi = HighestSince( bar1, C );
Lo = LowestSince( bar1, C );
Hilo = IIf(EMA(C,10) > EMA (C,15), Hi, Lo);
Plot(C, "", colorBlack, styleCandle);
Plot(EMA(C,10), "", colorGreen);
Plot(EMA(C,15), "", colorRed);
Plot(HiLo, "", colorBlue);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Интересно получилось. А как сделать так, чтобы построить своеобразный зиг-заг: на промежутке когда MA10 ниже МА15 бралось только 1 минимальное закрытие, затем линия ждала следующей точки на промежутке когда MA10 выше МА15 - тогда бралось максимальное закрытие. Но вторая точка строилась только после того, как MA10 снова опустилась ниже МА15, те когда восходящий этап закончен. Я так понимаю тут нужен цикл какой-то?
Потом хочу протестировать эту систему на основе покупки/продажи двойных донышек и двойных вершин. |
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Как то так
Код: |
SetBarsRequired(100000, 100000);
bar1 = Cross( EMA(C,10), EMA (C,15)) OR Cross( EMA(C,15), EMA (C,10)); //Точки пересечения
Hi = ValueWhen(Bar1, Ref(HighestSince( bar1, C ), -1), 0);
Lo = ValueWhen(Bar1, Ref(LowestSince ( bar1, C ), -1), 0);
Hilo = IIf(EMA(C,10) > EMA (C,15), Hi, Lo);
x0 = C[1];
x = 0;
y0 = 1;
y = 0;
Line = 0;
d = 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 = 15; i < BarCount; i++)
{
if(C[i] == HiLo[i] AND C[i] != x) {
x0 = x;
y0 = y;
x = i;
y = C[i];
swingline(x0, x, y0, y);
}
}
Plot(C, "", colorBlack, styleCandle);
Plot(EMA(C,10), "", colorGreen);
Plot(EMA(C,15), "", colorRed);
Plot(Line, "", colorBlue);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Олег, спасибо. Как всегда просто супер!
я немного подправил - добавил AND C[i] != y чтобы при двух одинаковых экстр. не строилась горизонтальная линия.
1 Но вот как сделать так чтобы конец строился всегда по клоузу последнего бара, у меня не получилось, если ставить line=C он строит по всем клоузам??
2 В какой раздел нужно писать строки, чтобы правильно покупать двойное дно и продавать двойную вершины
Buy = C > Hi; //верно?
Sell = C < Lo;
Cover= Buy ;
Short = Sell;
Код: |
SetBarsRequired(100000, 100000);
bar1 = Cross( EMA(C,10), EMA (C,15)) OR Cross( EMA(C,15), EMA (C,10)); //Точки пересечения
Hi = ValueWhen(Bar1, Ref(HighestSince( bar1, C), -1), 0);
Lo = ValueWhen(Bar1, Ref(LowestSince ( bar1, C ), -1), 0);
Hilo = IIf(EMA(C,10) > EMA (C,15), Hi, Lo);
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 = 15; i < BarCount; i++)
{
if(C[i] == HiLo[i] AND C[i] != x AND C[i] != y ) {
x0 = x; y0 = y;
x = i; y = C[i];
swingline(x0, x, y0, y);
}
}
Buy = C > Hi;
Sell = C < Lo;
Cover= Buy ;
Short = Sell;
Plot(C, "", colorBlack, styleCandle);
Plot(EMA(C,10), "", colorGreen);
Plot(EMA(C,15), "", colorRed);
Plot(Line, "", colorBlue);
|
|
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
1 Но вот как сделать так чтобы конец строился всегда по клоузу последнего бара, у меня не получилось, если ставить line=C он строит по всем клоузам??
|
Блин. Но на картинке к первому посту у тебя нет лини к последнему клозе. Поэтому и не сделал. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
SetBarsRequired(100000, 100000);
bar1 = Cross( EMA(C,10), EMA (C,15)) OR Cross( EMA(C,15), EMA (C,10)); //Точки пересечения
Hi = ValueWhen(Bar1, Ref(HighestSince( bar1, C), -1), 0);
Lo = ValueWhen(Bar1, Ref(LowestSince ( bar1, C ), -1), 0);
Hilo = IIf(EMA(C,10) > EMA (C,15), Hi, Lo);
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 = 15; 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);
}
}
Buy = C > Hi;
Sell = C < Lo;
Cover= Buy ;
Short = Sell;
Plot(C, "", colorBlack, styleCandle);
Plot(EMA(C,10), "", colorGreen);
Plot(EMA(C,15), "", colorRed);
Plot(Line, "", colorBlue);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Олег , спасибо.
Подскажи еще два глупых вопроса:
1 как теперь обращаться к вершинам? Мой код который с Buy и Sell ( Buy = C > Hi; Sell = C < Lo; ) не годится. Например хочу тупо покупать, когда превышается предыдущая вершина...
2 Как указать чтобы линия строилась по Hi/Lo, который был между последним экстреммумом (а не предпоследним пересечением как сейчас) и текущим пересечением (пример на рисунке)
вроде догадываюсь, что надо писать LowestSince ( Ref(HiLo,-1) , C ) но куда.. |
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Т.е. надо не по Close а по High - Low ? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Олег, нужно по закрытию. Просто смотри на рисунке после последнего найденного минумума был максимум, который выше того, который случился после того как МА пересеклись на рост. |
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А ничего, что этот максимум был в тот момент когда короткая МА была ниже длинной?
В тот момент мы соответственно искали минимум. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
000 писал(а): |
А ничего, что этот максимум был в тот момент когда короткая МА была ниже длинной?
В тот момент мы соответственно искали минимум. |
да, именно так. посмотри на рисунок. смысл всей этой шткуки нарисовать зиг -заг, но основанный на скользящих, в котором нет параметров % или других, который будет зависеть от тренда
а на рисунке показано что зигзаг строится не по максимальному закрытию, что не совсем правильно. вот чего хочется достичь |
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Как только я пойму, что надо так дело может сдвинется с мертвой точки.
Ты сказал
"когда короткая МА ниже длинной берем минимальное закрытие, когда короткая МА выше длинной берем максимальное"
Теперь резко передумал и хочешь взять максимальное когда короткая МА ниже длинной.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Олег, просто с самого начала я не хотел вводить усложнений, думал потом это можно будет легко добавить. А объяснить достаточно сложно. Сейчас постараюсь
предположим сейчас начинается график, МА_быстрая выше МА_медленной (рост) мы ждем..пока они не пересекутся обратно (на падение). когда пересеклись, мы можем определить предварительный максимум. тут все понятно. начали падать.. допадали. скользящие пересеклись на рост. теперь мы можем определить 2 вещи
1. подтвердить или получить новый максимум (который мог превысить предварительный на промежутке, когда скользящие были настроены на падение.
2. получить предварительный минимум, который находится на промежутке между подтвержденным максимумом и последним пересечением скользящих
(предварительный минимум может потом подтвердиться, или стать еще меньше, аналогично п.1)
постарался описать подробно.. |
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Блин. Боюсь, что так на самом деле вообще не получится.
Например. Мы имеем два минимума и ищем между ними максимум. Но эти минимумы тоже не факт, что правильные. Т.е. надо искать минимальный минимум между максимумами.... В общем бардак. Я не знаю как сделать. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|