自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

炒股利器!用Python大模型篩選低估值股票 原創(chuàng)

發(fā)布于 2024-6-6 07:57
瀏覽
0收藏

在股票投資中,尋找被低估的股票是實現(xiàn)高回報的重要途徑。傳統(tǒng)的分析方法需要大量手工處理數(shù)據(jù),而Python數(shù)據(jù)科學(xué)和LLM大模型技術(shù)可以幫助我們更高效地完成這項工作。這個項目旨在利用Python編程語言和大模型來自動化篩選納斯達(dá)克市場中的低估值股票。本文所有代碼已打包,并配有詳細(xì)文檔,下載方法詳見文末,代碼文件結(jié)構(gòu)如下:

炒股利器!用Python大模型篩選低估值股票 -AI.x社區(qū)

最后代碼執(zhí)行后篩選結(jié)果如下:

炒股利器!用Python大模型篩選低估值股票 -AI.x社區(qū)

大模型給我們的財富密碼是:PDD(拼多多)、CSCO(思科)、AEP(美國電力公司)、MU(美光科技)、CDW。大模型對篩選出的這幾只股也作了解釋,還是值得我們參考的。

好了,現(xiàn)在從頭開始講解如何進(jìn)行開發(fā),我們的主要目標(biāo)是開發(fā)一個自動化系統(tǒng),通過結(jié)合關(guān)鍵財務(wù)指標(biāo)和大模型的智能分析,篩選出被低估且具有潛在高回報的股票。

我們選擇了以下五個關(guān)鍵財務(wù)指標(biāo)來評估股票的價值:市盈率 (PE Ratio)、市凈率 (PB Ratio)、負(fù)債股本比 (Debt/Equity Ratio)、股息收益率 (Dividend Yield)、每股收益 (EPS) 增長率。?

實現(xiàn)過程如下:

1、數(shù)據(jù)收集:

使用Python腳本從Yahoo Finance獲取納斯達(dá)克100指數(shù)成分股的歷史數(shù)據(jù)。從維基百科頁面獲取納斯達(dá)克100指數(shù)的成分股列表。

2、數(shù)據(jù)處理:

使用Pandas庫對收集到的數(shù)據(jù)進(jìn)行處理和清洗。提取每只股票的關(guān)鍵財務(wù)指標(biāo),包括市盈率、市凈率、負(fù)債股本比、股息收益率和每股收益增長率。

3、智能分析:

使用Cohere API調(diào)用大模型對處理后的數(shù)據(jù)進(jìn)行智能分析?;诖竽P偷姆治鼋Y(jié)果,篩選出被低估且具有潛在高回報的股票。

4、結(jié)果輸出:

將篩選結(jié)果保存到CSV文件中,方便進(jìn)一步的分析和決策支持。打印篩選結(jié)果,提供對每只被選中股票的理由解釋。

Cohere API 是一套應(yīng)用程序接口,允許開發(fā)者訪問和使用其強(qiáng)大的大規(guī)模語言模型(LLMs)來執(zhí)行各種自然語言處理任務(wù)。Cohere 的 API 旨在簡化機(jī)器學(xué)習(xí)模型的集成和使用,使得開發(fā)者無需深入了解復(fù)雜的機(jī)器學(xué)習(xí)算法和模型訓(xùn)練過程,就可以利用大模型技術(shù)進(jìn)行文本分析、情感分析等任務(wù)。我們可以直接注冊并獲取API key,如下所示。

炒股利器!用Python大模型篩選低估值股票 -AI.x社區(qū)

其中最關(guān)鍵的過程是數(shù)據(jù)處理和智能分析的部分,以下是關(guān)于這部分代碼的詳細(xì)技術(shù)分析,解釋其實現(xiàn)原理和流程。

導(dǎo)入庫和模塊

import os
import pandas as pd
import yfinance as yf
from datetime import datetime, timedelta
from cohere_interface import Cohere  # 確保導(dǎo)入Cohere類
from concurrent.futures import ThreadPoolExecutor

這些庫和模塊提供了基本的數(shù)據(jù)處理和并行處理功能:

  • ??os??:用于操作文件和目錄。
  • ??pandas??:強(qiáng)大的數(shù)據(jù)處理庫。
  • ??yfinance??:用于從Yahoo Finance獲取金融數(shù)據(jù)。
  • ??datetime??? 和??timedelta??:用于日期和時間操作。
  • ??Cohere??:自定義模塊,用于與Cohere API交互。
  • ??ThreadPoolExecutor??:用于并行處理,以提高數(shù)據(jù)處理速度。

Screener 類定義

class Screener:
    def __init__(self, folder):
        self.index = folder  # 設(shè)置索引為文件夾名稱
        self.folder = f'/data/historical/analysis/{folder}/'  # 設(shè)置數(shù)據(jù)文件夾路徑
        self.files = os.listdir(self.folder)  # 獲取文件夾中的所有文件
        self.df_all = pd.DataFrame()  # 初始化空的數(shù)據(jù)框,用于存儲最終數(shù)據(jù)

        # 創(chuàng)建數(shù)據(jù)文件夾
        if not os.path.exists(self.folder):
            os.makedirs(self.folder)
  • 初始化Screener類時,設(shè)置索引和數(shù)據(jù)文件夾路徑。
  • 獲取文件夾中的所有文件名。
  • 初始化一個空的DataFrame,用于存儲最終的數(shù)據(jù)。
  • 如果數(shù)據(jù)文件夾不存在,則創(chuàng)建該文件夾。

處理單個文件的方法

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)  # 轉(zhuǎn)換日期列為日期時間格式
                df['Date'] = df['Date'].dt.date  # 提取日期部分
                current_date = df.iloc[-1]['Date']  # 獲取最新日期
                symbol = filename.split()[0]  # 獲取股票符號
                info = yf.Ticker(symbol).info  # 獲取股票信息

                # 提取關(guān)鍵財務(wù)數(shù)據(jù)
                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']

                # 生成數(shù)據(jù)字典
                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)  # 將數(shù)據(jù)字典轉(zhuǎn)換為數(shù)據(jù)框
                self.df_all = pd.concat([self.df_all], axis=0)  # 將新的數(shù)據(jù)框添加到總數(shù)據(jù)框中
            except Exception as e:
                print(f"Error processing file {file_path}: {e}")
  • 檢查文件是否是Excel或CSV格式且不是臨時文件。
  • 讀取CSV文件并轉(zhuǎn)換日期格式。
  • 獲取最新的日期和股票符號。
  • 使用??yfinance?? 獲取股票的財務(wù)信息。
  • 提取關(guān)鍵財務(wù)數(shù)據(jù):市盈率、價格與賬面比、負(fù)債股本比、股息收益率、每股收益增長率和收盤價。
  • 生成包含這些數(shù)據(jù)的字典,并將其轉(zhuǎn)換為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?? 方法進(jìn)行處理。

將結(jié)果存儲到CSV的方法

def store_in_csv(self):
        # 將最終數(shù)據(jù)存儲到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)
  • 將最終的數(shù)據(jù)存儲到CSV文件中。
  • 檢查存儲文件夾是否存在,如果不存在則創(chuàng)建。
  • 生成包含當(dāng)前日期的文件名。
  • 將DataFrame保存到CSV文件中,不包含索引。

使用Cohere進(jìn)行AI篩選的方法

def ai_screening(self):
        # 使用Cohere進(jìn)行AI篩選
        co = Cohere()
        message = f"""你將獲得一些股票的數(shù)據(jù)。請分析這些數(shù)據(jù)并篩選出2只被低估且未來有可能產(chǎn)生更高回報的股票。以下是數(shù)據(jù) {self.df_all}"""
        preamble = """你是一名優(yōu)秀的股市分析師,能夠很好地理解提供的數(shù)據(jù)并做出謹(jǐn)慎的決策。輸出應(yīng)嚴(yán)格采用以下JSON格式:
        [
            {
                "stock": "股票名稱",
                "justification": "篩選或選擇該股票的理由"
            },
            {
                "stock": "股票名稱",
                "justification": "篩選或選擇該股票的理由"
            }
        ]"""
        result = co.chat_cohere(message=message, preamble=preamble)
        print(result)
  • 使用Cohere API進(jìn)行AI篩選。
  • 創(chuàng)建Cohere對象。
  • 定義要發(fā)送給Cohere的消息,包含待分析的股票數(shù)據(jù)。
  • 定義消息的前言,設(shè)置任務(wù)和輸出格式的上下文。
  • 調(diào)用??chat_cohere?? 方法發(fā)送消息并接收結(jié)果。
  • 打印篩選結(jié)果。

通過以上步驟,我們就可以自動化地完成納斯達(dá)克100指數(shù)成分股的財務(wù)數(shù)據(jù)分析和智能篩選,幫助識別被低估且具有潛在高回報的股票。未來,可以進(jìn)一步優(yōu)化和擴(kuò)展該項目,包括:

增加更多財務(wù)指標(biāo),動態(tài)調(diào)整和增加篩選財務(wù)指標(biāo)。集成更多數(shù)據(jù)源,豐富數(shù)據(jù)維度,提高分析深度。模型優(yōu)化與更新,比如選用BloomberGPT之類的一些金融行業(yè)的大模型,確保分析結(jié)果的前沿性和準(zhǔn)確性。開發(fā)用戶友好的界面,提供可視化報告和實時篩選結(jié)果展示。


本文轉(zhuǎn)載自公眾號AIGC開發(fā)者,作者:阿橙AIGC

原文鏈接:??https://mp.weixin.qq.com/s/r121cSoE8zz1yBpiBn9zxQ??

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請注明出處,否則將追究法律責(zé)任
標(biāo)簽
收藏
回復(fù)
舉報
回復(fù)
相關(guān)推薦