|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
已经改了好多次了,现在问题是结果代码运行没问题,但是无法用plot显示出来,我这里觉得是第161行和162行的结果出现了问题,结果导致所有的数据为0,显示不出来图形,求大牛解救!
import os
import tushare as ts
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import shutil
#获取所有股票的指定类型、时间范围内的K线数据,
def getData(BaseDir,start,end,ktype):
#创建存放数据的文件夹
if os.path.exists(BaseDir):
shutil.rmtree(BaseDir)
os.mkdir(BaseDir)
#获取所有股票的代码
# ts.set_token('315e2234fb9e0862dae6277be3f8d69c6bb827e35dd9d5125876ceaa')
# pro = ts.pro_api()
# stock_list = pro.daily()
# print(stock_list)
stock_list=ts.get_stock_basics()
# print(ts.get_stock_basics())
#遍历循环所有股票代码,获取所有股票的数据
for stock_code in stock_list.index[:3]:
# print(stock_code)
#获取指定一支股票的指定类型的K线数据
stock_data=ts.get_hist_data(stock_code,start,end,ktype=ktype)
#拼接存储一支股票的文件的文件名,文件名包括三个部分:目录、代码和扩展名
filename="./"+BaseDir+"/"+stock_code+".txt"
# print(filename)
#判断是否成功获取到K线数据
if stock_data is not None:
#按照时间(行索引)升序排列所有数据
stock_data.sort_index(inplace=True, ascending=True) #存储数据
stock_data.to_csv(filename)
#获取2020年10月份的交易日期,参数filename为存储日k线数据的文件名
def getDateList(filename):
stock_data_day = pd.read_csv(filename, index_col='date')
# print(stock_data_day)
a = stock_data_day.index[:].values
return stock_data_day.index[:].values
#获取2020年10月份中每个交易日前一天的收盘价,
#参数filename为存储日k线数据的文件名,Date_List为交易日期
def getPrevDayClose(filename,Date_list_prev):
stock_data_day=pd.read_csv(filename,index_col='date')
#获取前一日的收盘价
prev_day_close=stock_data_day[:-2]['close'].values
# print(prev_day_close)
#创建存储前一日收盘价的Series,索引为交易日期
d =len((Date_list_prev))
a = prev_day_close.shape[0]
Prev_Day_Close=pd.Series(prev_day_close,index=Date_list_prev)
#print(Prev_Day_Close)
return Prev_Day_Close
#
#获取2019年10月份中每个交易日当天的收盘价
#参数filename为存储日k线数据的文件名,Date_List为交易日期
def getCurtDayClose(filename,Date_list_curt):
stock_data_day = pd.read_csv(filename, index_col='date')
#获取前一日的收盘价
curt_day_close=stock_data_day[1:-1]['close'].values
#创建存储前一日收盘价的Series,索引为交易日期
Curt_Day_Close=pd.Series(curt_day_close,index=Date_list_curt)
return Curt_Day_Close
# #获取2019年10月份中每个交易日后一天的收盘价
# #参数filename为存储日k线数据的文件名,Date_List为交易日期
def getNextDayClose(filename,Date_list_next):
stock_data_day=pd.read_csv(filename,index_col='date')
#获取前一日的收盘价
next_day_close=stock_data_day[2:]['close'].values
#创建存储后一天收盘价的Series,索引为交易日期
Next_Day_Close=pd.Series(next_day_close,index=Date_list_next)
return Next_Day_Close
#获取2019年10月份中每个交易日中指定时段的的收盘价,参数start指定时段
#参数filename为存储日30分钟K线数据的文件名,Date_List为交易日期
def getCurtSegClose(filename_30,Date_list,start):
stock_data_30=pd.read_csv(filename_30,index_col='date')
#获取指定时段的30分钟K线收盘价
# print(stock_data_30)
curt_seg_close=stock_data_30[start::8]['close'].values
# print(curt_seg_close)
#判定数据是否为空
a = curt_seg_close.shape[0]
b = len(Date_list)
if len(Date_list) !=curt_seg_close.shape[0]:
return None
#创建存储指定时段收盘价的Series,索引为Date_List
Curt_Seg_Close=pd.Series(curt_seg_close,index=Date_list)
d =Curt_Seg_Close
return Curt_Seg_Close
#处理八个时段的所有股票数据
#参数Base_AnaResult_Dir用于指明存放分析结果的目录
def prepAllSegAllStockData(Base_AnaResult_Dir):
#创建用于存储分析结果的目录,该目录下将有8个文件
#每个文件保存一个时段的数据
if os.path.exists(Base_AnaResult_Dir ):
shutil.rmtree(Base_AnaResult_Dir )
os.mkdir(Base_AnaResult_Dir)
for i in range(8):
print("Seg:",i)
prepOneSegAllStockData(Base_AnaResult_Dir,i)
#处理一个时段的所有股票的数据,SegIndex指明处理的时段
#参数Base_AnaResult_Dir指定用于存储分析结果的目录,SegIndex指定分析那个时段
def prepOneSegAllStockData(Base_AnaResult_Dir,SegIndex):
BaseDir_M30 = "Stock_Data_30"
BaseDir_Day = "Stock_Data_Day"
OneSegAllStock_data = pd.DataFrame([], columns=['code', 'prev_day_close',
'curt_seg_close', 'curt_day_close', 'next_day_close', 'curt_seg_updown', 'next_day_updown'])
#获取30分钟K线目录下有哪些文件
filenames=os.listdir(BaseDir_M30)
for filename in filenames:
#对一个30分钟k线的文件(一只股票)进行处理
day_filename=os.path.join(BaseDir_Day,filename)
m30_filename=os.path.join(BaseDir_M30,filename)
if not os.path.exists(day_filename):
continue
if not os.path.exists(m30_filename):
continue
#得到一支股票在指定时段的处理数据
OneSegOneStock_data = prepOneSegOneStockData(day_filename,m30_filename,SegIndex)
#将结果拼接到一个时段的总结果中
OneSegAllStock_data=pd.concat([OneSegAllStock_data,OneSegOneStock_data])
# print(OneSegAllStock_data)
#存储一个时段所有股票的分析结果
if OneSegAllStock_data is not None:
break
SegResultFileName=os.path.join(Base_AnaResult_Dir,str(SegIndex)+".txt")
# print(SegResultFileName)
OneSegAllStock_data.to_csv(SegResultFileName)
def prepOneSegOneStockData(DayKFileName, M30KFileName, SegIndex):
OneSegOneStock_data = pd.DataFrame([], columns=['code', 'prev_day_close', 'curt_seg_close', 'curt_day_close',
'next_day_close', 'curt_seg_updown', 'next_day_updown'])
# 获取该股票的交易日信息
date_list = getDateList(DayKFileName)
# 获取这支股票在指定时段的收盘价
date_list_1 = date_list[:-1]
Cur_Seg_Close = getCurtSegClose(M30KFileName, date_list_1, SegIndex)
# print(Cur_Seg_Close)
if Cur_Seg_Close is None:
return None
# 分别获取该股票的四个信息:
OneSegOneStock_data['curt_seg_close'] = getCurtSegClose(M30KFileName, date_list_1, SegIndex)
a = getCurtSegClose(M30KFileName, date_list_1, SegIndex)
OneSegOneStock_data['prev_day_close'] = getPrevDayClose(DayKFileName, Date_list_prev)
b = getPrevDayClose(DayKFileName, Date_list_prev)
OneSegOneStock_data['curt_day_close'] = getCurtDayClose(DayKFileName, Date_list_curt)
c = getCurtDayClose(DayKFileName, Date_list_curt)
OneSegOneStock_data['next_day_close'] = getNextDayClose(DayKFileName, Date_list_next)
d = getNextDayClose(DayKFileName, Date_list_next)
# 计算指定时段的长跌幅和次日涨跌幅
OneSegOneStock_data['curt_seg_updown'] = (OneSegOneStock_data['curt_seg_close'] - OneSegOneStock_data[
'prev_day_close']) / OneSegOneStock_data['prev_day_close']
e = OneSegOneStock_data['curt_seg_updown']
OneSegOneStock_data['next_day_updown'] = (getNextDayClose(DayKFileName, Date_list_next) - OneSegOneStock_data[
'curt_day_close']) / OneSegOneStock_data['curt_day_close']
# 设置股票代码
code = DayKFileName.split('.')[0]
OneSegOneStock_data['code'] = code
return OneSegOneStock_data
# 显示所有数据的处理结果
# 参数Base_AnaResult_Dir为存储各时段分析结果的目录
def ShowData(Base_AnaResult_Dir):
# 指定画布尺寸
plt.figure(figsize=(30, 40))
# 绘制8个时段的图形
for segindex in range(8):
# 拼接一个时段的数据分析结果文件的文件名
filename = os.path.join(Base_AnaResult_Dir, str(segindex) + ".txt")
datas = pd.read_csv(filename)
# 行过滤,判定当前时段是否涨停
datas = datas[datas['curt_seg_updown'] > 0.099]
plt.subplot(2, 4, segindex + 1)
# 绘制一个时段次日涨幅的分布直方图
b = datas
a = datas['next_day_updown']
plt.hist(datas['next_day_updown'], bins=np.linspace(-0.1, 0.1, 21))
# 设置坐标轴
plt.xlim(-0.1, 0.1)
plt.ylim(0, 40)
plt.xticks(np.linspace(-0.1, 0.1, 5))
plt.yticks(np.linspace(0, 40, 11))
plt.grid()
plt.show()
#日K线数据
BaseDir_Day = "Stock_Data_Day"
getData(BaseDir_Day, "2020-09-30", "2020-11-02", "D")
# 30分钟数据
BaseDir_30 = "Stock_Data_30"
getData(BaseDir_30,"2020-10-01","2020-10-02","30")
filename = ("./Stock_Data_Day/300442.txt")
# filename = os.path.join("./Stock_Data_Day")
# print(getDateList(filename))
Date_list = getDateList(filename)
Date_list_prev = Date_list[:-2]
getPrevDayClose(filename,Date_list_prev)
Date_list_curt = Date_list[1:-1]
getCurtDayClose(filename,Date_list_curt)
Date_list_next = Date_list[2:]
getNextDayClose(filename,Date_list_next)
filename_30 = "./Stock_Data_30/300442.txt"
Date_list = Date_list[:-1]
getCurtSegClose(filename_30,Date_list,0)
Base_AnaResult_Dir = "./Stock_Data"
prepAllSegAllStockData(Base_AnaResult_Dir )
ShowData(Base_AnaResult_Dir) |
|