184 похожих чатов

Доброго утра подскажите пожалуйста, лыжи не едут или я тупой что не

так с exponentialMovingAverage?
с over или без, она выдает значение очень далекое от среднего, и чем больше выставляю период - тем меньше это значение становится.
к тому же, вне зависимости от периода, сохраняется прямая пропорция между значениями. если подобрать множители, то значения с разных периодов сходятся 1 в 1.

чяднт?

на всякий случай пошел в эксель, там по известной формуле ema=price*alpha + prev_ema*(1-alpha) при alpha=2/(1+N) - все выходит верно, я получаю средние значения около входных...

или если есть у кого рецепт расчета EMA в кликхаусе, поделитесь плиз

12 ответов

10 просмотров
Ян- Автор вопроса

входные данные: выборка time_open, close_price из серии минутрых свечей с биржи. в качестве значения time в ema скармливаю toUnixTimestamp(time_open)

Это читали? https://altinity.com/blog/2020/3/9/real-time-moving-average-with-clickhouse-live-views

Ян- Автор вопроса
Алексей Фирсов
Это читали? https://altinity.com/blog/2020/3/9/re...

это не то. это простое скользящее среднее, а нужно именно экспоненциальное. там не просто сумма, а накапливающаяся сумма произведения нового значения на пропорциональный сглаживающий фактор и произведения предыдущего значения на обратно пропорциональный сглаживающий фактор. если совсем просто, то ema=p*a + ema*(1-a) сама по себе функция рекурсивная. и в кх есть exponentialMovingAverage, и даже дока по нему есть... "какая-то", но считает он хрень, хотя в описании доки сказано, что он считает именно то, что мне нужно, буквально ссылка на википедию в общем понятно. сделаю отдельный скрипт, которым буду перегенерять метрику и потом чекать в графане, неудобно ну и хер с ним...

Ян- Автор вопроса
Алексей Фирсов
Это читали? https://altinity.com/blog/2020/3/9/re...

к тому же, то, что они там делают, делается одной строчкой с оконной функцией...

ну возможно баг, покажите пример на https://github.com/ClickHouse/ClickHouse/issues без конкретики тяжело понять о чем вы. например over без order by считает за все окно, select x, sum(x) over () from (select number x from numbers(10)); ┌─x─┬─sum(x) OVER ()─┐ │ 0 │ 45 │ │ 1 │ 45 │ │ 2 │ 45 │ │ 3 │ 45 │ │ 4 │ 45 │ │ 5 │ 45 │ │ 6 │ 45 │ │ 7 │ 45 │ │ 8 │ 45 │ │ 9 │ 45 │ └───┴────────────────┘ VS select x, sum(x) over (order by x) from (select number x from numbers(10)); ┌─x─┬─sum(x) OVER (ORDER BY x ASC)─┐ │ 0 │ 0 │ │ 1 │ 1 │ │ 2 │ 3 │ │ 3 │ 6 │ │ 4 │ 10 │ │ 5 │ 15 │ │ 6 │ 21 │ │ 7 │ 28 │ │ 8 │ 36 │ │ 9 │ 45 │ └───┴──────────────────────────────┘

Ян- Автор вопроса
Denny [Altinity]
ну возможно баг, покажите пример на https://github...

еще раз, sum, avg и прочие - простые аггрегирующие функции, они берут всю кучу и считают. exponentialMovingAverage должен высчитываться рекурсивно из последнего значения. https://clickhouse.com/docs/en/sql-reference/aggregate-functions/reference/exponentialmovingaverage/

Ян
еще раз, sum, avg и прочие - простые аггрегирующие...

я не про это. OVER без ORDER BY выдает КОНЕЧНЫЙ результат в каждой строке для всего окна , он всегда ОДИН/EДИН.

Ян- Автор вопроса
Ян
еще раз, sum, avg и прочие - простые аггрегирующие...

вот взять сейчас курс битка. 33к-35к. среднее щначение должно быть где то в этом диапазоне, вне зависимости от периода. эта же функция с периодами 9, 12, 26 может выдавать значения около 3000, 2000, 1000 соответственно. и это ни разу не среднее, даже если пробовать их перемнобать на период. и опять же, пропорция у всех этих значений вне зависимости от периода, сохраняется абсолютно прчмая, без какого либо сдвига, в котором заключается суть этого среднего значения

Ян- Автор вопроса
Denny [Altinity]
я не про это. OVER без ORDER BY выдает КОНЕЧНЫЙ ре...

? т.е. rows between X preceding and current row выдаст не тот набор, который выдаст вложенный селект с лимитом X?

Ян
? т.е. rows between X preceding and current row вы...

в КХ не работают "выдаст вложенный селект с лимитом X"

Ян
вот взять сейчас курс битка. 33к-35к. среднее щнач...

размер окна exponentialMovingAverage задается в параметре exponentialMovingAverage(1) SELECT 1 AS value, number FROM numbers_mt(10); ┌─value─┬─number─┐ │ 1 │ 0 │ │ 1 │ 1 │ │ 1 │ 2 │ │ 1 │ 3 │ │ 1 │ 4 │ │ 1 │ 5 │ │ 1 │ 6 │ │ 1 │ 7 │ │ 1 │ 8 │ │ 1 │ 9 │ └───────┴────────┘ select value, time, exponentialMovingAverage(1)(value, time) over () from ( SELECT 1 AS value, number time FROM numbers_mt(10) ) ; ┌─value─┬─time─┬─exponentialMovingAverage(1)(value, time) OVER ()─┐ │ 1 │ 0 │ 0.9990234375 │ │ 1 │ 1 │ 0.9990234375 │ │ 1 │ 2 │ 0.9990234375 │ │ 1 │ 3 │ 0.9990234375 │ │ 1 │ 4 │ 0.9990234375 │ │ 1 │ 5 │ 0.9990234375 │ │ 1 │ 6 │ 0.9990234375 │ │ 1 │ 7 │ 0.9990234375 │ │ 1 │ 8 │ 0.9990234375 │ │ 1 │ 9 │ 0.9990234375 │ └───────┴──────┴──────────────────────────────────────────────────┘ select value, time, exponentialMovingAverage(1)(value, time) over (order by time) from ( SELECT 1 AS value, number time FROM numbers_mt(10) ) ; ; ┌─value─┬─time─┬─exponentialMovingAverage(1)(value, time) OVER (ORDER BY time ASC)─┐ │ 1 │ 0 │ 0.5 │ │ 1 │ 1 │ 0.75 │ │ 1 │ 2 │ 0.875 │ │ 1 │ 3 │ 0.9375 │ │ 1 │ 4 │ 0.96875 │ │ 1 │ 5 │ 0.984375 │ │ 1 │ 6 │ 0.9921875 │ │ 1 │ 7 │ 0.99609375 │ │ 1 │ 8 │ 0.998046875 │ │ 1 │ 9 │ 0.9990234375 │ └───────┴──────┴───────────────────────────────────────────────────────────────────┘

Ян
это не то. это простое скользящее среднее, а нужно...

@krokwen добрый вечер. удалось ли вам решить вопрос по ЕМА?

Похожие вопросы

Обсуждают сегодня

Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
А чем вам питонисты не угодили?😂
.
79
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Всем здравствуйте! Я хотел узнать сколько стоит средняя месячная зарплата у Electron js разработчиков? Мне очень это важно и нужно, плиз помогите узнать эту инфу! Для Джунио...
U.K.
10
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
77
А дин типизация это хорошо или плохо?
Alexey
12
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Исходники плюс документация? Вы гоните)) демок хватит всем
zamtmn
11
Карта сайта