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



Зарегистрирован: 19.01.2008
Сообщения: 162
Откуда: ... теперь Москва

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

Написал небольшой код - выводит на дисплей побарно так называемый Тотал райс . Но в АФЛ пока не очень и хотелось бы подправить код , а то слишком коряво .
Код:
_SECTION_BEGIN("Total_Rise 1 2");

SetBarsRequired(500000, 500000);
res = 0;
start_point = 0;

for( i=1;i<BarCount; i++)
{
   res[i] = (C[i] -O[i])/O[i]*100;

   if((res[i-1]<0 & res[i]>0) | (res[i-1]>0 & res[i]<0))
    {
      start_point[i] = O[i];
      res[i] = (C[i] - start_point[i])/start_point[i]*100;
    }
 
   if((res[i-1]>0 & res[i]>0)|(res[i-1]<0 & res[i]<0))
    {
      start_point[i] = start_point[i-1];
      res[i] = (C[i]- start_point[i])/start_point[i]*100;
    }

   if((C[i]==O[i]) & (C[i]>C[i-1])|(C[i]==O[i]) & (C[i]<C[i-1]))
    {
      start_point[i] = start_point[i-1];
      res[i] = (C[i]- start_point[i])/start_point[i]*100;
    }
  if((O[i]>C[i-1] & C[i]>=int(C[i-1]) & res[i-1]>0)|(O[i]<C[i-1] & C[i]<=int(C[i-1]) & res[i-1]<0))
    {
      start_point[i] = start_point[i-1];
      res[i] = (C[i]- start_point[i])/start_point[i]*100;
    }

    if(res[i]>0)
     Color[i] = colorLime;
   else
     Color[i] = colorRed;
}

Plot(res,"Total_Rise %.",Color,styleHistogram|styleThick);

Title ="<< TOTAL_RISE >>               Total_Rise : " + Prec(res,2) + "% ,    START_POINT : " + start_point ;
_SECTION_END();
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Тогда напиши алгоритм. Потому, что ковырять чужой код чтобы понять идею и потом реализовывать по новому занятие не из приятных....

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



Зарегистрирован: 19.01.2008
Сообщения: 162
Откуда: ... теперь Москва

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

Да-да извиняюсь , что сразу не описал идею.
В общем идея следующая.
Произвести подсчёт абсолютного приращения цены с начала её роста .
За абсолютный прирост считаем Close - Open , при этом если драйв продолжается и на следующий день, то за точку отсчёта берём Open первого дня роста и так далее . И некоторые подробности в коде - например , если открытие и закрытие сегодня больше чем закрытие вчерашнего дня ( гэп ) , то счиатем Close сегодня - Open первого дня .
Вот вроде всё .
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

А как определяем начало драйва и его конец?
Черная свеча или закрытие выше вчерашнего или еще как?

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



Зарегистрирован: 19.01.2008
Сообщения: 162
Откуда: ... теперь Москва

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

Начало драйва - первая белая свеча ( т.е. где (С-О)>0 ).
Окончание - свеча с чёрным телом ((С-О)<0 ) , а так же закрытие новой чёрной свечи должно быть ниже закрытия предыдущей белой ( вариант когда закрытия равны считаю продолжением роста ) .
Конечно с многим можно поспорить - но думаю без таких приближений не обойтись.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Сен 10, 2009 10:34 pm Ответить с цитатой Вернуться к началу

Один из вариантов (с циклом). Твой совсем не смотрел.
Код:

Begin = C > O;
end = C < O AND C < Ref(C, -1);
ras = 0;
Total_Rise = 0;

for( i = 2; i < BarCount; i++)
{
   if(Begin[i] AND ras[i-1] == 0)          // начало роста при том, что на предыдущем баре роста не было
   {
      rasBegin = O[i];                      // запоминаем значение открытия в момент начала роста
      ras[i] = 1;                           // рост
      Total_Rise[i] = C[i] - rasBegin;
   }
   else if(Ras[i-1] == 1 AND end[i] == 0 ) // рост и его окончание не наступило
   {
      Total_Rise[i] = C[i] - rasBegin;
      ras[i] = 1;                           // рост
   }
}
Plot(Total_Rise, "", colorRed);

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


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

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

Вариант без цикла
Код:

Begin = C > O;
end = C < O AND C < Ref(C, -1);

Begin = ExRem(Begin, end);      // фильтр лишних начал
end = ExRem(end, Begin);        // фильтр лишних окончаний
ras = Flip(Begin, end);         // рост
rasBegin = ValueWhen(Begin, O); // значение Опен в начале роста
Total_Rise = IIf(ras, C - rasBegin, 0);  // если рост, то Total_Rise = закрытие - открытие в начале роста
Plot(Total_Rise, "", colorBlue);

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



Зарегистрирован: 19.01.2008
Сообщения: 162
Откуда: ... теперь Москва

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

Вечерком посмотрю и сравню с своим , как оно выглядит .
Олег , у тебя как всегда - всё кратко и лаконично в коде , а главное в точку .
Спасибо .
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen