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


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

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

Код:

MA1 = MA( Close, 10);
MA2 = MA( Close, 30);
d = High - Low;

MA3 = IIf( MA1 < MA2, MA1 - 5*d, MA2 + 5*d);

Plot( MA1, "", colorRed, styleLine);
Plot( MA2, "", colorGreen, styleLine);

Plot( MA3, "", colorBlue, styleDots  );

Plot( Close, "", colorBlack, styleCandle);
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Сергей



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

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

BabyBear писал(а):
Код:

MA1 = MA( Close, 10);
MA2 = MA( Close, 30);
d = High - Low;

MA3 = IIf( MA1 < MA2, MA1 - 5*d, MA2 + 5*d);

Plot( MA1, "", colorRed, styleLine);
Plot( MA2, "", colorGreen, styleLine);

Plot( MA3, "", colorBlue, styleDots  );

Plot( Close, "", colorBlack, styleCandle);

А чего за код такой хитрый?
Посмотреть профиль Отправить личное сообщение
BabyBear
Советник


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

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

Сергей писал(а):
А чего за код такой хитрый?

Это ответ на пост commenced
Посмотреть профиль Отправить личное сообщение Отправить e-mail
commenced
Советник


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

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

BabyBear писал(а):
Сергей писал(а):
А чего за код такой хитрый?

Это ответ на пост commenced


Не, не на мой точно, посмотри пожалуста внимательнее мой код линий и расчет их периода, и описание того что я хочу получить.

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


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

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

commenced писал(а):
Не, не на мой точно, посмотри пожалуста внимательнее мой код линий и расчет их периода, и описание того что я хочу получить.

Я же знаю на какой пост отвечал, как думаешь? Я написал, как из двух линий сделать одну. вопрос ведь про это был. Если тебе не понятно, как каждую из линий получить - напиши подробное описание словами
Посмотреть профиль Отправить личное сообщение Отправить e-mail
commenced
Советник


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

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

BabyBear писал(а):
commenced писал(а):
Не, не на мой точно, посмотри пожалуста внимательнее мой код линий и расчет их периода, и описание того что я хочу получить.

Я же знаю на какой пост отвечал, как думаешь? Я написал, как из двух линий сделать одну. вопрос ведь про это был. Если тебе не понятно, как каждую из линий получить - напиши подробное описание словами


Нет, потому что ты не разбирался в том, что нужно спрашиваюшему.

2 кривые (которые не могут существавать одновременно) точкой начала расчета и отрисовки первой линии является условие когда вторая линия становиться выше своей средней и хая, но самое главное это взаимо зависимость периодов (для этого цикл и требуется)
Cond1 = d1<g1 AND H>g1;
count1 = BarsSince(Signal1);
g = Ref(с,-1)-LLV(Ref(H-L,-1),count2);
d = EMA(g,3);

После того как первая линия становиться ниже средней и лоу, начинается отрисовка второй лини.
Cond2 = d<g AND H>g;
count2 = BarsSince(Signal2);
g1 = Ref(с,-1)+LLV(Ref(H-L,-1),count2);
d1 = EMA(g,3);

По окончании цикла, добовляем
P = iif(d1==1,d1,d);
Plot(P,"P", 6,1);

и получаем линию типа параболика.

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


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

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

commenced писал(а):

d = EMA(g,3);
d1 = EMA(g,3);

здесь нет ошибки?
Посмотреть профиль Отправить личное сообщение Отправить e-mail
commenced
Советник


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

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

BabyBear писал(а):
commenced писал(а):

d = EMA(g,3);
d1 = EMA(g,3);

здесь нет ошибки?


Есть, d1 = EMA(g1,3);

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


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

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

commenced писал(а):

Cond1 = d1<g1 AND H>g1;
Cond2 = d<g AND H>g;

а тут нет ?
по моему должно быть где то
g>L
Посмотреть профиль Отправить личное сообщение Отправить e-mail
BabyBear
Советник


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

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

Примерно так. Ошибки не искал особо

Код:

C1 = Ref( Close, -1);
S1 = Ref( High - Low, -1);

period = 3;

g = C1;
g1 = C1;

for( i=0; i<period ; i++)
{
   g[i] = C1[i] - S1[i];
   g1[i] = C1[i] + S1[i];
}

bar1 = 3;
bar2 = 3;
sig1 = True;
sig2 = False;

asig1 = True;
asig2 = False;

my_llv=0;
my_llv1=0;

for( i=period; i<BarCount; i++)
{

      my_llv[i] = S1[ bar2];
      for( j = bar2 + 1; j<i; j++)
      {
         if( my_llv[i] > S1[ j])
            my_llv[i] = S1[ j];
      }
      g[i] = C1[i] - my_llv[i];

      my_llv1[i] = S1[ bar1];
      for( j = bar1 + 1; j<i; j++)
      {
         if( my_llv1[i] > S1[ j])
            my_llv1[i] = S1[ j];
      }
      g1[i] = C1[i] + my_llv1[i];


   // здесь не ema, но средняя
   d[i] = 0;
   d1[i] = 0;
   for( j= i-period; j<i; j++)
   {
      d[i] = d[i] + g[j] / period;
      d1[i] = d1[i] + g1[j] / period;
   }

   if ( sig2)
      if( (d1[i] < g1[i]) && ( g1[i] < High[i]))
      {
         sig1 = True;
         sig2 = False;
         bar1 = i;
      }
      

   if ( sig1)
      if( (d[i] < g[i]) && ( g[i] > Low[i]))
      {
         sig1 = False;
         sig2 = True;
         bar2 = i;
      }

   asig1[i] = sig1;
   asig2[i] = sig2;
}




Plot( IIf( asig1, g, g1), "", IIf( asig1, colorRed, colorBlue), styleDots  );

Plot( Close, "", colorBlack, styleCandle);


Последний раз редактировалось: BabyBear (Сб Янв 24, 2009 6:13 pm), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение Отправить e-mail
commenced
Советник


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

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

Спасибо

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


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

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

commenced писал(а):
Спасибо

я только что исправил текст. Там очевидно есть еще ошибки, но направление правильное Smile

вот тут
Код:
if( (d[i] < g[i]) && ( g[i] > Low[i]))

я уже исправил, но возможно надо так
Код:
if( (d[i] > g[i]) && ( g[i] > Low[i]))
Посмотреть профиль Отправить личное сообщение Отправить e-mail
commenced
Советник


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

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

BabyBear писал(а):
commenced писал(а):
Спасибо

я только что исправил текст. Там очевидно есть еще ошибки, но направление правильное Smile

вот тут
Код:
if( (d[i] < g[i]) && ( g[i] > Low[i]))

я уже исправил, но возможно надо так
Код:
if( (d[i] > g[i]) && ( g[i] > Low[i]))


Верной дорогой идем товарищи! Smile Я уже заметил эту ошибку и поправил, прошу прощение за ляпы в посте. Теперь вопрос по коду, 3 введена для первого расчета после чего период плавает я правильно понял? Просто если это так то почему изменив период = 5, получается совершенно другая отрисовка.

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


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

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

в начале поменяй
Код:

bar1 = period ;
bar2 = period ;

period - это период ema()
Посмотреть профиль Отправить личное сообщение Отправить e-mail
commenced
Советник


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

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

Код:
my_hhv=0;
my_hhv1=0;

for( i=period+1; i<BarCount; i++)
{

      my_hhv[i] = S1[ bar2];
      for( j = bar2 + 1; j<i; j++)
      {
         if( my_hhv[i] < S1[ j])
            my_hhv[i] = S1[ j];
      }
      g[i] = C1[i] - my_hhv[i];

      my_hhv1[i] = S1[ bar1];
      for( j = bar1 + 1; j<i; j++)
      {
         if( my_hhv1[i] < S1[ j])
            my_hhv1[i] = S1[ j];
      }
      g1[i] = C1[i] + my_hhv1[i];


Заменил эту часть чтоб брался не минимум а максимум выдает бред и грвфик плывет, почему?

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen