3.1 tushare模块
-
安装
tushare
包pip3 install tushare
3.2 股票分析
-
demo
import tushare as ts import pandas as pd # 调用接口 df = ts.get_k_data(code='600519', start='2000-01-1') # 数据持久化到本地 df.to_csv('./maotai.csv') # 读取本地文件数据 df = pd.read_csv('./maotai.csv') """ Unnamed: 0 date open close high low volume code 0 0 2001-08-27 5.392 5.554 5.902 5.132 406318.00 600519 1 1 2001-08-28 5.467 5.759 5.781 5.407 129647.79 600519 2 2 2001-08-29 5.777 5.684 5.781 5.640 53252.75 600519 3 3 2001-08-30 5.668 5.796 5.860 5.624 48013.06 600519 4 4 2001-08-31 5.804 5.782 5.877 5.749 23231.48 600519 """ # 删除第一列无效信息列 df.drop(labels='Unnamed: 0', axis=1, inplace=True) """ date open close high low volume code 0 2001-08-27 5.392 5.554 5.902 5.132 406318.00 600519 1 2001-08-28 5.467 5.759 5.781 5.407 129647.79 600519 2 2001-08-29 5.777 5.684 5.781 5.640 53252.75 600519 3 2001-08-30 5.668 5.796 5.860 5.624 48013.06 600519 4 2001-08-31 5.804 5.782 5.877 5.749 23231.48 600519 """ # 查看数据基本信息 df.info() """ <class 'pandas.core.frame.DataFrame'> RangeIndex: 4705 entries, 0 to 4704 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 date 4705 non-null object 1 open 4705 non-null float64 2 close 4705 non-null float64 3 high 4705 non-null float64 4 low 4705 non-null float64 5 volume 4705 non-null float64 6 code 4705 non-null int64 dtypes: float64(5), int64(1), object(1) memory usage: 257.4+ KB """ # 将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 """ date 2001-08-27 False 2001-08-28 False 2001-08-29 False 2001-08-30 False 2001-08-31 False ... 2021-05-06 False 2021-05-07 True 2021-05-10 False 2021-05-11 False 2021-05-12 False Length: 4705, dtype: bool """ # 将上面的bool列做为loc索引,可直接得到True对应的行 df.loc[(df['open']-df['close'])/df['open']>0.03] """ open close high low volume code date 2001-10-10 5.827 5.640 5.848 5.629 17548.69 600519 2001-11-07 5.468 5.288 5.468 5.281 9325.38 600519 2001-11-16 5.656 5.326 5.656 5.310 9954.70 600519 2001-12-20 5.609 5.431 5.609 5.413 11362.23 600519 2002-01-04 6.049 5.866 6.062 5.851 29109.62 600519 ... ... ... ... ... ... ... 2021-02-24 2307.990 2189.000 2318.000 2160.500 82116.00 600519 2021-03-02 2180.000 2058.000 2180.000 2033.000 70765.00 600519 2021-03-08 2074.960 1960.000 2085.000 1960.000 63100.00 600519 2021-03-15 2050.000 1975.450 2069.800 1951.150 62485.00 600519 2021-05-07 1965.000 1903.000 1967.980 1901.000 52493.00 600519 """ # 取出行索引,即为对应日期 df.loc[(df['open']-df['close'])/df['open']>0.03].index """ DatetimeIndex(['2001-10-10', '2001-11-07', '2001-11-16', '2001-12-20', '2002-01-04', '2002-01-17', '2002-01-28', '2002-04-17', '2002-11-08', '2003-01-02', ... '2020-07-16', '2020-07-24', '2021-01-19', '2021-02-18', '2021-02-22', '2021-02-24', '2021-03-02', '2021-03-08', '2021-03-15', '2021-05-07'], dtype='datetime64[ns]', name='date', length=177, freq=None) """
-
输出该股票开盘比前日收盘跌幅超过2%的日期
# (今日开盘 - 前日收盘) / 前日收盘 > 0.02 # close列下移一位:df['close'].shift(1) (df['open'] - df['close'].shift(1)) / df['close'].shift(1) > 0.02 # 将上面的bool列做为loc索引,可直接得到True对应的行 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
-
如果一个人从2010年1月1日开始,每月第一个交易日买入100支股票,每年最后一个交易日卖出所有股票,到今天为止的收益如何?
""" 开盘买:1个完整年买1200支股票 收盘卖:1个完整年卖1200支股票 """ # 对时间切片 new_df = df['2010-01-01': ] # 每个月的第一个交易日:得到的行索引是最后一个,但是数据没问题 # resample,重新取样 df_monthly = new_df.resample('M').first() """ open close high low volume code date 2010-01-31 109.760 108.446 109.760 108.044 44304.88 600519 2010-02-28 107.769 107.776 108.216 106.576 29655.94 600519 2010-03-31 106.219 106.085 106.857 105.925 21734.74 600519 2010-04-30 101.324 102.141 102.422 101.311 23980.83 600519 2010-05-31 81.676 82.091 82.678 80.974 23975.16 600519 ... ... ... ... ... ... ... 2021-01-31 1999.980 1997.000 2004.990 1983.810 43514.00 600519 2021-02-28 2130.000 2109.320 2160.000 2095.000 29341.00 600519 2021-03-31 2179.000 2158.000 2179.000 2120.000 44916.00 600519 2021-04-30 2021.000 2044.500 2046.800 2001.220 26588.00 600519 2021-05-31 2000.000 1959.000 2006.840 1953.000 53546.00 600519 """ # 买股票花费总金额 cost = df_monthly['open'].sum() * 100 # 每年最后一个交易日,今年除外 df_yearly = new_df.resample('A').last()[:-1] # 卖出股票赚的钱:今年的股票不卖 resv = df_yearly['open'].sum() * 1200 # 剩余股票 last_money = 500 * new_df['close'][-1] # 收益 money = resv + last_money - cost