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



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

СообщениеДобавлено: Чт Янв 13, 2011 6:51 pm Ответить с цитатой Вернуться к началу

Нписал систему, с функциями, все красиво, профит больше 2 лимонов, в общем грааль, крутил, вертел, почти поверил что правда, в общем проглядел в коде ref(r,1), ну хоть немного радости хапнул. Так что на свой вопрос ответ нашол.
Посмотреть профиль Отправить личное сообщение
xxxspeed



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

СообщениеДобавлено: Сб Янв 22, 2011 7:53 am Ответить с цитатой Вернуться к началу

Допишите пожалуйста нахождения долгосрочных минимумов и максимумов. Пытался понять, что здесь нужно поменять для сравнивания среднесрочных макс и мин, но чет ниче не получилось.
Код:

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

СообщениеДобавлено: Вс Янв 23, 2011 8:39 pm Ответить с цитатой Вернуться к началу

А как определяются долгосрочные минимумы и максимумы?

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



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

СообщениеДобавлено: Пн Янв 24, 2011 12:25 pm Ответить с цитатой Вернуться к началу

Долгосрочный максимум - это среднесрочный максимум, с более низкими среднесрочными максимумами по обеим сторонам, соответственно долгосрочный минимум - это среднесрочный минимум с более высокими среднесрочными минимумами по обеим сторонам. Не буду копировать весь код по нахождения краткосрочных и среднесрочных макс/мин (ты его написал на 2-ой стр).
Посмотреть профиль Отправить личное сообщение
xxxspeed



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

СообщениеДобавлено: Пн Янв 24, 2011 12:27 pm Ответить с цитатой Вернуться к началу

точнее
Цитата:
Добавлено: Пн Апр 07, 2008 11:05 pm
Посмотреть профиль Отправить личное сообщение
Mechel



Зарегистрирован: 21.12.2013
Сообщения: 7
Откуда: Москва

СообщениеДобавлено: Вс Дек 29, 2013 12:22 pm Ответить с цитатой Вернуться к началу

Скрипт замечательный, но, по моему, есть что доделать до идеала.

На графике газп-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

СообщениеДобавлено: Вс Дек 29, 2013 11:49 pm Ответить с цитатой Вернуться к началу

Для начала напиши какой именно код использовал. Тут их целая ветка.

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



Зарегистрирован: 21.12.2013
Сообщения: 7
Откуда: Москва

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

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

СообщениеДобавлено: Сб Янв 04, 2014 11:03 pm Ответить с цитатой Вернуться к началу

У меня дает другую картинку.

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



Зарегистрирован: 21.12.2013
Сообщения: 7
Откуда: Москва

СообщениеДобавлено: Вт Янв 07, 2014 8:07 am Ответить с цитатой Вернуться к началу

000 писал(а):
У меня дает другую картинку.


Возможно, у вас другие настройки. У меня импорт из квика часовых (плагином) , а в настройках ами - "intraday settings" дневная сессия с 8:00 до 20:00. (тогда 4х часовые бары получаются точно как к квике).
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


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

СообщениеДобавлено: Вт Янв 07, 2014 10:32 am Ответить с цитатой Вернуться к началу

Да. Теперь так.
Однако вопросы остались.

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



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

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

Камрады, помогите решить вопрос.

На графике нарисовалась некая свеча (см. рисунок) и теперь нужно дождаться пробития её хая или лоу, т.е нужно будет сравнивать текущую цену не с предыдущей свечой, как в коде, а с заранее запомненной ценой.

По логике нужно запоминать хай и лоу последней свечи и при формировании новой свечи сравнивать её с запомненной ценой, и как только цена будет больше или меньше запомненной свечи, а она может быть и через 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

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

Вопрос.
Нарисовалась свечка.
Запомнили ее канал. Дождались пробития нижней границы. Перерисовываем нижнюю границу ниже. А тчо происходит с верхней границей? Остается старой?
Тогда имеем просто расширяющийся канал.
highest(H) и lowest(L)...

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



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

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

000 писал(а):
Вопрос.
Нарисовалась свечка.
Запомнили ее канал. Дождались пробития нижней границы. Перерисовываем нижнюю границу ниже. А тчо происходит с верхней границей? Остается старой?
Тогда имеем просто расширяющийся канал.
highest(H) и lowest(L)...


Как только пробита любая граница, то старые, запомненные значения, переписываются новыми H и L.

Если по примеру, то сразу после пробития нижней границы, H и L перезаписываются на значения красной свечки (выделенная овалом).
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Ноя 23, 2016 8:17 am Ответить с цитатой Вернуться к началу

Например типа так.
Код:

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
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen