使用jupyter-Python进行模拟股票分析

  • tushare财经数据接口包
    • pip install tushare
    • 作用:提供相关指定的财经数据

需求:股票分析

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

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

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

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

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

import pandas as pd

import numpy as np

import tushare as ts

#获取某只股票的历史交易数据

data = ts.get_k_data(code='600519',start='2015-01')

data

#将获取的股票数据持久化存储到本地文件中

data.to_csv('maotai.csv')

#可以将文件中的数据读取到df

df = pd.read_csv('maotai.csv').drop(columns='Unnamed: 0')

df

  • 数据预处理
    • 目的:为了便于后期相关需求的分析处理

#将date转换成时间类型

df'date' = pd.to_datetime(df'date')

#将date列作为df的索引

df = df.set_index('date')

df

  • 输出该股票所有收盘比开盘上涨3%以上的日期
    • (收盘价-开盘价)/ 开盘价 > 0.03

ex = (df'close' - df'open') / df'open' > 0.03

ret = exex #获取了ex这个Series中True对应的数据

date = ret.index

date

  • 输出该股票所有开盘比前日收盘跌幅超过2%的日期
    • (开盘-前日收盘)/ 前日收盘 < -0.02

df'close'.shift(1) #shift(1)表示让Series中的元素整体向下移动一位

ex = (df'open' - df'close'.shift(1))/df'close'.shift(1) < -0.02

ex #ex表示一个Series

#取出ex中True对应的数据

ret = exex #ex中的ex表示ex这个Series中存储的数据

ret.index

  • 输出该股票所有收盘比开盘上涨3%以上的日期
    • (收盘价-开盘价)/ 开盘价 > 0.03

ex = (df'close'-df'open') / df'open' > 0.03

ex

#在DataFrame中也是可以使用布尔值充当索引的

ret = df.locex #将ex中的布尔值作为df的行索引,就可以取出ex中True对应的df的行数据

#在df中提取出来了满足(收盘比开盘上涨3%以上)条件的行数据

ret

ret.index

  • 假如张三从2020年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,张三的收益如何?
    • 规则:基于当天的收盘价售卖股票,当天的开盘价购买股票
    • 一个完整的年需要买入多少次股票呢?
      • 12次,一共购买1200只,单价:当天的开盘价
    • 一个完整的年需要卖出几次股票呢?
      • 1次,一次性卖出1200只股票,单价:当天的收盘价
    • 特殊情况:
      • 最终计算总收益的时候,需要将手里剩余股票的价值计算到总收益中
        • 剩余股票的价值:
          • 剩余股票的数量 * 最后一天的收盘价

new_df = df'2020': #单独提取出了2020至今的股票数据

#买入股票

#取出每个月第一个交易日对应的行数据

monthly = new_df.resample('M').first() #resample可以根据时间为条件对数据进行取样

#first()表示取出每一个样本的第一行数据

monthly

#买入股票的总花费

total_cost = monthly'open'.sum() * 100

total_cost

#卖出股票

yearsly = new_df.resample('Y').last()0:-1 #取出了每年最后一个交易日对应的行数据

yearsly

recv = yearsly'close'.sum() * 1200

recv

#注意:2023年没有到卖出股票的时机,因此张三手中会有剩余股票。因此需要将剩余股票的价值也计算到总收益中

#可以使用最近一天的收盘价作为剩余股票的单价

last_price = new_df'close'-1

last_money = last_price * 600

#计算总收益

last_money + recv - total_cost

相关推荐
花酒锄作田14 小时前
Pydantic校验配置文件
python
hboot14 小时前
AI工程师第四课 - 深度学习入门
pytorch·python·神经网络
ZhengEnCi1 天前
P2M-Matplotlib折线图完全指南-从数据可视化到趋势分析的Python绘图利器
python·matlab·数据可视化
ZhengEnCi1 天前
P2L-Matplotlib饼图完全指南-从数据可视化到图表定制的Python绘图利器
python·matlab
曲幽1 天前
你的REST接口还在“过度投喂”数据吗?——FastAPI + GraphQL实战避坑指南
python·fastapi·web·graphql·route·cors·rest·strawberry
用户8358086187911 天前
基于 Self-RAG 与列表级重排序的进阶 RAG 系统设计与实现
python
Warson_L2 天前
Python `Annotated` 与 LangGraph Reducer 学习笔记
python
韩师傅2 天前
海天线算法的前世今生
python·计算机视觉
韩师傅2 天前
当你的甲方设备过烂,要如何快速出效果?
python·计算机视觉
Warson_L2 天前
LangGraph的MessageState and HumanMessage
python