• <tfoot id="ukgsw"><input id="ukgsw"></input></tfoot>
    
    • 久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
      分享

      使用 Streamlit 打造一個股票篩選分析器

       caimin133 2025-02-16 發(fā)布于福建
      Image

      本文將介紹如何通過 Python、Streamlit 和 Tushare,搭建一個簡單易用的股票篩選器,它不僅可以篩選股票,還能查看某個股票的詳細數據生成動態(tài) K 線圖,讓你對股票市場有更全面的了解。

      概述

      這個股票篩選器提供將提供幾個篩選能力,包括市值范圍、行業(yè)、地域條件。還支持股票的 K 線圖,直觀易用。

      效果如下:

      Image

      這個小工具的實現離不開一個關鍵的 Python 開源庫 - Streamlit。它可以快速構建交互式 Web 應用,只需幾行代碼,即可分享你的數據。對 streamlit 有興趣可以深入了解下,這里不展開介紹。

      如果不想看下面的詳細步驟可直接從 github gist[1] 拿到代碼,完成第一部分的準備即可運行。

      想進一步擴展的話,還可以添加更多篩選指標,此外還可為單只股票增加技術指標(如均線、RSI)分析、多股票價格走勢對比、實時數據更新、模擬投資組合功能甚至是按篩選分析結果生成股票分析報告等功能。


      接下來,講解代碼的每一步實現過程。

      準備開始

      安裝要用到 python 庫:

      pip install tushare ploty streamlit

      并提前導入依賴包:

      import streamlit as st
      import tushare as ts
      import pandas as pd
      import plotly.graph_objects as go

      通過 pro = ts.pro\_api() 配置了 Tushare 接口,為數據獲取做好準備。

      ts.set_token('Your API Token')
      pro = ts.pro_api()

      注:tushare pro 依賴于 API Key,如果沒有的話,到 tushare pro 平臺注冊獲取。


      股票數據

      為了完成股票數據的篩選,要用到 tushare 的兩個,分別是 stock_basic 股票基礎數據和 stock_daily 每日最新指標,這里有要用到的市值數據。

      基礎信息

      首先,獲取所有上市股票的基本信息,包括股票代碼、名稱、行業(yè)、地域和上市日期。如果某些行業(yè)或地域數據缺失,用 'Unknown' 填補空值。

      @st.cache_data
      def get_stock_list():
          df = pro.stock_basic(
              exchange='',
              list_status='L',
              fields='ts_code,symbol,name,area,industry,list_date',
          )
          df['area'] = df['area'].fillna('Unknown')
          df['industry'] = df['industry'].fillna('Unknown')

      為了提高性能和減少重復計算,這里用了 @st.cache_data  裝飾器緩存數據結果,股票的基礎數據是不怎么變化的,這樣可避免每次交互重復加載數據。

      市值數據

      為了篩選高市值股票,調用每日基礎數據接口,獲取市值數據,并將其與基本信息合并。

      market_cap_data = pro.daily_basic()
      market_cap_data['total_mv'] = market_cap_data['total_mv'] / 10000  # 轉換為'億'
      df = pd.merge(df, market_cap_data, on='ts_code', how='left')
      df = df.rename(columns={'total_mv''market_cap'})

      到這里,我們生成了一份包含公司基本信息和市值的完整股票列表,為后續(xù)篩選做好準備。


      界面和篩選條件

      接下來,創(chuàng)建用戶界面和篩選項。

      st.title('Stock Screener')
      st.sidebar.header('Filter Options')

      側邊欄設置以下篩選條件:

      • · 市值范圍:設置篩選股票的最小和最大市值。
      • · 行業(yè)和地域:按行業(yè)或地域選擇股票。
      • · 上市日期范圍:篩選符合時間條件的公司。

      篩選實現

      以下代碼實現了這些過濾功能:

      # 股票的基本信息
      stocks = get_stock_list()

      # 篩選市值范圍
      min_market_cap = st.sidebar.number_input('Minimum Market Cap (億)', min_value=0, value=100)
      max_market_cap = st.sidebar.number_input('Maximum Market Cap (億)', min_value=0, value=1000)

      # 篩選行業(yè)和地域
      industry_list = stocks['industry'].unique().tolist()
      selected_industry = st.sidebar.multiselect('Select Industry', industry_list)

      area_list = stocks['area'].unique().tolist()
      selected_area = st.sidebar.multiselect('Select Area', area_list)

      根據這些條件,我們過濾股票數據:

      filtered_stocks = stocks.copy()
      filtered_stocks = filtered_stocks[
          (filtered_stocks['market_cap'] >= min_market_cap) &
          (filtered_stocks['market_cap'] <= max_market_cap)
      ]
      if selected_industry:
          filtered_stocks = filtered_stocks[filtered_stocks['industry'].isin(selected_industry)]
      if selected_area:
          filtered_stocks = filtered_stocks[filtered_stocks['area'].isin(selected_area)]

      這樣可以看到符合條件的股票列表。


      結果顯示

      我們繼續(xù)通過 streamlit 的表格形式展示篩選后的股票列表,按照市值大小排序。

      display_df = filtered_stocks.copy()
      display_df['market_cap'] = display_df['market_cap'].round(2)
      display_df = display_df.sort_values(by='market_cap', ascending=False)
      st.dataframe(display_df)

      這樣就可以清晰地看到結果,并快速找到目標股票。


      單只股票詳情

      有了篩選的股票列表后,還可以繼續(xù)擴展,查看單只股票的情況,如蠟燭圖、價格表格。

      日線數據

      先通過 Tushare 接口獲取用戶選擇的股票的日線數據,并根據日期范圍過濾。

      @st.cache_data
      def get_daily_data(ts_code):
          return pro.daily(ts_code=ts_code)

      daily_data = get_daily_data(stock_code)
      daily_data['trade_date'] = pd.to_datetime(daily_data['trade_date'])
      daily_data = daily_data.sort_values('trade_date', ascending=True)

      篩選界面

      配置篩選條件,包括股票選擇框和日期范圍。

      # Show details for selected stock
      selected_stock = st.selectbox('Select a stock to view details', filtered_stocks['name'])

      today = pd.Timestamp.today()
      col1, col2 = st.columns(2)
      with col1:
          start_date = st.date_input(
              'Start date', value=today - pd.Timedelta(days=365), max_value=today
          )
      with col2:
          end_date = st.date_input(
              'End date', value=today, min_value=start_date, max_value=today
          )

      篩選邏輯

      如果設置了 selected_stock 進入到篩選邏輯中。

      if selected_stock:
          stock_code = filtered_stocks[filtered_stocks['name'] == selected_stock][
              'ts_code'
          ].values[0]
          daily_data = get_daily_data(stock_code)

          daily_data['trade_date'] = pd.to_datetime(daily_data['trade_date'])
          daily_data = daily_data.sort_values('trade_date', ascending=True)

          # 按時間過濾
          daily_data = daily_data[
              (daily_data['trade_date'] >= pd.Timestamp(start_date))
              & (daily_data['trade_date'] <= pd.Timestamp(end_date))
          ]

          # 檢查缺失數據
          if daily_data[['open''high''low''close']].isnull().values.any():
              st.warning('Some price data is missing - filling with previous values')
              daily_data[['open''high''low''close']] = daily_data[
                  ['open''high''low''close']
              ].ffill()

      繪制 K 線圖

      使用 Plotly 繪制動態(tài) K 線圖,讓用戶更直觀地觀察股票的價格變化。

      fig = go.Figure(
          data=[
              go.Candlestick(
                  x=daily_data['trade_date'],
                  open=daily_data['open'],
                  high=daily_data['high'],
                  low=daily_data['low'],
                  close=daily_data['close'],
                  increasing_line_color='green',
                  decreasing_line_color='red',
              )
          ]
      )
      fig.update_layout(title=f'{selected_stock} Candlestick Chart', xaxis_title='Date', yaxis_title='Price')
      st.plotly_chart(fig, use_container_width=True)

      總結與擴展

      通過以上步驟簡單構建了一個股票篩選分析工具,它支持按市值、行業(yè)、地域和上市日期篩選股票,可視化 K 線圖。

      希望本文對你有用,開始構建屬于你的股票分析工具吧!

      引用鏈接

      [1] github gist: https://gist.github.com/poloxue/b45324e478d97110e8f9969225e33e1a

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多

        主站蜘蛛池模板: 成人网站网址导航| 94人妻少妇偷人精品| 秋霞A级毛片在线看| 亚洲AV无码久久久久网站蜜桃| 国产亚洲999精品AA片在线爽 | 18禁成人免费无码网站| 99久久婷婷国产综合精品青草漫画 | 亚洲日韩精品欧美一区二区| 无码国内精品久久人妻蜜桃| 成人爽A毛片免费视频| 午夜天堂精品久久久久| 亚洲欧洲日产国无高清码图片| 国产成人综合在线女婷五月99播放| 毛片大全真人在线| 无码AV人片在线观看天堂| 国产AV大陆精品一区二区三区| 久久精品娱乐亚洲领先| 羞羞影院午夜男女爽爽免费视频| 亚洲日韩久热中文字幕| 精品久久久久久无码国产| 国产欧美久久久精品影院| 国产成人综合在线女婷五月99播放 | 亚洲精品一区二区区别| 两个人看的WWW在线观看| 国产精品有码在线观看| 国产精品免费看久久久无码| 久久综合久中文字幕青草| 亚洲AV无码专区在线电影天堂| 亚洲精品国产免费av| 精品无人区一区二区三区| 国产精品中文字幕日韩| 国内综合精品午夜久久资源| 鲁丝片一区二区三区免费| 白色丝袜国产在线视频| 亚洲AVAV天堂AV在线网阿V| 无码AV免费永久免费永久专区| 日韩人妻中文字幕精品| 1000部拍拍拍18勿入免费视频| 亚洲国产AV无码精品无广告| 换着玩人妻中文字幕| 男女性杂交内射女bbwxz|