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



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

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

Всем привет!
Что-то не втулю, как сделать накопление индикатора, чтобы не значение выводил , а прибавлял к предыдущему.
НУ к примеру: значение считается , как C-Ref(C,-1) , если его загоню в Plot, так он и будет это выводить, а как сделать чтобы к предыдущему значению графика прибавлял текущее C-Ref(C,-1) ?
какой необычный язык программирования, мозг мне корежит, писал и в МТ и в TS индикаторы, но тут затыкаюсь на элементарных действияхSmile
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Функция Cum()

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



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

СообщениеДобавлено: Сб Дек 17, 2016 4:58 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Функция Cum()

Доброго времени суток!
НЕ можете подсказать, где ошибка?

VUPP = IIf ( C >= Ref( C, -1 ), (C - Ref( C, -1))/Ref( C, -1 ), 0);
i = 0;
while ( VUPP [i] > 0);
{
i++;
}

VUP = IIf (i>1, Sum (VUPP,i), VUPP);
Plot( VUP , _DEFAULT_NAME(), colorDefault, 1 );

Индикатор должен суммировать приращения клоузов, если текущий больше предыдущего, т.е. при росте, суммируются приращения, если клоуз текущий меньше предыдущего, индикатор равен 0. У меня часть складывает, часть нет..
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Давай сформулируем что надо.
Если
C >= Ref( C, -1 )
То
VUPP = (C - Ref( C, -1))/Ref( C, -1 )
Дальше надо суммировать эти приращения.
Цитата:
если клоуз текущий меньше предыдущего, индикатор равен 0.

Тут непонятно. Просто ничего не прибавляется в процессе суммирования или значение VUP обнуляется?

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



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

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

000 писал(а):
Давай сформулируем что надо.
Если
C >= Ref( C, -1 )
То
VUPP = (C - Ref( C, -1))/Ref( C, -1 )
Дальше надо суммировать эти приращения.
Цитата:
если клоуз текущий меньше предыдущего, индикатор равен 0.

Тут непонятно. Просто ничего не прибавляется в процессе суммирования или значение VUP обнуляется?


значение VUP обнуляется, что равносильно значению индикатора для текущего бара = 0.
Нужны такие зигзаги, пока клоусы растут, сумма дельт растет, если клоус стал меньше предыдущего, то значение индикатора для этого бара = 0.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Типа так.
Код:

VUPP = (C - Ref( C, -1))/Ref( C, -1 );

VUP = 0;

for(i = 1; i < BarCount; i++)
{
   if(C[i] > C[i-1] )
      VUP[i] = VUP[i - 1] + VUPP[i];
}

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



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

СообщениеДобавлено: Сб Дек 17, 2016 11:27 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Типа так.
Код:

VUPP = (C - Ref( C, -1))/Ref( C, -1 );

VUP = 0;

for(i = 1; i < BarCount; i++)
{
   if(C[i] > C[i-1] )
      VUP[i] = VUP[i - 1] + VUPP[i];
}


Блин, работаетSmile.

По идее VUPP = (C - Ref( C, -1))/Ref( C, -1 ); вообще здесь не нужен

А достаточно VUP[i] = VUP[i - 1] + VUPP[i]; заменить на VUP[i] = VUP[i - 1] + C[i] - C[i-1] ;
Посмотреть профиль Отправить личное сообщение
trashfx



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

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

You guys should not use loop where there is no loop required at all.

Use array processing!

Instead of this

Код:
VUPP = ( C - Ref( C, -1 ) ) / Ref( C, -1 );

bullish = C > Ref(C, -1); // or ROC(C, 1) > 0;

VUP = 0;
for(i = 1; i < BarCount; i++)
{
   if( bullish[i] )
      VUP[i] = VUP[i - 1] + VUPP[i];
}

Plot( VUP, "VUP loop", colorYellow, styleLine );



You can simply write (much shorter and faster!)

Код:
VUPP = ( C - Ref( C, -1 ) ) / Ref( C, -1 );

bullish = C > Ref(C, -1); // or ROC(C, 1) > 0;

VUP = Cum( VUPP ) - ValueWhen( !bullish, Cum( VUPP ) );

Plot( VUP, "VUP CUM/ValueWhen", colorOrange, styleLine );



Or since AmiBroker 6.06 you can use SumSince (even shorter and faster!)

Код:
VUPP = ( C - Ref( C, -1 ) ) / Ref( C, -1 );

bullish = C > Ref(C, -1); // or ROC(C, 1) > 0;

vup = SumSince( !bullish, VUPP );

Plot( VUP, "VUP SumSince", colorRed, styleLine );


https://www.amibroker.com/guide/afl/sumsince.html
Посмотреть профиль Отправить личное сообщение
trashfx



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

СообщениеДобавлено: Вс Дек 18, 2016 5:03 pm Ответить с цитатой Вернуться к началу

Another version using ProdSince of AmiBroker 6.12
http://www.amibroker.com/devlog/wp-content/uploads/2016/04/readme6120.html

Код:
VUPP =  C / Ref( C, -1 );

bullish = C > Ref(C, -1); // or ROC(C, 1) > 0;

vup = ProdSince( !bullish, VUPP ) - 1;

Plot( VUP, "VUP ProdSince", colorRed, styleLine );
//Plot( VUP * 100, "VUP ProdSince", colorRed, styleLine );
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen