利用 Python 繪製股票管制圖:結合類神經網路與統計分析

甘果-avatar-img
發佈於程式
更新 發佈閱讀 11 分鐘

[本文內容僅就一般性之證券投資公開資訊進行統計程式教學之範例,作者並不針對特定有價證券買賣提供建議]

統計上常用的管制圖(control chart)是透過標準差的計算來檢視資料的健康性;在上篇文章中,我們已經可以利用 pyTorch 以及 yfinance 這兩個 python 的工具透過股票資料來建立類神經網路模型,找到資料的趨勢;並且加上兩倍標準差及三倍標準差的計算,觀察資料的分佈,以得到有效的圖形作為資料健康判斷的依據;這樣的作法跟管制圖的使用,其實相當地接近。

為了可以更方便地使用上次發展出來的三層式類神經網路模型,可以先將程式作一些整理:

  • 引入類別庫

在這個程式分別使用了「pyTorch」用來建立類神經網路以及作為 GPU 平行運算使用;「yfinance」作為擷取股票資料使用;「tqdm」用來顯示類神經網路訓練時疊代計算的進度。

import torch
from torch import nn
import yfinance as yf
from datetime import date
from datetime import timedelta
from dateutil.relativedelta import relativedelta

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as fontManger
from tqdm import tqdm
  • 定義類神經網路

依照上篇文章的作法,定義一個三層式的類神經網路。

class classNeural(nn.Module):
def __init__(self,n_input,n_hidden,n_output):
super().__init__()
self.n_input=n_input
self.n_hidden=n_hidden
self.n_output=n_output
#--------
self.layer1=nn.Linear(n_input,n_hidden)
self.layer2=nn.Linear(n_hidden,n_output)
self.active=nn.Sigmoid()
#--------
def forward(self,x):
x=self.active(self.layer1(x))
return self.layer2(x)
  • 定義呼叫函式

整理上一篇文章中發展出來的程式,依序分成「擷取資料及資料前處理」「建立並訓練類神經網路」「取得模型預測值」「繪製管制圖」幾個部份;這個函式可以單獨依照輸入的股票代號及名稱,完整完成一支股票或指標以一年為區間的管制圖。

def stockModel(idName, idLabel):
#------------- read stock data
endDate=date.today()
beginDate=endDate-relativedelta(months=12)
dataYahoo=yf.download(idName,start=beginDate,end=endDate,auto_adjust=True)
y=dataYahoo['Close'].values
nData=len(y)
x=np.arange(0,nData,1.0)
#-------------- normalized
train_x=(x-np.mean(x))/(np.max(x)-np.min(x))
train_y=(y-np.mean(y))/(np.max(y)-np.min(y))
#-------------- transfer to GPU data
X_train=torch.tensor(train_x.astype('float32')).unsqueeze(dim=1).to(device)
Y_train=torch.tensor(train_y.astype('float32')).to(device)
#------------- setup neural network training model
torch.manual_seed(13)
stockModel=classNeural(1,10,1).to(device)
loss_fn=nn.MSELoss() # MSE
optimizer=torch.optim.AdamW(stockModel.parameters(),lr=0.01)
stockModel.train()
n_epoche=2000
#------------- training neural network model
for epoche in tqdm(range(n_epoche)):
Y_pred=stockModel(X_train)
loss=loss_fn(Y_pred,Y_train)
optimizer.zero_grad()
loss.backward()
optimizer.step()
#------------- predict from trained model
stockModel.eval()
with torch.inference_mode():
Y_pred=stockModel(X_train)
y_cpu=Y_pred.to("cpu").numpy()
y_pred=np.mean(y)+y_cpu*((np.max(y)-np.min(y)))
#------------- plot control chart
offset=np.std(y_pred-y)
upperBound1=y_pred+offset
lowerBound1=y_pred-offset
upperBound2=y_pred+offset*2
lowerBound2=y_pred-offset*2
#--------------
zhfont=fontManger.FontProperties(fname='NotoSansTC-VariableFont_wght.ttf')
labelX=dataYahoo.index.strftime('%Y/%m/%d')
showTick=np.arange(0,nData,20)

plt.plot(x,y,'b.',label=idLabel+'收盤資料')
plt.plot(x,upperBound1,'g--')
plt.plot(x,lowerBound1,'g--')
plt.plot(x,upperBound2,'r--')
plt.plot(x,lowerBound2,'r--')

plt.grid()
plt.legend(fontsize=12,prop=zhfont)
plt.ylabel(idLabel,fontproperties=zhfont)
plt.xlabel('日期',fontproperties=zhfont)
plt.xticks(ticks=showTick,labels=labelX[showTick],
fontsize=8,rotation=45)
plt.show()
  • 撰寫主程式

最後我們定義程式所執行的 GPU 以及要繪製出來的股票或加權指標的圖形;可以提供綜合的判斷依據。

device=torch.device('cpu')
if torch.cuda.is_available():
device=torch.device('cuda')
elif torch.backends.mps.is_available():
device=torch.device('mps')

stock=[]
stock.append({'id':'^SOX','name':'費城半導體指數'})
stock.append({'id':'^TWII','name':'台灣加權指數'})
stock.append({'id':'2330.TW','name':'台積電'})
stock.append({'id':'2303.TW','name':'聯電'})
stock.append({'id':'0050.TW','name':'元大台灣五十(0050)'})
stock.append({'id':'0056.TW','name':'元大高股息(0056)'})

#-----------
for i in range(len(stock)):
stockModel(stock[i]['id'],stock[i]['name'])
  • 輸出結果

其實本來一直以來就有很多各式各樣的圖表提供股票或財經的分析及判斷;類神經網路的好處是在於不限定於一個固定公式,而能從資料面找到接近的模型;透過這樣型的建立,再加上統計計算,建立一個可以使用般常管制圖的使用方法的圖形,作為資料判斷的依據。當然,在建立模型的過程當中,會有一些參數的設定都會影響到輸出的結果;這就有賴股票財經方面知識的累積來取得最佳參數的設定。

raw-image


raw-image


raw-image


raw-image


raw-image


raw-image


[本文內容僅就一般性之證券投資公開資訊進行統計程式教學之範例,作者並不針對特定有價證券買賣提供建議]

留言
avatar-img
留言分享你的想法!
avatar-img
甘果的沙龍
4會員
28內容數
作者從國內主要的半導體公司退休,重回校園唸書;開始第三人生。分享退休投資規劃、科技產業經驗以及校園學習點滴。
甘果的沙龍的其他內容
2025/08/24
本文介紹如何使用 PyTorch 建立一個三層式反饋類神經網路模型來預測股價。文章涵蓋了資料取得 、資料預處理 (正規化)、GPU 資料轉換、模型訓練、模型預測以及結果評估等步驟。透過將模型預測結果與原始股價資料繪製比較圖表,並結合統計指標例如「95%區間」來分析模型的準確性和可靠性。
Thumbnail
2025/08/24
本文介紹如何使用 PyTorch 建立一個三層式反饋類神經網路模型來預測股價。文章涵蓋了資料取得 、資料預處理 (正規化)、GPU 資料轉換、模型訓練、模型預測以及結果評估等步驟。透過將模型預測結果與原始股價資料繪製比較圖表,並結合統計指標例如「95%區間」來分析模型的準確性和可靠性。
Thumbnail
2025/08/15
本文介紹如何使用yfinance函式庫取得臺灣股票市場資料(例如加權指數或個股),並利用這些資料繪製圖表。同時,也說明如何安裝yfinance函式庫、取得最新版本以及設定圖表顯示中文的方法。
Thumbnail
2025/08/15
本文介紹如何使用yfinance函式庫取得臺灣股票市場資料(例如加權指數或個股),並利用這些資料繪製圖表。同時,也說明如何安裝yfinance函式庫、取得最新版本以及設定圖表顯示中文的方法。
Thumbnail
2025/05/07
蘋果M系列晶片採用統一記憶體架構 (UMA),不同於NVIDIA CUDA常用的獨立顯示卡記憶體架構。本文以PyTorch 撰寫測試M4晶片CPU和GPU矩陣運算效能程式,結果顯示不管GPU或是CPU的結果,運算效能驚人,非常適合教學及小型研究用途。
Thumbnail
2025/05/07
蘋果M系列晶片採用統一記憶體架構 (UMA),不同於NVIDIA CUDA常用的獨立顯示卡記憶體架構。本文以PyTorch 撰寫測試M4晶片CPU和GPU矩陣運算效能程式,結果顯示不管GPU或是CPU的結果,運算效能驚人,非常適合教學及小型研究用途。
Thumbnail
看更多
你可能也想看
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
在資料分析過程中,透過衡量變數之間的線性或非線性關係,能有效探索數據集,篩選出重要特徵,並進行預測建模。本文介紹瞭如何理解數據、使用相關矩陣找出變數關聯性,以及利用互資訊評估變數之間的依賴程度,幫助資料科學家在建模過程中選擇適當的變數,提升模型效果。
Thumbnail
在資料分析過程中,透過衡量變數之間的線性或非線性關係,能有效探索數據集,篩選出重要特徵,並進行預測建模。本文介紹瞭如何理解數據、使用相關矩陣找出變數關聯性,以及利用互資訊評估變數之間的依賴程度,幫助資料科學家在建模過程中選擇適當的變數,提升模型效果。
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
Thumbnail
本文介紹如何用Python繪製散布圖與迴歸線
Thumbnail
本文介紹如何用Python繪製散布圖與迴歸線
Thumbnail
這篇文章介紹如何使用Python整理資料成百分比資料以及繪製百分比堆疊直條圖。
Thumbnail
這篇文章介紹如何使用Python整理資料成百分比資料以及繪製百分比堆疊直條圖。
Thumbnail
透過分析臺灣好行的公開資料,分享如何用Python繪製折線圖
Thumbnail
透過分析臺灣好行的公開資料,分享如何用Python繪製折線圖
Thumbnail
本文介紹了如何使用資料樞紐分析的功能來整理所需的資料,並設定圖表的中文字型,最後提供了繪圖的程式碼範例。
Thumbnail
本文介紹了如何使用資料樞紐分析的功能來整理所需的資料,並設定圖表的中文字型,最後提供了繪圖的程式碼範例。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News