Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Модификация индикатора минимумов-максимумв с фильтром тренда Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
Амиброкеровец



Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия

СообщениеДобавлено: Сб Ноя 21, 2009 4:36 pm Ответить с цитатой Вернуться к началу

Прикладываю код индикатора, который определяет экстремумы по правилам
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

СообщениеДобавлено: Сб Ноя 21, 2009 10:30 pm Ответить с цитатой Вернуться к началу

Код:

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
Откуда: Воображляндия

СообщениеДобавлено: Вс Ноя 22, 2009 11:08 am Ответить с цитатой Вернуться к началу

Интересно получилось. А как сделать так, чтобы построить своеобразный зиг-заг: на промежутке когда MA10 ниже МА15 бралось только 1 минимальное закрытие, затем линия ждала следующей точки на промежутке когда MA10 выше МА15 - тогда бралось максимальное закрытие. Но вторая точка строилась только после того, как MA10 снова опустилась ниже МА15, те когда восходящий этап закончен. Я так понимаю тут нужен цикл какой-то?

Потом хочу протестировать эту систему на основе покупки/продажи двойных донышек и двойных вершин.

_________________
Антон
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вс Ноя 22, 2009 10:52 pm Ответить с цитатой Вернуться к началу

Как то так
Код:

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
Откуда: Воображляндия

СообщениеДобавлено: Пн Ноя 23, 2009 9:16 pm Ответить с цитатой Вернуться к началу

Олег, спасибо. Как всегда просто супер!
я немного подправил - добавил 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

СообщениеДобавлено: Пн Ноя 23, 2009 11:24 pm Ответить с цитатой Вернуться к началу

Цитата:

1 Но вот как сделать так чтобы конец строился всегда по клоузу последнего бара, у меня не получилось, если ставить line=C он строит по всем клоузам??

Блин. Но на картинке к первому посту у тебя нет лини к последнему клозе. Поэтому и не сделал.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Ноя 23, 2009 11:51 pm Ответить с цитатой Вернуться к началу

Код:

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
Откуда: Воображляндия

СообщениеДобавлено: Ср Ноя 25, 2009 9:14 pm Ответить с цитатой Вернуться к началу

Олег , спасибо.
Подскажи еще два глупых вопроса:

1 как теперь обращаться к вершинам? Мой код который с Buy и Sell ( Buy = C > Hi; Sell = C < Lo; ) не годится. Например хочу тупо покупать, когда превышается предыдущая вершина...
2 Как указать чтобы линия строилась по Hi/Lo, который был между последним экстреммумом (а не предпоследним пересечением как сейчас) и текущим пересечением (пример на рисунке)
вроде догадываюсь, что надо писать LowestSince ( Ref(HiLo,-1) , C ) но куда..

_________________
Антон
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Ноя 26, 2009 1:58 am Ответить с цитатой Вернуться к началу

Т.е. надо не по Close а по High - Low ?

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Амиброкеровец



Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия

СообщениеДобавлено: Чт Ноя 26, 2009 9:54 am Ответить с цитатой Вернуться к началу

Олег, нужно по закрытию. Просто смотри на рисунке после последнего найденного минумума был максимум, который выше того, который случился после того как МА пересеклись на рост.

_________________
Антон
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Ноя 26, 2009 10:15 am Ответить с цитатой Вернуться к началу

А ничего, что этот максимум был в тот момент когда короткая МА была ниже длинной?
В тот момент мы соответственно искали минимум.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Амиброкеровец



Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия

СообщениеДобавлено: Чт Ноя 26, 2009 11:12 am Ответить с цитатой Вернуться к началу

000 писал(а):
А ничего, что этот максимум был в тот момент когда короткая МА была ниже длинной?
В тот момент мы соответственно искали минимум.

да, именно так. посмотри на рисунок. смысл всей этой шткуки нарисовать зиг -заг, но основанный на скользящих, в котором нет параметров % или других, который будет зависеть от тренда

а на рисунке показано что зигзаг строится не по максимальному закрытию, что не совсем правильно. вот чего хочется достичь Smile

_________________
Антон
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Ноя 26, 2009 11:21 am Ответить с цитатой Вернуться к началу

Как только я пойму, что надо так дело может сдвинется с мертвой точки.
Ты сказал
"когда короткая МА ниже длинной берем минимальное закрытие, когда короткая МА выше длинной берем максимальное"
Теперь резко передумал и хочешь взять максимальное когда короткая МА ниже длинной....

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Амиброкеровец



Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия

СообщениеДобавлено: Чт Ноя 26, 2009 11:58 am Ответить с цитатой Вернуться к началу

Олег, просто с самого начала я не хотел вводить усложнений, думал потом это можно будет легко добавить. А объяснить достаточно сложно. Сейчас постараюсь

предположим сейчас начинается график, МА_быстрая выше МА_медленной (рост) мы ждем..пока они не пересекутся обратно (на падение). когда пересеклись, мы можем определить предварительный максимум. тут все понятно. начали падать.. допадали. скользящие пересеклись на рост. теперь мы можем определить 2 вещи

1. подтвердить или получить новый максимум (который мог превысить предварительный на промежутке, когда скользящие были настроены на падение.
2. получить предварительный минимум, который находится на промежутке между подтвержденным максимумом и последним пересечением скользящих
(предварительный минимум может потом подтвердиться, или стать еще меньше, аналогично п.1)

постарался описать подробно..

_________________
Антон
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Ноя 26, 2009 12:39 pm Ответить с цитатой Вернуться к началу

Блин. Боюсь, что так на самом деле вообще не получится.
Например. Мы имеем два минимума и ищем между ними максимум. Но эти минимумы тоже не факт, что правильные. Т.е. надо искать минимальный минимум между максимумами.... В общем бардак. Я не знаю как сделать.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen