美文网首页
04.DataFrame基础操作巩固-股票分析

04.DataFrame基础操作巩固-股票分析

作者: 一直流浪 | 来源:发表于2022-09-20 11:06 被阅读0次

    4、DataFrame基础操作巩固-股票分析

    需求:股票分析

    • 使用tushare包获取某股票的历史行情数据。
    • 输出该股票所有收盘比开盘上涨3%以上的日期。
    • 输出该股票所有开盘比前日收盘跌幅超过2%的日期。
    • 假如我从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收益如 何?

    (1)下载tushare财经数据接口包

    终端命令行执行:

    pip install tushare
    

    (2)进入官网https://tushare.pro/

    注册登录后,进入个人主页,找到接口TOKEN,进行复制,我们在下面将会用到。

    image.png

    (2)导入相关包

    import tushare as ts
    import pandas as pd
    from pandas import DataFrame,Series
    import numpy as np
    import datetime as dt
    import time
    token='自己的上面复制的token'
    ts.set_token(token)
    pro = ts.pro_api()
    

    (3)调用接口获取股票的信息

    注:更多接口方法可以在http://tushare.org/ 进行查看

    获取茅台的 每日股价信息

    df = pro.daily(ts_code = '600519.SH',start_date='20000101')
    df
    
    image.png

    (4)对股票信息按照时间进行排序

    # 排序 
    # DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')
    # axis:{0 or ‘index’, 1 or ‘columns’}, default 0,默认按照索引排序,即纵向排序,如果为1,则是横向排序    
    # by:str or list of str;如果axis=0,那么by="列名";如果axis=1,那么by="行名";  
    # ascending:布尔型,True则升序,可以是[True,False],即第一字段升序,第二个降序  
    # inplace:布尔型,是否用排序后的数据框替换现有的数据框  
    # kind:排序方法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。似乎不用太关心  
    # na_position : {‘first’, ‘last’}, default ‘last’,默认缺失值排在最后面
    
    df.sort_values(axis = 0, by = 'trade_date',inplace=True)
    df
    
    image.png

    (5) 将获取的股票信息存储到本地

    # 通过调用 to_xxx 方法将数据存储到本地
    df.to_csv('./motai.csv')
    

    (6)将本地存储的文件读入到df

    df = pd.read_csv('./motai.csv')
    df.head()
    
    image.png

    (7)需要得读取出来的数据进行处理

    # drop 中 axis 为1表示删除列,为0表示删除行,inplace 为 True 表示覆盖原有数据
    df.drop(labels='Unnamed: 0',axis=1,inplace=True)
    df.head()
    
    image.png

    (8)查看每一列的数据类型

    df.info()
    
    image.png

    (9)将trade_date转为时间类型

    #将int类型转为时间类型
    df['trade_date'] = pd.to_datetime(df['trade_date'],format='%Y%m%d')
    df.info()
    
    image.png

    (10)设置trade_date列为索引

    df.set_index('trade_date',inplace=True)
    df
    
    image.png

    (11)输出该股票所有收盘比开盘上涨3%以上的日期。

    #伪代码:(收盘 - 开盘) / 开盘 > 0.03
    (df['open'] - df['close']) / df['open'] > 0.03
    
    #在分析的过程中,如果产生了boolean值,可以将boolean作为行索引,可以取出值为True的行数据
    df.loc[(df['open'] - df['close']) / df['open'] > 0.03].index   #获取到收盘比开盘上涨3%以上的日期
    
    image.png

    (12)输出该股票所有开盘比前日收盘跌幅超过2%的日期。

    # 伪代码:(开盘 - 前日收盘) / 前日开盘 < 0.02
    old = df['close'].shift(1)   #将收盘价整体下移一位
    old.head()
    
    image.png

    (13)找到开盘价低于上一天收盘价2%以上的日期

    (df['open'] - old) / old < -0.02
    
    image.png

    (14)将布尔值作为行索引

    df.loc[(df['open'] - old) / old < -0.02].index  #获取到符合条件的日期
    
    image.png

    (15)剩余需求

    • 假如我从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收益如 何?
    • 分析
      • 时间节点:2010-2021年
      • 一手股票:100支
      • 买:
        • 一个完整的年需要买入1200支股票
        • 一个完整的年需要卖出1200支股票
      • 买卖股票的单价:
        • 都使用开盘价

    (16)截取df,从日期2010年1月,截取到2021年12月

    # 对行索引进去切片
    new_df = df['2010-01':'2021-12']
    new_df
    
    image.png

    (17)买股票:找到每个月的第一个交易日(捕获到开盘价) --> 每个月的第一行数据。

    # 根据月份从原始数据中提取指定的值
    # 每个月的第一个交易日行数据
    # resample('M') 把数据按照月份进去切割
    df_monthly = new_df.resample('M').first()   #数据是没有错的,索引有问题,不影响使用
    df_monthly
    
    image.png

    (18)买入股票花费的总金额

    cost = df_monthly['open'].sum()*100
    cost
    
    image.png

    (19)卖出股票挣到的钱

    注:特殊情况:2021年买入的股票没有卖出去

    # resample('A')按照年份进行切割
    new_df.resample('A').last()
    # 将2021年最后一行切出去
    df_yearly = new_df.resample('A').last()[:-1]
    df_yearly
    
    image.png

    (20)卖出股票到手的钱

    resv = df_yearly['open'].sum()*1200
    resv
    
    image.png

    (21) 计算出最后一年有几个月:

    len(df.loc['2021-01-01':].resample('M').last())
    
    image.png

    (22)最后在手中剩余的股票价值加到总收益中

    #使用昨天的收盘价作为剩余股票的单价
    last_monry = len(df.loc['2021-01-01':].resample('M').last()) * 100 * new_df['close'][-1]
    last_monry
    
    image.png

    (23)计算总收益

    resv + last_monry - cost
    
    image.png

    总结:假如我从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收益为846587元,收益还是很不错的。

    相关文章

      网友评论

          本文标题:04.DataFrame基础操作巩固-股票分析

          本文链接:https://www.haomeiwen.com/subject/exiqwrtx.html