成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 Python 進行財務數據分析實戰

開發 前端
最大回撤是指在一段時間內資產價格從最高點下跌的幅度。通常用來衡量風險和資產價格波動的程度。最大回撤可以幫助投資者評估投資組合的風險水平,以及資產的價格波動性。

在迅速變化的金融領域中,數據分析和解釋的能力至關重要。本文探討了Python在金融數據分析中的應用,包括使用Pandas、NumPy和Matplotlib等Python庫,它們能夠處理股票市場數據、展示趨勢并構建交易策略。無論你是經驗豐富的金融分析師還是初入投資領域者,這些見解和技巧都將增強你的分析技能,拓寬對金融市場動態的理解,并幫助你在股票市場做出明智的決策。

import pandas as pd
import numpy as np
import datetime
import matplotlib.pyplot as plt

以下代碼使用 Python 中常用的庫來處理數據,執行數值計算、日期時間操作和數據可視化。這些包括 pas、numpy、datetime、matplotlib.pyplot。Pas 提供強大的數據結構(例如 DataFrames)來組織分析數據,而 numpy 允許對數組進行有效的數學運算。datetime 模塊允許涉及日期時間的操作計算,而 matplotlib.pyplot 可用于在 Python 中創建各種類型的可視化,尤其是數據的圖表。

導入數據

from pandas_datareader import data as pdr
import yfinance

aapl = pdr.get_data_yahoo('AAPL', 
                          start=datetime.datetime(2006, 10, 1), 
                          end=datetime.datetime(2012, 1, 1))
aapl.head()

圖片圖片

此代碼使用 pas_datareader 從 Yahoo Finance 檢索 Apple Inc. 的歷史股價數據。它獲取 2006 年 10 月至 2012 年 1 月的每日數據,顯示數據框的前五行。這里使用yfinance 庫用于訪問 Yahoo Finance 的數據,沒使用pas_datareader 的默認方法。

import quandl 
aapl = quandl.get("WIKI/AAPL", start_date="2006-10-01",
                  end_date="2012-01-01")
aapl.head()

圖片圖片

這里演示了如何使用 Qul 庫從 WIKI 數據庫中提取 Apple Inc. 的歷史股票市場數據。數據涵蓋 2006 年 10 月 1 日至 2012 年 1 月 1 日之間的日期。

使用時間序列數據

aapl.index
aapl.columns
ts = aapl['Close'][-10:]
type(ts)

圖片圖片

aapl 為 Apple Inc. 的股票市場數據。代碼使用 aapl.index 選擇索引,使用 aapl.columns 選擇列名,其中包括'Open', 'Close', 'High', 'Low', 'Volume'(“開盤價”、“收盤價”、“最高價”、“最低價”、“成交量”)等字段。然后,它將“收盤價”列中的最后 10 個條目分配給變量 ts,并使用 type(ts) 確定其類型,該變量可能是 pandas Series 對象。請注意,代碼缺少正確的標點符號語法,僅作為概念解釋,而不是可執行代碼的一部分。

aapl['diff'] = aapl.Open - aapl.Close
del aapl['diff']

這段代碼創建一個名為“diff”的新列,該列表示“開盤價”和“收盤價”值之間的差異。填充此列后,它會立即從 DataFrame 中刪除,保留其原始結構。

import matplotlib.pyplot as plt 
aapl['Close'].plot(grid= True ) 
plt.show()

圖片圖片

這里創建了一個顯示 Apple Inc. 股票收盤價的圖表。圖表中添加了網格,有助于分析 AAPL 股價在一段時間內的模式。

daily_close = aapl[['Adj Close']]

daily_pct_c = daily_close.pct_change()

daily_pct_c.fillna(0, inplace=True)
print(daily_pct_c)

daily_log_returns = np.log(daily_close.pct_change()+1)
print(daily_log_returns)

圖片圖片

這段代碼對蘋果公司股票的財務數據進行了分析,特別關注了調整后的收盤價。首先選擇了調整后的收盤價列,然后計算了每日的百分比變化,對任何缺失值用 0 進行了替換。接下來,將百分比變化數據框打印到控制臺。另外,使用 np.log() 函數計算了每日的對數收益,并將結果數據框打印出來。這段代碼提供了蘋果股票每日收益的兩個不同角度。

monthly = aapl.resample('BM').apply(lambda x: x[-1])
monthly.pct_change()
quarter = aapl.resample("4M").mean()
quarter.pct_change()

圖片圖片

該代碼處理了代表蘋果公司(Apple Inc.)股票價格的變量aapl的時間序列數據。首先,對數據進行重新采樣,以獲取每個月的最后一個工作日,并使用lambda函數選擇每個月的最后一個數據點,創建了名為monthly的新時間序列。然后,計算了每個月度數據點之間的百分比變化,以顯示aapl的月度增長或下降。接下來,對原始時間序列重新采樣,以計算四個月的平均值,創建了名為quarter的新時間序列。最后,計算了每個四個月期間的平均值之間的百分比變化,表示了每個四個月期間的比例增加或減少。需要進一步編寫代碼才能存儲或輸出這些計算結果。

import matplotlib.pyplot as plt
daily_pct_c.hist(bins=50)
plt.show()
print(daily_pct_c.describe())

圖片圖片

圖片圖片

在 daily_pct_c 表示的數據集上調用 hist() 方法,創建一個具有 50 個間隔的直方圖。然后使用 plt.show() 顯示直方圖。最后,使用 describe() 方法打印數據集的描述性統計數據,從而深入了解其分布情況。

cum_daily_return = (1 + daily_pct_c).cumprod()

print(cum_daily_return)

圖片圖片

import matplotlib.pyplot as plt 

cum_daily_return.plot(figsize=(12,8))

plt.show()

圖片圖片

可見的代碼段使用了 matplotlib 庫來實現數據可視化。它調用了名為 cum_daily_return 的 Pandas DataFrame 或 Series 上的 plot 方法,用于生成累積每日收益圖。圖形的尺寸被設定為 12 x 8 英寸,并使用 plt.show() 來顯示圖形。需要注意代碼中可能存在缺失部分。

cum_monthly_return = cum_daily_return.resample("M").mean()

print(cum_monthly_return)

圖片圖片

代碼從財務數據集中提取每日累計收益,并將其重新采樣以計算每月的平均累計收益。在重新采樣過程中,每日收益的頻率被更改為每月,并計算每個月的平均每日收益。最終結果將打印出每月平均收益。

from pandas_datareader import data as pdr
import yfinance

def get(tickers, startdate, enddate):
    def data(ticker):
        return (pdr.get_data_yahoo(ticker, start=startdate, end=enddate))
    datas = map(data, tickers)
    return(pd.concat(datas, keys=tickers, names=['Ticker', 'Date']))

tickers = ['AAPL', 'MSFT', 'IBM', 'GOOG']
all_data = get(tickers, datetime.datetime(2006, 10, 1), datetime.datetime(2012, 1, 1))
all_data.head()

圖片圖片

使用了pas_datareader庫中的yfinance作為數據源從 Yahoo Finance 獲取股票代碼列表的歷史財務數據。該函數需要股票代碼列表、開始和結束日期作為參數,并使用子函數data檢索每個股票代碼的數據。

接下來,函數map將應用于每個股票代碼,將生成的數據組合成具有分層索引的單個 DataFrame。此外,還提供了該函數的示例用法,其中獲取了四家科技公司的數據,并顯示了組合數據集的前幾行。

daily_close_px = all_data[['Adj Close']].reset_index().pivot('Date', 'Ticker', 'Adj Close')

daily_pct_change = daily_close_px.pct_change()

daily_pct_change.hist(bins=50, sharex=True, figsize=(12,8))

plt.show()

圖片圖片

通過分析財務數據,我們使用股票調整后收盤價的每日百分比變化計算,并將結果呈現在一個直方圖中。

  • 首先,我們從包含股票市場數據的名為 all_data 中選擇Adj Close列,該列反映了考慮股息股票分割等因素后股票的調整后收盤價。
  • 然后,我們重置指數數據,以便每行代表一個日期,每列代表一個股票代碼。
  • 接著,我們使用 pct_change() 方法計算股票價格的每日百分比變化,并將其呈現在一個有 50 個箱的直方圖中。這些直方圖共享相同的 x 軸,大小為 12x8 英寸,便于進行比較。

這段代碼有效地總結了給定數據集中調整后收盤價的每日百分比變化分布。

pd.plotting.scatter_matrix(daily_pct_change, diagnotallow='kde', alpha=0.1,figsize=(12,12))

plt.show()

圖片圖片

此代碼為 daily_pct_change 數據集創建散點圖矩陣。每個單元格顯示兩個變量的散點圖,對角線圖顯示 KDE 圖以可視化單個變量的分布。點的透明度值為 0.1 以顯示密度,圖形大小設置為 12 x 12 英寸。

adj_close_px = aapl['Adj Close'] 

moving_avg = adj_close_px.rolling(window=40).mean() 

moving_avg[-10:]

圖片圖片

代碼對 Apple Inc. (AAPL) 的財務數據進行了處理。它使用了名為“aapl”的數據集,并選擇了其中的“調整后的收盤價”,這代表了股票分割和紅利調整后的收盤價。接著,它計算了這些價格的 40 周期移動平均值。最后,它提取了移動平均線的最后 10 個值,以觀察股票價格近期趨勢的變化。移動平均線有助于平滑短期波動,并凸顯長期趨勢。

aapl['42'] = adj_close_px.rolling( window = 40 ).mean() 
aapl['252'] = adj_close_px.rolling( window = 252 ).mean() 
aapl[['Adj Close', '42', '252']].plot() 
plt. show ()

圖片圖片

以下代碼對財務數據(特別是 Apple Inc. (AAPL) 的股票價格)進行操作。這包括計算調整后的收盤價的 40 天移動平均線和 252 天移動平均線,然后將其存儲在aapl 的“42”和“252”列中。然后使用這些移動平均線和調整后的收盤價生成圖表,以直觀的方式分析隨時間變化的股價趨勢。

min_periods = 75 

vol = daily_pct_change.rolling(min_periods).std() * np.sqrt(min_periods) 
vol.plot(figsize=(10, 8))
plt.show()

圖片圖片

這里根據金融資產的每日價格百分比變化計算其滾動波動率。它使用變量 min_periods 表示一年的一個季度,以此作為窗口大小計算滾動標準差。然后將得到的測量值乘以 min_periods 的平方根,將其年化。這段代碼將每日價格變化的百分比用于計算資產的滾動波動率。過程包括設定 min_periods 變量表示一年的一個季度,計算滾動標準差,然后將結果乘以 min_periods 的平方根,實現年化計算。

import statsmodels.api as sm
import pandas
from pandas import tseries

all_adj_close = all_data[['Adj Close']]

all_returns = np.log(all_adj_close / all_adj_close.shift(1))

aapl_returns = all_returns.iloc[all_returns.index.get_level_values('Ticker') == 'AAPL']
aapl_returns.index = aapl_returns.index.droplevel('Ticker')

msft_returns = all_returns.iloc[all_returns.index.get_level_values('Ticker') == 'MSFT']
msft_returns.index = msft_returns.index.droplevel('Ticker')

return_data = pd.concat([aapl_returns, msft_returns], axis=1)[1:]
return_data.columns = ['AAPL', 'MSFT']

X = sm.add_constant(return_data['AAPL'])

model = sm.OLS(return_data['MSFT'],X).fit()

print(model.summary())

圖片圖片

此代碼使用股票數據集來分析蘋果公司和微軟公司的股票收益之間的關系。它計算對數收益,使用普通最小二乘法創建線性回歸模型。然后擬合模型并輸出摘要,深入了解兩只股票收益之間的關系。

plt.plot(return_data['AAPL'], return_data['MSFT'], 'r.')

ax = plt.axis()
x = np.linspace(ax[0], ax[1] + 0.01)

plt.plot(x, model.params[0] + model.params[1] * x, 'b', lw=2)

plt.grid(True)
plt.axis('tight')
plt.xlabel('Apple Returns')
plt.ylabel('Microsoft returns')

plt.show()

圖片圖片

在這里創建散點圖和線圖。散點圖使用紅點比較“AAPL”和“MSFT”的收益,而直線圖則顯示基于“AAPL”收益的模型預測。該代碼直觀地顯示了 Apple 和 Microsoft 股票收益之間的關系,包括模型的預測。

return_data['MSFT'].rolling(window=252).corr(return_data['AAPL']).plot()
plt.show()

圖片圖片

該代碼通過計算 Apple 和 Microsoft 股票 252 天每日收益之間的滾動相關性來分析財務數據。然后將此相關性顯示在圖表上,以直觀地展示兩只股票之間隨時間變化的相關性。

使用 Python 構建交易策略

short_window = 40
long_window = 100

signals = pd.DataFrame(index=aapl.index)
signals['signal'] = 0.0

signals['short_mavg'] = aapl['Close'].rolling(window=short_window, min_periods=1, center=False).mean()

signals['long_mavg'] = aapl['Close'].rolling(window=long_window, min_periods=1, center=False).mean()

signals['signal'][short_window:] = np.where(signals['short_mavg'][short_window:] 
                                            > signals['long_mavg'][short_window:], 1.0, 0.0)   

signals['positions'] = signals['signal'].diff()

這段代碼利用了Apple Inc.股票的收盤價移動平均線來生成交易信號。

  • 首先設置了兩個變量,分別代表短期和長期移動平均線的長度。
  • 接下來,初始化一個DataFrame來包含信號,其中一列表示信號,另一列表示位置。代碼會計算并將短期和長期移動平均線加入到信號DataFrame的各自列中。
  • 最后,通過比較這兩個移動平均線來生成交易信號,如果短期大于長期,就將信號列設為1.0。而位置列則用來捕獲信號的變化,并在生成新信號時顯示。

總的來說,這段代碼實現了一個簡單的移動平均線交叉策略,用于交易蘋果股票。

fig = plt.figure()

ax1 = fig.add_subplot(111,  ylabel='Price in $')

aapl['Close'].plot(ax=ax1, color='r', lw=2.)

signals[['short_mavg', 'long_mavg']].plot(ax=ax1, lw=2.)

ax1.plot(signals.loc[signals.positions == 1.0].index, 
         signals.short_mavg[signals.positions == 1.0],
         '^', markersize=10, color='m')
         
ax1.plot(signals.loc[signals.positions == -1.0].index, 
         signals.short_mavg[signals.positions == -1.0],
         'v', markersize=10, color='k')
         
plt.show()

圖片圖片

段代碼用于繪制財務圖表。首先需要初始化一個圖形,然后添加一個子圖,其中包含股票價格標簽。在子圖中,使用紅色繪制蘋果公司股票的收盤價,并加入兩條移動平均線。在買入信號處添加符號^,在賣出信號處添加符號v,這兩個符號均位于短移動平均線的頂部。最終的圖表將顯示在窗口中。信號變量包含交易信號、短長移動平均線以及圖表上標記的買入/賣出。

回測策略

回測策略是指通過歷史數據來驗證交易策略的有效性和盈利性。通常進行回測策略需要以下步驟:

  1. 選擇歷史數據:從可靠的數據源獲取需要的歷史數據,包括價格數據、成交量等。
  2. 編寫交易策略:根據自己的投資理念和市場分析,編寫一個可執行的交易策略,包括買入、賣出和止損條件等。
  3. 運行回測程序:使用專業的回測軟件或編程語言,將交易策略應用到歷史數據上,模擬交易執行過程,記錄交易成績和盈虧。
  4. 優化策略:根據回測結果,對交易策略進行優化,比如調整參數、修改條件等,以提高策略的有效性和盈利性。
  5. 驗證和執行:經過反復的回測和優化,最終驗證交易策略的穩健性和盈利性,然后可以開始執行該策略進行實盤交易。
initial_capital= float(100000.0)
positions = pd.DataFrame(index=signals.index).fillna(0.0)
positions['AAPL'] = 100*signals['signal']   
portfolio = positions.multiply(aapl['Adj Close'], axis=0)
pos_diff = positions.diff()
portfolio['holdings'] = (positions.multiply(aapl['Adj Close'], axis=0)).sum(axis=1)
portfolio['cash'] = initial_capital - (pos_diff.multiply(aapl['Adj Close'], axis=0)).sum(axis=1).cumsum()   
portfolio['total'] = portfolio['cash'] + portfolio['holdings']
portfolio['returns'] = portfolio['total'].pct_change()

此代碼用于股票交易回測策略中的財務分析。它首先設置初始投資金額 100,000 美元,創建一個名為“positions”的數據框來表示持有的股票“AAPL”的股份數量。股份數量通過將買入或賣出信號乘以 100 來計算,創建一個名為“portfolio”的新數據框來計算“AAPL”股份的市場價值。該代碼還計算頭寸差異,更新“持股”和“現金”列,計算投資組合在一段時間內的總回報。本質上,該代碼根據給定的信號模擬“AAPL”的股票交易。

import matplotlib.pyplot as plt

fig = plt.figure()

ax1 = fig.add_subplot(111, ylabel='Portfolio value in $')

portfolio['total'].plot(ax=ax1, lw=2.)

ax1.plot(portfolio.loc[signals.positions == 1.0].index, 
         portfolio.total[signals.positions == 1.0],
         '^', markersize=10, color='m')

ax1.plot(portfolio.loc[signals.positions == -1.0].index, 
         portfolio.total[signals.positions == -1.0],
         'v', markersize=10, color='k')

plt.show()

圖片圖片

此代碼實現財務數據可視化。制作了一個新圖形,其子圖包含一組標記為投資組合價值(以美元計)的軸,以顯示投資組合總價值隨時間的變化。折線圖的線寬為 2,買入賣出信號分別用洋紅色黑色三角形表示,大小為 10。

評估移動平均線交叉策略

returns = portfolio['returns']

sharpe_ratio = np.sqrt(252) * (returns.mean() / returns.std())

print(sharpe_ratio)

下面的代碼用于計算金融投資組合的夏普比率(Sharpe Ratio)。這個比率用于衡量投資相對于無風險資產的表現,并根據投資的風險進行調整。以下是代碼執行的步驟:

  1. 從包含財務數據的投資組合變量中提取“回報”系列。
  2. 通過對每日平均收益進行標準化,使用標準差來計算夏普比率,以確定風險調整后的收益。
  3. 夏普比率的年化值是將其乘以 252 的平方根,代表一年中的典型交易日數。
  4. 打印出由此得出的夏普比率,以便投資者了解持有高風險資產所承受的額外風險所帶來的超額回報。夏普比率越高,風險調整后的回報就越有利。

夏普比率(Sharpe Ratio)是一種用于衡量投資組合風險調整后收益的指標,它是由諾貝爾經濟學獎獲得者威廉·夏普(William Sharpe)于1966年提出的。

夏普比率通過比較投資組合的超額收益與其相對于無風險利率的標準偏差之比來衡量投資組合的風險調整后收益。夏普比率的計算公式為:

夏普比率 = (投資組合年化收益率 - 無風險利率) / 投資組合年化波動率

其中,投資組合年化收益率是指投資組合在一段時間內的平均收益率,無風險利率是指沒有風險的投資的利率(通常取國債利率),投資組合年化波動率則是投資組合收益率的標準差。

夏普比率的數值越高,表示投資組合單位風險所獲得的超額收益越高,因此夏普比率可以用來度量投資組合的風險調整后表現。通常情況下,夏普比率越高,投資組合的績效越好。

最大回撤

最大回撤是指在一段時間內資產價格從最高點下跌的幅度。通常用來衡量風險和資產價格波動的程度。最大回撤可以幫助投資者評估投資組合的風險水平,以及資產的價格波動性。在量化投資中,最大回撤也是一個重要的指標,用來評估交易策略的風險和表現。

window = 252

rolling_max = aapl['Adj Close'].rolling(window, min_periods=1).max()
daily_drawdown = aapl['Adj Close']/rolling_max - 1.0

max_daily_drawdown = daily_drawdown.rolling(window, min_periods=1).min()

daily_drawdown.plot()
max_daily_drawdown.plot()

plt.show()

圖片圖片

該步驟旨在分析蘋果公司(代碼:AAPL)股票的財務數據。它通過計算252天窗口內的滾動最高調整收盤價,以確定從該最高價到當前價格的每日跌幅(以百分比表示)。該代碼還計算了同一時期的最大每日跌幅,這代表了從峰值下降的最大百分比。然后,將這些值繪制在圖表上,以直觀顯示在選定期限內持有AAPL股票的潛在風險。

責任編輯:武曉燕 來源: 數據STUDIO
相關推薦

2025-02-11 14:02:11

2020-02-20 10:45:51

Python數據疾病

2018-08-30 17:50:30

圖像數據分析通道

2017-09-26 19:02:09

PythonInstagram數據分析

2023-04-06 11:54:55

2024-03-10 21:00:33

2020-07-12 22:24:49

德國藍科

2020-08-16 12:44:59

小費數據集Python數據分析

2019-01-15 14:21:13

Python數據分析數據

2020-10-28 18:28:12

Pandas數據分析GUI

2020-04-30 16:38:21

數據分析可視化代碼

2020-02-25 16:54:21

數據分析Python疫情

2017-04-26 14:02:18

大數據數據分析Excel

2024-07-30 12:10:22

2022-06-09 11:47:21

工具數據儀連接器

2020-06-05 14:29:07

PythonPandas數據分析

2020-05-14 10:19:23

Python可視化分析

2023-05-15 12:41:26

2021-12-28 11:23:36

SQLServerExcel數據分析

2013-06-27 15:21:38

App
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 爱综合 | 亚洲一区二区三区国产 | 欧美一区二区在线播放 | 女人毛片a毛片久久人人 | 欧美一级片在线看 | 二区不卡| 免费在线观看成人 | www.v888av.com| 日韩视频观看 | 欧美日韩黄色一级片 | 神马久久久久久久久久 | 日本午夜免费福利视频 | 日韩a v在线免费观看 | 呦呦在线视频 | 欧美精品一区二区三区四区五区 | 天天搞天天操 | 韩日一区二区三区 | 欧美1级 | 精品国产青草久久久久福利 | 精品一区二区在线观看 | 99久久夜色精品国产亚洲96 | 91免费在线看 | 看片网站在线 | 尤物视频在线免费观看 | 99精品视频一区二区三区 | 中文字幕日韩一区 | 免费在线观看黄视频 | 亚洲国产精品一区二区三区 | 青青草网站在线观看 | 人人爽人人爽 | 成年人在线视频 | 欧美一区二区久久 | 96国产精品久久久久aⅴ四区 | 91精品国产自产在线老师啪 | 久久成人免费观看 | 欧美不卡视频一区发布 | a久久| 国产福利91精品一区二区三区 | 中文字幕乱码一区二区三区 | 欧美午夜一区 | 国产91丝袜在线播放 |