日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python实战项目—金融量化分析(数据的简单预处理)

發布時間:2023/12/20 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python实战项目—金融量化分析(数据的简单预处理) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實現需要導入的包:
import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
注:tushare,財經數據接口包

1.使用tushare包導入某只股票的歷史數據

我們不妨以同花順這只股票為例(300033)
df=ts.get_k_data(code=‘300033’,start=‘2000-01-01’,end=‘2022-01-21’)
df
其中,code是股票代碼,start是開始時間,end是結束時間。如果不知道開始時間,可以設置一個比較早的時間。


運行結果如上,共計2916條數據。

接下來,我們可以把數據存儲到文件中去,調用to_xxx將數據寫入文件中
df.to_csv(’./300033.csv’)
然后重新導入文件:
df=pd.read_csv(’./300033.csv’)
df
運行后發現:

多了一列,我們可以刪除第一列的數據,刪除方法常見的兩種:
方法一:直接del df[‘column-name’]
方法二:采用drop方法,有下面三種等價的表達式:
1.df= df.drop(‘column_name’, 1)
輸入:df,drop(‘num’,axix=1),不改變內存,及輸入df的時候,它還是顯示原數據;
2.df.drop(‘column_name’,axis=1, inplace=True)
輸入:df.drop(‘num’,axix=1,inplace=True),改變內存,及輸入df的時候,它顯示改變后的數據;
3. df.drop([df.columns[[0,1, 3]]], axis=1,inplace=True)
輸入:df.drop([df.columns[[0,1]]],axis=1,inpalce=True)
總結:凡是會對原數組作出修改并返回一個新數組的,往往都有一個 inplace可選參數。如果手動設定為True(默認為False),那么原數組直接就被替換。也就是說,采用inplace=True之后,原數組名(如2和3情況所示)對應的內存值直接改變;而采用inplace=False之后,原數組名對應的內存值并不改變,需要將新的結果賦給一個新的數組或者覆蓋原數組的內存位置(如1情況所示)。

通過pandas刪除列:
1.del df[‘columns’] #改變原始數據
2.df.drop(‘columns’,axis=1)#刪除不改表原始數據,可以通過重新賦值的方式賦值該數據
3.df.drop(‘columns’,axis=1,inplace=‘True’) #改變原始數據

言歸正傳,我們采用drop函數,這樣我們就刪除了第一行無用的數據。
df=df.drop(labels=‘Unnamed: 0’,axis=1)#drop中反過來,0表示行,1表示列,inplace=Ture表示將操作賦予到原數據中
df

使用to_datetime將date列轉化為時間序列:
df[‘date’]=pd.to_datetime(df[‘date’])
df

便于查看,我們把日期設置為索引序列:
df=df.set_index(‘date’)
df

2.輸出收盤比開盤漲超3%的日期

date=df.loc[(df[‘close’]-df[‘open’])/df[‘open’]>0.03]#獲取True對應的行數據
date
在分析的過程中如果產生了布爾值,則下一步將布爾值作為源數據的行索引;如果布爾值作為原數據的行索引,則可以取出True對應的值,忽略False對應的值。
接下來,將數據生成存儲到文件中去。
date.to_csv(’./300033上漲3%的日期匯總.csv’)

3.輸出開盤價比昨日收盤價跌幅超過2%的日期

思考這樣一個問題,昨日的收盤價怎么和開盤價放到一列?
我們可以增加一列收盤價,并把收盤價下移一天:
df[‘yesterday_close’]=df[‘close’].shift(1)
df

date=df.loc[(df[‘open’]-df[‘yesterday_close’])/df[‘yesterday_close’]<-0.02]#開盤價比起昨天收盤價跌幅超過2%
date

date.to_csv(’./300033開盤比前日收盤價跌超2%的日期.csv’)

4.假如我從2010年1月1日起,每個月第一個交易日買入十手股票,每年最后一個交易日賣出,那么到昨天,我的收益是多少?

首先我們要知道,一手股票是100股,一年總共買入12000股。
我們首先計算成本價格:
1.取出日期內的數據:
new_df=df[‘2010-01-01’:‘2022-01-23’]
new_df
2.找出每月的第一個交易日:
Month_first=new_df.resample(‘M’).first()
3.計算總花費:
cost=Month_first[‘open’].sum()*1000 #花費的總價格
接下來我們計算收益,要注意2022年的股票還沒有賣出,需要估價,利用昨天的收盤價進行估價。
Annual_last=new_df.resample(‘A’).last()[:-1]#將2022年最后一行切出去
計算收益:
earn=Annual_last[‘open’].sum()12000+2000new_df[‘close’][-1]
print(earn-cost)

5.繪制五日均線和三十日均線

首先需要理解,什么是均線?
對于每一個交易日,都可以計算前N天的移動平均值,然后把這些移動均值聯系起來,成為一條線,叫做N日移動平均線,移動平均線常用有5天,10天,30天,60天,120天,240天的指標。
均線計算方法:MA=(C1+C2+…+Cn)/n
五日均線:
MA5=df[‘close’].rolling(5).mean()
MA30=df[‘close’].rolling(30).mean()
pandas中提供了pandas.DataFrame.rolling這個函數來實現滑動窗口值計算,下面是這個函數的原型:
DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
繪圖如下:
plt.plot(MA5)

plt.plot(MA30)

總結

以上是生活随笔為你收集整理的Python实战项目—金融量化分析(数据的简单预处理)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。