策略分享

股指期货交割日日历效应研究

由neoblackxt创建,最终由neoblackxt 被浏览 1 用户

import dai
%%sql

SELECT instrument,last_deliver_date
FROM cn_future_basic_info
WHERE product_code = 'IF'
  AND instrument NOT IN ('IF0000.CFE', 'IF8888.CFE', 'IF9999.CFE')
LIMIT 200
┌────────────┬─────────────────────┐
│ instrument │  last_deliver_date  │
│  varchar   │    timestamp_ns     │
├────────────┼─────────────────────┤
│ IF1005.CFE │ 2010-05-21 00:00:00 │
│ IF1006.CFE │ 2010-06-18 00:00:00 │
│ IF1007.CFE │ 2010-07-16 00:00:00 │
│ IF1008.CFE │ 2010-08-20 00:00:00 │
│ IF1009.CFE │ 2010-09-17 00:00:00 │
│ IF1010.CFE │ 2010-10-15 00:00:00 │
│ IF1011.CFE │ 2010-11-19 00:00:00 │
│ IF1012.CFE │ 2010-12-17 00:00:00 │
│ IF1101.CFE │ 2011-01-21 00:00:00 │
│ IF1102.CFE │ 2011-02-18 00:00:00 │
│     ·      │          ·          │
│     ·      │          ·          │
│     ·      │          ·          │
│ IF2504.CFE │ 2025-04-18 00:00:00 │
│ IF2505.CFE │ 2025-05-16 00:00:00 │
│ IF2506.CFE │ 2025-06-20 00:00:00 │
│ IF2507.CFE │ 2025-07-18 00:00:00 │
│ IF2508.CFE │ 2025-08-15 00:00:00 │
│ IF2509.CFE │ 2025-09-19 00:00:00 │
│ IF2510.CFE │ 2025-10-17 00:00:00 │
│ IF2511.CFE │ 2025-11-21 00:00:00 │
│ IF2512.CFE │ 2025-12-19 00:00:00 │
│ IF2603.CFE │ 2026-03-20 00:00:00 │
├────────────┴─────────────────────┤
│ 189 rows (20 shown)    2 columns │
└──────────────────────────────────┘
%%sql
SELECT instrument, name, pre_close, close, date
FROM (
    SELECT instrument, name, pre_close, close, date,
           row_number() OVER (PARTITION BY name ORDER BY date DESC) AS rn
    FROM cn_stock_index_bar1d
    WHERE name in (
        '上证50', '沪深300', '中证1000', '中证2000',
        '中证全指', '上证指数', '深证成指', '创业板指', '科创50'
    )
) t
WHERE rn = 1
LIMIT 10
┌────────────┬──────────┬────────────┬───────────┬─────────────────────┐
│ instrument │   name   │ pre_close  │   close   │        date         │
│  varchar   │ varchar  │   double   │  double   │    timestamp_ns     │
├────────────┼──────────┼────────────┼───────────┼─────────────────────┤
│ 000688.SH  │ 科创50   │   1416.575 │ 1363.1684 │ 2025-10-17 00:00:00 │
│ 399006.SZ  │ 创业板指 │  3037.4423 │ 2935.3698 │ 2025-10-17 00:00:00 │
│ 000300.SH  │ 沪深300  │  4618.4218 │ 4514.2345 │ 2025-10-17 00:00:00 │
│ 399001.SZ  │ 深证成指 │ 13086.4092 │ 12688.936 │ 2025-10-17 00:00:00 │
│ 932000.CSI │ 中证2000 │  3050.4203 │ 2963.3308 │ 2025-10-17 00:00:00 │
│ 000016.SH  │ 上证50   │  3019.1966 │ 2967.7748 │ 2025-10-17 00:00:00 │
│ 000852.SH  │ 中证1000 │  7401.8375 │ 7185.4781 │ 2025-10-17 00:00:00 │
│ 000001.SH  │ 上证指数 │   3916.228 │ 3839.7553 │ 2025-10-17 00:00:00 │
│ 000985.CSI │ 中证全指 │   5800.591 │ 5652.4627 │ 2025-10-17 00:00:00 │
└────────────┴──────────┴────────────┴───────────┴─────────────────────┘
sql = r"""
SELECT last_deliver_date
FROM cn_future_basic_info
WHERE product_code = 'IF'
  AND instrument NOT IN ('IF0000.CFE', 'IF8888.CFE', 'IF9999.CFE')
"""
res = dai.query(sql, filters={"last_deliver_date": ["2010-01-01", "2025-10-17"]})
ld_date = res.df()
ld_date_list = ld_date.iloc[:,0].dt.strftime('%Y-%m-%d').tolist()
sql2 = rf"""
select instrument,name,pre_close,close,date
from cn_stock_index_bar1d
where date in ({str(ld_date_list)[1:-1]})
order by date asc
"""
def analysis_lddate_return(instrument,date_range):
    index_quote = dai.query(sql2, filters={"instrument":[instrument],"date": date_range}).df()
    index_quote['return'] = index_quote['close']/index_quote['pre_close'] - 1
    print(f"{index_quote.loc[0,'name']}收益率均值:{index_quote['return'].mean()}")
    index_quote['return'].plot()
# 指数代码
# 上证50 000016.SH
# 沪深300 000300.SH
# 中证1000 000852.SH
# 中证2000 932000.CSI
# 中证全指 000985.CSI
# 上证指数 000001.SH
# 深证成指 399001.SZ
# 创业板指 399006.SZ
# 科创50 000688.SH

analysis_lddate_return("000016.SH",["2010-01-01", "2025-10-17"])

上证50收益率均值:0.00097728291190521

analysis_lddate_return("000300.SH",["2010-01-01", "2025-10-17"])

沪深300收益率均值:0.0005211767873248918

analysis_lddate_return("000852.SH",["2010-01-01", "2025-10-17"])

中证1000收益率均值:0.00029217119174898765

analysis_dldate_return("932000.CSI",["2010-01-01", "2025-10-17"])

中证2000收益率均值:0.00036537908269404935

analysis_lddate_return("000985.CSI",["2010-01-01", "2025-10-17"])

中证全指收益率均值:0.00038458235602662226

analysis_lddate_return("000001.SH",["2010-01-01", "2025-10-17"])

上证指数收益率均值:0.00048476185803287316

analysis_lddate_return("399001.SZ",["2010-01-01", "2025-10-17"])

深证成指收益率均值:3.424310945610916e-05

analysis_dldate_return("399006.SZ",["2010-01-01", "2025-10-17"])

创业板指收益率均值:0.00014995579075559266

analysis_lddate_return("000688.SH",["2010-01-01", "2025-10-17"])

科创50收益率均值:0.001805280610643594

初步结论:股指交割日对收益率的影响无明显偏向

\

评论
  • 因为小Q在直播里经常抱怨股指期货交割日行情不好,但我读到的一些文章的观点是股指期货交割不会导致行情变差,行情差往往另有原因,交割日只是恰好赶上替其他原因背了锅,于是我动手用数据验证一下这个观点。希望小Q以后不要再抱怨股指期货交割日了。:)
{link}