需求:1.输出该股票所有收盘比开盘上涨3%的日期
2.输出该股票所有开盘比前日收盘跌幅超过2%的日期
3.# 假如在2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出,到今天为止,我的收益如何
思路:股票分析: 获取与保存数据=>简易数据清洗(无用值和异常值)并修改符合要求的数据类型=>看需求=>写伪代码=>获取True行数据=>单独获取想要的数据
import pandas as pd
import numpy as np
# tushare:财经数据接口包
import tushare as ts
获取某支股票的历史行情数据get_k_data()获取方法,code:字符串形式的股票代码,start=''开始数据,end=''结束数据
df = ts.get_k_data(code='600519', start='2015-01-01')
将互联网上获取的数据存储到本地,调用to_xxx方法将df中的数据写入本地进行存储,将本地存储的数据读入DataFrame
df.to_csv('./maotai.csv')
df = pd.read_csv('./maotai.csv')
然后对读取的数据进行相关处理,删除无用值
df.drop(labels='Unnamed: 0', axis=1, inplace=True)
注意:在drop()中axis=0代表行,1代表列
info可以查看每一列的数据类型,可以帮助判定哪一列有缺失值
df_info = df.info()
必须将time一列转化为时间序列类型,否则后续使用切片的时候会报错
df['date'] = pd.to_datetime(df['date'])
print(df.info())
print('================需求一=================')
输出该股票所有收盘比开盘上涨3%的日期
伪代码:(收盘-开盘)/开盘>0.03
c = df.loc[(df['open']-df['close'])/df['open'] > 0.03]
# 获取了True对应的行数据
print(c.index)# 获取df的行数据
# 在分析过程中如果产生了布尔值则下一步马上将布尔值作为源数据的行索引
# 如果布尔值作为df的行索引,则可以取出True对应的行数据,忽略False对应的行数据
print('================需求二=================')
输出该股票所有开盘比前日收盘跌幅超过2%的日期
伪代码:(开盘-前日收盘)/前日收盘 < -0.02
.shift()表示将数据整体上下移位
将布尔值作为元数据的行索引
d = df.loc[((df['open']-df['close'].shift(1))/df['close'].shift(1) < -0.02)]
print(d.index)
print('================需求三=================')
假如在2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出,到今天为止,我的收益如何
分析:
时间节点:2010-2020
第一手股票:100支股票
买:一个完整的年需要买入1200支股票
卖:一个完整的年需要卖出1200支股票
买卖股票的单价:可使用开盘价,最低价,最高价,收盘价(本次分析使用开盘价)
new_df = df['2016-01':'2020-02'] # 切片
# 买股票:找到每个月的第一个交易日对应的行数据(捕获到开盘价)
# 根据月份从原始数据中提取指定数据
# 每月第一个交易日的行数据
df_month = new_df.resample('M').first() # resample()方法用于数据的重新取样
# resample()中'M'为月,'A'为年
# 买入股票花费的总金额
cost = df_month['open'].sum()*100
# 卖出股票到手的总金额
# 特殊情况:2020年买入的股票卖不出去
df_year = df.resample('A').last()[:-1]
# 将2020年最后一行切除
resv = df_year['open'].sum()*1200
# 最后手中剩余的股票需要估量其价值计算到总收益中
# 使用前一天收盘价作为剩余股票单价
last = new_df['close'][-1]*200
# 计算总收益
ear = resv + last - cost
print('总收益为',ear)