代码实现:
1. 使用 tushare 包获取某股票的历史行情数据
- import tushare as ts
- import pandas as pd
- from pandas import Series,DataFrame
- # 使用 tushare 包获取某股票的历史行情数据
- df = ts.get_k_data('600519',start='1988-01-01')
- # 将获取的数据写入到本地进行持久化存储
- df.to_csv('./maotai.csv')
- # 将本地文本文件中的数据读取加载到 DataFrame 中
- df = pd.read_csv('./maotai.csv')
- df.head(10)
- # 将 Unnamed: 0 为无用的列删除
- df.drop(labels='Unnamed: 0',axis=1,inplace=True)
- df.head(5) # 显示前五条, 不写 5 默认也是显示的前 5 条
- # 将 date 列转成时间序列类型
- df['date'] = pd.to_datetime(df['date'])
- # 将 date 列作为元数据的行索引
- df.set_index(df['date'],inplace=True)
- # 删除原 date 列
- df.drop(labels='date',axis=1,inplace=True)
- df.head()
2. 输出该股票所有收盘比开盘上涨 3% 以上的日期.
- # 伪代码:(收盘 - 开盘)/ 开盘 > 0.03
- (df['close'] - df['open'])/df['open']> 0.03
- # boolean 可以作为 df 的行索引
- df.loc[[True,False,True]]
- df.loc[(df['close'] - df['open'])/df['open']> 0.03]
- df.loc[(df['close'] - df['open'])/df['open']> 0.03].index
3. 输出该股票所有开盘比前日收盘跌幅超过 2% 的日期
- # 伪代码:(开盘 - 前日收盘)/ 前日收盘 < -0.02
- # 将收盘 / close 列下移一位, 这样可以将 open 和 close 作用到一行, 方便比较
- (df['open'] - df['close'].shift(1))/df['close'].shift(1) < -0.02
- # boolean 作为 df 的行索引
- df.loc[(df['open'] - df['close'].shift(1))/df['close'].shift(1) < -0.02]
- df.loc[(df['open'] - df['close'].shift(1))/df['close'].shift(1) < -0.02].index
- # shift(1): 可以让一个 Series 中的数据整体下移一位
4. 假如从 2010 年 1 月 1 日开始, 每月第一个交易日买入 1 手股票, 每年最后一个交易日卖出所有股票, 到今天为止, 收益如何?
分析:
买入: 一个完整的年需要买 12 次股票, 一次买入一手 (100 支), 一个完整的年需要买入 1200 支股票
卖出: 一个完整的年卖一次, 一次卖出 1200 只股票
代码实现:
- # 将 2010-1-1 - 今天对应的交易数据取出
- data = df['2010':'2019']
- data.head()
- # 数据的重新取样, 将每个月第一个交易日的数据拿到
- data_monthly = data.resample('M').first()
- # 一共花了多少钱
- cost_money = (data_monthly['open']*100).sum()
- # 卖出股票入手多少钱, 将每年的最后一个交易日的数据拿到
- data_yeasly = data.resample('A').last()[:-1]
- recv_money = (data_yeasly['open']*1200).sum()
- # 19 年手里剩余股票的价值也要计算到收益中
- last_money = 1200*data['close'][-1]
- # 最后总收益如下:
- last_monry + recv_money - cost_monry
来源: http://www.bubuko.com/infodetail-3327288.html