Автор |
Сообщение |
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Чета я не понял. А в чем проблемма написать такой для Ами? Берем объем, строим по нему средную, сравниваем текущий со средним, раскрашиваем... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Олег, по-моему там все сложнее, например:
Газпром, сейчас 12-00, открытие было в 10-30
1. смотрим средний объем вчера, позавчера, поза-позавчера (ну вообщем 2. какой то период назад) объем в газпроме с открытия до 12 часов,
3. как-то усредняем эти значения
4. сравниваем с текущим |
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Это?
Код: |
p = Param("period", 1, 1, 10, 1); // сколько дней усредняем
q = TimeNum();
qqq = 0;
for(i = 1; i <= p; i++) { // суммируем объем на этом баре за p дней
qq = ValueWhen( TimeNum() == q, V, i);
qqq = qqq + qq;
}
qqqq = qqq/p; // вычисляем средний
Plot(qqqq, "", colorRed);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Олег, спасибо.
Думаю это очень близко, но нужно суммировать объем от открытия до текущего момента, а не на текущем баре.
Я думаю тут можно использовать один фрагмент твоего кода
FirstBar = ??? ; // первый бар текущего дня // LastValue() //BarIndex??
LastBar = ??? ; // текущий бар
Range = Flip(FirstBar, LastBar); // внутри выделенного диапазона
CumVolume = Cum(Nz(V)*Range); |
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Так чтоли?
Код: |
bar = BarsSince(Ref(Day(), -1) != Day()); // число баров с начала дня
Vo = Sum(V, Bar+1); //суммируем объем с начала дня
p = Param("period", 1, 1, 10, 1); // сколько дней усредняем
q = TimeNum();
qqq = 0;
for(i = 1; i <= p; i++) { // суммируем объем на этом баре за p дней
qq = ValueWhen( TimeNum() == q, Vo, i);
qqq = qqq + qq;
}
qqqq = qqq/p; // вычисляем средний
Plot(qqqq, "", colorRed);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Олег, нужно сравнить сегодняшний кумультативный объем скажем до 12 часов с со средними кумультативными объемами скажем за последние 10 дней также с 10-30 до 12 часов
Я даже думаю там можно брать не просто среднее а EMA или WMA
пробую написать этот код, но не получается увидеть нужный результат
Код: |
p = Param("period", 1, 1, 100, 1); // сколько дней усредняем
bar = BarsSince(Ref(Day(), -1) != Day()); // число баров с начала дня по текущий момент
Vo = Sum(V, Bar+1); //суммируем объем с начала дня
//q = TimeNum();
qqq = 0;
for(i = 1; i <= p; i++) { // суммируем объем на этом ме временном промежутке за P дней
bar1 = BarsSince(Ref(Day(), -P) != Day()); // число баров с начала дня по текущий момент
qq = Sum(V, Bar1+1);
//qq = ValueWhen( TimeNum() == q, Vo, i);
qqq = qqq + qq;
}
qqqq = EMA(qqq,p); // вычисляем средний кумулятивный объем за P дней
Plot(qqqq, "Volume Buzz", colorRed); //рисуем средний кумулятивный объем за P дней
Plot(Vo, "Today Volume", colorGreen); //рисуем кумулятивный объем сегодняшнего дня
|
|
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Амиброкеровец писал(а): |
Олег, нужно сравнить сегодняшний кумультативный объем скажем до 12 часов с со средними кумультативными объемами скажем за последние 10 дней также с 10-30 до 12 часов
|
А я что написал? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Сорьки, чета я ошибся. Ща исправлю. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Смотри, разве средний кумулятивный объем за 10 дней может так скакать |
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вроде так. Тормозит безбожно. Простым способом не получилось...
Наверное я "не в форме"
Код: |
p = Param("period", 1, 1, 10, 1); // сколько дней усредняем
bar = BarsSince( Ref(Day(), -1) != Day() ) + 1; // число баров с начала дня
hbar = LastValue(Highest( bar ));
Vo = Sum(V, Bar+1); //суммируем объем с начала дня
bV = 0;
for(i = 1; i <= hbar; i++) {
for(m = 1; m <= p; m++) {
bv = bv + (bar == i) * ValueWhen( i == bar, Vo, m);
}
}
Plot(bv/p, "qq", colorRed);
Plot(Vo, "Vo", colorBlue);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Да, сейчас получилось то. Два цикла. Но почему такой висяк
Может сделать, так чтобы отображались только последний период (только 10 дней) ?
Вот код для Омеги, может он что подскажет
Input: DaysToAvg(10), AlertRatio(1.2);
Vars: LenOfDay(0), BPD(0), BarsPerDay(0), VolSumToAvg(0), VolSum(0), VolSumAvg(0), VolSumPct(0), LastClose(0);
If BarType = 1 then begin
LenOfDay = TimeToMinutes(SessionEndTime(0,1)) - TimeToMinutes(SessionStartTime(0,1));
BPD = AbsValue(LenOfDay)/BarInterval;
If FracPortion(BPD) = 0 then
BarsPerDay = BPD
else
BarsPerDay = BPD + 1 - FracPortion(BPD);
VolSumToAvg = 0;
If Date <> Date[1] then begin
VolSum = Ticks;
LastClose = close[1];
end else
VolSum = VolSum + Ticks;
For Value1 = 1 to DaysToAvg begin
VolSumToAvg = VolSumToAvg + VolSum[BarsPerDay*Value1];
end;
VolSumAvg = VolSumToAvg / DaysToAvg;
If VolSumAvg > 0 then
VolSumPct = VolSum / VolSumAvg;
Plot1(VolSumPct, "Vol buzz");
if VolSumPct >= AlertRatio then
if close > LastClose then
SetPlotColor(1,Green)
else
SetPlotColor(1,Red)
else
SetPlotColor(1,White);
If VolSumPct > AlertRatio then
Alert ( "Intraday Volume exceeds" + Spaces(1) + NumToStr(AlertRatio,0) + Spaces(1) + "percent of average." );
end; |
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
NBT
Зарегистрирован: 10.02.2009
Сообщения: 6
|
Интересный индикатор. Жаль, что код не будет работать, если есть пропущенные бары (актуально для джанков на малых таймфреймах, где его было полезно использовать). |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Что это он не будет работать? Специально сейчас проверил предварительно удалив один бар. Работает. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
NBT
Зарегистрирован: 10.02.2009
Сообщения: 6
|
> Что это он не будет работать?
Приношу извинения, если я неверно понял логику его работы, но, судя по коду, он суммирует объем на одинаковых барах со сдвигом в p дней. Если для каждого из p дней бары существуют, все хорошо. Если для предыдущих дней есть не все бары, объем предыдущих дней считаться не будет.
Для SBER или LKOH все работает замечательно на любых интервалах. А, например, для FESH или SVAV на минутном интервале будет считаться только объем текущего дня. Проверил для p = 2. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|