会什么会返回空值呢?
由bq9xbx2t创建,最终由bq9xbx2t 被浏览 1 用户
def main(datasource, start_date, end_date):
import pandas as pd
import dai
sql = f"""
SELECT
date,
instrument,
close AS last_minute_close
FROM (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY date, instrument
ORDER BY time DESC
) AS rn
FROM {datasource}
) t
WHERE rn = 1
"""
# Data is queried with a 7-day lookback buffer for rolling calculations
lookback_days = 7
query_start_date = pd.to_datetime(start_date) - pd.Timedelta(days=lookback_days)
# compression=True 降低 instrument 字符串字段的内存占用
df = dai.query(sql, filters={'date': [query_start_date, end_date]}, compression=True).df()
# Final output is filtered to the exact date range requested
df = df[df['date'].between(start_date, end_date)]
return df
if __name__ == '__main__':
from bigmodule import M
import structlog
logger = structlog.get_logger()
datasource = 'cpt_jyc_2025_stock_csi1000_bar1m'
start_date = '2023-01-01 00:00:00'
end_date = '2023-01-02 23:59:59'
logger.info(f"Calculating factor for period: {start_date} to {end_date}")
data = main(datasource, start_date, end_date)
logger.info(f"Factor data shape: {data.shape}")
logger.info(f"\nSample data:\n{data.head()}")
# m = M.factorlens._latest(
# data=data,
# m_cached=False,
# )