如何修复clickhouse时间函数重采样数据时open_price等于close_price的错误?
how can fix the error that open_price equal to close_price when resample data by clickhouse time function?
query_sql = f"""
WITH
toDateTime('{start.date()} 21:00:00') AS StartTimestamp,
toDateTime('{end_date} 15:00:00') AS EndTimestamp
SELECT
local_symbol,
max(last_price) AS high_price,
min(last_price) AS low_price,
argMax(last_price, toUnixTimestamp(fast)) as close_price ,
argMin(last_price, toUnixTimestamp(fast)) as open_price,
sum(volume) AS volume,
sum(amount) AS amount
FROM tick
WHERE (datetime >= StartTimestamp) AND (datetime <= EndTimestamp) AND local_symbol='{symbol}'
-- GROUP BY toStartOfInterval(datetime, INTERVAL {n} minute ) as fast,local_symbol
GROUP BY toStartOfMinute(datetime) as fast,local_symbol
ORDER BY fast ASC
"""
这是我的 SQL 代码,我想得到 open_price、high_price、low_price、close_price,但我的结果是SQL 没有达到预期
open_price总是等于close_price,其他正确。
{'local_symbol': 'rb2010.CTP', 'high_price': 3828.0, 'low_price': 3826.0, 'close_price': 3827.0, 'open_price': 3827.0, 'volume': 409, 'amount': 15653230.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3828.0, 'low_price': 3826.0, 'close_price': 3827.0, 'open_price': 3827.0, 'volume': 357, 'amount': 13663860.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3828.0, 'low_price': 3825.0, 'close_price': 3827.0, 'open_price': 3827.0, 'volume': 1058, 'amount': 40483280.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3828.0, 'low_price': 3825.0, 'close_price': 3826.0, 'open_price': 3826.0, 'volume': 972, 'amount': 37193310.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3828.0, 'low_price': 3826.0, 'close_price': 3828.0, 'open_price': 3828.0, 'volume': 643, 'amount': 24608060.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3828.0, 'low_price': 3826.0, 'close_price': 3827.0, 'open_price': 3827.0, 'volume': 739, 'amount': 28276760.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3828.0, 'low_price': 3827.0, 'close_price': 3828.0, 'open_price': 3828.0, 'volume': 118, 'amount': 4516640.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3828.0, 'low_price': 3826.0, 'close_price': 3828.0, 'open_price': 3828.0, 'volume': 678, 'amount': 25949650.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3829.0, 'low_price': 3827.0, 'close_price': 3827.0, 'open_price': 3827.0, 'volume': 1009, 'amount': 38630160.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3831.0, 'low_price': 3829.0, 'close_price': 3830.0, 'open_price': 3830.0, 'volume': 1798, 'amount': 68865630.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3831.0, 'low_price': 3829.0, 'close_price': 3830.0, 'open_price': 3830.0, 'volume': 1039, 'amount': 39797350.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
我是不是做错了什么?
我已经使用 argMin(last_price, toUnixTimestamp(datetime)) as open_price
,
解决了这个问题
query_sql = f"""
WITH
toDateTime('{start.date()} 21:00:00') AS StartTimestamp,
toDateTime('{end_date} 15:00:00') AS EndTimestamp
SELECT
local_symbol,
max(last_price) AS high_price,
min(last_price) AS low_price,
argMax(last_price, toUnixTimestamp(fast)) as close_price ,
argMin(last_price, toUnixTimestamp(fast)) as open_price,
sum(volume) AS volume,
sum(amount) AS amount
FROM tick
WHERE (datetime >= StartTimestamp) AND (datetime <= EndTimestamp) AND local_symbol='{symbol}'
-- GROUP BY toStartOfInterval(datetime, INTERVAL {n} minute ) as fast,local_symbol
GROUP BY toStartOfMinute(datetime) as fast,local_symbol
ORDER BY fast ASC
"""
这是我的 SQL 代码,我想得到 open_price、high_price、low_price、close_price,但我的结果是SQL 没有达到预期
open_price总是等于close_price,其他正确。
{'local_symbol': 'rb2010.CTP', 'high_price': 3828.0, 'low_price': 3826.0, 'close_price': 3827.0, 'open_price': 3827.0, 'volume': 409, 'amount': 15653230.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3828.0, 'low_price': 3826.0, 'close_price': 3827.0, 'open_price': 3827.0, 'volume': 357, 'amount': 13663860.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3828.0, 'low_price': 3825.0, 'close_price': 3827.0, 'open_price': 3827.0, 'volume': 1058, 'amount': 40483280.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3828.0, 'low_price': 3825.0, 'close_price': 3826.0, 'open_price': 3826.0, 'volume': 972, 'amount': 37193310.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3828.0, 'low_price': 3826.0, 'close_price': 3828.0, 'open_price': 3828.0, 'volume': 643, 'amount': 24608060.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3828.0, 'low_price': 3826.0, 'close_price': 3827.0, 'open_price': 3827.0, 'volume': 739, 'amount': 28276760.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3828.0, 'low_price': 3827.0, 'close_price': 3828.0, 'open_price': 3828.0, 'volume': 118, 'amount': 4516640.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3828.0, 'low_price': 3826.0, 'close_price': 3828.0, 'open_price': 3828.0, 'volume': 678, 'amount': 25949650.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3829.0, 'low_price': 3827.0, 'close_price': 3827.0, 'open_price': 3827.0, 'volume': 1009, 'amount': 38630160.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3831.0, 'low_price': 3829.0, 'close_price': 3830.0, 'open_price': 3830.0, 'volume': 1798, 'amount': 68865630.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
{'local_symbol': 'rb2010.CTP', 'high_price': 3831.0, 'low_price': 3829.0, 'close_price': 3830.0, 'open_price': 3830.0, 'volume': 1039, 'amount': 39797350.0, '_database': <infi.clickhouse_orm.database.Database object at 0x0000022EF5C95408>}
我是不是做错了什么?
我已经使用 argMin(last_price, toUnixTimestamp(datetime)) as open_price
,