Автор |
Сообщение |
trassist
Зарегистрирован: 08.03.2010
Сообщения: 5
|
Уважаемый Олег и форумчане!
Недавно прочитал в "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 может оказаться полезной для создания торговых систем.(См рисунок) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
У меня сейчас со временем напряг. Если никто не поможет, то на следующей неделе напомни. Попробую сделать (вроде ничего сложного). Раньше никак... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
trassist
Зарегистрирован: 08.03.2010
Сообщения: 5
|
000 писал(а): |
У меня сейчас со временем напряг. Если никто не поможет, то на следующей неделе напомни. Попробую сделать (вроде ничего сложного). Раньше никак... |
Спасибо,Олег.Ничего не горит.На следующей неделе напомню. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
trassist
Зарегистрирован: 08.03.2010
Сообщения: 5
|
000 писал(а): |
Попробую сделать (вроде ничего сложного). |
Олег,попробуй сделать,а? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Чета там с формулами все плохо. А самому математику этого дела разрабатывать лом.
Код: |
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
|
Спасибо.Буду смотреть-разбираться. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
mmark
Зарегистрирован: 12.04.2010
Сообщения: 1
|
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
|
У меня такая 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
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|