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


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

СообщениеДобавлено: Вт Июл 14, 2015 7:33 am Ответить с цитатой Вернуться к началу

Понадобился мне тут точный аналог Велсовской функции GaussianSeries для Ами.
В сети не нашел.
Пришлось внимательно разобраться с работой John Ehlers "Gaussian and Other Low Lag Filters"

Написал сам. Вдруг кому еще понадобится....
Код:

PI = 3.1415926;
function GSMA( input, Period, poles )
{
   an = 2*PI/Period;
   beta = (1 - cos( an ))/(1.414^(2/poles)-1);
   alpha = -beta + sqrt( beta^2 + 2*beta );
 
   result[ 0 ] = input[ 0 ];
   result[ 1 ] = input[ 1 ];
   result[ 2 ] = input[ 2 ];
   result[ 3 ] = input[ 3 ];
 
   for( i = poles; i < BarCount; i++ )
    {
      if(poles == 1)
         result[i] = alpha*input[i] + (1-alpha)*result[i-1];
      else if(poles == 2)
         result[i] = alpha^2*input[i] + 2*(1-alpha)*result[i-1] - (1-alpha)^2*result[i-2];
      else if(poles == 3)
         result[i] = alpha^3*input[i] + 3*(1-alpha)*result[i-1] - 3*(1-alpha)^2*result[i-2] + (1-alpha)^3*result[i-3];
      else if(poles == 4)
         result[i] = alpha^4*input[i] + 4*(1-alpha)*result[i-1] - 6*(1-alpha)^2*result[i-2] + 4*(1-alpha)^3*result[i-3] - (1-alpha)^4*result[i-4];
   }

   return result;
}

poles = 1; // 2 или 3 или 4
Plot(GSMA( C, 9, poles), "GSMA", ColorRed);


Ничего особенного. Просто типа еще один мувинг.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.

Последний раз редактировалось: 000 (Вт Июл 14, 2015 6:14 pm), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Вт Июл 14, 2015 9:59 am Ответить с цитатой Вернуться к началу

У меня такой вариант есть этого мувинга:
Код:

_SECTION_BEGIN("GSMA");
SetBarsRequired(100000,0);
PI = 3.1415926;

function jIIR2( input, f0, f1, f2 )
{
    result[ 0 ] = input[ 0 ];
    result[ 1 ] = input[ 1 ];

    for( i = 2; i < BarCount; i++ )
    {
       result[ i ] = f0 * input[ i ] +
                     f1 * result[ i - 1 ] +
                     f2 * result[ i - 2 ];
    }

   return result;
}

function GSMA( input, Period )
{
  N = 0;
  an = 2 * PI / Period;
  c0 = b0 = 1;
  c1 = b1 = b2 = a1 = a2 = gamma1 = 0;
  beta1 = 2.415 * ( 1- cos( an ) );
  alpha = -beta1 + sqrt( beta1 ^ 2 + 2 * beta1 );
  alpha1 = ( cos( an ) + sin( an ) - 1 )/cos( an );
   {
    fo = alpha ^ 2;
    f1 = 2 * ( 1- alpha ); f2 = -( 1 - alpha )*( 1 - alpha );
  }
 

  return jIIR2( input, fo,f1,f2);
}
period=Param("period",13,1,40,1);

//Plot( Close, "Price", colorBlack, styleCandle );
Plot( GSMA( C,period), "GSMA", colorLime );
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


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

СообщениеДобавлено: Вт Июл 14, 2015 1:59 pm Ответить с цитатой Вернуться к началу

Такого варианта в сети полно. Но в оригинале 3 параметра. (дата, период и poles). А твой вариант только 2 параметра. Там poles == 2.

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



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

СообщениеДобавлено: Вт Июл 14, 2015 5:10 pm Ответить с цитатой Вернуться к началу

Олег, ругается.
Error 29. Variable 'poles' used without having been initialized.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Июл 14, 2015 6:15 pm Ответить с цитатой Вернуться к началу

Угу. Конечно ругается. Исправил Smile Вместо poles там надо 1 или 2 или 3 или 4

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



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

СообщениеДобавлено: Вт Июл 14, 2015 7:47 pm Ответить с цитатой Вернуться к началу

Олег, с вашего позволения:
period = Param("period",13,1,40,1);
poles = Param("poles",1,1,4,1);
Plot(GSMA( C, period, poles), "GSMA", colorRed);

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



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Ср Июл 15, 2015 10:29 am Ответить с цитатой Вернуться к началу

Хм, действительно. Олег, расскажи вкратце в чем физический смысл параметра poles?
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


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

СообщениеДобавлено: Ср Июл 15, 2015 11:36 am Ответить с цитатой Вернуться к началу

Точность возрастает.

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen