Python数据分析之股票分析

股票分析

  1. 使用tushare包获取某股票的历史行情数据
  2. 输出该股票所有收盘比开盘上涨3%以上的日期
  3. 输出该股票所有开盘比前日收盘跌幅超过2%的日期
  4. 假如从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票。到今天为止,收益如何?

tushare:财经数据接口包

预处理数据

  • 获取某支股票的历史行情数据
df = ta.get_k_data(code='600519', start='2022-01-01')
# code:字符串形式的股票代码,start:起始日期,end:结束日期
  • 将互联网上获取的股票数据存储到本地
df.to_csv('./maotai.csv')  # 调用to_xxx方法将df中的数据写入到本地进行存储
  • 将本地存储数据输入到df1
df1 = pd.read_csv('./maotai.csv')
  • 对读取的数据进行相关的处理
# 删除df中指定的一列
df1.drop(labels='Unnamed: 0', axis=1, inplace=True)
# drop中0表示行,1表示列;inplace为True表示将删除后的结果存入原始中,反之则建立一个新的
df1.info()
# 查看每一列的数据类型
# 将date列转为时间序列类型
df1['date'] = pd.to_datetime(df1['date'])
# 将date列作为源数据的行索引
df1.set_index('date', inplace=True)

捕获股票上涨日期

  • 输出该股票所有收盘比开盘上涨3%以上的日期

伪代码:(开盘 - 收盘) / 开盘 > 0.03

# 在分析的过程中如果产生了布尔值则下一步马上将布尔值作为源数据的行索引
# 如果布尔值作为df1的行索引,则可以取出true对应的行数据,忽略false对应的行数据
df1.loc[(df1['open'] - df1['close']) / df1['open'] > 0.03].index  # 获取了满足需求的行数据对应的索引值

捕获股票跌幅的日期

  • 输出该股票所有开盘比前日收盘跌幅超过2%的日期

伪代码:(开盘 - 前日收盘) / 前日收盘 < -0.02

# 由于需要对比今天与前一天的数据,因此可指定一列整体下移一行
# df1['close'].shift(1)
print(df1.loc[(df1['open'] - df1['close'].shift(1)) / df1['close'].shift(1) < -0.02].index)

股票买卖收益分析

假如从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票。到今天为止,收益如何?

  • 时间节点:2010-2022
  • 一手股票:100支股票
  • 买:
    • 一个完整的年需要买入12手股票,即为1200支股票
  • 卖:
    • 一个完整的年需要卖出12手股票,即为1200支股票
  • 买卖股票的单价:
    • 开盘价

收益计算

  1. 根据时间进行切片
new_df = df['2010-01':'2022-07']
  1. 买股票
# 每个月的第一个交易日对应的行数据(开盘价)
# 根据月份从原始数据中提取指定的数据
# 每月第一个交易日对应的行数据
df_monthly = new_df.resample('M').first()  # 数据的重新取样
  1. 买入的股票花费的总金额
cost = df_monthly['open'].sum() * 100
  1. 卖出股票到手的钱
# 特殊情况:2022年买入的股票卖不出去,将2022年最后一行切出去
df_yearly = new_df.resample('A').last()[:-1]
resv = df_yearly['open'].sum() * 1200
# 最后手中剩余的股票需要估计价值计算到总收益中
# 使用昨天的收盘价作为股票的单价
last_money = 700 * new_df['close'][-1]
  1. 计算总收益
total = resv + last_money - cost

你可能感兴趣的:(数据分析,python,数据分析,pandas)