需求:
1.使用tushare包获取某股票的行情数据
2.输出该股票所有收盘比开盘上涨3%以上的日期
3.输出该股票所有开盘比前日收盘跌幅2%以上的日期
4.假如从2020年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止收益如何
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')
#将数据存到本地
df.to_csv('./maotai.csv')
#对读取的数据进行处理
#查看每一列的数据类型
df.info()
#将date列转为时间序列类型
df['date'] = pd.to_datetime(df['date'])
#将date列作为源数据的行索引
df.set_index('date',inplace=True)
# 输出该股票所有收盘比开盘上涨3%以上的日期
#要求:(收盘-开盘)/开盘 > 0.03
(df['close'] - df['open']) / df['open'] > 0.03
#以布尔值为行索引
df.loc[(df['close'] - df['open']) / df['open'] > 0.03] #获取true对应的行数据(满足需求的行数据)
df.loc[(df['close'] - df['open']) / df['open'] > 0.03].index
# 输出该股票所有开盘比前日收盘跌幅2%以上的日期
#要求:(开盘-前日收盘)/前日收盘 < -0.02
(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]
df.loc[(df['open'] - df['close'].shift(1)) / df['close'].shift(1) < -0.02].index
#需求:假如从2020年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止收益如何
'''
分析:
时间节点:2010-2022
一手股票:100支股票
买:
一个完整的年需要买入1200支股票
卖:
一个完整的年需要卖出1200支股票
买卖股票的单价:
开盘价
'''
new_df = df['2010-01':'2022-02']
#买股票:找每个月份的第一个交易日对应的数据(捕获到开盘价)==每个月的第一行数据
#根据月份从原始数据中提取指定的数据
# 每个月第一个交易日对应的行数据
df_monthly = new_df.resample('M').first() #数据的重采样
# 买入股票的花费
cost = df_monthly['open'].sum()*100# 卖出股票到手的钱
# 特殊情况:2022年买入的股票还没卖
#买股票:找每年最后一个交易日的开盘价
new_df.resample('A').last()
#将2022年数据切除
df_year = new_df.resample('A').last()[:-1]
# 卖出股票到手的钱
resv = df_year['open'].sum()*1200
# 最后手中剩余的股票估计价值加到收益中
#使用昨天收盘价作为剩余股票单价
last_monry = 200*new_df['close'][-1]
resv + last_monry - cost
计算股票历史数据的5日均线和30日均线
均线计算方法:MA = (C1+C2+...+Cn)/N C:某日收盘价 N:移动平均周期
import tushare as ts
import pandas as pd
from pandas import DataFrame,Series
import numpy as np
df = pd.read_csv('./maotai.csv')
df = df.drop(labels='Unnamed: 0',axis=1)
#将date列转为时间序列类型
df['date'] = pd.to_datetime(df['date'])
#将date列作为源数据的行索引
df.set_index('date',inplace=True)
ma5 = df['close'].rolling(5).mean()
ma30 = df['close'].rolling(30).mean()
import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(ma5[50:180],label='5日均线')
plt.plot(ma30[50:180],label='30日均线')
plt.legend(loc='best')