功能:
通过tushare和pandas,实现股票分析及目标股票筛选
代码:
import tushare as ts
import pandas as pd
from pandas import DataFrame, Series
import numpy as np
# 获取某只股票的历史行情数据
# code:字符串形式的股票代码
df = ts.get_k_data(code='600519', start='2000-01-01', end='2020-12-31') # 不知道股票数据从哪年开始,可以指定一个比较早的日期。
df.to_csv('./茅台.csv') #调用to_xxx方法将df中的数据写入本地进行存储
df=pd.read_csv('茅台.csv')
df.head()
#查看修改前的数据类型
df.info()
#因为date保存为字符串类型,因此需要将date列转换成时间序列类型
df['date']=pd.to_datetime(df['date'])
df.head()
#查看修改后的数据类型
df.info()
#将date这一列作为源数据的行索引
df.set_index('date',inplace=True)
df.head()
#输出该股票所有收盘比开盘上涨3%以上的日期
#伪代码: (收盘-开盘)/开盘 >0.03
#(df['close']-df['open'])/df['open']>0.03
df.loc[(df['close']-df['open'])/df['open']>0.03] #获取了True对应的行数据(满足需求的行数据)
#将这些数据作为行索引
#原因:如果布尔值作为源数据的行索引,则可以取出true对应的行数据,忽略False对应的行数据。
df.loc[(df['close']-df['open'])/df['open']>0.03].index
print('收盘比开盘上涨3%以上的日期:')
print(df)
#找到该股票所有开盘比前日收盘跌幅超过2%的日期
#怎么用今日开盘-前日收盘?
# (前日收盘为开盘的前一天的收盘,也就是比如今天是2001年8月28日,前日就是2001年8月27日,
# 8月28日开盘与8月27日的收盘数据刚好是错行了,要怎么实现错行相减呢?这时候可以考虑将close这一列整体下移一行来表示。)
#找到该股票所有开盘比前日收盘跌幅超过2%的日期。
#伪代码:(开盘-前日收盘)/前日收盘<-0.02
# (df['open']-df['close'].shift(1))/df['close'].shift(1)<-0.02
# shift(1)表示close这一列整体下移一行,若是shift(-1)则表示整体上移一位。
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
print('开盘比前日收盘跌幅超过2%的日期:')
print(df)
#如果我从2010年1月1日开始,每月第一个交易日买入一手股票,每年最后一个交易日卖出所有股票,到2020年2月18日为止,我的股票收益如何?
# 分析:
# 时间节点:2010-2020年
# 一手股票:100股
# 买:
# 一个完整的年需要买入多少股?
# 10012=1200
# 卖:
# 一个完整的年需要卖出多少股?
# 10012=1200
#选择子集
new_df=df['2010-01-01':'2020-02-18']
print(new_df)
#找每个月的第一个交易日对应的行数据(捕获到开盘价)--每月的第一行数据
#根据月份从原始数据中提取指定的数据
#每月第一个交易日对应的数据
#数据的重新取样,M表示按月,first()表示第一行数据
df_m=new_df.resample('M').first()
print(df_m)
cost=df_m['open'].sum()*100
print('cost = ', cost)
#特殊情况:2020年的股票卖不出去,因为还没到年底
#将2020年最后1行切出去
df_y=new_df.resample('A').last()[:-1]
print(df)
print('cost = ',cost)
resv=df_y['open'].sum()*1200
print('resv = ',resv)
#将2020年2月17日的收盘价作为剩余股票的单价
price=df.loc['2020-2-17','close']
last_monry=200*price
print('last_monry = ',last_monry)
sum_resv = resv+last_monry-cost
print('sum_resv = ',sum_resv)
