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



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

СообщениеДобавлено: Сб Фев 18, 2012 7:13 pm Ответить с цитатой Вернуться к началу

Попытался написать индикатор фрактальной силы, получилось не очень, думаю это связано с некорректным использованием циклов. Хотя индикатор и меняет свои показания в зависимости от движения бумаги, но история индикатора меняется вместе с его показаниями. Упрощенный вариант этого индикатора, написанный без циклов, работает и своим поведением чем-то напоминает моментум. Если кому-нибудь будет интересно исправить накосяченное, буду искренне благодарен.

Вот такой AFL:
Код:
//Рассчитываем амплитуды колебаний цен A1
for( i = 0; i < BarCount; i++ )
{
if( i > 16 )   
A1[i]=Max(H[i],C[i-1])-Min(L[i],C[i-1]);
}

//Plot(A1,"A1",colorBlue, styleLine);

//Рассчитываем амплитуды колебаний цен A2
for( i = 0; i < BarCount; i++ )
{
if( i > 16)   

A2[i]=Max(Max(H[i],H[i-1]),C[i-2])-Min(Min(L[i],L[i-1]),C[i-2]);
}
//Plot(A2,"A2",colorDarkRed, styleLine);

//Рассчитываем амплитуды колебаний цен A4
for( i = 0; i < BarCount; i++ )
{
if( i > 16)
A4[i]= Max(Max(Max(Max(H[i],H[i-1]),H[i-2]),H[i-3]),C[i-4])-Min(Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3]),C[i-4]);
}
//Plot(A4,"A4",colorYellow, styleLine);

//Рассчитываем амплитуды колебаний цен A8
for( i = 0; i < BarCount; i++ )
{
if( i > 16)
A8[i]= Max(Max(Max(Max(Max(Max(Max(Max(H[i],H[i-1]),H[i-2]),H[i-3]),H[i-4]),H[i-5]),H[i-6]),H[i-7]),C[i-8])-Min(Min(Min(Min(Min(Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3]),L[i-4]),L[i-5]),L[i-6]),L[i-7]),C[i-8]);
}
//Plot(A8,"A8",colorGreen, styleLine);

//Рассчитываем амплитуды колебаний цен A16
for( i = 0; i < BarCount; i++ )
{
if( i > 16)
A16[i]= Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(H[i],H[i-1]),H[i-2]),H[i-3]),H[i-4]),H[i-5]),H[i-6]),H[i-7]),H[i-8]),H[i-9]),H[i-10]),H[i-11]),H[i-12]),H[i-13]),H[i-14]),H[i-15]),C[i-8])-Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3]),L[i-4]),L[i-5]),L[i-6]),L[i-7]),L[i-8]),L[i-9]),L[i-10]),L[i-11]),L[i-12]),L[i-13]),L[i-14]),L[i-15]),C[i-8]);
}
//Plot(A16,"A16",colorPlum, styleLine);

// Рассчитываем суммы амплитуд и приближенные значения индексов мю
//M2
for( i = 0; i < BarCount; i++ )
{
if( i > 16)
S11=ln(A1[i]+A1[i-1]);
S2=ln(A2[i]);

}
M2=(S11-S2)/(ln(2));
//Plot(M2,"M2",colorBlue, styleLine);

//M4

for( i = 0; i < BarCount; i++ )
{
if( i > 16)
S21=ln(A2[i]+A2[i-2]);
S4=ln(A4[i]);

}
M4=(S21-S4)/(ln(4)-ln(2));
//Plot(M4,"M4",colorDarkRed, styleLine);

//M8

for( i = 0; i < BarCount; i++ )
{
if( i > 16)
S41=ln(A4[i]+A4[i-4]);
S8=ln(A8[i]);

}
M8=(S41-S8)/(ln(8)-ln(4));
//Plot(M8,"M8",colorYellow, styleLine);

//M16

for( i = 0; i < BarCount; i++ )
{
if( i > 16)
S81=ln(A8[i]+A8[i-8]);
S16=ln(A16[i]);

}
M16=(S81-S16)/(ln(16)-ln(8));
//Plot(M16,"M16",colorGreen, styleLine);

//Рассчитываем положения цены закрытия относительно середины интервалов длиной 2,4,8 и 16 свечек
//D2

for( i = 0; i < BarCount; i++ )
{
if( i > 16)

D2=(C[i]-0.5*(Max(H[i],H[i-1])+Min(L[i],L[i-1])))/(Max(H[i],H[i-1])-Min(L[i],L[i-1]));
}
//Plot(D2,"D2",colorBlue, styleLine);

//D4

for( i = 0; i < BarCount; i++ )
{
if( i > 16)

D4=(C[i]-0.5*(Max(Max(Max(H[i],H[i-1]),H[i-2]),H[i-3])+Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3])))/(Max(Max(Max(H[i],H[i-1]),H[i-2]),H[i-3])-Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3]));
}
//Plot(D4,"D4",colorDarkRed, styleLine);

//D8

for( i = 0; i < BarCount; i++ )
{
if( i > 16)

D8=(C[i]-0.5*(Max(Max(Max(Max(Max(Max(Max(H[i],H[i-1]),H[i-2]),H[i-3]),H[i-4]),H[i-5]),H[i-6]),H[i-7])+Min(Min(Min(Min(Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3]),L[i-4]),L[i-5]),L[i-6]),L[i-7])))/(Max(Max(Max(Max(Max(Max(Max(H[i],H[i-1]),H[i-2]),H[i-3]),H[i-4]),H[i-5]),H[i-6]),H[i-7])-Min(Min(Min(Min(Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3]),L[i-4]),L[i-5]),L[i-6]),L[i-7]));
}
//Plot(D8,"D8",colorGreen, styleLine);

//D16

for( i = 0; i < BarCount; i++ )
{
if( i > 16)

D16=(C[i]-0.5*(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(H[i],H[i-1]),H[i-2]),H[i-3]),H[i-4]),H[i-5]),H[i-6]),H[i-7]),H[i-8]),H[i-9]),H[i-10]),H[i-11]),H[i-12]),H[i-13]),H[i-14]),H[i-15])+Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3]),L[i-4]),L[i-5]),L[i-6]),L[i-7]),L[i-8]),L[i-9]),L[i-10]),L[i-11]),L[i-12]),L[i-13]),L[i-14]),L[i-15])))/(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(H[i],H[i-1]),H[i-2]),H[i-3]),H[i-4]),H[i-5]),H[i-6]),H[i-7]),H[i-8]),H[i-9]),H[i-10]),H[i-11]),H[i-12]),H[i-13]),H[i-14]),H[i-15])-Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3]),L[i-4]),L[i-5]),L[i-6]),L[i-7]),L[i-8]),L[i-9]),L[i-10]),L[i-11]),L[i-12]),L[i-13]),L[i-14]),L[i-15]));
}
//Plot(D16,"D16",colorPlum, styleLine);

//Рассчитываем доли покупателей  на интервалах длиной 2,4,8 и 16 свечек:

Buyesr2 = IIf( D2>0 AND M2<0.5, 1-M2, M2);
Buyesr2 = IIf( D2>0 AND M2>=0.5, M2, 1-M2);
Buyesr2 = IIf( D2<0 AND M2<0.5, M2, 1-M2);
Buyesr2 = IIf( D2<0 AND M2>=0.5, 1-M2, M2);
//Plot(Buyesr2 ,"Buyesr2 ",colorBlue, styleLine);

Buyesr4 = IIf( D4>0 AND M4<0.5, 1-M4, M4);
Buyesr4 = IIf( D4>0 AND M4>=0.5, M4, 1-M4);
Buyesr4 = IIf( D4<0 AND M4<0.5, M4, 1-M4);
Buyesr4 = IIf( D4<0 AND M4>=0.5, 1-M4, M4);
//Plot(Buyesr4,"Buyesr4",colorDarkRed, styleLine);


Buyesr8 = IIf( D8>0 AND M8<0.5, 1-M8, M8);
Buyesr8 = IIf( D8>0 AND M8>=0.5, M8, 1-M8);
Buyesr8 = IIf( D8<0 AND M8<0.5, M8, 1-M8);
Buyesr8 = IIf( D8<0 AND M8>=0.5, 1-M8, M8);
//Plot(Buyesr8,"Buyesr8",colorGreen, styleLine);

Buyesr16 = IIf( D16>0 AND M16<0.5, 1-M16, M16);
Buyesr16 = IIf( D16>0 AND M16>=0.5, M16, 1-M16);
Buyesr16 = IIf( D16<0 AND M16<0.5, M16, 1-M16);
Buyesr16= IIf( D16<0 AND M16>=0.5, 1-M16, M16);
//Plot(Buyesr16,"Buyesr16",colorPlum, styleLine);

//Рассчитываем коэффициенты пропорциональности.
//Down2

for( i = 0; i < BarCount; i++ )
{
if( i > 16)

Down2=(C[i]-Min(L[i],L[i-1]))/(Max(H[i],H[i-1])-Min(L[i],L[i-1]));
}
//Plot(Down2,"Down2",colorBlue, styleLine);

//Down4

for( i = 0; i < BarCount; i++ )
{
if( i > 16)
Down4=(C[i]-Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3]))/(Max(Max(Max(H[i],H[i-1]),H[i-2]),H[i-3])-Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3]));
}
//Plot(Down4,"Down4",colorDarkRed, styleLine);

//Down8

for( i = 0; i < BarCount; i++ )
{
if( i > 16)
Down8=(C[i]-Min(Min(Min(Min(Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3]),L[i-4]),L[i-5]),L[i-6]),L[i-7]))/(Max(Max(Max(Max(Max(Max(Max(H[i],H[i-1]),H[i-2]),H[i-3]),H[i-4]),H[i-5]),H[i-6]),H[i-7])-Min(Min(Min(Min(Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3]),L[i-4]),L[i-5]),L[i-6]),L[i-7]));
}
//Plot(Down8,"Down8",colorGreen, styleLine);

//Down16

for( i = 0; i < BarCount; i++ )
{
if( i > 16)
Down16=(C[i]-Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3]),L[i-4]),L[i-5]),L[i-6]),L[i-7]),L[i-8]),L[i-9]),L[i-10]),L[i-11]),L[i-12]),L[i-13]),L[i-14]),L[i-15]))/(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(H[i],H[i-1]),H[i-2]),H[i-3]),H[i-4]),H[i-5]),H[i-6]),H[i-7]),H[i-8]),H[i-9]),H[i-10]),H[i-11]),H[i-12]),H[i-13]),H[i-14]),H[i-15])-Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3]),L[i-4]),L[i-5]),L[i-6]),L[i-7]),L[i-8]),L[i-9]),L[i-10]),L[i-11]),L[i-12]),L[i-13]),L[i-14]),L[i-15]));
}
//Plot(Down16,"Down16",colorPlum, styleLine);

//Рассчитываем индикатор потенциальной силы рынка для интервалов 2,4,8,16 свечек:
for( i = 0; i < BarCount; i++ )
{
if( i > 16)

F2=(Buyesr2*Down2-(1-Buyesr2)*(1-Down2))*(A2/Ref(A2,-2));
F4=Buyesr4*Down4-(1-Buyesr4)*(1-Down4)* (A4/Ref(A4,-4));
F8=Buyesr8*Down8-(1-Buyesr8)*(1-Down8)* (A8/Ref(A8,-8));
F16=Buyesr16*Down16-(1-Buyesr16)*(1-Down16)* (A16/Ref(A16,-16));
}
//рассчитываем индикатор по всем интервалам
F=F2+1.41*F4+2*F8+2.8*F16;


Plot(F,"F",styleLine);

Line1 = 0;
Plot( Line1, "Line1", colorBlue );


Упрощенный вариант подобного индикатора:
_SECTION_BEGIN("Umoz Market Force");
A1 = HHV( High,Ref( Close, - 1 ))-LLV(Low, Ref( Close, - 1 ));
A2=HHV(HHV(High,Ref(High,-1)),Ref(Close,-2))-LLV(LLV(Low,Ref(Low,-1)), Ref( Close, - 2 ));
A4=HHV(HHV(High,4),Ref(Close,-4))-LLV(LLV(Low,4), Ref( Close, - 4 ));
A8=HHV(HHV(High,8),Ref(Close,-8))-LLV(LLV(Low,8), Ref( Close, - 8 ));
A16=HHV(HHV(High,16),Ref(Close,-16))-LLV(LLV(Low,16), Ref( Close, - 16 ));

S11=ln(A1+Ref(A1,-1));
S2=ln(A2);
M2=(S11-S2)/(ln(2));
S21=ln(A2+Ref(A2,-2));
S4=ln(A4);
M4=(S21-S4)/(ln(4)-ln(2));
S41=ln(A4+Ref(A4,-4));
S8=ln(A8);
M8 =(S41-S8)/(ln(8)-ln(4));
S81=ln(A8+Ref(A8,-8));
S16=ln(A16);
M16=(S81-S16)/(ln(16)-ln(8));
D2=(Close-0.5*(HHV(H,2)+LLV(L,2)))/(HHV(H,2)-LLV(L,2));
D4=(C-0.5*(HHV(H,3)+LLV(L,3)))/(HHV(H,3)-LLV(L,3));
D8=(C-0.5*(HHV(H,7)+LLV(L,7)))/(HHV(H,7)-LLV(L,7));
D16=(C-0.5*(HHV(H,15)+LLV(L,15)))/(HHV(H,15)-LLV(L,15));


Buyesr2 = IIf( D2>0 AND M2<0.5, 1-M2, M2);
Buyesr2 = IIf( D2>0 AND M2>=0.5, M2, 1-M2);
Buyesr2 = IIf( D2<0 AND M2<0.5, M2, 1-M2);
Buyesr2 = IIf( D2<0 AND M2>=0.5, 1-M2, M2);

Buyesr4 = IIf( D4>0 AND M4<0.5, 1-M4, M4);
Buyesr4 = IIf( D4>0 AND M4>=0.5, M4, 1-M4);
Buyesr4 = IIf( D4<0 AND M4<0.5, M4, 1-M4);
Buyesr4 = IIf( D4<0 AND M4>=0.5, 1-M4, M4);

Buyesr8 = IIf( D8>0 AND M8<0.5, 1-M8, M8);
Buyesr8 = IIf( D8>0 AND M8>=0.5, M8, 1-M8);
Buyesr8 = IIf( D8<0 AND M8<0.5, M8, 1-M8);
Buyesr8 = IIf( D8<0 AND M8>=0.5, 1-M8, M8);

Buyesr16 = IIf( D16>0 AND M16<0.5, 1-M16, M16);
Buyesr16 = IIf( D16>0 AND M16>=0.5, M16, 1-M16);
Buyesr16 = IIf( D16<0 AND M16<0.5, M16, 1-M16);
Buyesr16= IIf( D16<0 AND M16>=0.5, 1-M16, M16);

Down2=(C-LLV(L,2))/(HHV(H,2)-LLV(L,2));
Down4=(C-LLV(L,4))/(HHV(H,4)-LLV(L,4));
Down8=(C-LLV(L,8))/(HHV(H,8)-LLV(L,8));
Down16=(C-LLV(L,16))/(HHV(H,16)-LLV(L,16));

F2=(Buyesr2*Down2-(1-Buyesr2)*(1-Down2))*(A2/Ref(A2,-2));
F4=Buyesr4*Down4-(1-Buyesr4)*(1-Down4)* (A4/Ref(A4,-4));
F8=Buyesr8*Down8-(1-Buyesr8)*(1-Down8)* (A8/Ref(A8,-8));
F16=Buyesr16*Down16-(1-Buyesr16)*(1-Down16)* (A16/Ref(A16,-16));

F=F2+1.41*F4+2*F8+2.8*F16;


Plot(F,"F",styleLine);

Line1 = 0;
Plot( Line1, ",", colorBlue );
_SECTION_END();
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Сб Фев 18, 2012 8:20 pm Ответить с цитатой Вернуться к началу

Ну допустим кто то решил посмотреть и исправить. А где собственно описание алгоритма? Там в коде без 0,5 никак не разберешься... Smile

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



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

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

000 писал(а):
Ну допустим кто то решил посмотреть и исправить. А где собственно описание алгоритма? Там в коде без 0,5 никак не разберешься... Smile


В 1 коде каждое действие пояснено.
Это попытка соорудить индикатор, который описан здесь http://www.comon.ru/user/Mikola/blog/post.aspx?index1=22733
Если конечно Вы зарегины на комоне.
Но график ведет себя неадекватно, я думаю , что это происходит из-за использования множественных циклов. Как упростить это я пока не знаю. Не силен в программировании.
Второй код- упрощенное подобие первого индикатора. Если вставить этот код в Амиброкер, то на графике получится осцилятор вращающийся вокруг нулевой линии. Можно использовать для торговли по принципу обычного моментума.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Сб Фев 18, 2012 11:17 pm Ответить с цитатой Вернуться к началу

Описание непонятное. Алгоритм толком не описан... (((
Ну давай я помаленьку буду переписывать твои многочисленные циклы по простому.
Это
Код:

for( i = 0; i < BarCount; i++ )
{
 if( i > 16 )   
 A1[i]=Max(H[i],C[i-1])-Min(L[i],C[i-1]);
}

Меняем на это
Код:
A1 = Max(H, Ref(C, -1)) - Min(L, Ref(C, -1));


Это
Код:

//Рассчитываем амплитуды колебаний цен A2
for( i = 0; i < BarCount; i++ )
{
 if( i > 16)   

 A2[i]=Max(Max(H[i],H[i-1]),C[i-2])-Min(Min(L[i],L[i-1]),C[i-2]);
}

меняем на это
Код:
A2 = Max(Max(H, Ref(H, -1)), Ref(C, -2)) - Min(Min(L, Ref(L, -1)), Ref(C, -2));

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


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

СообщениеДобавлено: Сб Фев 18, 2012 11:22 pm Ответить с цитатой Вернуться к началу

Это
Код:

//Рассчитываем амплитуды колебаний цен A4
for( i = 0; i < BarCount; i++ )
{
 if( i > 16)
 A4[i]= Max(Max(Max(Max(H[i],H[i-1]),H[i-2]),H[i-3]),C[i-4])-Min(Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3]),C[i-4]);
}

Меняем на
Код:

A4 = Max(Max(Max(Max(H, Ref(H, -1)), Ref(H, -2)), Ref(H, -3)), Ref(C, -4)) - Min(Min(Min(Min(L, Ref(L, -1)), Ref(L, -2)), Ref(L, -3)), Ref(C, -4));


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


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

СообщениеДобавлено: Сб Фев 18, 2012 11:27 pm Ответить с цитатой Вернуться к началу

Это
Код:

for( i = 0; i < BarCount; i++ )
{
 if( i > 16)
 A8[i]= Max(Max(Max(Max(Max(Max(Max(Max(H[i],H[i-1]),H[i-2]),H[i-3]),H[i-4]),H[i-5]),H[i-6]),H[i-7]),C[i-8])-Min(Min(Min(Min(Min(Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3]),L[i-4]),L[i-5]),L[i-6]),L[i-7]),C[i-8]);
}

на
Код:

A8 = Max(Max(Max(Max(Max(Max(Max(Max(H, Ref(H, -1)), Ref(H, -2)), Ref(H, -3)), Ref(H, -4)), Ref(H, -5)), Ref(H, -6)), Ref(H, -7)), Ref(C, -8)) - Min(Min(Min(Min(Min(Min(Min(Min(L, Ref(L, -1)), Ref(L, -2)), Ref(L, -3)), Ref(L, -4)), Ref(L, -5)), Ref(L, -6)), Ref(L, -7)), Ref(C, -8));

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


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

СообщениеДобавлено: Сб Фев 18, 2012 11:50 pm Ответить с цитатой Вернуться к началу

Это
Код:

for( i = 0; i < BarCount; i++ )
{
 if( i > 16)
 A16[i]= Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(H[i],H[i-1]),H[i-2]),H[i-3]),H[i-4]),H[i-5]),H[i-6]),H[i-7]),H[i-8]),H[i-9]),H[i-10]),H[i-11]),H[i-12]),H[i-13]),H[i-14]),H[i-15]),C[i-8])-Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(L[i],L[i-1]),L[i-2]),L[i-3]),L[i-4]),L[i-5]),L[i-6]),L[i-7]),L[i-8]),L[i-9]),L[i-10]),L[i-11]),L[i-12]),L[i-13]),L[i-14]),L[i-15]),C[i-8]);
}

На
Код:

A16 = Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(Max(H, Ref(H, -1)), Ref(H, -2)),Ref(H, -3)),Ref(H, -4)), Ref(H, -5)),Ref(H, -6)), Ref(H, -7)), Ref(H, -8)), Ref(H, -9)), Ref(H, -10)), Ref(H, -11)), Ref(H, -12)), Ref(H, -13)), Ref(H, -14)),Ref(H, -15)), Ref(C, -8)) -
Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(Min(L, Ref(L, -1)), Ref(L, -2)), Ref(L, -3)), Ref(L, -4)), Ref(L, -5)),Ref(L, -6)), Ref(L, -7)), Ref(L, -8)), Ref(L, -9)), Ref(L, -10)), Ref(L, -11)), Ref(L, -12)), Ref(L, -13)), Ref(L, -14)), Ref(L, -15)), Ref(C, -8));


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



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

СообщениеДобавлено: Вс Фев 19, 2012 10:05 am Ответить с цитатой Вернуться к началу

Признаюсь, что я так вначале и хотел сделать, но потом захотелось повыеживаться с циклами. Это мой первый опыт такого рода, первый блин комом Smile.
Алгоритм выглядит следующим образом:
Описание расчета индикатора

Рассчитываем амплитуды колебаний цен на масштабах от 1 до 16 дней по всем точкам скачанного ряда.
A1(i)=max(H(i),C(i-1))-min(L(i),C(i-1))
A2(i)=max(H(i),H(i-1),C(i-2))-min(L(i),L(i-1),C(i-2))
A4(i)= max(H(i),H(i-1)..H(i-3),C(i-4))-min(L(i),L(i-1)..L(i-3),C(i-4))
A8(i)= max(H(i),H(i-1)..H(i-Cool,C(i-4))-min(L(i),L(i-1)..L(i-7),C(i-Cool)
A16(i)= max(H(i),H(i-1)..H(i-15),C(i-16))-min(L(i),L(i-1)..L(i-16),C(i-16))

Рассчитываем суммы амплитуд и приближенные значения индексов мю для разных масштабов.

S11=ln(A1(i)+A1(i-1))
S2=ln(A2(i))
Мю2=(S11-S2)/(ln(2))

S21=ln(A2(i)+A2(i-2))
S2=ln(A4(i))
Мю4=(S21-S4)/(ln(4)-ln(2))

S41=ln(A4(i)+A4(i-4))
S8=ln(A8(i))
Мю8=(S41-SCool/(ln(Cool-ln(4))

S81=ln(A8(i)+A8(i-Cool)
S16=ln(A16(i))
Мю16=(S81-S16)/(ln(16)-ln(Cool)

Рассчитываем положения цены закрытия относительно середины интервалов длиной 2,4,8 и 16 свечек
D2=(C(i)-0.5*(max(H(i),H(i-1))+min(L(i),L(i-1)))/(max(H(i),H(i-1))-min(L(i),L(i-1))
D4=(C(i)-0.5*(max(H(i),H(i-1)..,H(i-3))+min(L(i),L(i-1)..,L(i-3)))/(max(H(i),H(i-1)..,H(i-3))-min(L(i),L(i-1)..,L(i-3))
D8=(C(i)-0.5*(max(H(i),H(i-1)..,H(i-7))+min(L(i),L(i-1)..,L(i-7)))/(max(H(i),H(i-1)..,H(i-7))-min(L(i),L(i-1)..,L(i-7))
D16=(C(i)-0.5*(max(H(i),H(i-1)..,H(i-16))+min(L(i),L(i-1)..,L(i-15)))/(max(H(i),H(i-1)..,H(i-15))-min(L(i),L(i-1)..,L(i-15))

Рассчитываем доли покупателей на интервалах длиной 2,4,8 и 16 свечек:

Buyesr2=
1-Мю2, если D2>0 и Мю2<0.5
Мю2, если D2>0 и Мю2>=0.5
Мю2, если D2<0 и Мю2<0.5
1-Мю2 если D2<0 и Мю2>=0.5

Buyesr4=
1-Мю4, если D4>0 и Мю2<0.5
Мю4, если D4>0 и Мю4>=0.5
Мю4, если D4<0 и Мю4<0.5
1-Мю4 если D4<0 и Мю4>=0.5

Buyesr8=
1-Мю8, если D8>0 и Мю8<0.5
Мю8, если D8>0 и Мю8>=0.5
Мю8, если D8<0 и Мю8<0.5
1-Мю8 если D8<0 и Мю8>=0.5

Buyesr16=
1-Мю16, если D16>0 и Мю16<0.5
Мю16, если D16>0 и Мю16>=0.5
Мю16, если D16<0 и Мю16<0.5
1-Мю16 если D16<0 и Мю16>=0.5

Рассчитываем коэффициенты пропорциональности.

Down2=(C(i)-min(L(i),L(i-1))/(max(H(i),H(i-1))-min(L(i),L(i-1)))
Down4=(C(i)-min(L(i),L(i-1)..,L(i-3))/(max(H(i),H(i-1)..,H(i-3))-min(L(i),L(i-1),..L(i-3)))
Down8=(C(i)-min(L(i),L(i-1)..,L(i-7))/(max(H(i),H(i-1)..,H(i-7))-min(L(i),L(i-1),..L(i-7)))
Down16=(C(i)-min(L(i),L(i-1)..,L(i-15))/(max(H(i),H(i-1)..,H(i-15))-min(L(i),L(i-1),..L(i-15)))

Рассчитываем индикатор потенциальной силы рынка для интервалов 2,4,8,16 свечек:

F2=(Buyers2*Down2-(1-Buyers2)*(1-Down2))*(A2(i)/A2(i-2))
F4=Buyers4*Down4-(1-Buyers4)*(1-Down4)* (A4(i)/A4(i-4))
F8=Buyers8*Down8-(1-Buyers8)*(1-Down8)* (A8(i)/A8(i-Cool)
F16=Buyers16*Down16-(1-Buyers16)*(1-Down16)* (A16(i)/A16(i-16))


И, наконец, рассчитываем индикатор по всем интервалам от 2 до 16 точек:

F(i)=F2+1.41*F4+2*F8+2.8*F16



я специально после каждого цикла пытался отобразить графически результат. И если амплитды со 2 по 16 отрисовались как положено.
То все следующие компоненты отрисовывались в виде линий, которые просто перемещялись на графике. Никаких кривых не получалось , соответственно и конечный результат тоже также дергался.
Посмотреть профиль Отправить личное сообщение
Tinych



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

СообщениеДобавлено: Вс Фев 19, 2012 10:09 am Ответить с цитатой Вернуться к началу

Во еще какие-то смайлики вставились.

Повторю описание расчета индикатора:

Рассчитываем амплитуды колебаний цен на масштабах от 1 до 16 дней по всем точкам скачанного ряда.
A1(i)=max(H(i),C(i-1))-min(L(i),C(i-1))
A2(i)=max(H(i),H(i-1),C(i-2))-min(L(i),L(i-1),C(i-2))
A4(i)= max(H(i),H(i-1)..H(i-3),C(i-4))-min(L(i),L(i-1)..L(i-3),C(i-4))
A8(i)= max(H(i),H(i-1)..H(i-8),C(i-4))-min(L(i),L(i-1)..L(i-7),C(i-8))
A16(i)= max(H(i),H(i-1)..H(i-15),C(i-16))-min(L(i),L(i-1)..L(i-16),C(i-16))

Рассчитываем суммы амплитуд и приближенные значения индексов мю для разных масштабов.

S11=ln(A1(i)+A1(i-1))
S2=ln(A2(i))
Мю2=(S11-S2)/(ln(2))

S21=ln(A2(i)+A2(i-2))
S2=ln(A4(i))
Мю4=(S21-S4)/(ln(4)-ln(2))

S41=ln(A4(i)+A4(i-4))
S8=ln(A8(i))
Мю8=(S41-S8)/(ln(8)-ln(4))

S81=ln(A8(i)+A8(i-8))
S16=ln(A16(i))
Мю16=(S81-S16)/(ln(16)-ln(8))

Рассчитываем положения цены закрытия относительно середины интервалов длиной 2,4,8 и 16 свечек
D2=(C(i)-0.5*(max(H(i),H(i-1))+min(L(i),L(i-1)))/(max(H(i),H(i-1))-min(L(i),L(i-1))
D4=(C(i)-0.5*(max(H(i),H(i-1)..,H(i-3))+min(L(i),L(i-1)..,L(i-3)))/(max(H(i),H(i-1)..,H(i-3))-min(L(i),L(i-1)..,L(i-3))
D8=(C(i)-0.5*(max(H(i),H(i-1)..,H(i-7))+min(L(i),L(i-1)..,L(i-7)))/(max(H(i),H(i-1)..,H(i-7))-min(L(i),L(i-1)..,L(i-7))
D16=(C(i)-0.5*(max(H(i),H(i-1)..,H(i-16))+min(L(i),L(i-1)..,L(i-15)))/(max(H(i),H(i-1)..,H(i-15))-min(L(i),L(i-1)..,L(i-15))

Рассчитываем доли покупателей на интервалах длиной 2,4,8 и 16 свечек:

Buyesr2=
1-Мю2, если D2>0 и Мю2<0.5
Мю2, если D2>0 и Мю2>=0.5
Мю2, если D2<0 и Мю2<0.5
1-Мю2 если D2<0 и Мю2>=0.5

Buyesr4=
1-Мю4, если D4>0 и Мю2<0.5
Мю4, если D4>0 и Мю4>=0.5
Мю4, если D4<0 и Мю4<0.5
1-Мю4 если D4<0 и Мю4>=0.5

Buyesr8=
1-Мю8, если D8>0 и Мю8<0.5
Мю8, если D8>0 и Мю8>=0.5
Мю8, если D8<0 и Мю8<0.5
1-Мю8 если D8<0 и Мю8>=0.5

Buyesr16=
1-Мю16, если D16>0 и Мю16<0.5
Мю16, если D16>0 и Мю16>=0.5
Мю16, если D16<0 и Мю16<0.5
1-Мю16 если D16<0 и Мю16>=0.5

Рассчитываем коэффициенты пропорциональности.

Down2=(C(i)-min(L(i),L(i-1))/(max(H(i),H(i-1))-min(L(i),L(i-1)))
Down4=(C(i)-min(L(i),L(i-1)..,L(i-3))/(max(H(i),H(i-1)..,H(i-3))-min(L(i),L(i-1),..L(i-3)))
Down8=(C(i)-min(L(i),L(i-1)..,L(i-7))/(max(H(i),H(i-1)..,H(i-7))-min(L(i),L(i-1),..L(i-7)))
Down16=(C(i)-min(L(i),L(i-1)..,L(i-15))/(max(H(i),H(i-1)..,H(i-15))-min(L(i),L(i-1),..L(i-15)))

Рассчитываем индикатор потенциальной силы рынка для интервалов 2,4,8,16 свечек:

F2=(Buyers2*Down2-(1-Buyers2)*(1-Down2))*(A2(i)/A2(i-2))
F4=Buyers4*Down4-(1-Buyers4)*(1-Down4)* (A4(i)/A4(i-4))
F8=Buyers8*Down8-(1-Buyers8)*(1-Down8)* (A8(i)/A8(i-8))
F16=Buyers16*Down16-(1-Buyers16)*(1-Down16)* (A16(i)/A16(i-16))


И, наконец, рассчитываем индикатор по всем интервалам от 2 до 16 точек:

F(i)=F2+1.41*F4+2*F8+2.8*F16
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Фев 21, 2012 12:31 am Ответить с цитатой Вернуться к началу

Дальше переписывать без циклов или сам?

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



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

СообщениеДобавлено: Вт Фев 21, 2012 1:03 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Дальше переписывать без циклов или сам?


Сам конечно, обрати внимание на другой вариант этого индикатора, он без циклов написан. идея та же.
Думал в цикле получится короче, не судьба.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Фев 21, 2012 1:33 pm Ответить с цитатой Вернуться к началу

Ну если уж ты собирался в цикле делать, то надо было все это делать в одном, а не городить множество циклов.
При этом имей ввиду, что циклы следует использовать только в крайнем случае. Код без циклов работает значительно быстрее.

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



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

СообщениеДобавлено: Вт Фев 21, 2012 2:27 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Ну если уж ты собирался в цикле делать, то надо было все это делать в одном, а не городить множество циклов.
При этом имей ввиду, что циклы следует использовать только в крайнем случае. Код без циклов работает значительно быстрее.


Да уж тормозит знатно.
К сожалению, в циклах профан полный. Я попытался только один цикл закрутить, но выдает ошибку. Пока теорию читаю.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen