数据分析03/基于pandas进行股票分析(代码片段)

liubing8 liubing8     2023-05-04     309

关键词:

数据分析03 /基于pandas的DateFrame进行股票分析

需求1:对茅台股票分析

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

  • 代码实现:

    1.使用tushare包获取某股票的历史行情数据

    import tushare as ts
    import pandas as pd
    from pandas import Series,DataFrame
    
    # 使用tushare包获取某股票的历史行情数据
    df = ts.get_k_data('600519',start='1988-01-01')
    # 将获取的数据写入到本地进行持久化存储
    df.to_csv('./maotai.csv')
    
    # 将本地文本文件中的数据读取加载到DataFrame中
    df = pd.read_csv('./maotai.csv')
    df.head(10)
    
    # 将Unnamed: 0为无用的列删除
    df.drop(labels='Unnamed: 0',axis=1,inplace=True)
    df.head(5)  # 显示前五条,不写5默认也是显示的前5条,inplace是判断是否用新表替换原表
    
    # 将date列转成时间序列类型
    df['date'] = pd.to_datetime(df['date'])
    
    # 将date列作为元数据的行索引
    df.set_index(df['date'],inplace=True)
    
    # 删除原date列
    df.drop(labels='date',axis=1,inplace=True)
    df.head()

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

    # 伪代码:(收盘-开盘)/开盘  > 0.03
    (df['close'] - df['open'])/df['open'] > 0.03
    
    # boolean可以作为df的行索引
    df.loc[[True,False,True]]
    df.loc[(df['close'] - df['open'])/df['open'] > 0.03]
    
    df.loc[(df['close'] - df['open'])/df['open'] > 0.03].index

    3.输出该股票所有开盘比前日收盘跌幅超过2%的日期

    #伪代码:(开盘-前日收盘)/前日收盘  < -0.02
    
    # 将收盘/close列下移一位,这样可以将open和close作用到一行,方便比较
    (df['open'] - df['close'].shift(1))/df['close'].shift(1) < -0.02
    
    # boolean作为df的行索引
    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
    
    # shift(1):可以让一个Series中的数据整体下移一位

    4.假如从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,收益如何?

    分析:

    买入:一个完整的年需要买12次股票,一次买入一手(100支),一个完整的年需要买入1200支股票

    卖出:一个完整的年卖一次,一次卖出1200只股票

    代码实现:

    # 将2010-1-1 - 今天对应的交易数据取出
    data = df['2010':'2019']
    data.head()
    
    # 数据的重新取样,将每个月第一个交易日的数据拿到
    data_monthly = data.resample('M').first()
    
    # 一共花了多少钱
    cost_money = (data_monthly['open']*100).sum()
    
    # 卖出股票入手多少钱,将每年的最后一个交易日的数据拿到
    data_yeasly = data.resample('A').last()[:-1]
    recv_money = (data_yeasly['open']*1200).sum()
    
    # 19年手里剩余股票的价值也要计算到收益中
    last_money = 1200*data['close'][-1]
    
    # 最后总收益如下:
    last_monry + recv_money - cost_monry

需求2:双均线策略制定

1.使用tushare包获取某股票的历史行情数据

import tushare as ts
import pandas as pd
df = ts.get_k_data('601318',start='1990-01-01')

# 数据的预处理
df['date'] = pd.to_datetime(df['date'])
df.set_index(df['date'],inplace=True)
df.drop(labels='date',axis=1,inplace=True)
# df = df['2007-04-12':]

2.计算该股票历史数据的5日均线和30日均线

什么是均线
   对于每一个交易日,都可以计算出前N天的移动平均值,然后把这些移动平均值连起来,成为一条线,就叫做N日移动平均线。移动平均线常用线有5天、10天、30天、60天、120天和240天的指标。
   5天和10天的是短线操作的参照指标,称做日均线指标;
   30天和60天的是中期均线指标,称做季均线指标;
   120天和240天的是长期均线指标,称做年均线指标。
均线计算方法:MA=(C1+C2+C3+...+Cn)/N C:某日收盘价 N:移动平均周期(天数)
# rolling是第几个5天的值,mean()取均值
df['ma5'] = df['close'].rolling(5).mean()
df['ma30'] = df['close'].rolling(30).mean()

3.可视化历史数据两条均线

# 可视化历史数据两条均线,c代表颜色
import matplotlib.pyplot as plt
df_p = df[:300]
plt.plot(df_p.index,df_p['ma5'],c='red')
plt.plot(df_p.index,df_p['ma30'],c='blue')

技术图片

4.分析输出所有金叉日期和死叉日期

股票分析技术中的金叉和死叉,可以简单解释为:
   分析指标中的两根线,一根为短时间内的指标线,另一根为较长时间的指标线。
   如果短时间的指标线方向拐头向上,并且穿过了较长时间的指标线,这种状态叫“金叉”;
   如果短时间的指标线方向拐头向下,并且穿过了较长时间的指标线,这种状态叫“死叉”;
一般情况下,出现金叉后,操作趋向买入;死叉则趋向卖出。当然,金叉和死叉只是分析指标之一,要和其他很多指标配合使用,才能增加操作的准确性。
# True:短期均线 低于 长期均线
# False:短期均线 高于 长期均线
# True ---> False 的过渡,对应的点是金叉
# False ---> True 的过渡,对应的点是死叉
sr1 = df['ma5'] < df['ma30'] 
sr2 = df['ma5'] >= df['ma30']

# 捕获死叉所有的日期   按位与:&
death_date = df.loc[sr1 & sr2.shift(1)].index

# 捕获所有的金叉日期  按位或:|   取反:~
golden_date = df.loc[~(sr1 | sr2.shift(1))].index

5.如果假如从开始,初始资金为100000元,金叉尽量买入,死叉全部卖出,则到今天为止,炒股收益率如何?

first_money = 100000 # 不变
money = first_money  #可变的
hold = 0  # 目前所持有股票的数量(单位:支)

from pandas import Series
s1 = Series(1,index=golden_date)  # 存储的是为金叉日期,用1表示
s2 = Series(0,index=death_date)   # 死叉日期,0表示
s = s1.append(s2)
s = s.sort_index()

# 使用开盘价进行股票的买卖
for i in range(0,len(s)): # 2010-07-07
    # 买入或卖出股票的单价:p
    p = df['open'][s.index[i]]
    if s[i] == 1: # 金叉日期:买入股票
        buy = money // (p*100)  # 买了多少手
        hold = buy * 100
        money -= buy*100*p
    else:  # 卖出
        money += hold * p
        hold = 0
        
money += hold * df['open'][-1]
result = money - first_money
print(result)

r获取股票数据并进行进行可视化分析(代码片段)

R获取股票数据并进行进行可视化分析#加载依赖的包library(quantmod)library(ggplot2)library(magrittr)library(broom)#设置计划分析或者处理的时间范围start=as.Date("2020-02-01")end=as.Date("2020-03-31")#通过股票代码获取时间范围内的数据,可以设置多个... 查看详情

将两列设置为 pandas 数据框中的索引以进行时间序列分析

】将两列设置为pandas数据框中的索引以进行时间序列分析【英文标题】:settwocolumnsastheindexinapandasdataframefortimeseriesanalysis【发布时间】:2016-05-2117:54:53【问题描述】:在天气或股市数据的情况下,温度和股票价格都是在多个站点... 查看详情

用matplotlib和pandas绘制股票macd指标图,并验证化交易策略

  我的新书《基于股票大数据分析的Python入门实战》于近日上架,在这篇博文向大家介绍我的新书:《基于股票大数据分析的Python入门实战》里,介绍了这本书的内容。这里将摘录出部分内容,用以推广本书,请大家多多... 查看详情

用matplotlib和pandas绘制股票macd指标图,并验证化交易策略

  我的新书《基于股票大数据分析的Python入门实战》于近日上架,在这篇博文向大家介绍我的新书:《基于股票大数据分析的Python入门实战》里,介绍了这本书的内容。这里将摘录出部分内容,用以推广本书,请大家多多... 查看详情

如何预测股票分析--移动平均

...术,应用Python编程语言构建股票预测模型,对我国股票市场进行分析与预测。今天主要来回顾的是移动平均参考机器之心的文章,对代码进行了中文的解释,同时加入了自己的见解首先来处理一下数据,选用的是来自塔塔饮料的数... 查看详情

数据分析之dataframe基础操作巩固-股票分析(代码片段)

需求:股票分析使用tushare包获取某股票的历史行情数据。tushare财经数据接口包,基于该模块可以获取任意股票的历史交易数据pipinstalltushare输出该股票所有收盘比开盘上涨3%以上的日期。输出该股票所有开盘比前日收盘跌幅超过... 查看详情

许多数据帧上的高效 Python Pandas 股票 Beta 计算

...、最低价、收盘价),我将它们导入到单个Pandas数据框中进行分析。我是python新手,想为每只股票计算12个月的滚动bet 查看详情

无法使用 pandas_datareader 从雅虎获取股票数据

】无法使用pandas_datareader从雅虎获取股票数据【英文标题】:Unabletogetstockdatafromyahoowithpandas_datareader【发布时间】:2021-07-1013:03:06【问题描述】:这是我的代码:start=\'2015-1-1\'end=\'2020-12-31\'source=\'yahoo\'google=data.DataReader(\'GOOG\',start... 查看详情

基于mykernel的一个简单的时间片轮转多道程序内核代码分析(代码片段)

学号023作品本实验资源来源: https://github.com/mengning/linuxkernel/ 一、观察简易操作系统此处使用实验楼的虚拟机打开终端cdLinuxKernel/linux-3.9.4rm-rfmykernelpatch-p1<../mykernel_for_linux3.9.4sc.patchmakeallnoconfigmake#编译内核 查看详情

text[股票数据提取]考虑到pandas_datareader不再适用于雅虎数据,获取股票数据。#pandas#e(代码片段)

查看详情

pandas数据分析(代码片段)

一般而言,数据分析工作的目标非常明确,即从特定的角度对数据进行分析,提取有用信息,分析的结果可作为后期决策的参考。扩展库pandas是基于扩展库numpy和matplotlib的数据分析模块,是一个开源项目,提供了大量标准数据模型,具有... 查看详情

抓取当前股票价格并创建数据框

】抓取当前股票价格并创建数据框【英文标题】:Scrapecurrentstockpriceandcreatedataframe【发布时间】:2021-03-0404:03:53【问题描述】:我有一个名为Symbols的Pandas列表,其中包含30个股票代码,例如Apple->>AAPL,我想获取每个代码的当... 查看详情

python实现股票数据分析的可视化(代码片段)

Python实现股票数据分析的可视化文章目录Python实现股票数据分析的可视化一、简介二、代码1、主文件2、数据库使用文件3、ui设计模块4、数据处理模块三、数据样例的展示四、效果展示一、简介我们知道在购买股票的时候,... 查看详情

python实现股票数据分析的可视化(代码片段)

Python实现股票数据分析的可视化文章目录Python实现股票数据分析的可视化一、简介二、代码1、主文件2、数据库使用文件3、ui设计模块4、数据处理模块三、数据样例的展示四、效果展示一、简介我们知道在购买股票的时候,... 查看详情

pandas(代码片段)

Python中的pandas模块进行数据分析。接下来pandas介绍中将学习到如下8块内容:1、数据结构简介:DataFrame和Series2、数据索引index3、利用pandas查询数据4、利用pandas的DataFrames进行统计分析5、利用pandas实现SQL操作6、利用pandas进行缺失... 查看详情

第94天:数据分析之pandas初步(代码片段)

by轩辕御龙数据分析之pandas初步pandas是一个常用的第三方Python库,提供快速灵活的数据处理功能,也是进行数据分析的有力工具。我们的口号是:“更快,更高,更强”(皮一下)。啊,当然,现在经常有很多库一上来就要“吊... 查看详情

数据分析之pandas(代码片段)

...brary或pandas是基于Numpy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需要的工具。pandas提供了大量能使我们快速便捷 查看详情

pandas数据分析基础(代码片段)

Pandas安装anaconda安装:condalistpandas查看是否已经安装condainstallpandascondaupdatepandaspip安装pipinstallpandasapt安装sudoapt-getinstallpython-pandas测试是否安装成功nosetestspandases不成功会进行提醒,可以重新安装或者更新pandas数据结构SeriesDataFr 查看详情