首页 > 编程语言 >python模拟股票的数据分析

python模拟股票的数据分析

时间:2022-12-16 18:22:15浏览次数:72  
标签:数据分析 数据 python 股票 df shift close open 模拟

股票分析

需求:股票分析

  • 使用tushare包获取某股票的历史行情数据。
  • 输出该股票所有收盘比开盘上涨3%以上的日期。
  • 输出该股票所有开盘比前日收盘跌幅超过2%的日期。
  • 假如我从2010年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='000893',start='2000-01-27')

image-20221216172254999

#将互联网上获取的股票数据存储到本地
df.to_csv('./jiaomei.csv')#调用to_xxx方法将df中的数据写入到本地进行存储

image-20221216173406886

#将本地存储的数据读入到df,自动添加了索引
df = pd.read_csv('jiaomei.csv')
df.head()

image-20221216173514734

#删除df中指定的一列
df.drop(labels='Unnamed: 0',axis=1,inplace=True) #删除每一行的labels列
#查看每一列的数据类型
df.info()

image-20221216173714708

#将date列转为时间序列类型
df['date'] = pd.to_datetime(df['date'])
#将date列作为源数据的行索引
df.set_index('date',inplace=True)

image-20221216173905815

捕获上涨和下跌的日期

#输出该股票所有收盘比开盘上涨3%以上的日期
#伪代码:(收盘-开盘)/开盘 > 0.03
(df['open'] - df['close']) / df['open'] > 0.03

#在分析的过程中如果产生了boolean值则下一步马上将布尔值作为源数据的行索引
 #如果布尔值作为df的行索引,则可以取出true对应的行数据,忽略false对应的行数据
df.loc[(df['open'] - df['close']) / df['open'] > 0.03] #获取了True对应的行数据(满足需求的行数据)

df.loc[(df['open'] - df['close']) / df['open'] > 0.03].index #df的行数据 

image-20221216174402720

#输出该股票所有开盘比前日收盘跌幅超过2%的日期
#伪代码:(开盘-前日收盘)/前日收盘 < -0.02
(df['open'] - df['close'].shift(1))/df['close'].shift(1) < -0.02  #shift[1]表示下移一行
#将布尔值作为源数据的行索引取出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

image-20221216175338656

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

买股票需要找到每个月的第一个交易日的行数据

#买股票:找每个月的第一个交易日对应的行数据(捕获到开盘价)==》每月的第一行数据
#根据月份从原始数据中提取指定的数据
#每月第一个交易日对应的行数据
df_monthly = new_df.resample('M').first()#数据的重新取样

image-20221216180447063

可以看到这里的索引出现的偏差,但是后面的数据是没有问题的

#买入股票花费的总金额
cost = df_monthly['open'].sum()*100
93359.50000000001
#卖出股票到手的钱
#特殊情况:2020年买入的股票卖不出去
new_df.resample('A').last()
#将2020年最后一行切出去
df_yearly = new_df.resample('A').last()[:-1]
df_yearly

image-20221216181105304

#卖出股票到手的钱
resv = df_yearly['open'].sum()*1200
81811.19999999998
#最后手中剩余的股票需要估量其价值计算到总收益中
#使用昨天的收盘价作为剩余股票的单价
last_monry = 200*new_df['close'][-1]
#计算总收益
resv+last_monry-cost
-10965.300000000032 亏了,,,,,

标签:数据分析,数据,python,股票,df,shift,close,open,模拟
From: https://www.cnblogs.com/ivanlee717/p/16988064.html

相关文章

  • 利用python实现typora自动上传图片
    利用python实现Typora内图像的上传缘由及目的在之前的markdown文件书写中,采用Notion软件。但是后来发现Notion的导出存在很多问题,尤其是在上传到博客园时,对于图片的处理......
  • 【脚本项目源码】Python制作艺术签名生成器,打造专属你的个人艺术签名
    前言明天就是拥抱情人节,情侣们会在公开的场合拥抱,向世人宣告你俩的爱意,也让这个寒冷的冬天变得格外温馨。到了年底依然能热情拥抱,也见证了两人情意如昔。今天子川就给大......
  • python利用列表知识,编写购物车小程序
    #readme#该程序的主要是用来模拟购买商品的store=[("iphone",5800),("pad",2000),("dress",500),("shoe",400)]#定义一个商品列表salary=input("输入你的工资")#输入工......
  • python-文件操作
    python-文件操作操作流程'''文件操作 打开文件:open 读写文件   读:把文件的内容读到变量-read里面   写:把变量值写入到文件里面 关闭文件'''......
  • 《安富莱嵌入式周报》第295期:世界杯球员和足球实时跟踪,开源手持矢量网络分析仪,自制柔
    往期周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版:https://www.bilibili.com/video/BV1s14y1N7BB/1、开......
  • 【python】subprocess 使用
    subprocess使用importsubprocessp=subprocess.Popen('ls-l',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,bufsize=1)bufsize:缓冲区大小.当......
  • 数据分析之pandas的使用
    pandas为什么学习pandasnumpy已经可以帮助我们进行数据的处理了,那么学习pandas的目的是什么呢?numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数......
  • Python SQL 驱动程序 - pymssql
    PythonSQL驱动程序-pymssql前言pymssql官方地址:https://pypi.org/project/pymssql/一、下载pymssql不通的操作系统,不同的Python版本下载对应的pymssql注意:博主运......
  • vue2 数据响应式原理模拟继续优化
    上次简单的模拟了数据响应式,当我们第一次修改值依赖函数会执行一次,再修改一次值依赖函数会执行两次,这需要做下去重,去掉重复绑定的依赖。采用的方法是给每个dev实例添加一个......
  • python-面向对象三大特性
    python-面向对象三大特性封装继承多态封装'''封装 封装就是把类的属性和方法封装到类的内部,只能在内部使用,不能在类外部使用 把属性和方法前面加两个下划线,这......