中证300、500、800成分股调整时间

 

 

'''
函数get_rng(start_year=None,end_year=None)得到的是每次指数成分股改变时的开始日期
在函数get_interval(start_year,end_year)中得到一个完整的周期
'''

from datetime import datetime
def get_rng(start_year=None,end_year=None):
    '''
    输入起始结束年份,得到300,500,800指数成分股调整日期。
    
    '''
    y = pd.date_range(start_year,end_year,freq='Y')
    start_rng = pd.Series(index=pd.date_range(start_year,end_year,freq='WOM-2FRI'))
    rng = list()
    
    def june(i):
        June = '6-'+str(i.year)
        start_date = start_rng.loc[June].index[0]
        date = pd.to_datetime(jd.get_trade_days(start_date=str(i.year)+'-06-01', end_date=str(i.year)+'-06-30'))
        
        d = date[date > start_date]
        return d[0]
    
    def dec(i):
        Dec = '12-'+str(i.year)
        start_date = start_rng.loc[Dec].index[0]
        date = pd.to_datetime(jd.get_trade_days(start_date=str(i.year)+'-12-01', end_date=str(i.year)+'-12-30'))
        
        d = date[date > start_date]
        return d[0]
    
    for i in y:
        if datetime.now() > june(i):
            rng.append(june(i))
            
        if datetime.now() > dec(i):  
            rng.append(dec(i))
        
    return rng

rng = get_rng(start_year='2010',end_year='2021')

import numpy.random as npr
def get_interval(start_year,end_year):
    
    rng = get_rng(start_year=start_year,end_year=end_year)
    #生成随机数,随机选取一个区间
    ind = npr.randint(0,len(rng))
    start_date = rng[ind].strftime('%Y-%m-%d')
    #适当处理得到结束日期
    end_date = jd.get_trade_days(end_date=rng[ind+1],count=2)[0]

    return (start_date,end_date)

start_date,end_date = get_interval(start_year='2010',end_year='2021')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值