Я пытаюсь создать OHL C баров в postgresql, исходя из тиковых данных. Я хочу создавать бары каждые 1000 тиков или каждые 500 тиков. Или каждые X тиков.
В базе данных, которую я сохраняю, есть бид / аск и временная метка. Я знаю, что могу выполнить группировку и сгруппировать их по метке времени, но желаемый результат - это количество тиков.
Один тик состоит из метки времени, цены предложения и цены продажи.
База данных тиков выглядит примерно так:
-------------------------------------------------
| date | bid | ask |
|2020-03-20 19:33:56.044533 | 1.06372 | 1.06384 |
|2020-03-20 19:33:37.205241 | 1.06372 | 1.06384 |
|2020-03-20 19:33:54.943593 | 1.06372 | 1.06383 |
|2020-03-20 19:33:55.183255 | 1.06372 | 1.06384 |
В настоящее время я могу создавать свечи OHL C с этим кодом (спасибо @GordonLinoff, который ответил на мой предыдущий вопрос по этому ссылка ):
select max(date) as date,
(array_agg(bid order by seqnum asc))[1] as open,
max(bid) as high,
min(bid) as low,
(array_agg(bid order by seqnum desc))[1] as close
from (
select t.*, row_number() over (order by date) as seqnum
from ticks t) as a
group by floor((seqnum - 1) / 1000);
И результат выглядит так:
---------------------------------------------------------------------------
| date | open | high | low | close |
|2020-03-20 19:33:56.044533 | 1.06372 | 1.07104 | 1.06001 | 1.06579 |
То есть 1 свеча. Цифры взяты из столбца ставок. Цена открытия - это первая зарегистрированная цена, цена закрытия - последняя зарегистрированная цена, а максимум и минимум - это максимальная и минимальная цены, зарегистрированные в этих X тиках.
Итак, если X равно 1000 и предполагается, что индекс начинается с 0, цены OHL C будут следующими: - open: цена в индексе 0 - high: максимальная цена между индексом 0 и 999 - low: минимальная цена между индексом 0 и 999 - close: цена в индексе 999
То есть на первые 1000 тиков. Затем следующие свечи создаются следующими 1000 тиками. - открытие: цена в индексе 1000 - максимум: максимальная цена между индексом 1000 и 1999 - минимум: минимальная цена между индексом 1000 и 1999 - закрытие: цена в индексе 1999
Часть, которую мне не хватает в том, что я хотел бы создавать свечи, только если у меня есть необходимое количество тиков. Например, если у меня 10500 тиков, я хотел бы иметь только 10 строк и не учитывать остальные 500 оставшихся тиков, пока сумма не станет 11000.
Как я могу этого добиться?
Заранее спасибо!