问答交流

会什么会返回空值呢?

由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,
    # )

{link}