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


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

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

Вон как. Хм. Подумаю как это сделать.

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


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

СообщениеДобавлено: Пт Дек 02, 2016 2:17 pm Ответить с цитатой Вернуться к началу

Так?
Код:

SetBarsRequired(sbrAll, sbrAll);

LMin = 0;
LMax = 0;
lo1 = lo2 = Hi1 = Hi2 = 0;
bar2L = bar2H = 0;
jL = jH = 0;

lo1 = L[0];
hi1 = H[0];
for( i = 1; i<BarCount; i++ )
{   
   if( bar2L == 0 )
   {
      if( L[i] < lo1 )
      {
         lo2 = L[i];
         hi2 = H[i];
         bar2L = 1;
         jL = i;         
      }
      else
      {
         lo1 = L[i];
      }
   }
   else if( bar2L )
   {
      if( L[i] >= lo2 AND H[i] > hi2 )
      {
         LMin[jL] = 1;
         lo1 = L[i];
         lo2 = jL = bar2L = 0;
      }
      else if( L[i] < lo2 )
      {
         lo1 = lo2;
         lo2 = L[i];
         hi2 = H[i];
         jL = i;
      }
   }
}

for( i = 1; i<BarCount; i++ )
{   
   if( bar2H == 0 )
   {
      if( H[i] > hi1 )
      {
         hi2 = H[i];
         lo2 = L[i];
         bar2H = 1;
         jH = i;         
      }
      else
      {
         hi1 = H[i];
      }
   }
   else if( bar2H )
   {
      if( H[i] <= hi2 AND L[i] < lo2 )
      {
         LMax[jH] = 1;
         hi1 = H[i];
         hi2 = jH = bar2H = 0;
      }
      else if( H[i] > hi2 )
      {
         hi1 = hi2;
         hi2 = H[i];
         lo2 = L[i];
         jH = i;
      }
   }
}

Plot(C, "", colorBlack, styleCandle);
PlotShapes(LMax * shapeUpTriangle, colorGreen, 0, H, 12);
PlotShapes(LMin * shapeDownTriangle, colorRed, 0, L, 12);


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



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

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

000 писал(а):
Так?


Во блин, красавчик. То, что надо.

Правда есть нюанс: несколько минимумов или максимумов подряд. Причём в 1-м случаи, каждый последующий минимум (треугольник) выше предыдущего, тут реальный минимум - самый первый минимум. А вот 2-м случаи реальный минимум - второй минимум.

Как можно убрать лишнее безобразие?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Дек 05, 2016 1:29 pm Ответить с цитатой Вернуться к началу

Я тебя спрашивал как быть в таком случае. Ты сказал, что такого быть не может...
А сейчас мне нет времени возится... Crying or Very sad

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



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

СообщениеДобавлено: Пн Дек 05, 2016 2:57 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Я тебя спрашивал как быть в таком случае. Ты сказал, что такого быть не может...
А сейчас мне нет времени возится... Crying or Very sad


Ну в первом варианте их и недолжно быть. А вот второй вариант действительно не предусмотрел. Мой косяк.

Rolling Eyes
Посмотреть профиль Отправить личное сообщение
Dmitriy



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

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

А вот и нашлось решение.
Скрестил два твоих кода, свежий и раннее выложенный (с линиями).

Вот что получилось:
Код:

SetBarsRequired(sbrAll, sbrAll);

LMin = 0;
LMax = 0;
lo1 = lo2 = Hi1 = Hi2 = 0;
bar2L = bar2H = 0;
jL = jH = 0;

lo1 = L[0];
hi1 = H[0];
for( i = 1; i<BarCount; i++ )
{   
   if( bar2L == 0 )
   {
      if( L[i] < lo1 )
      {
         lo2 = L[i];
         hi2 = H[i];
         bar2L = 1;
         jL = i;         
      }
      else
      {
         lo1 = L[i];
      }
   }
   else if( bar2L )
   {
      if( L[i] >= lo2 AND H[i] > hi2 )
      {
         LMin[jL] = 1;
         lo1 = L[i];
         lo2 = jL = bar2L = 0;
      }
      else if( L[i] < lo2 )
      {
         lo1 = lo2;
         lo2 = L[i];
         hi2 = H[i];
         jL = i;
      }
   }
}

for( i = 1; i<BarCount; i++ )
{   
   if( bar2H == 0 )
   {
      if( H[i] > hi1 )
      {
         hi2 = H[i];
         lo2 = L[i];
         bar2H = 1;
         jH = i;         
      }
      else
      {
         hi1 = H[i];
      }
   }
   else if( bar2H )
   {
      if( H[i] <= hi2 AND L[i] < lo2 )
      {
         LMax[jH] = 1;
         hi1 = H[i];
         hi2 = jH = bar2H = 0;
      }
      else if( H[i] > hi2 )
      {
         hi1 = hi2;
         hi2 = H[i];
         lo2 = L[i];
         jH = i;
      }
   }
}

SetBarsRequired(1000000, 0);

up = ExRem(LMax, LMin);
dw = ExRem(LMin, LMax);

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, "", colorRed);

PlotShapes(LMax * shapeUpTriangle, colorGreen, 0, H, 12);
PlotShapes(LMin * shapeDownTriangle, colorRed, 0, L, 12);


В целом всё рисуется отлично, лишние минимумы и максимумы игнорируются.
Есть косяк, на рисунке. Попробую разобраться. Smile
Посмотреть профиль Отправить личное сообщение
bealtrader



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

СообщениеДобавлено: Вт Дек 13, 2016 9:18 pm Ответить с цитатой Вернуться к началу

В будущее не заглядывает?

Dmitriy писал(а):
А вот и нашлось решение.
Скрестил два твоих кода, свежий и раннее выложенный (с линиями).

Вот что получилось:
Код:

SetBarsRequired(sbrAll, sbrAll);

LMin = 0;
LMax = 0;
lo1 = lo2 = Hi1 = Hi2 = 0;
bar2L = bar2H = 0;
jL = jH = 0;

lo1 = L[0];
hi1 = H[0];
for( i = 1; i<BarCount; i++ )
{   
   if( bar2L == 0 )
   {
      if( L[i] < lo1 )
      {
         lo2 = L[i];
         hi2 = H[i];
         bar2L = 1;
         jL = i;         
      }
      else
      {
         lo1 = L[i];
      }
   }
   else if( bar2L )
   {
      if( L[i] >= lo2 AND H[i] > hi2 )
      {
         LMin[jL] = 1;
         lo1 = L[i];
         lo2 = jL = bar2L = 0;
      }
      else if( L[i] < lo2 )
      {
         lo1 = lo2;
         lo2 = L[i];
         hi2 = H[i];
         jL = i;
      }
   }
}

for( i = 1; i<BarCount; i++ )
{   
   if( bar2H == 0 )
   {
      if( H[i] > hi1 )
      {
         hi2 = H[i];
         lo2 = L[i];
         bar2H = 1;
         jH = i;         
      }
      else
      {
         hi1 = H[i];
      }
   }
   else if( bar2H )
   {
      if( H[i] <= hi2 AND L[i] < lo2 )
      {
         LMax[jH] = 1;
         hi1 = H[i];
         hi2 = jH = bar2H = 0;
      }
      else if( H[i] > hi2 )
      {
         hi1 = hi2;
         hi2 = H[i];
         lo2 = L[i];
         jH = i;
      }
   }
}

SetBarsRequired(1000000, 0);

up = ExRem(LMax, LMin);
dw = ExRem(LMin, LMax);

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, "", colorRed);

PlotShapes(LMax * shapeUpTriangle, colorGreen, 0, H, 12);
PlotShapes(LMin * shapeDownTriangle, colorRed, 0, L, 12);


В целом всё рисуется отлично, лишние минимумы и максимумы игнорируются.
Есть косяк, на рисунке. Попробую разобраться. Smile
Посмотреть профиль Отправить личное сообщение
MrDzenLi



Зарегистрирован: 20.04.2015
Сообщения: 383
Откуда: VRN

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

bealtrader писал(а):
В будущее не заглядывает?

Заглядывает, одним глазом Wink

_________________
Нам не дано знать всего.
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Dmitriy



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

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

Олег, график при прокрутке сильно тормозит. Видимо слишком много данных для расчета. Подскажи, пожалуйста, как задать в цикле начальную и конечную дату расчета?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Просто убери
Код:
SetBarsRequired(sbrAll, sbrAll);

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



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

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

О, зашуршало. Спасибо.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen