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


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

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

Tsch писал(а):


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


Потому и остолось, что сжимаю только С, а цикл считается на родном фрейме.

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


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

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

Блин. Пытался сделать этот Laguerre filter без цикла. Ничего не получается... (

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


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

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

000 писал(а):
Блин. Пытался сделать этот Laguerre filter без цикла. Ничего не получается... (



Да блин Олег объясни почему мой код не прет, ведь вроде по правилам все. Можно своими словами. За "О" спасибо, если всетаки с циклами до конца разберусь можно будет и "в" попросить Smile

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


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

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

Поздно вечером посмотрю. Сейчас башка не варит. Еще расстроился, что без цикла не получилось...

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


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

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

000 писал(а):
Поздно вечером посмотрю. Сейчас башка не варит. Еще расстроился, что без цикла не получилось...


Начни пожалуста с ответа почему не получается с циклом, на решение самой проблемы уже пофигу.

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


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

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

Ок

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


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

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

Фу. ЁЁЁЁЁЁЁЁ. Заработало.
Фигня в том, что при сжатии массива на другой фрейм в самом начаеле графика у сжатого массива получаются неопределенные значения. Поэтому цикл не работает. Дело легко правится функцией NZ()
Вот рабочий код
Код:

// 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(200000, 0);

function LF4(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;
}

HC = Nz(TimeFrameCompress(C, inHourly));
InputH = HC;
ValueLF4H = LF4(InputH, DampingFactor);
ValueLF4H = TimeFrameExpand(ValueLF4H, inHourly);

ValueLF4 = LF4(C, DampingFactor);

Plot(ValueLF4H , "in Hourly", colorRed);
Plot(ValueLF4 , "in 15 min", colorBlue);
Plot(C, "", colorBlack, styleCandle);

Предвижу вопрос почему inHourly. Да потому, что у меня данные 15 мин, а качать минутки специально для этого случая - ломы. Какая разница? Smile

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



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

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

Олег, commenced, спасибо вам большое за помощь...
ждите - когда я с закрытием половины так и не смогу разобраться, снова обращусь! Very Happy

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


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

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

000 писал(а):
Фу. ЁЁЁЁЁЁЁЁ. Заработало.
Фигня в том, что при сжатии массива на другой фрейм в самом начаеле графика у сжатого массива получаются неопределенные значения. Поэтому цикл не работает. Дело легко правится функцией NZ()
Вот рабочий код


Олег извени, но половинчатый ответ получается, хотя ты обещал ответить на мой вопрос в первую очередь. Меня интересует почему не меняется график с изменением Gamma и что вообще не правильно сделано

Код:
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);

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


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

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

Вот. Теперь есть конкретный код и конкретный вопрос. Чуток попозже займусь.

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


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

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

Gamma1 у меня нрмально меняет параметры линии.
Gamma не стала менять пока не исправил строку
Код:

Array = TimeFrameExpand(Array, in5Minute);

на
Код:

Array = Nz(TimeFrameExpand(ArrayH, in5Minute));

Когд исправил - заработала прекрасно.
Кроме того я еще поменял названия Array на другое, т.к. не уверен когда переменные переходят фнутрь функций, а когда нет и мне не понравилось, что возможно массив Array заданный в самом начале используется внутри ф-ции. Вдруг они не независимы (я в этом вопросе плаваю)
Сама идея использовать цикл i = i + 5 мне не очень понравилась т.к. подразумевает, что 5 минутки получаются всегда через 5 баров. А если инструмент малоактивный и в данных присутствует не каждая минута или фрейм не кратный. то шаг вообще получается переменный.

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


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

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

000 писал(а):
Gamma1 у меня нрмально меняет параметры линии.
Gamma не стала менять пока не исправил строку
Код:

Array = TimeFrameExpand(Array, in5Minute);

на
Код:

Array = Nz(TimeFrameExpand(ArrayH, in5Minute));

Когд исправил - заработала прекрасно.
Кроме того я еще поменял названия Array на другое, т.к. не уверен когда переменные переходят фнутрь функций, а когда нет и мне не понравилось, что возможно массив Array заданный в самом начале используется внутри ф-ции. Вдруг они не независимы (я в этом вопросе плаваю)
Сама идея использовать цикл i = i + 5 мне не очень понравилась т.к. подразумевает, что 5 минутки получаются всегда через 5 баров. А если инструмент малоактивный и в данных присутствует не каждая минута или фрейм не кратный. то шаг вообще получается переменный.


Скинь пожалуста полученный код, а то чета не все понял.

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


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

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

Вот
Код:

Gamma   = Param("Gamma",  0.8, 0, 1, 0.1);
Gamma1  = Param("Gamma1", 0.8, 0, 1, 0.1);

SetBarsRequired(200, 0);

TimeFrameSet(inHourly);
   ArrayH = C;
TimeFrameRestore();
ArrayH = Nz(TimeFrameExpand(ArrayH, inHourly));

Array = C;

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

   for(i = 0; i < BarCount; i = i + 5 )
   {
   if(i < 5)
 {
L0[i] = (1 - Gamma) * Array1[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) * Array1[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(Array2, Gamma1)
{
   L01 = Array2;
   L11 = Array2;
   L21 = Array2;
   L31 = Array2;
   Value1 = Array2;

   for(i = 1; i < BarCount; i ++ )
   {
      L01[i] = (1 - Gamma1) * Array2[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(ArrayH, Gamma1);



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

Правда синую линию он криво рисует (у меня) Я сразу забыл про это сказть. Самое главное (как я понял) параметр работает.

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


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

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

000 писал(а):
Вот

Правда синую линию он криво рисует (у меня) Я сразу забыл про это сказть. Самое главное (как я понял) параметр работает.


Спасибо, именно это и интересовало.

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


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

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

А почему криво это я не знаю. А думалка устала и работать не хочет. Smile

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen