Автор |
Сообщение |
iuiu
Зарегистрирован: 31.01.2015
Сообщения: 25
|
Всем привет!
Что-то не втулю, как сделать накопление индикатора, чтобы не значение выводил , а прибавлял к предыдущему.
НУ к примеру: значение считается , как C-Ref(C,-1) , если его загоню в Plot, так он и будет это выводить, а как сделать чтобы к предыдущему значению графика прибавлял текущее C-Ref(C,-1) ?
какой необычный язык программирования, мозг мне корежит, писал и в МТ и в TS индикаторы, но тут затыкаюсь на элементарных действиях |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Функция Cum() |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
iuiu
Зарегистрирован: 31.01.2015
Сообщения: 25
|
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
|
Давай сформулируем что надо.
Если
C >= Ref( C, -1 )
То
VUPP = (C - Ref( C, -1))/Ref( C, -1 )
Дальше надо суммировать эти приращения.
Цитата: |
если клоуз текущий меньше предыдущего, индикатор равен 0. |
Тут непонятно. Просто ничего не прибавляется в процессе суммирования или значение VUP обнуляется? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
iuiu
Зарегистрирован: 31.01.2015
Сообщения: 25
|
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
|
Типа так.
Код: |
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
|
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];
}
|
|
Блин, работает.
По идее 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
|
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
|
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 ); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|