股票分析 需求:股票分析 使用tushare包獲取某股票的歷史行情數據。 輸出該股票所有收盤比開盤上漲3%以上的日期。 輸出該股票所有開盤比前日收盤跌幅超過2%的日期。 假如我從2010年1月1日開始,每月第一個交易日買入1手股票,每年最後一個交易日賣出所有股票,到今天為止,我的收益如何? impo ...
股票分析
需求:股票分析
- 使用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')
#將互聯網上獲取的股票數據存儲到本地
df.to_csv('./jiaomei.csv')#調用to_xxx方法將df中的數據寫入到本地進行存儲
#將本地存儲的數據讀入到df,自動添加了索引
df = pd.read_csv('jiaomei.csv')
df.head()
#刪除df中指定的一列
df.drop(labels='Unnamed: 0',axis=1,inplace=True) #刪除每一行的labels列
#查看每一列的數據類型
df.info()
#將date列轉為時間序列類型
df['date'] = pd.to_datetime(df['date'])
#將date列作為源數據的行索引
df.set_index('date',inplace=True)
捕獲上漲和下跌的日期
#輸出該股票所有收盤比開盤上漲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的行數據
#輸出該股票所有開盤比前日收盤跌幅超過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
- 需求:假如我從2010年1月1日開始,每月第一個交易日買入1手股票,每年最後一個交易日賣出所有股票,到今天為止,我的收益如何?
- 分析:
- 時間節點:2010-2020
- 一手股票:100支股票
- 買:
- 一個完整的年需要買入1200支股票
- 賣:
- 一個完整的年需要賣出1200支股票
- 買賣股票的單價:
- 開盤價
new_df = df['2010-01':'2020-02']
買股票需要找到每個月的第一個交易日的行數據
#買股票:找每個月的第一個交易日對應的行數據(捕獲到開盤價)==》每月的第一行數據
#根據月份從原始數據中提取指定的數據
#每月第一個交易日對應的行數據
df_monthly = new_df.resample('M').first()#數據的重新取樣
可以看到這裡的索引出現的偏差,但是後面的數據是沒有問題的
#買入股票花費的總金額
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
#賣出股票到手的錢
resv = df_yearly['open'].sum()*1200
81811.19999999998
#最後手中剩餘的股票需要估量其價值計算到總收益中
#使用昨天的收盤價作為剩餘股票的單價
last_monry = 200*new_df['close'][-1]
#計算總收益
resv+last_monry-cost
-10965.300000000032 虧了,,,,,
本文來自博客園,作者:ivanlee717,轉載請註明原文鏈接:https://www.cnblogs.com/ivanlee717/p/16988064.html