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



Зарегистрирован: 07.09.2008
Сообщения: 58
Откуда: Омск

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

Ну что же, на данный момент СПАСИБО, просить помогать дальше - перекладывать работу на чужие плечи! Smile Будем думать!

_________________
Мой блог: http://analyseman.blogspot.com/
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Tsch



Зарегистрирован: 07.09.2008
Сообщения: 58
Откуда: Омск

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

Короче говоря, ничего пока не работает! Я немного изменил код, на мой взгляд более правильно и корректно индикатор рисуется вот так:
Код:
StyleLF4       = ParamStyle("Style");
DampingFactor  = Param     ("Damping factor", 0.9, 0, 1, 0.1);
SetBarsRequired(200, 0);
//Считаем индикатор на псевдо-пятиминутках (после 17-00 на фьючах будет сдвиг на три минуты хер знает куда)
function LF4(Array, Gamma)
{
   L0 = Array;
   L1 = Array;
   L2 = Array;
   L3 = Array;
   Value = Array;

   for(i = 1; i < BarCount; i = i + 5 )
   {
      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];

      Value[i] = (L0[i] + 2 * L1[i] + 2 * L2[i] + L3[i]) / 6;
   }
   
   return Value;
}
Input=C;
ValueLF4 = LF4(Input, DampingFactor);
//Считаем индикатор на минутках
function LF(Array, Gamma)
{
   L0 = Array;
   L1 = Array;
   L2 = Array;
   L3 = Array;
   Value = 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];

      Value[i] = (L0[i] + 2 * L1[i] + 2 * L2[i] + L3[i]) / 6;
   }
   
   return Value;
}
Input1=C;
ValueLF = LF(Input1, DampingFactor);

Plot(ValueLF4, "4-element Laguerre filter",colorRed, StyleLF4);
Plot(ValueLF, "4-element Laguerre filter1",colorBlue, StyleLF4);
Plot(C,"",colorBlack,styleCandle);

Но, пятиминутка почему-то получается быстрее минутки, а она наоборот должна быть более плавной! И после таких вот манипуляций, значения индикатора на минутках на сходятся со значениями на минутках без манипуляции (т.е., что были раньше!) - график стал более дерганым, что ли!

_________________
Мой блог: http://analyseman.blogspot.com/
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Фев 16, 2009 11:32 am Ответить с цитатой Вернуться к началу

Tsch писал(а):
Короче говоря, ничего пока не работает! Я немного изменил код, на мой взгляд более правильно и корректно индикатор рисуется вот так:


Нашел косяк. Верхний мой, нижний с 1 страници подфорума, разница на лицо, а главное отсутстует изменение графика с изменением DampingFactor = Param ("Damping factor", 0.8, 0, 1, 0.1); что очень странно, у себя косяков я не нашел, значит знаний не хватает, Олег помоги в чем заковыка. Smile

_________________
Юра

Последний раз редактировалось: commenced (Пн Фев 16, 2009 11:54 am), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Tsch



Зарегистрирован: 07.09.2008
Сообщения: 58
Откуда: Омск

СообщениеДобавлено: Пн Фев 16, 2009 11:51 am Ответить с цитатой Вернуться к началу

Честно говоря - не знаю! На мой взгляд кроме дополнительной нагрузки из за повторения function ошибок нет (я не хотел обидеть или упрекнуть некорректностью, просто так действительно рисуется более адекватно). Короче: сдаюсь!

Может ты прав и дело в постановке задачи, тогда попробую еще раз:
Есть: минутный график для которого считается LaGuerre.
Надо: минутный график для которого считается LaGuerre + такой же индикатор, но посчитанный для пятиминутного графика и отрисованный на минутном!

_________________
Мой блог: http://analyseman.blogspot.com/
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

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

Tsch писал(а):
Честно говоря - не знаю! На мой взгляд кроме дополнительной нагрузки из за повторения function ошибок нет (я не хотел обидеть или упрекнуть некорректностью, просто так действительно рисуется более адекватно). Короче: сдаюсь!

Может ты прав и дело в постановке задачи, тогда попробую еще раз:
Есть: минутный график для которого считается LaGuerre.
Надо: минутный график для которого считается LaGuerre + такой же индикатор, но посчитанный для пятиминутного графика и отрисованный на минутном!


Да нет ты С береш в обоих случаях с минутного графика, поэтому правельно рисоваться не будет полюбому. Блин понял, что ты имел ввиду на минутном графике в цикле I=i+5 должно быть i++ согласен с тобой полностью необратил внимания.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Tsch



Зарегистрирован: 07.09.2008
Сообщения: 58
Откуда: Омск

СообщениеДобавлено: Пн Фев 16, 2009 12:58 pm Ответить с цитатой Вернуться к началу

О как! Я из неправого оказался правым! Smile

На самом деле меня сразу смутила отрисовка графика, по-этому я плясал от нее когда говорил о корректности отображения, а не о корректности кода. С другой сторон, в моем варианте нет объяснения тому, почему минутный LaGuerre отображается более адекватно, но со значительными искажениями...

Я так и не понял, почему не работает i+5, ведь должно же браться в этом случае каждое пятое значение. Разве нет?

_________________
Мой блог: http://analyseman.blogspot.com/
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


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

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

Держите. Думаю разберетесь
Код:

// 4-element Laguerre filter.
// Begin common parameters section
ColourLF4      = ParamColor("Colour", colorRed);
StyleLF4       = ParamStyle("Style");
DampingFactor  = Param     ("Damping factor", 0.8, 0, 1, 0.1);
// End common parameters section

SetBarsRequired(200, 0);

Input = C;
Gamma = DampingFactor ;
function LF4(Array, DampingFactor)
{
   L0 = (1 - Gamma) * Array + Gamma * AMA(0, 0);
   L1 = - Gamma     * L0    + Ref(L0, -1) + Gamma * AMA(0, 0);
   L2 = - Gamma     * L1    + Ref(L1, -1) + Gamma * AMA(0, 0);
   L3 = - Gamma     * L2    + Ref(L2, -1) + Gamma * AMA(0, 0);

   Value = (L0 + 2 * L1 + 2 * L2 + L3) / 6;
return Value;
}

TimeFrameSet(inHourly);
   ValueLF4H = LF4(Input, DampingFactor);
TimeFrameRestore();
ValueLF4H = TimeFrameExpand(ValueLF4H, inHourly);
 
Plot(LF4(Input, DampingFactor), "4-element Laguerre filter", ColourLF4, StyleLF4);
Plot(ValueLF4H, "Laguerre filter", colorBlue, StyleLF4);

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


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

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

Только надо проверить, но вроде правильно. Smile

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


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

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

Tsch писал(а):
О как! Я из неправого оказался правым! Smile

На самом деле меня сразу смутила отрисовка графика, по-этому я плясал от нее когда говорил о корректности отображения, а не о корректности кода. С другой сторон, в моем варианте нет объяснения тому, почему минутный LaGuerre отображается более адекватно, но со значительными искажениями...

Я так и не понял, почему не работает i+5, ведь должно же браться в этом случае каждое пятое значение. Разве нет?


Если бы ты был прав, то код бы получился Smile

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Tsch



Зарегистрирован: 07.09.2008
Сообщения: 58
Откуда: Омск

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

При первом тестировании - даже близко не то, то что нужно! Sad

1. Откуда и зачем взялась АМА?
2. Наверное надо так:
Код:
function LF4(Array, Gamma)

а не:
Код:
function LF4(Array, DampingFactor)

3. Ну почему часовик???

Олег, на графике вообще ерунда какая-то рисуется! Sad

_________________
Мой блог: http://analyseman.blogspot.com/
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Tsch



Зарегистрирован: 07.09.2008
Сообщения: 58
Откуда: Омск

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

Ответ на первый вопрос я нашел сам: АМА взялась потому, что надо читать хэлп, там написано, какому циклу эквивалентна АМА, но, что писать в скобках???

_________________
Мой блог: http://analyseman.blogspot.com/
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


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

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

Блин. Накосячил что-то. Ща проверю.

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


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

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

000 писал(а):
Только надо проверить, но вроде правильно. Smile


Нет, он еще хуже наших. Smile) Олег дак почему мой код не прет, я даже так пробывал
Код:
Gamma  = Param     ("Gamma", 0.8, 0, 1, 0.1);
Gamma1  = Param     ("Gamma1", 0.8, 0, 1, 0.1);
SetBarsRequired(200, 0);
TimeFrameSet(in5Minute);
Array=C;
TimeFrameRestore(in1Minute);
Array = TimeFrameExpand(Array, in5Minute);
Array1=C;

function LF1(Array, Gamma)
{
   L0 = Array;
   L1 = Array;
   L2 = Array;
   L3 = Array;
   Value = Array;

   for(i = 0; i < BarCount; i = i + 5 )
   {
   if(i < 5)
 {
L0[i] = (1 - Gamma) * Array[i] + Gamma           * L0[i];
      L1[i] = - Gamma     * L0[i]    + L0[i] + Gamma * L1[i];
      L2[i] = - Gamma     * L1[i]    + L1[i] + Gamma * L2[i];
      L3[i] = - Gamma     * L2[i]    + L2[i] + Gamma * L3[i];

      Value[i] = (L0[i] + 2 * L1[i] + 2 * L2[i] + L3[i]) / 6;
 }
      else
      {

      L0[i] = (1 - Gamma) * Array[i] + Gamma           * L0[i-5];
      L1[i] = - Gamma     * L0[i]    + L0[i-5] + Gamma * L1[i-5];
      L2[i] = - Gamma     * L1[i]    + L1[i-5] + Gamma * L2[i-5];
      L3[i] = - Gamma     * L2[i]    + L2[i-5] + Gamma * L3[i-5];

      Value[i] = (L0[i] + 2 * L1[i] + 2 * L2[i] + L3[i]) / 6;
   }
     
 }
   return Value;
}

function LF2(Array1, Gamma1)
{
   L01 = Array1;
   L11 = Array1;
   L21 = Array1;
   L31 = Array1;
   Value1 = Array1;

   for(i = 1; i < BarCount; i ++ )
   {
      L01[i] = (1 - Gamma1) * Array1[i] + Gamma1           * L01[i-1];
      L11[i] = - Gamma1     * L01[i]    + L01[i-1] + Gamma1 * L11[i-1];
      L21[i] = - Gamma1     * L11[i]    + L11[i-1] + Gamma1 * L21[i-1];
      L31[i] = - Gamma1     * L21[i]    + L21[i-1] + Gamma1 * L31[i-1];

      Value1[i] = (L01[i] + 2 * L11[i] + 2 * L21[i] + L31[i]) / 6;
   }
     
   return Value1;
}

ValueLF1 = LF1(Array, Gamma);
ValueLF2 = LF2(Array1, Gamma1);



Plot(ValueLF1, "4-element Laguerre filter", 6, 1);
Plot(ValueLF2, "4-element Laguerre filter1", 4, 1);


Кстати добавь о, а то както мне несолидно Smile

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Tsch



Зарегистрирован: 07.09.2008
Сообщения: 58
Откуда: Омск

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

""Уже близко, но меня немного смущает даже не то, что не рисуется фильтр по пятиминутке, а то, что минутка рисуется немножко кривовато! Sad Это-то почему так?""

Все, решил проблему, почему-то из кода не изменялись параметры - пришлось их вручную устанавливать - странно! Минутка теперь отображается так, как надо!

Слушай, а почему у тебя в цикле i+5 осталось? Ты же уже не минутки берешь, а в пятиминутки пережимаешь график! Если заменить на i++, пусть себе пятиминутки и считает!?

_________________
Мой блог: http://analyseman.blogspot.com/
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Tsch



Зарегистрирован: 07.09.2008
Сообщения: 58
Откуда: Омск

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

На мой взгляд должно быть что-то близкое к этому:
Код:
DampingFactor  = Param     ("Gamma", 0.9, 0, 1, 0.1);
DampingFactor1  = Param     ("Gamma1", 0.9, 0, 1, 0.1);
SetBarsRequired(1000, 0);

function LF1(Array, Gamma)
{
   L0 = Array;
   L1 = Array;
   L2 = Array;
   L3 = Array;
   Value = 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];

      Value[i] = (L0[i] + 2 * L1[i] + 2 * L2[i] + L3[i]) / 6;
   }
   
   return Value;
}

function LF2(Array1, Gamma1)
{
   L01 = Array1;
   L11 = Array1;
   L21 = Array1;
   L31 = Array1;
   Value1 = Array1;

   for(i = 1; i < BarCount; i ++ )
   {
      L01[i] = (1 - Gamma1) * Array1[i] + Gamma1           * L01[i-1];
      L11[i] = - Gamma1     * L01[i]    + L01[i-1] + Gamma1 * L11[i-1];
      L21[i] = - Gamma1     * L11[i]    + L11[i-1] + Gamma1 * L21[i-1];
      L31[i] = - Gamma1     * L21[i]    + L21[i-1] + Gamma1 * L31[i-1];

      Value1[i] = (L01[i] + 2 * L11[i] + 2 * L21[i] + L31[i]) / 6;
   }
     
   return Value1;
}

TimeFrameSet(in5Minute);
Array=C;
ValueLF1 = LF1(Array, DampingFactor);
TimeFrameRestore(in1Minute);
Array = TimeFrameExpand(Array, in5Minute);

Array1=C;
ValueLF2 = LF2(Array1, DampingFactor1);

Plot(TimeFrameExpand(ValueLF1,in5Minute), "4-element Laguerre filter", colorRed, 1);
Plot(ValueLF2, "4-element Laguerre filter1", colorGreen, 1);
Plot(C, "", colorBlack, styleCandle);

Но почему-то пишет, что EMPTY! Sad

_________________
Мой блог: http://analyseman.blogspot.com/
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen