|
AmiSite.ru
Форум по Ами |
Автор |
Сообщение |
Nero Wolfe
Зарегистрирован: 17.03.2010
Сообщения: 174
|
Наткнулся в ходе поисков очередного грааля на фильтр Эхлера, код был только на изи (http://www.davenewberg.com/Trading/TS_Code/Ehlers_Indicators/2_pole_SuperSmoother.html), перевел на АФЛ по мере возможностей
Код: |
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, дальше начинает какие то гармонические колебания рисовать
Может кому пригодится... |
_________________ Если вас грызет совесть, выбейте ей зубы, и пусть она вас нежно обсасывает. |
|
Посмотреть профиль Отправить личное сообщение |
|
Nero Wolfe
Зарегистрирован: 17.03.2010
Сообщения: 174
|
Хотел еще по мотивам предыдущего сделать Сглаженный стохастик Эхлера, но не осилил
Код: |
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 );
|
пока не работает... |
_________________ Если вас грызет совесть, выбейте ей зубы, и пусть она вас нежно обсасывает. |
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
| |