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



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

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

Цитата:
Система ктороая заглядывает в будущее действитеьно никому не нужна, а вот из кода который заглядывает в будущее можно сделать систему которая в будущее не заглядывает. Smile


Как раз над этим сейчас работаю. Думаю как правильно написать условия, тк есть ощущения что тут не нужно заглядываниеив будущеее и при ручном тестировании я тоже не заглядываю и код следовательно не должен Smile

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



Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург

СообщениеДобавлено: Чт Мар 28, 2013 7:57 am Ответить с цитатой Вернуться к началу

Я использую код, созданный на первой странице(спасибо создателям Exclamation), для построения зигзага по условию "мах/мин значение показателя на участке образованном пересечением средних". Классно работает, но: иногда свечи, удовлетворяющей условию не существует на участке между пересечениями средних, но код всё равно там что-то находит, внося сумятицу в очень стройную картинку. Что нужно поменять?
Код:

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

СообщениеДобавлено: Чт Мар 28, 2013 8:01 am Ответить с цитатой Вернуться к началу

Не очень понял что не так. Приведи пример, желательно с картинкой.

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



Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург

СообщениеДобавлено: Чт Мар 28, 2013 9:48 am Ответить с цитатой Вернуться к началу

на картинке свечи 1 и 2 не соответствуют ВСЕМ условиям кода: следующие за ними свечи по условию должны иметь более высокий close. Т.е. можно ли сделать так, что если на этом участке искомой свечи нет, то и перегиба код бы там не создавал?
Огромное пасибо, разумеется
Smile

_________________
Не ходи за мной, я сам заблудился.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Мар 28, 2013 9:44 pm Ответить с цитатой Вернуться к началу

Так. Мне теперь вообще не нравиться тот код.
Вот держи другой. Более точный.
Код:

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
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Мар 29, 2013 10:33 am Ответить с цитатой Вернуться к началу

Олег, спасибо, буду разбираться.
За что отвечает параметр "Сr"? Embarassed

_________________
Не ходи за мной, я сам заблудился.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Мар 29, 2013 10:44 am Ответить с цитатой Вернуться к началу

Cr это от Cross.
Текущее направление. Типа если короткая выше длинной, то Cr == 1, а если ниже то Cr == -1.

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



Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user

СообщениеДобавлено: Сб Мар 30, 2013 9:59 pm Ответить с цитатой Вернуться к началу

В бар реплеер график "плющит" иногда, swingline=0 на нескольких барах
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Ага. Есть такой косяк. Исправил.
Код:

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
Откуда: Санкт-Петербург

СообщениеДобавлено: Пн Апр 01, 2013 9:50 am Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Пн Апр 01, 2013 6:53 pm Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Вт Апр 02, 2013 12:11 am Ответить с цитатой Вернуться к началу

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
Откуда: Санкт-Петербург

СообщениеДобавлено: Вт Апр 02, 2013 9:59 am Ответить с цитатой Вернуться к началу

Mechanic писал(а):
Ref(H,-1)<C<Ref(C,1) - так нельзя писать.

Вот так надо:

Ref(H,-1)<C AND C<Ref(C,1)


писал и так. Всё равно сбоит код в этой части, не берёт его земля. Laughing
Т.е. я вижу, что он когда находит свечу, удовлетворяющую всем условиям - он метит её... если нет, то код не исключает участок из проверки, а отмечает свечи, которые соответствуют условию Highestsince/Lowestsince. О!

_________________
Не ходи за мной, я сам заблудился.
Посмотреть профиль Отправить личное сообщение
Kukulkan



Зарегистрирован: 11.01.2013
Сообщения: 19
Откуда: Санкт-Петербург

СообщениеДобавлено: Вт Апр 02, 2013 10:19 am Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Вт Апр 02, 2013 4:26 pm Ответить с цитатой Вернуться к началу

Kukulkan писал(а):
Mechanic писал(а):
Ref(H,-1)<C<Ref(C,1) - так нельзя писать.

Вот так надо:

Ref(H,-1)<C AND C<Ref(C,1)


писал и так. Всё равно сбоит код в этой части, не берёт его земля. Laughing
Т.е. я вижу, что он когда находит свечу, удовлетворяющую всем условиям - он метит её... если нет, то код не исключает участок из проверки, а отмечает свечи, которые соответствуют условию Highestsince/Lowestsince. О!

Я не вникал в код, но множественные условия нужно писать только так. Если же написать Ref(H,-1)<C<Ref(C,1), то Ами сперва вычислит первое выражение Ref(H,-1)<C, результат которого, в зависимости от выполнения условия, будет либо 0, либо 1, а потом сравнит этот результат с Ref(C,1).
Посмотреть профиль Отправить личное сообщение ICQ Number
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen