Автор |
Сообщение |
ifrm
Зарегистрирован: 16.02.2008
Сообщения: 20
|
Имеется LRSI Эхлера:
Код: |
SetBarsRequired(200, 0);
function LRSI(array, gamma)
{
L0 = array;
L1 = array;
L2 = array;
L3 = array;
LRSIValue = array;
for(i = 1; i < BarCount; i++)
{
L0[i] = (1 - gamma)*array[i] + gamma*L0[i-1];
L1[i] = - gamma * L0[i] + L0[i-1] + gamma * L1[i-1];
L2[i] = - gamma * L1[i] + L1[i-1] + gamma * L2[i-1];
L3[i] = - gamma * L2[i] + L2[i-1] + gamma * L3[i-1];
CU = 0;
CD = 0;
if (L0[i] >= L1[i]) CU = L0[i] - L1[i]; else (CD = L1[i] - L0[i]);
if (L1[i] >= L2[i]) CU = CU + L1[i] - L2[i]; else CD = CD + L2[i] -L1[i];
if (L2[i] >= L3[i]) CU = CU + L2[i] - L3[i]; else CD = CD + L3[i] -L2[i];
if (CU + CD != 0) LRSIValue[i] = CU / (CU + CD);
}
return LRSIValue;
}
Gamma_1 = Param("Gamma1", 0.5, 0.1, 1, 0.01);
Plot(LRSI(C, Gamma_1), "Laguerre RSI", colorRed, styleLine|styleThick);
|
Хочу посчитать этот индикатор на дневных барах и пользоваться результатами например на часовиках. Казалось бы все просто, но с этой функцией - куда TimeFrameSet() не прикладывай, получается пурга. Подозреваю что где-то очень сильно туплю (Ведь внутри цикл сидит, а я, к сожалению, не до конца понимаю что происходит с этим циклом при сжатии баров). Помогите пожалуйста. Заранее спасибо. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
настырный
Зарегистрирован: 15.06.2008
Сообщения: 67
|
Код: |
SetBarsRequired(200, 0);
function LRSI(array, gamma)
{
L0 = array;
L1 = array;
L2 = array;
L3 = array;
LRSIValue = array;
for(i = 1; i < BarCount; i++)
{
L0[i] = (1 - gamma)*array[i] + gamma*L0[i-1];
L1[i] = - gamma * L0[i] + L0[i-1] + gamma * L1[i-1];
L2[i] = - gamma * L1[i] + L1[i-1] + gamma * L2[i-1];
L3[i] = - gamma * L2[i] + L2[i-1] + gamma * L3[i-1];
CU = 0;
CD = 0;
if (L0[i] >= L1[i]) CU = L0[i] - L1[i]; else (CD = L1[i] - L0[i]);
if (L1[i] >= L2[i]) CU = CU + L1[i] - L2[i]; else CD = CD + L2[i] -L1[i];
if (L2[i] >= L3[i]) CU = CU + L2[i] - L3[i]; else CD = CD + L3[i] -L2[i];
if (CU + CD != 0) LRSIValue[i] = CU / (CU + CD);
}
return LRSIValue;
}
Gamma_1 = Param("Gamma1", 0.5, 0.1, 1, 0.01);
//-------------Дневной тайм фрейм--------------------------------
TimeFrameSet(inDaily);
M = LRSI(C, Gamma_1);
//-------------------Вернулись к часовкам------------------------
Mov = TimeFrameExpand(M,inDaily);
Plot(Mov, "Laguerre RSI", colorRed, styleLine|styleThick);
|
Попробуйте так. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Так не должно получиться. Функция TimeFrameSet() переключает на другой фрейм не все, что есть на чарте, а только массивы OHLLCVOI... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ifrm
Зарегистрирован: 16.02.2008
Сообщения: 20
|
настырный
Спасибо за совет, но к сожалению - не работает. На дневных барах все в порядке, но часовики не работают. Схожие результаты, получаются и у меня. Что делать пока не могу сообразить. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Проверил на 15 мин. Работает.
Код: |
SetBarsRequired(200, 0);
function LRSI(array, gamma)
{
L0 = array;
L1 = array;
L2 = array;
L3 = array;
LRSIValue = array;
for(i = 1; i < BarCount; i++)
{
L0[i] = (1 - gamma)*array[i] + gamma*L0[i-1];
L1[i] = - gamma * L0[i] + L0[i-1] + gamma * L1[i-1];
L2[i] = - gamma * L1[i] + L1[i-1] + gamma * L2[i-1];
L3[i] = - gamma * L2[i] + L2[i-1] + gamma * L3[i-1];
CU = 0;
CD = 0;
if (L0[i] >= L1[i]) CU = L0[i] - L1[i]; else (CD = L1[i] - L0[i]);
if (L1[i] >= L2[i]) CU = CU + L1[i] - L2[i]; else CD = CD + L2[i] -L1[i];
if (L2[i] >= L3[i]) CU = CU + L2[i] - L3[i]; else CD = CD + L3[i] -L2[i];
if (CU + CD != 0) LRSIValue[i] = CU / (CU + CD);
}
return LRSIValue;
}
Gamma_1 = Param("Gamma1", 0.5, 0.1, 1, 0.01);
//-------------Дневной тайм фрейм--------------------------------
TimeFrameSet(inDaily);
M = LRSI(C, Gamma_1);
TimeFrameRestore();
//-------------------Вернулись к часовкам------------------------
Mov = TimeFrameExpand(M,inDaily);
Plot(Mov, "Laguerre RSI", colorRed, styleLine|styleThick);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ifrm
Зарегистрирован: 16.02.2008
Сообщения: 20
|
А никто и не утверждает что функция не работает (то есть AFL выдает ошибку). LRSI должен колебаться от нуля до ста, а вместо этого на графиках таймфрейм которых отличаются от дневного значения индикатора как бы следуют за ценой.
Ошибка заключается в том что значения индикатора построенного на дневных барах не совпадают со значениями "таймфреймнутого" индикатора на младших барах. Достаточно посмотреть на значения индикатора в одно и тоже время на разных таймфреймах |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ошибка вот в чем. Функция LRSI никак не защищена от неопределенных значений, а когда сжимаешь цены на другой фрейм в начале получаются "пустые" данные, вот она и глючила.
Код: |
SetBarsRequired(200, 0);
function LRSI(array, gamma)
{
L0 = array;
L1 = array;
L2 = array;
L3 = array;
LRSIValue = array;
for(i = 1; i < BarCount; i++)
{
L0[i] = (1 - gamma)*array[i] + gamma*L0[i-1];
L1[i] = - gamma * L0[i] + L0[i-1] + gamma * L1[i-1];
L2[i] = - gamma * L1[i] + L1[i-1] + gamma * L2[i-1];
L3[i] = - gamma * L2[i] + L2[i-1] + gamma * L3[i-1];
CU = 0;
CD = 0;
if (L0[i] >= L1[i]) CU = L0[i] - L1[i]; else (CD = L1[i] - L0[i]);
if (L1[i] >= L2[i]) CU = CU + L1[i] - L2[i]; else CD = CD + L2[i] -L1[i];
if (L2[i] >= L3[i]) CU = CU + L2[i] - L3[i]; else CD = CD + L3[i] -L2[i];
if (CU + CD != 0) (LRSIValue[i] = CU / (CU + CD));
}
return LRSIValue;
}
Gamma_1 = Param("Gamma1", 0.5, 0.1, 1, 0.01);
//-------------Дневной тайм фрейм--------------------------------
TimeFrameSet(inDaily);
M = LRSI(Nz(C), Gamma_1);
TimeFrameRestore();
//-------------------Вернулись к часовкам------------------------
Mov = TimeFrameExpand(M, inDaily);
Plot(Mov, "Laguerre RSI", colorRed, styleLine|styleThick);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ifrm
Зарегистрирован: 16.02.2008
Сообщения: 20
|
Спасибо огромное. Теперь работает. Никогда бы не догадался. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|