题目(以600000股票为例,数据在CSDN下载资源中,文末会附上链接):
1. 输出该股票所有收盘比开盘上涨3%以上的日期
2. 输出该股票所有开盘比前日收盘跌幅超过2%的日期
3. 假如从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,收益如何?
import pandas as pd
import numpy as np
df = pd.read_csv('./600000.csv',encoding='utf-8')
df.head()
df.drop(labels='Unnamed: 0',axis=1,inplace=True) # 删除 Unnamed: 0 列
df
df['tradeDate'] = pd.to_datetime(df['tradeDate'])
df.sort_values(by='tradeDate',ascending=True,inplace=True)
df.set_index('tradeDate',inplace=True)
# 1. 输出该股票所有收盘比开盘上涨3%以上的日期
question_1 = df.loc[(df['closePrice']-df['openPrice'])/df['openPrice']>0.03]
question_1
# 2. 输出该股票所有开盘比前日收盘跌幅超过2%的日期
question_2 = df.loc[(df['closePrice']-df['closePrice'].shift(1))/df['closePrice'].shift(1)<-0.02]
question_2
# 3. 假如从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收益率如何?
'''
分析
时间节点: 2010-2022
一手股票:100只股票
买:一个完整的年需要买入1200只股票
卖:一个完整的年需要卖出1200只股票
买卖股票的单价:开盘价
最后未完整的年度要将剩余的股票估量其价值计算到总收益中,剩余股票的价值使用最后一天收盘价作为股票单价进行计算
'''
df00 = df['2010-01':'2022-01']
# 每个月第一个交易日的行数据
df_monthly = df00.resample('M').first()
df_monthly
# 买入股票花费的总金额
cost = df_monthly['openPrice'].sum()*100
cost
# out: 111614.39999999998
# 卖出股票到手的钱
# 2022年买入的股票还没到年末,还没有卖
df_yearly = df00.resample('A').last()[:-1]
df_yearly
resv = df_yearly['openPrice'].sum()*1200
resv
# out: 115025.99999999999
# 未卖出股票的价值
last_money = 100*df00['closePrice'][-1]
last_money
# out: 857.0
# 总收益
resv + last_money - cost
# out: 4268.600000000006
PS:
数据下载链接:<pandas基础和金融实例专栏>pandas_例子1和pandas_例子2使用的数据-讲义文档类资源-CSDN下载