Python 解鎖 - 股市股號資訊撈取

更新於 發佈於 閱讀時間約 13 分鐘

在上一篇使用Colab Python + SQLite在Google Drive裡建立簡易的資料庫,我們討論到如何在Google Drive裡建立簡易的SQLite資料庫,並在Colab環境中將資料存取於此資料庫中。

在此篇中,我們來拿實務的例子作實戰練習,我們會討論如何在Google Colab的環境下,撈取所有台美股的股票代碼,並獲取相關細節,最後將獲取的資訊存取於SQLite資料庫中。

stocksymbol

步驟1 - 於stocksymbol註冊帳號並獲取API金鑰。於Colab筆記本中安裝stocksymbol。

!pip install stocksymbol


步驟2 - 在存取於Google Drive中的SQLite資料庫Stock.db中建立資料表Tickers。

import sqlite3

con = sqlite3.connect('/content/drive/MyDrive/data/Stock.db')
cursor = con.cursor()
query = """
CREATE TABLE "Tickers"
(
[symbol] varchar(50) NOT NULL,
[longName] varchar(255) ,
[exchange] varchar(255) ,
[market] varchar(255),
PRIMARY KEY(symbol)
)
"""
cursor.execute(query)
con.commit()
cursor.close()


步驟3 - 開始對於所有股票代碼進行撈取並轉換成DataFrame。

from stocksymbol import StockSymbol

api_key = 'Your API Key'
ss = StockSymbol(api_key)

# get symbol list based on market

symbol_list_us = ss.get_symbol_list(market="US")
symbol_list_tw = ss.get_symbol_list(market="TW")

import pandas as pd

df_us = pd.DataFrame(symbol_list_us)
df_tw = pd.DataFrame(symbol_list_tw)


步驟4 - 將獲取的訊息存入Stock.db中的資料表Tickers。

con = sqlite3.connect('/content/drive/MyDrive/data/Stock.db')

for row in df_us.to_records(index=False):
con.execute(" INSERT INTO Tickers (symbol, longName, exchange, market) VALUES (?, ?, ? ,?) ", (str(row[0]),str(row[2]), str(row[3]) , str(row[4])) )
con.commit()
for row in df_tw.to_records(index=False):
con.execute(" INSERT INTO Tickers (symbol, longName, exchange, market) VALUES (?, ?, ? ,?) ", (str(row[0]),str(row[2]), str(row[3]) , str(row[4])) )
con.commit()


raw-image


yahooquery

我們獲取一萬多筆資料,接下來我們將會對此資料進行像是PE, moving average等相關資料的撈取。

步驟1: 於Colab筆記本中安裝yahooquery。

!pip install yahooquery


步驟2: 首先,先拿高通(QCOM)來了解回傳資料的結構。我們發現我們要撈取的收盤價、本益比、均值落在list(details.summary_detail.values())[0]。

from yahooquery import Ticker

symbols = ['QCOM']
list(details.summary_detail.values())[0]
raw-image



步驟3: 定義函式get_info,使用try-except避免回傳空值中斷流程。

from yahooquery import Ticker

def get_info(tickers):
try:
details = Ticker(tickers)
tickers = list(details.summary_detail)[0]
previousClose = list(details.summary_detail.values())[0].get('previousClose')
dividendYield = list(details.summary_detail.values())[0].get('dividendYield')
trailingPE = list(details.summary_detail.values())[0].get('trailingPE')
forwardPE = list(details.summary_detail.values())[0].get('forwardPE')
priceToSalesTrailing12Months = list(details.summary_detail.values())[0].get('priceToSalesTrailing12Months')
fiftyDayAverage = list(details.summary_detail.values())[0].get('fiftyDayAverage')
twoHundredDayAverage = list(details.summary_detail.values())[0].get('twoHundredDayAverage')
cursor = con.cursor()
con.execute(" INSERT INTO Tickers_Info (tickers , previousClose , dividendYield, trailingPE , forwardPE, priceToSalesTrailing12Months, fiftyDayAverage, twoHundredDayAverage) VALUES (?, ? , ?, ?, ?, ?, ?, ?) ",
(str(tickers),str(previousClose), str(dividendYield) , str(trailingPE) , str(forwardPE ), str(priceToSalesTrailing12Months), str(fiftyDayAverage) , str(twoHundredDayAverage)))
except:
print(tickers)
pass
return


步驟4 - 建立SQLite的資料表以儲存剛剛存取的資料。

import sqlite3

con = sqlite3.connect('/content/drive/MyDrive/data/Stock.db')
cursor = con.cursor()
query = """
CREATE TABLE "Tickers_Info"
(
[Tickers] varchar(50) NOT NULL,
[previousClose] float,
[dividendYield] float,
[trailingPE] float,
[forwardPE] float,
[priceToSalesTrailing12Months] float,
[fiftyDayAverage] float,
[twoHundredDayAverage] float,
PRIMARY KEY(Tickers)
)
"""
cursor.execute(query)
con.commit()
cursor.close()


步驟5 - 執行

  • 於Part 1建立的股票代碼資料表撈取存成df_Tickers。
  • 於每列的股號(row[0])輸入get_info。
import pandas as pd

con = sqlite3.connect('/content/drive/MyDrive/data/Stock.db')
cursor = con.cursor()
con.execute('''DELETE FROM Tickers_Info''')
con.commit()
df_Tickers = pd.read_sql('select distinct symbol from Tickers', con)
for row in df_Tickers.to_records(index=False):
tickers_list = []
tickers_list.append(str(row[0]))
get_info(tickers_list)
con.commit()
con.close()


步驟6: 執行後,我們可以進行簡單的分析,比如找尋PE<10和收盤價低於200天均線的股票。

import sqlite3
import pandas as pd

con = sqlite3.connect('/content/drive/MyDrive/data/Stock.db')
df_data = pd.read_sql('select * from Tickers_Info where forwardPE < 10 and twoHundredDayAverage - previousClose >=0', con)
con.close()
df_data


FinanceDatabase

我們同場加映介紹另一種方法撈取清單。如果僅是要獲取美股清單,FinanceDatabase會是另一種方法,儘管無法獲取台股清單,但financedatabase裡有包含ETF的資訊,這些資訊是stocksymbol裡沒有的。

步驟1 - 安裝financedatabase。

!pip install financedatabase 


步驟2 - 獲取股票清單,並將Inde轉為欄位。

import financedatabase as fd
import pandas as pd

equities = fd.Equities()
df = equities.select()
df['symbol'] = df.index


步驟3 - 獲取ETF清單,並將Inde轉為欄位。

etfs = fd.ETFs()
df_etf = etfs.select()
df_etf ['symbol'] = df_etf.index


步驟4 - 將此兩個DataFrame輸入於SQLite中。

from google.colab import drive

drive.mount('/content/drive')

df = df.reset_index(drop=True)
df_etf = df_etf.reset_index(drop=True)

import sqlite3

con = sqlite3.connect('/content/drive/MyDrive/data/Stock.db')
df.to_sql('financedatabase_eq', con, if_exists='replace')
df_etf.to_sql('financedatabase_etf', con, if_exists='replace')

con.close()
raw-image




我們會持續推出更多以實用情境為主的教學,讓你知道為什麼要學這些技巧,這些技巧能在職場和工作幫上您什麼忙。謝謝您花時間將此篇文章讀完,若覺得對您有幫助可以幫忙按個讚、分享來或是珍藏喔! 也歡迎Follow我們的Threads,持續都會有這類商業分析問題討論和生產力提升的點子喔!



avatar-img
33會員
66內容數
我們秉持著從原人進化的精神,不斷追求智慧的累積和工具的運用來提升生產力。我們相信,每一個成員都擁有無限的潛力,透過學習和實踐,不斷成長和進步。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
DigNo Ape 數遊原人 的其他內容
你是否曾使用Python進行網上爬蟲、撈取資料、分析,並將結果存進雲端資料庫? 你知道這一切可以全部發生在Google Drive裡嗎?而且,全部都是免費的!
你是否曾使用Python進行網上爬蟲、撈取資料、分析,並將結果存進雲端資料庫? 你知道這一切可以全部發生在Google Drive裡嗎?而且,全部都是免費的!
本篇參與的主題活動
最近大家應該很有感,不管是手上已持有或者觀察中還沒出手的個股,很多原先抗跌、支撐明顯的個股,紛紛不約而同的破了支撐,然後跌勢加速。 已持有的個股,面臨破線賣不賣?該不該逢低加碼的問題;觀察中的個股,原先是要等回測支撐時來低接,可是當看到這麼多檔同時跌這麼快,謹慎的人反而不知道如何出手,而積極的人卻
終於開始看施昇輝老師的書了,之前主要是看他在節目上發言,這次算是靜下來真的第一次看他的書。這算是他特別為了小資族打造的書,所以針對的收入跟各種也走向小資,力求簡單無腦投資,捨棄一些不需要的動作。下面就來看看書中我覺得很不錯的概念吧。
市值型ETF包括美股和臺股,美股因手續費推薦長抱,而臺股則適合進出。不斷買進又賣出可能錯過配發股息和獲利時機,增加成本。定期定額投資則能享受複利效應,建議躺平投資以獲得最大效益。結論永遠留在市場享受複利,若需要現金流可配置到市值型ETF或債券型ETF,不要必須賣股換現金。
在高股息ETF的投資中,重要的是要找到適合的買入時間和賣出時間。一般來說,計算股價和股利的比值可以判斷是否適合買入,而在賣出時,可以以總股利收益作為參考。股票投資的關鍵在於持續的買入和加碼,以及在合適的時間出場,以最大化收益。
這本書算是日本人撰寫的投資書,主要透過各種小故事講述55條個有錢人的思考法則。裡面是沒有教怎麼投資,更多的反而是觀念上的討論,對於自己職場的工作、投資、創業或是改善關係等,我覺得都蠻有幫助的,比較像是觀念建立的書,很推薦一讀。
最近大家應該很有感,不管是手上已持有或者觀察中還沒出手的個股,很多原先抗跌、支撐明顯的個股,紛紛不約而同的破了支撐,然後跌勢加速。 已持有的個股,面臨破線賣不賣?該不該逢低加碼的問題;觀察中的個股,原先是要等回測支撐時來低接,可是當看到這麼多檔同時跌這麼快,謹慎的人反而不知道如何出手,而積極的人卻
終於開始看施昇輝老師的書了,之前主要是看他在節目上發言,這次算是靜下來真的第一次看他的書。這算是他特別為了小資族打造的書,所以針對的收入跟各種也走向小資,力求簡單無腦投資,捨棄一些不需要的動作。下面就來看看書中我覺得很不錯的概念吧。
市值型ETF包括美股和臺股,美股因手續費推薦長抱,而臺股則適合進出。不斷買進又賣出可能錯過配發股息和獲利時機,增加成本。定期定額投資則能享受複利效應,建議躺平投資以獲得最大效益。結論永遠留在市場享受複利,若需要現金流可配置到市值型ETF或債券型ETF,不要必須賣股換現金。
在高股息ETF的投資中,重要的是要找到適合的買入時間和賣出時間。一般來說,計算股價和股利的比值可以判斷是否適合買入,而在賣出時,可以以總股利收益作為參考。股票投資的關鍵在於持續的買入和加碼,以及在合適的時間出場,以最大化收益。
這本書算是日本人撰寫的投資書,主要透過各種小故事講述55條個有錢人的思考法則。裡面是沒有教怎麼投資,更多的反而是觀念上的討論,對於自己職場的工作、投資、創業或是改善關係等,我覺得都蠻有幫助的,比較像是觀念建立的書,很推薦一讀。
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
最新的市場趨勢與投資策略,深入解析AI應用、特斯拉和車用半導體等領域。掌握槓桿使用技巧,洞察大盤動態,確保投資風險管理,並提供冷靜的投資心態指導。
Thumbnail
你最近有特別有興趣的產業嗎,有興趣的股票嗎?你是每天去刷網頁嗎? 這裡有個方法可以幫你收集相關的網路新聞,固定送到你的信箱。 這個方法就是Google帳號的功能,快訊。 一、        首先你要有一個Google account及Gmail 然後是login in的狀態! 二、     
Thumbnail
對於剛接觸Python程式的使用者來說,要一口氣學會爬蟲可能相對困難,但若想即時且輕鬆獲得台股相關數據,你可以利用證交所所提供的API進行數據蒐集。只需要簡單幾行程式碼,就能輕鬆抓到台股上千支股票的每日資訊,是不是棒呆了!!
Thumbnail
這篇文章介紹了最近美股的表現和科技巨頭的財報。同時提供了關於投資策略和風險管理的建議。作者建議投資者要注意市場波動,避免過度樂觀,保持謹慎。另外,也提到了Meta、Google和Microsoft等公司的策略和發展方向,並給出了相應的投資建議。
Thumbnail
本文介紹瞭如何使用 Python pandas 進行資料分析,包括如何使用 corr() 函數針對數字類型的欄位進行分析,以及如何刪除不需要的欄位和取得想要的小數位數。
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
最新的市場趨勢與投資策略,深入解析AI應用、特斯拉和車用半導體等領域。掌握槓桿使用技巧,洞察大盤動態,確保投資風險管理,並提供冷靜的投資心態指導。
Thumbnail
你最近有特別有興趣的產業嗎,有興趣的股票嗎?你是每天去刷網頁嗎? 這裡有個方法可以幫你收集相關的網路新聞,固定送到你的信箱。 這個方法就是Google帳號的功能,快訊。 一、        首先你要有一個Google account及Gmail 然後是login in的狀態! 二、     
Thumbnail
對於剛接觸Python程式的使用者來說,要一口氣學會爬蟲可能相對困難,但若想即時且輕鬆獲得台股相關數據,你可以利用證交所所提供的API進行數據蒐集。只需要簡單幾行程式碼,就能輕鬆抓到台股上千支股票的每日資訊,是不是棒呆了!!
Thumbnail
這篇文章介紹了最近美股的表現和科技巨頭的財報。同時提供了關於投資策略和風險管理的建議。作者建議投資者要注意市場波動,避免過度樂觀,保持謹慎。另外,也提到了Meta、Google和Microsoft等公司的策略和發展方向,並給出了相應的投資建議。
Thumbnail
本文介紹瞭如何使用 Python pandas 進行資料分析,包括如何使用 corr() 函數針對數字類型的欄位進行分析,以及如何刪除不需要的欄位和取得想要的小數位數。