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



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

СообщениеДобавлено: Пт Авг 23, 2013 1:56 pm Ответить с цитатой Вернуться к началу

Наткнулся в ходе поисков очередного грааля Smile на фильтр Эхлера, код был только на изи (http://www.davenewberg.com/Trading/TS_Code/Ehlers_Indicators/2_pole_SuperSmoother.html), перевел на АФЛ по мере возможностей Smile
Код:

Period = Param( "Period", 15, 1, 25, 1 );
Price = ( H + L ) / 2;

a1 = exp( -1.414 * 3.14159 / Period );
b1 = 2 * a1 * cos( 1.414 * 180 / Period );
coef2 = b1;
coef3 = -a1 * a1;
coef1 = 1 - coef2 - coef3;
Filt2 = 0;
for ( i = 2; i < BarCount; i++ )
{
    if ( i < 2 )
        Filt2[i] = Price[i];
    else
        Filt2[i] = coef1 * Price[i] + coef2 * Filt2[i-1] + coef3 * Filt2[i-2];
}
Plot( Filt2, "Ehlers  2-pole Super Smoother filter", colorRed, styleLine );


странно что работает только в ограниченном диапазоне значений переменной Period, дальше начинает какие то гармонические колебания рисовать Smile
Может кому пригодится...

_________________
Если вас грызет совесть, выбейте ей зубы, и пусть она вас нежно обсасывает.
Посмотреть профиль Отправить личное сообщение
Nero Wolfe



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

СообщениеДобавлено: Пт Авг 23, 2013 3:50 pm Ответить с цитатой Вернуться к началу

Хотел еще по мотивам предыдущего сделать Сглаженный стохастик Эхлера, но не осилил Smile
Код:
Length = Param( "Length", 20, 1, 100, 1 );
Price = C;
//Highpass filter cyclic components whose periods are shorter than 48 bars
alpha1 = (cos((0.707*360 / 48) * 3.14159/ 180.0 ) + sin((0.707*360 / 48) * 3.14159/ 180.0 ) - 1) / cos((0.707*360 / 48) * 3.14159/ 180.0 );
HP = 0;
for ( i = 2; i < BarCount; i++ )
{
   HP[i] = ( 1 - alpha1 / 2 ) * ( 1 - alpha1 / 2 ) * ( Price[i] - 2 * Price[i-1] + Price[i-2] ) + 2 * ( 1 - alpha1 ) * HP[i-1] - ( 1 - alpha1 ) * ( 1 - alpha1 ) * HP[i-2];
}

//Smooth with a Super Smoother Filter with period 10
a1 = exp( -1.414 * 3.14159 / 10 );

b1 = 2 * a1 * cos( 1.414 * 180 / 10 );

c2 = b1;

c3 = -a1 * a1;

c1 = 1 - c2 - c3;

Filt2 = 0;

for ( i = 2; i < BarCount; i++ )
{
    if ( i < 2 )
        Filt2[i] = HP[i];
    else
        Filt2[i] = c1 * HP[i] + c2 * Filt2[i-1] + c3 * Filt2[i-2];
}

HighestC = 0;

LowestC = 0;

for ( i = 1; i < Length; i++ )
{
    if ( Filt2[i] > HighestC[i] )
        HighestC[i] = Filt2[i];

    if ( Filt2[i] < LowestC[i] )
        LowestC[i] = Filt2[i];
}

Stoc = ( Filt2 - LowestC ) / ( HighestC - LowestC );

MyStochastic[0] = Stoc[0];

for ( i = 2; i < BarCount; i++ )
{
    MyStochastic = c1 * ( Stoc[i] + Stoc[i-1] ) / 2 + c2 * MyStochastic[i-1] + c3 * MyStochastic[i-2];
}
Plot( MyStochastic, "Ehlers Smoothed Stochastic", colorRed, styleLine );

пока не работает...

_________________
Если вас грызет совесть, выбейте ей зубы, и пусть она вас нежно обсасывает.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen