由于在掘金量化平台上没有直接提供长期的k线数据,需要自己去提取合并,造成很大的麻烦。
def compose_bar(symbol,start_time,end_time,frequency):
#symbol:标的,start_time:开始时间,end_time:结束时间,frequency:频率
# 合成周线
if frequency == 'W':
# 判断开始日期是否为周一(默认周一 = 0,周二 = 1,所以对得出的week进行调整,加一)
start_time = datetime.datetime.strptime(start_time,'%Y-%m-%d')
week_start = start_time.weekday() + 1
# 如果不是周一,则将开始时间调整到该周周一
if week_start != 1:
print('输入的开始日期为周{},调整到该周周一'.format(week_start))
start_time = start_time - datetime.timedelta(days = week_start - 1)
# 合成月线
if frequency == 'M':
# 判断开始日期是否为月初
day_start_1th = int(start_time[8:10])
# 如果不是1号,则转为当月1号
if day_start_1th != 1 :
start_time = datetime.datetime.strptime(start_time, '%Y-%m-%d')
start_time = start_time - datetime.timedelta(days = day_start_1th - 1)
print('开始日期为该月{}号,调整到当月1号',format(day_start_1th))
# 合成季线
if frequency == 'Q':
# 直接开始日期设置为季度初
month = int(start_time[5:7]) # 看开始时间月份
year = int(start_time[0:4]) # 看开始时间年份
if month in range(1,3):
start_time = datetime.date(year,1,1)
if month in range(4,6):
start_time = datetime.date(year,4,1)
if month in range(7,9):
start_time = datetime.date(year,7,1)
if month in range(10,12):
start_time = datetime.date(year,9,1)
# 合成年线
if frequency == 'A':
# 将开始时间调整为年初
year_start = int(start_time[0:4]) # 看开始时间年份
start_time = datetime.date(year_start,1,1)
# 订阅历史数据(注意要复权到当前日期才能和新浪财经的数据对得上)
data = history(symbol = symbol,frequency = '1d',start_time = start_time,end_time = end_time,fields = 'eob,open,close,high,low,amount,volume',df = True,
skip_suspended = True,fill_missing = None, adjust=ADJUST_PREV,adjust_end_time = datetime.datetime.today())
# 修改日期格式并变成索引
data.eob = data.eob.apply(lambda x :datetime.datetime.strptime(str(x).split(' ')[0],'%Y-%m-%d'))
data.set_index(data['eob'],inplace = True)
data.drop(columns = ['eob'],inplace = True)
data_index = data.resample(frequency,label = 'right').last().index
# 结果返回成dataframe格式
data_k = pd.DataFrame({'open':data.resample(frequency,label = 'right').first()['open'],
'close': data.resample(frequency,label = 'right').last()['close'],
'high': data.resample(frequency,label = 'right').max()['high'],
'low': data.resample(frequency,label = 'right').min()['low'],
'amount': data.resample(frequency,label = 'right').sum()['amount'],
'volume': data.resample(frequency,label = 'right').sum()['volume'],
'frequency':frequency
})
data_k.set_index(data_index,inplace = True)
# 如果某周放假没有数据,则删除
data_k.dropna(inplace = True)
return data_k
# 测试一下
weekly_k = compose_bar('SZSE.002261','2020-12-31','2023-11-22','W')
monthly_k = compose_bar('SZSE.002261','2020-12-31','2023-11-22','M')
quarterly_k = compose_bar('SZSE.002261','2020-12-31','2023-11-22','Q')
yearly_k = compose_bar('SZSE.002261','2020-12-31','2023-11-22','A')
测试的股票并未有任何投资建议,作案例提供参考
我是普通计算机本科生,量化小白,往量化行业,简历已投了很多都是已读不回,有点迷茫,不知道还要不要再继续往这个量化行业发展,我目前对这个工作还很懵,不知道怎样下手,想通过实习增加自己的水平,但又没有找到实习,太难了~
欢迎大家可以对我进行意见提供,不论是工作、学习!