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



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

СообщениеДобавлено: Пт Июн 26, 2015 10:44 am Ответить с цитатой Вернуться к началу

Привет! Хочу сравнить две вещи
1. Объем бара со средним объемом баров в это же время но в течении последних 5 дней
Например: для бара в 9-30 хочу знать какой средний объем у баров в 9-30 за последние 5 дней.
2.Аналогично количество баров и суммарный объем за промежуток с 8утра до 9 сравнить с аналогичными значениями за последние 5 дней (текущий не включаем)
Пробовал
per = 10;
dt = DateNum();
End = TimeNum();

SumVolum = 0;
for(i = 1; i > 0; i--)
{
SumVolum = SumVolum + ValueWhen(End AND dt-i, Volume);
}
AverageVolum = SumVolum/per;

Лыжи не поехали
Что может не так быть?

пасибо!
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Июн 26, 2015 4:10 pm Ответить с цитатой Вернуться к началу

Код:

N = 5; // скока дней

BT = TimeNum();
SumVolum = 0;

for(i = 1; i <= N; i++)
{
    SumVolum = SumVolum + ValueWhen(BT, Volume, N);
}
AverageVolum = SumVolum/N;


Я бы так сделал. Писал не в Ами а прямо тут. Разумеется не проверял.

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



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

СообщениеДобавлено: Пт Июн 26, 2015 7:33 pm Ответить с цитатой Вернуться к началу

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

N = 5; // скока дней

BT = TimeNum();
SumVolum = 0;

for(i = 1; i <= N; i++)
{
    SumVolum = SumVolum + ValueWhen(BT, Volume, N);
}
AverageVolum = SumVolum/N;


Я бы так сделал. Писал не в Ами а прямо тут. Разумеется не проверял.


Нет, такой вариант не работает.
Он что-то иное считает - вроде ближние бары просто
Посмотреть профиль Отправить личное сообщение
max



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

СообщениеДобавлено: Пт Июн 26, 2015 8:13 pm Ответить с цитатой Вернуться к началу

И еще хотел уточнить - не могу найти в хелпе - может ли Ами в АФЛ определять какой ТФ активный?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Июн 26, 2015 9:52 pm Ответить с цитатой Вернуться к началу

Функция показывающая текущий фрейм
Interval()

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


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

СообщениеДобавлено: Пт Июн 26, 2015 9:53 pm Ответить с цитатой Вернуться к началу

Смысл кода вот такой
SumVolum = ValueWhen(BT, Volume, 1) + ValueWhen(BT, Volume, 2) + ValueWhen(BT, Volume, 3) + ValueWhen(BT, Volume, 4)...;

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



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

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

000 писал(а):
Смысл кода вот такой
SumVolum = ValueWhen(BT, Volume, 1) + ValueWhen(BT, Volume, 2) + ValueWhen(BT, Volume, 3) + ValueWhen(BT, Volume, 4)...;


ну мне тоже так же показалось но когда я проверил в экселе - у меня данные не сошлись Sad
я несколько вариантов перепробовал - хрень выходит
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Июн 28, 2015 1:11 am Ответить с цитатой Вернуться к началу

Вроде так работает, но тормозит...
Код:

SetBarsRequired(sbrAll, sbrAll);

N = 5; // скока дней

BT = TimeNum();
SumVolum = 0;

for(i = 3; i < BarCount; i++)
{
   j = T = 0;
   do
   {
      j++;
      if(BT[i] == BT[i-j])
      {
         T++;
         SumVolum[i] = SumVolum[i] + V[i-j];
         if (T == N)
            break;
      }
   } while ( (j < i) );
}

AverageVolum1 = SumVolum/N;

Plot(AverageVolum1, "AverageVolum", colorRed, styleArea|styleOwnScale);

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



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

СообщениеДобавлено: Вс Июн 28, 2015 6:28 am Ответить с цитатой Вернуться к началу

ну да - тормозим сильно
ну хоть так - спасибо
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Июн 28, 2015 8:39 am Ответить с цитатой Вернуться к началу

Я еще подумаю. Мне так не нравится.

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



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

СообщениеДобавлено: Сб Июл 25, 2015 4:02 pm Ответить с цитатой Вернуться к началу

Hi,

I've read your discussion with auto-translator and just wanna give a short comment.

Guys, all your calculations are not correct (the last one is too slow on top of that) if comparing it with my AFL done some time ago.
http://i.imgur.com/ZCHV2eF.png
In the upper chart pane it is your last posted AFL and at the very bottom there is mine which is more than 90%(!) faster with correct calculation.

Hint: I iterate through timenums (converted to other resolution and TF specific increment) and then through barcount backwards to pick each bar's values (of same timenum). Instead of barcount loop you may use newer functions of recent AB development cycle.
Посмотреть профиль Отправить личное сообщение
trashfx



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

СообщениеДобавлено: Сб Июл 25, 2015 4:14 pm Ответить с цитатой Вернуться к началу

trashfx писал(а):

In the upper chart pane it is your last posted AFL and at the very bottom there is mine which is more than 90%(!) faster with correct calculation.


How do I know that my calculations are correct ones? Well, I can prove it visually.

Let's see an average 5-day value of 6938 (of same bar times) at 30-minute bar time 09:30.
http://i.imgur.com/B66Ywbf.png

For better view let's look at two dimensional matrix view in Exploration using averaging period of 5 days. There we see very same last value of 6938 at time column 09:30
http://i.imgur.com/xYW8Xhz.png

Now let's set to period 1 and add up last 5 values and divide by 5 then we get 6938 too http://i.imgur.com/kU5KPTT.png
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Июл 26, 2015 12:57 am Ответить с цитатой Вернуться к началу

I don't like my code. I wrote this. If you have a better idea, show. Because you can write a plugin with the corresponding function. It will be very fast.

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



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

СообщениеДобавлено: Вс Июл 26, 2015 3:38 pm Ответить с цитатой Вернуться к началу

Цитата:
I don't like my code. I wrote this.


Yes, but I was trying to point out that it is not just slow but calculation is wrong also.

Цитата:
If you have a better idea, show.


See my hint above iterate from starttime to endtime in seconds and increment is Interval(). Within loop convert back to timenum value and make condition ....

Also look at read me of AB 5.91 in development log.


Цитата:
Because you can write a plugin with the corresponding function. It will be very fast.


You don't need a plugin. Is is fast with pure AFL as seen above.
http://i.imgur.com/pgiKXcl.png 16ms vs. 570ms without any plugin
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Июл 27, 2015 12:16 am Ответить с цитатой Вернуться к началу

These functions are only available in version > 5.9 Crying or Very sad

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen