炒股利器!用Python大模型篩選低估值股票 原創
在股票投資中,尋找被低估的股票是實現高回報的重要途徑。傳統的分析方法需要大量手工處理數據,而Python數據科學和LLM大模型技術可以幫助我們更高效地完成這項工作。這個項目旨在利用Python編程語言和大模型來自動化篩選納斯達克市場中的低估值股票。本文所有代碼已打包,并配有詳細文檔,下載方法詳見文末,代碼文件結構如下:
最后代碼執行后篩選結果如下:
大模型給我們的財富密碼是:PDD(拼多多)、CSCO(思科)、AEP(美國電力公司)、MU(美光科技)、CDW。大模型對篩選出的這幾只股也作了解釋,還是值得我們參考的。
好了,現在從頭開始講解如何進行開發,我們的主要目標是開發一個自動化系統,通過結合關鍵財務指標和大模型的智能分析,篩選出被低估且具有潛在高回報的股票。
我們選擇了以下五個關鍵財務指標來評估股票的價值:市盈率 (PE Ratio)、市凈率 (PB Ratio)、負債股本比 (Debt/Equity Ratio)、股息收益率 (Dividend Yield)、每股收益 (EPS) 增長率。?
實現過程如下:
1、數據收集:
使用Python腳本從Yahoo Finance獲取納斯達克100指數成分股的歷史數據。從維基百科頁面獲取納斯達克100指數的成分股列表。
2、數據處理:
使用Pandas庫對收集到的數據進行處理和清洗。提取每只股票的關鍵財務指標,包括市盈率、市凈率、負債股本比、股息收益率和每股收益增長率。
3、智能分析:
使用Cohere API調用大模型對處理后的數據進行智能分析。基于大模型的分析結果,篩選出被低估且具有潛在高回報的股票。
4、結果輸出:
將篩選結果保存到CSV文件中,方便進一步的分析和決策支持。打印篩選結果,提供對每只被選中股票的理由解釋。
Cohere API 是一套應用程序接口,允許開發者訪問和使用其強大的大規模語言模型(LLMs)來執行各種自然語言處理任務。Cohere 的 API 旨在簡化機器學習模型的集成和使用,使得開發者無需深入了解復雜的機器學習算法和模型訓練過程,就可以利用大模型技術進行文本分析、情感分析等任務。我們可以直接注冊并獲取API key,如下所示。
其中最關鍵的過程是數據處理和智能分析的部分,以下是關于這部分代碼的詳細技術分析,解釋其實現原理和流程。
導入庫和模塊
import os
import pandas as pd
import yfinance as yf
from datetime import datetime, timedelta
from cohere_interface import Cohere # 確保導入Cohere類
from concurrent.futures import ThreadPoolExecutor
這些庫和模塊提供了基本的數據處理和并行處理功能:
- ?
?os?
?:用于操作文件和目錄。 - ?
?pandas?
?:強大的數據處理庫。 - ?
?yfinance?
?:用于從Yahoo Finance獲取金融數據。 - ?
?datetime?
?? 和??timedelta?
?:用于日期和時間操作。 - ?
?Cohere?
?:自定義模塊,用于與Cohere API交互。 - ?
?ThreadPoolExecutor?
?:用于并行處理,以提高數據處理速度。
Screener 類定義
class Screener:
def __init__(self, folder):
self.index = folder # 設置索引為文件夾名稱
self.folder = f'/data/historical/analysis/{folder}/' # 設置數據文件夾路徑
self.files = os.listdir(self.folder) # 獲取文件夾中的所有文件
self.df_all = pd.DataFrame() # 初始化空的數據框,用于存儲最終數據
# 創建數據文件夾
if not os.path.exists(self.folder):
os.makedirs(self.folder)
- 初始化Screener類時,設置索引和數據文件夾路徑。
- 獲取文件夾中的所有文件名。
- 初始化一個空的DataFrame,用于存儲最終的數據。
- 如果數據文件夾不存在,則創建該文件夾。
處理單個文件的方法
def process_file(self, filename):
if (filename.endswith('xlsx') or filename.endswith('csv')) and not filename.startswith('~$'):
file_path = os.path.join(self.folder, filename)
print(f"Processing file: {file_path}")
try:
df = pd.read_csv(file_path) # 讀取CSV文件
df['Date'] = pd.to_datetime(df['Date'], utc=True) # 轉換日期列為日期時間格式
df['Date'] = df['Date'].dt.date # 提取日期部分
current_date = df.iloc[-1]['Date'] # 獲取最新日期
symbol = filename.split()[0] # 獲取股票符號
info = yf.Ticker(symbol).info # 獲取股票信息
# 提取關鍵財務數據
pe = info.get('trailingPE', None)
pb = info.get('priceToBook', None)
debtToEquity = round(info.get('debtToEquity', 0) / 100.0, 2)
dividend_yield = info.get('dividendYield', None)
eps_growth = info.get('earningsQuarterlyGrowth', None)
close = df.iloc[-1]['Close']
# 生成數據字典
data = {
'date': [current_date],
'symbol': [symbol],
'pe': [pe],
'pb': [pb],
'debtToEquity': [debtToEquity],
'dividend_yield': [dividend_yield],
'eps_growth': [eps_growth],
'close': [close]
}
df_change = pd.DataFrame(data) # 將數據字典轉換為數據框
self.df_all = pd.concat([self.df_all], axis=0) # 將新的數據框添加到總數據框中
except Exception as e:
print(f"Error processing file {file_path}: {e}")
- 檢查文件是否是Excel或CSV格式且不是臨時文件。
- 讀取CSV文件并轉換日期格式。
- 獲取最新的日期和股票符號。
- 使用?
?yfinance?
? 獲取股票的財務信息。 - 提取關鍵財務數據:市盈率、價格與賬面比、負債股本比、股息收益率、每股收益增長率和收盤價。
- 生成包含這些數據的字典,并將其轉換為DataFrame。
- 將新的DataFrame添加到總的DataFrame中。
- 如果處理文件時出錯,捕獲異常并打印錯誤信息。
并行處理文件的方法
def run(self):
with ThreadPoolExecutor(max_workers=4) as executor: # 使用4個線程并行處理
executor.map(self.process_file, self.files)
- 使用?
?ThreadPoolExecutor?
? 并行處理文件。 - ?
?max_workers=4?
? 指定使用4個線程并行處理文件。 - ?
?executor.map(self.process_file, self.files)?
?? 依次將文件傳遞給??process_file?
? 方法進行處理。
將結果存儲到CSV的方法
def store_in_csv(self):
# 將最終數據存儲到CSV文件中
folder = f'./data/historical/screener/'
if not os.path.exists(folder):
os.makedirs(folder)
filename = f'{self.index}_{str(datetime.today()}.csv'
path = os.path.join(folder, filename)
self.df_all.to_csv(path, index=False)
- 將最終的數據存儲到CSV文件中。
- 檢查存儲文件夾是否存在,如果不存在則創建。
- 生成包含當前日期的文件名。
- 將DataFrame保存到CSV文件中,不包含索引。
使用Cohere進行AI篩選的方法
def ai_screening(self):
# 使用Cohere進行AI篩選
co = Cohere()
message = f"""你將獲得一些股票的數據。請分析這些數據并篩選出2只被低估且未來有可能產生更高回報的股票。以下是數據 {self.df_all}"""
preamble = """你是一名優秀的股市分析師,能夠很好地理解提供的數據并做出謹慎的決策。輸出應嚴格采用以下JSON格式:
[
{
"stock": "股票名稱",
"justification": "篩選或選擇該股票的理由"
},
{
"stock": "股票名稱",
"justification": "篩選或選擇該股票的理由"
}
]"""
result = co.chat_cohere(message=message, preamble=preamble)
print(result)
- 使用Cohere API進行AI篩選。
- 創建Cohere對象。
- 定義要發送給Cohere的消息,包含待分析的股票數據。
- 定義消息的前言,設置任務和輸出格式的上下文。
- 調用?
?chat_cohere?
? 方法發送消息并接收結果。 - 打印篩選結果。
通過以上步驟,我們就可以自動化地完成納斯達克100指數成分股的財務數據分析和智能篩選,幫助識別被低估且具有潛在高回報的股票。未來,可以進一步優化和擴展該項目,包括:
增加更多財務指標,動態調整和增加篩選財務指標。集成更多數據源,豐富數據維度,提高分析深度。模型優化與更新,比如選用BloomberGPT之類的一些金融行業的大模型,確保分析結果的前沿性和準確性。開發用戶友好的界面,提供可視化報告和實時篩選結果展示。
本文轉載自公眾號AIGC開發者,作者:阿橙AIGC
