1.使用tushare包获取某股票的历史行情数据
2.输出该股票所有收益比开盘上涨3%以上的日期
3.输出该股票所有开盘比前日收盘跌幅超过2%的日期
4.假如我从2018年1月1日开始,每月第一个交易日买如1手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收入如何?
百度搜索tushare9http://www.tushare.org/,它可以为我们提供股票的历史数据,供我们分析。这里首先需要安装tushare,使用pip命令安装即可。接着导入相关模块
import pandas as pd
from pandas import DataFrame
import numpy as np
import tushare as ts
获取个股历史交易数据(包括均线数据)
df =ts.get_hist_data('600519',start='1900-01-01') #一次性获取全部日k线数据
获取数据之后将数据持久化存储:
df.to_csv('./k_code.csv') #j将df中的数据持久化村粗 to_xxx进行df持久化存储
读取csv文件,加载到df中:
df=pd.read_csv('./k_code.csv')
数据比较多,我们删掉没有用的列(inplace为True表示直接在原数据中删):
df.drop(labels=['ma10','ma20','v_ma5','v_ma10','v_ma20','ma5'],axis=1,inplace=True)
# 删除数据中无用的列 axis=1列,1行
date open high close low volume price_change p_change
————————————————————————————————————————————————————————————————————————————————————
0 2020-05-08 1317.00 1338.00 1314.61 1308.51 29078.68 2.61 0.20
1 2020-05-07 1299.40 1314.99 1312.00 1293.00 27934.74 12.00 0.92
2 2020-05-06 1251.00 1300.00 1300.00 1250.00 35834.81 34.30 2.71
3 2020-04-30 1271.00 1285.01 1265.70 1258.88 24660.87 -9.20 -0.72
4 2020-04-29 1277.80 1288.10 1274.90 1258.00 23444.06 -4.23 -0.33
... ... ... ... ... ... ... ... ...
查看数据列的类型(在数据分析中,object表示字符串),也就是data为zi
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 607 entries, 0 to 606
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 date 607 non-null object
1 open 607 non-null float64
2 high 607 non-null float64
3 close 607 non-null float64
4 low 607 non-null float64
5 volume 607 non-null float64
6 price_change 607 non-null float64
7 p_change 607 non-null float64
dtypes: float64(7), object(1)
memory usage: 38.1+ KB
将data列的数据类型转换为时间序列类型:
df['date']=pd.to_datetime(df['date']) # 将date列转换为时间序列
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 607 entries, 0 to 606
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 date 607 non-null datetime64[ns]
1 open 607 non-null float64
2 high 607 non-null float64
3 close 607 non-null float64
4 low 607 non-null float64
5 volume 607 non-null float64
6 price_change 607 non-null float64
7 p_change 607 non-null float64
dtypes: datetime64[ns](1), float64(7)
memory usage: 38.1 KB
将date列作为原数据的行索引:
df.set_index(df['date'],inplace=True) # 设定行索引
date open high close low volume price_change p_change
date
————————————————————————————————————————————————————————————————————————————————————————————
2020-05-08 2020-05-08 1317.00 1338.00 1314.61 1308.51 29078.68 2.61 0.20
2020-05-07 2020-05-07 1299.40 1314.99 1312.00 1293.00 27934.74 12.00 0.92
2020-05-06 2020-05-06 1251.00 1300.00 1300.00 1250.00 35834.81 34.30 2.71
2020-04-30 2020-04-30 1271.00 1285.01 1265.70 1258.88 24660.87 -9.20 -0.72
2020-04-29 2020-04-29 1277.80 1288.10 1274.90 1258.00 23444.06 -4.23 -0.33
... ... ... ... ... ... ... ... ...
输出所有收盘(close)比开盘(open)上涨3%以上的日期
# (收盘-开盘)/开盘 >0.03
(df['close']-df['open'] )/df['open'] >0.03
以上代码会返回bool类型,True表示满足条件,False表示不满足条件。我们需要获取的是True的日期。经验:在数据分析中,一旦产生了布尔值,下一步可以将布尔值作为源数据的行索引,就可以取出True对应的行数据。
( 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'] < -0.02
# 取出True对应的行数据
df.loc[(df['open']-df['close'].shift(1)) / df['close'] < -0.02]
df.loc[(df['open']-df['close'].shift(1)) / df['close'] < -0.02].index
假如我从2018年1月1日开始,每月第一个交易日买如1手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收入如何?
分析:数据从2018年切到昨天(df[‘2018′:’2020’])
买股票的单价使用开盘价,一年需要买入12次股票(1200只股票)
卖股票,一年需要卖出1次股票(1200只股票)
2020年不是完整一年,该年还没有到最后一个交易日,2020年只可以买入股票无法卖出。最后计算总收益,需要将手里剩余股票的实际价值计算到总收益中。
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!