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



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

СообщениеДобавлено: Ср Сен 01, 2010 2:34 pm Ответить с цитатой Вернуться к началу

Уважаемый Олег и форумчане!
Недавно прочитал в "D'"(Д-штрих) о FRAMA (фрактальной адаптивной скользящей средней).
Просьба.Вы не построите на основе этой скользящей индюк? Думаю,что он был бы интересен многим.Я,к сожалению,пас,т к ни бум бум.
Вот что пишут в Д-штрих по поводу FRAMA
Фрактальная размерность может оказаться очень полезным инструментом как для анализа свойств конкретного фондового инструмента, так и для построения торговых алгоритмов. Однако вычислять фрактальную размерность графика достаточно сложно.К счастью, есть довольно простой способ вычислить ее приблизительное значение, которого вполне достаточно, чтобы приблизительно отличить тренды от флэтов.
1.Выбираем длину Т, по которой мы будем рассчитывать размерность. Т обязательно должна быть четной.
2.Разбиваем исходный ряд длиной Т на две равных части: от 1 до Т/2 и от Т/2 + 1 до Т.
3.Рассчитываем амплитуду колебаний цен на первой половине ряда А1 = (Н1 – L1), где Н1 – максимум на первой половине ряда, а L1 – минимум.
4.Рассчитываем амплитуду колебаний цен на второй половине ряда А2 = (Н2 – L2), где Н2 – максимум на второй половине ряда, а L2 – минимум.
5.Рассчитываем амплитуду колебаний цен на всем ряде от 1 до Т. А3 = (Н3 – L3), где Н3 – максимум на всем ряде, а L3 – минимум.
6.Рассчитываем приблизительную размерность по формуле: D = 1 + In (A1 + A2) - In (A3)/In ( 2 ).

Построение индикатора FRAMA
Мы хотим, чтобы в тренде длина расчета скользящей средней была маленькой, а во флэте – большой. Наиболее удобно в этом случае использовать экспоненциальную скользящую среднюю EMA, текущее значение которой определяется по формуле: EMA (i) = α × Close (i) + (1-α) × EMA (i-1), где EMA (i) – текущее значение средней, Close (i) – текущее значение цены закрытия, EMA (i-1) – предыдущее значение скользящей средней, α – параметр, который связан с периодом расчета Т соотношением.
Наша задача – связать параметр (и, соответственно, период расчета) со значением фрактальной размерности D следующим образом: если D маленькое (около 1), то период Т должен быть маленьким, например, 2 или 3; если D большое, то период должен быть большим, например, 100, 300 или даже 500. Эту связь α и D можно ввести множеством способов. Используем модифицированную идею знаменитого технического аналитика Джона Эйлерса, который предложил связь через экспоненциальную функцию. В варианте Эйлерса α=e -4,6x(D-1), что предполагает период усреднения, равный одной свече при D = 1, и период усреднения, равный 200 свечам при D = 2. Мы же хотим иметь возможность выбирать периоды расчета при разных значениях D. При D = 1 период расчета должен быть Т1, а при D = 2 – Т2. Понятно, что Т1 < T2 и Т1 имеет смысл выбирать от 1 до 10, а Т2 – от 100 до нескольких сотен. Не вдаваясь в промежуточные вычисления, запишем сразу конечную формулу связи:

α = 2 T1+1 (D-1)/T1+1 ( T 2 + 1 )

Определенное по этой формуле значение необходимо подставлять в формулу расчета экспоненциальной средней. Конечная "трехэтажная" формула расчета индикатора FRAMA в зависимости от значений D, T1 и T2 может оказаться полезной для создания торговых систем.(См рисунок)Image
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Сен 01, 2010 3:35 pm Ответить с цитатой Вернуться к началу

У меня сейчас со временем напряг. Если никто не поможет, то на следующей неделе напомни. Попробую сделать (вроде ничего сложного). Раньше никак... Smile

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



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

СообщениеДобавлено: Ср Сен 01, 2010 7:27 pm Ответить с цитатой Вернуться к началу

000 писал(а):
У меня сейчас со временем напряг. Если никто не поможет, то на следующей неделе напомни. Попробую сделать (вроде ничего сложного). Раньше никак... Smile

Спасибо,Олег.Ничего не горит.На следующей неделе напомню.
Посмотреть профиль Отправить личное сообщение
trassist



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

СообщениеДобавлено: Вт Сен 14, 2010 4:39 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Попробую сделать (вроде ничего сложного).

Олег,попробуй сделать,а?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Чета там с формулами все плохо. А самому математику этого дела разрабатывать лом.
Код:

Per = Param("Period", 10, 2, 20, 2);
T1 = Param("T1", 1, 1, 10, 1);
T2 = Param("T2", 100, 100, 500, 10);

A1 = Ref(HHV(H, Per/2) - LLV(L, Per/2), -Per/2);
A2 = HHV(H, Per/2) - LLV(L, Per/2);
A3 = HHV(H, Per) - LLV(L, Per);
D = 1 + log(A1 + A2) - log(A3)/log(2);

per1 = (2 /(T1+1))*((T1 + 1)/(T2 + 1))^(D-1); 

Plot(D, "", colorRed);

//Plot(AMA(C, per1), "", colorRed);

В общем вот так. Только ничего толком не считает. Вывел на график D. Смотри....

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



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

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

Спасибо.Буду смотреть-разбираться.
Посмотреть профиль Отправить личное сообщение
mmark



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

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

koektos писал(а):
Спасибо.Буду смотреть-разбираться.

Если ещё не разобрался, то по-моему, правильно будет так:
Код:
Array=ParamField("Price field");
Period = Param("Period", 10, 2, 20, 2);
T1 = Param("T1", 4, 1, 20, 1);
T2 = Param("T2", 100, 100, 500, 10);

A1 = Ref(HHV(H, Period/2) - LLV(L, Period/2), -Period/2);
A2 = HHV(H, Period/2) - LLV(L, Period/2);
A3 = HHV(H, Period) - LLV(L, Period);

D = (1 + log(A1 + A2) - log(A3))/log(2);
a = (2 /(T1+1))*((T1 + 1)/(T2 + 1))^(D-1);

FRAMA [ Period-1 ] = Array[ Period-1 ];
//_TRACE("FRAMA0 = " + FRAMA[ Period-1 ]  );

for( i = Period; i < BarCount; i++ )
{
 FRAMA[ i ] = a[i] * Array[ i ] + ( 1 - a[i] ) * FRAMA [ i - 1 ];
}


Plot( FRAMA, _DEFAULT_NAME(), ParamColor( "Color", colorCycle ), ParamStyle("Style") );
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Окт 15, 2010 9:00 pm Ответить с цитатой Вернуться к началу

У меня такая FRAMA
Код:

// FRAMA - Fractal Adaptive Moving Average
Price = (H+L)/2;
N = Param( "N", 16, 2, 40, 2 ); // must be even

N3 = ( HHV( High, N ) - LLV( Low, N ) ) / N;

HH = HHV( High, N / 2 ) ;
LL = LLV( Low, N / 2 );

N1 = ( HH - LL ) / ( N / 2 );

HH = HHV( Ref( High, - N/2 ), N/2 );
LL = LLV( Ref( Low, - N/2 ), N/ 2 );

N2 = ( HH - LL ) / ( N / 2 );

Dimen = IIf( N1 > 0 AND N2 > 0 AND N3 > 0, ( log( N1+N2) - log( N3 ) )/log( 2 ), Null );

alpha = exp( -4.6 * (Dimen -1 ) );
alpha = Min( Max( alpha, 0.01 ), 1 ); // bound to 0.01...1 range

Frama = AMA( Price, alpha );

Plot( Frama, "FRAMA("+N+")", colorRed, styleThick );

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen