python代碼繪制某只股票最近90天的K線圖、均線、量能圖

運行代碼,要求輸入股票代碼和名稱,其他參數可省略

import akshare as ak
import matplotlib.pyplot as plt
import pandas as pd
import mplfinance as mpf
import matplotlib.dates as mdates
import numpy as np
import os
from datetime import datetime, timedelta# 設置中文字體
plt.rcParams["font.family"] = ["SimHei",  "Microsoft YaHei"]
plt.rcParams["axes.unicode_minus"] = False  # 解決負號顯示問題def get_stock_data(stock_code, start_date=None, end_date=None, adjust="qfq"):"""使用 AkShare 獲取股票數據參數:stock_code (str): 股票代碼,如 'sh000001' 或 '000001.SZ'start_date (str): 開始日期,格式 'YYYYMMDD',默認為 3 個月前end_date (str): 結束日期,格式 'YYYYMMDD',默認為今天adjust (str): 復權類型,'qfq' 為前復權,'hfq' 為后復權,None 為不復權返回:DataFrame: 包含股票數據的 DataFrame"""# 處理默認日期if end_date is None:end_date = datetime.now().strftime('%Y%m%d')if start_date is None:start_date = (datetime.now() - timedelta(days=90)).strftime('%Y%m%d')# 格式化股票代碼以適應 AkShareif not stock_code.startswith(('sh', 'sz')):market = 'sh' if stock_code.startswith(('6', '9')) else 'sz'stock_code = f'{market}{stock_code}'try:# 使用 AkShare 獲取股票日線數據stock_data = ak.stock_zh_a_hist_tx(symbol=stock_code, start_date=start_date, end_date=end_date, adjust=adjust)# 重命名列以符合 mplfinance 要求# 檢查并映射成交量列名volume_columns = ['成交量', '成交額', 'volume','amount']volume_col = next((col for col in volume_columns if col in stock_data.columns), None)if volume_col is None:print("警告: 數據中未找到成交量列,圖表可能不完整")stock_data['volume'] = 0  # 添加默認成交量列else:stock_data = stock_data.rename(columns={volume_col: 'volume'})# 重命名其他必要列stock_data = stock_data.rename(columns={'日期': 'date', '開盤': 'open', '收盤': 'close', '最高': 'high', '最低': 'low'})# 轉換日期格式stock_data['date'] = pd.to_datetime(stock_data['date'])# 確保數據按日期排序stock_data = stock_data.sort_values('date')# 檢查是否有必要的列required_columns = ['date', 'open', 'high', 'low', 'close', 'volume']missing_columns = [col for col in required_columns if col not in stock_data.columns]if missing_columns:print(f"錯誤: 數據缺少必要的列: {', '.join(missing_columns)}")return Nonereturn stock_dataexcept Exception as e:print(f"獲取股票數據時出錯: {e}")return Nonedef plot_stock_daily_movement(stock_data, stock_name="股票", save_path=None, ma_periods=None):"""繪制股票日變動情況,包括 K 線圖和成交量及均線參數:stock_data (DataFrame): 包含股票數據的 DataFrame,必須包含 'date', 'open', 'high', 'low', 'close', 'volume' 列stock_name (str): 股票名稱,用于圖表標題save_path (str): 圖表保存路徑,默認為 None 不保存ma_periods (list): 均線周期列表,默認為 [5, 10, 20]"""if stock_data is None or stock_data.empty:print("沒有數據可繪制圖表")return# 設置默認均線周期if ma_periods is None:ma_periods = [5, 10, 20]# 復制數據并準備 mplfinance 所需格式plot_data = stock_data.copy()plot_data = plot_data.set_index('date')# 添加均線for period in ma_periods:column_name = f'MA{period}'plot_data[column_name] = plot_data['close'].rolling(window=period).mean()# 設置 mplfinance 樣式mc = mpf.make_marketcolors(up='r', down='g', inherit=True)# 自定義均線顏色ma_colors = ['blue', 'purple', 'orange', 'green', 'red', 'brown', 'gray']ma_colors = ma_colors[:len(ma_periods)]  # 確保顏色數量與均線周期數量匹配s = mpf.make_mpf_style(marketcolors=mc, gridstyle='--', y_on_right=False,rc={'font.family': ['SimHei', 'WenQuanYi Micro Hei', 'Heiti TC', 'Microsoft YaHei'],'lines.linewidth': 1.5  # 增加均線線條寬度})# 繪制 K 線圖和成交量fig, axes = mpf.plot(plot_data,type='candle',style=s,title=f'{stock_name} 日變動情況',ylabel='價格 (元)',volume=True,ylabel_lower='成交量 (手)',mav=tuple(ma_periods),  # 傳遞均線周期returnfig=True,figsize=(14, 10),update_width_config=dict(candle_linewidth=1.2,  # K線實體邊框寬度candle_width=0.6,      # K線寬度volume_width=0.8,      # 成交量柱寬度))# 調整標題位置fig.suptitle(f'{stock_name} 日變動情況', fontsize=16, y=0.98)# 添加均線圖例ax = axes[0]  # K線圖的軸for i, period in enumerate(ma_periods):ax.plot([], [], color=ma_colors[i], label=f'MA{period}', linewidth=1.5)ax.legend(loc='upper left')# 如果指定了保存路徑,則保存圖表if save_path:save_dir = os.path.dirname(save_path)if not os.path.exists(save_dir):os.makedirs(save_dir)plt.savefig(save_path, dpi=300, bbox_inches='tight')print(f"圖表已保存至: {save_path}")plt.show()# 主函數
if __name__ == "__main__":# 用戶輸入股票代碼和名稱stock_code = input("請輸入股票代碼(例如 000001 或 sh000001): ").strip()stock_name = input("請輸入股票名稱(例如 平安銀行): ").strip()# 獲取股票數據print("正在獲取股票數據...")stock_data = get_stock_data(stock_code)if stock_data is not None and not stock_data.empty:print(f"成功獲取 {len(stock_data)} 天的股票數據")# 顯示數據列名,用于調試print(f"數據列名: {', '.join(stock_data.columns)}")# 可選:自定義均線周期ma_input = input("請輸入均線周期(用逗號分隔,默認 5,10,20): ").strip()if ma_input:try:ma_periods = [int(p.strip()) for p in ma_input.split(',')]except ValueError:print("無效的均線周期,使用默認值")ma_periods = [5, 10, 20]else:ma_periods = [5, 10, 20]# 繪制股票日變動情況plot_stock_daily_movement(stock_data, stock_name, ma_periods=ma_periods)else:print("未能獲取股票數據,請檢查股票代碼是否正確")    

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906480.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906480.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906480.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Xilinx 7Series\UltraScale 在線升級FLASH STARTUPE2和STARTUPE3使用

一、FPGA 在線升級 FPGA 在線升級FLASH時,一般是通過邏輯生成SPI接口操作FLASH,當然也可以通過其他SOC經FPGA操作FLASH,那么FPGA就要實現在啟動后對FLASH的控制。 對于7Series FPGA,只有CCLK是專用引腳,SPI接口均為普…

Azure 應用服務中的異常處理、日志記錄和通知:綜合指南

簡介 Azure 應用服務是基于云的應用程序,使開發人員能夠在云上構建、部署和管理應用程序。與任何應用程序一樣,制定適當的異常處理、日志記錄和通知實踐至關重要,以確保應用程序平穩運行,并快速識別和解決任何問題。在本篇博文中&…

Java 應用如何實現 HTTPS:加密數據傳輸的實用指南

Java 應用如何實現 HTTPS:加密數據傳輸的實用指南 在當今的互聯網環境中,數據安全至關重要,HTTPS 作為加密的數據傳輸協議,為 Java 應用提供了安全通信的保障。本文將深入探討 Java 應用如何實現 HTTPS,通過詳細代碼實…

域名與DNS詳解

域名與DNS詳解 一、核心概念 域名(Domain Name) 定義:人類可讀的網絡地址標識(如 www.google.com)作用:替代復雜IP地址(類似"手機通訊錄"功能) DNS(Domain …

c++20引入的三路比較操作符<=>

目錄 一、簡介 二、三向比較的返回類型 2.1 std::strong_ordering 2.2 std::weak_ordering 2.3 std::partial_ordering 三、對基礎類型的支持 四、自動生成的比較運算符函數 4.1 std::rel_ops的作用 4.2 使用<> 五、兼容他舊代碼 一、簡介 c20引入了三路比較操…

計算機網絡相關面試題

一、HTTP1.1和HTTP2的區別 HTTP/1&#xff08;主要指 HTTP/1.1&#xff09;和 HTTP/2 是 Web 協議發展中的兩個重要版本&#xff0c;二者在性能、協議機制和功能特性上有顯著差異。以下從多個維度對比分析&#xff0c;并結合具體案例說明&#xff1a; 一、連接與請求處理方式 1…

圖論算法精解(Java 實現):從基礎到高頻面試題

一、圖的基礎表示方法 1.1 鄰接矩陣&#xff08;Adjacency Matrix&#xff09; 鄰接矩陣是表示圖的一種直觀方式&#xff0c;它使用一個二維數組來存儲節點之間的連接關系。對于一個有 n 個節點的圖&#xff0c;鄰接矩陣是一個 nn 的矩陣&#xff0c;其中 matrix [i][j] 表示…

江科大TIM定時器hal庫實現

定時器相關hal庫函數 hal庫的定時器函數相比于標準庫&#xff0c;多了很多的中斷回調函數&#xff0c;同時對于定時器的初始化也改成使用句柄一次性順帶連帶DMA等功能一起初始化了 typedef struct {uint32_t Prescaler; /*定時器的預分頻值*/uint32_t CounterMode; …

CentOS 10:啟動telnet服務

參考&#xff0c; 鳥哥私房菜 - 第七章、網路安全與主機基本防護&#xff1a;限制埠口, 網路升級與 SELinux 7.3.3 埠口與服務的啟動/關閉及開機時狀態設定 我們知道系統的 Telnet 服務通常是以 super daemon 來控管的&#xff0c;請您啟動您系統的 telnet 試看看。 1 要啟動 …

Taro 安全區域

目錄 一、問題描述 二、問題解決 1、頂部劉海區 2、底部小黑條 一、問題描述 安全區域主要是為了避免劉海屏或底部欄遮擋&#xff0c;而造成的不良顯示效果。 本次將針對以下兩點進行考量&#xff1a; 1、頂部劉海屏區 2、蘋果X底部小黑條 二、問題解決 通過Taro.getS…

【Java微服務組件】分布式協調P1-數據共享中心簡單設計與實現

歡迎來到啾啾的博客&#x1f431;。 記錄學習點滴。分享工作思考和實用技巧&#xff0c;偶爾也分享一些雜談&#x1f4ac;。 歡迎評論交流&#xff0c;感謝您的閱讀&#x1f604;。 目錄 引言設計一個共享數據中心選擇數據模型鍵值對設計 數據可靠性設計持久化快照 &#xff08…

在SpringBoot項目中,使用單元測試@Test

1.引入依賴 <!--單元測試Test的依賴--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>3.2.1</version> </dependency> 2.在src/test/java目錄…

在Java中,將Object對象轉換為具體實體類對象

在Java中&#xff0c;將Object對象轉換為具體實體類對象可以通過以下幾種方法實現&#xff1a; 1?.使用instanceof關鍵字進行類型檢查和轉換?&#xff1a; 首先&#xff0c;使用instanceof關鍵字檢查Object對象是否為目標實體類的類型。 如果是&#xff0c;則進行強制類型…

JAVA學習-練習試用Java實現“音頻文件的讀取與寫入 :使用Java音頻庫處理音頻數據”

問題&#xff1a; java語言編輯&#xff0c;實現音頻文件的讀取與寫入 &#xff1a;使用Java音頻庫處理音頻數據。 解答思路&#xff1a; 在Java中處理音頻文件通常需要使用第三方庫&#xff0c;例如javax.sound.sampled包&#xff0c;它提供了處理音頻文件的基本功能。以下是一…

Flink架構概覽,Flink DataStream API 的使用,FlinkCDC的使用

一、Flink與其他組件的協同 Flink 是一個分布式、高性能、始終可用、準確一次&#xff08;Exactly-Once&#xff09;語義的流處理引擎&#xff0c;廣泛應用于大數據實時處理場景中。它與 Hadoop 生態系統中的組件可以深度集成&#xff0c;形成完整的大數據處理鏈路。下面我們從…

linux 查看java的安裝路徑

一、驗證Java安裝狀態 java -version正常安裝會顯示版本信息&#xff1a; openjdk version "1.8.0_65" OpenJDK Runtime Environment (build 1.8.0_65-b17) OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)二、檢查環境變量配置 若已配置JAVA_HOME&#…

2025-5-21 個人筆記篇matlab小筆記和clang基礎使用(簡單記錄)

個人筆記篇 再不記錄就找不到了&#xff0c;之前學的一點基礎&#xff0c;看看就行,請不要提問,因為很久了>_<(至少我看來是這樣的) matlab小筆記 % 開繪制(新建) figure % 設置繪制標題 title(標題); % 設置繪制的X軸Lable xlabel(x); % 設置繪制的y軸Lable ylabel(cos…

前端JavaScript-嵌套事件

點擊 如果在多層嵌套中&#xff0c;對每層都設置事件監視器&#xff0c;試試看 <!DOCTYPE html> <html lang"cn"> <body><div id"container"><button>點我&#xff01;</button></div><pre id"output…

網感驅動下開源AI大模型AI智能名片S2B2C商城小程序源碼的實踐路徑研究

摘要&#xff1a;在數字化浪潮中&#xff0c;網感已成為內容創作者與商業運營者必備的核心能力。本文以開源AI大模型、AI智能名片及S2B2C商城小程序源碼為技術載體&#xff0c;通過解析網感培養與用戶需求洞察的內在關聯&#xff0c;提出"數據驅動-場景適配-價值重構"…

AG-UI:重構AI代理與前端交互的下一代協議標準

目錄 技術演進背景與核心價值協議架構與技術原理深度解析核心功能與標準化事件體系典型應用場景與實戰案例開發者生態與集成指南行業影響與未來展望1. 技術演進背景與核心價值 1.1 AI交互的三大痛點 當前AI應用生態面臨三大核心挑戰: 交互碎片化:LangGraph、CrewAI等框架各…