作者: dolphin
-
和弦
☝️ Get the chords cheat sheet in my bio ☝️
G调 12345 . 右手At the same press 51 41 31 21 each repeat 4 times双音弹奏。press top 5 bottom 1, else the same 41,31 or 21单音弹奏,左手配合下面的和弦C major,F major , D minor……

-
股票分析akshare获取股票数据绘图常用指标Python
import pandas as pd import numpy as np import matplotlib.pyplot as plt import akshare as ak from datetime import datetime def get_stock_data(stock_code, start_date, end_date): """ 使用akshare获取股票历史数据 参数: stock_code: 股票代码,例如 'SH600519'(贵州茅台)或 'sz000001'(平安银行) start_date: 开始日期,格式 'YYYY-MM-DD' end_date: 结束日期,格式 'YYYY-MM-DD' 返回: 包含股票历史数据的DataFrame """ try: # 转换日期格式为akshare要求的格式 start_date_ak = start_date.replace('-', '') end_date_ak = end_date.replace('-', '') # 转换股票代码格式为akshare要求的格式 if stock_code.startswith('SH'): stock_code_ak = f'sh{stock_code[2:]}' elif stock_code.startswith('SZ'): stock_code_ak = f'sz{stock_code[2:]}' else: # 假设已经是正确格式 stock_code_ak = stock_code # 使用akshare获取股票数据 stock_df = ak.stock_zh_a_hist(symbol=stock_code_ak[2:], period="daily", start_date=start_date_ak, end_date=end_date_ak) stock_df['日期'] = pd.to_datetime(stock_df['日期']) stock_df.set_index('日期', inplace=True) return stock_df except Exception as e: print(f"获取数据失败: {e}") return None def calculate_technical_indicators(df): """ 计算常用技术指标 参数: df: 包含股票数据的DataFrame 返回: 包含计算后指标的DataFrame """ # 计算均线 df['MA5'] = df['收盘'].rolling(window=5).mean() # 5日均线 df['MA10'] = df['收盘'].rolling(window=10).mean() # 10日均线 df['MA20'] = df['收盘'].rolling(window=20).mean() # 20日均线 df['MA60'] = df['收盘'].rolling(window=60).mean() # 60日均线 # 计算RSI指标 def calculate_rsi(data, period=14): delta = data['收盘'].diff(1) gain = delta.where(delta > 0, 0) loss = -delta.where(delta < 0, 0) avg_gain = gain.rolling(window=period).mean() avg_loss = loss.rolling(window=period).mean() rs = avg_gain / avg_loss rsi = 100 - (100 / (1 + rs)) return rsi df['RSI14'] = calculate_rsi(df, period=14) # 计算股价变化标准差(20日窗口) df['收盘价标准差'] = df['收盘'].rolling(window=20).std() # 计算日收益率 df['日收益率'] = df['收盘'].pct_change() return df def plot_stock_analysis(df, stock_code): """ 绘制股票分析图表 参数: df: 包含股票数据和指标的DataFrame stock_code: 股票代码 """ # 设置中文显示 plt.rcParams['font.family'] = ['SimHei', 'Microsoft YaHei'] plt.rcParams['axes.unicode_minus'] = False # 创建一个包含4个子图的画布 fig, (ax1, ax2, ax3, ax4) = plt.subplots(4, 1, figsize=(14, 16), sharex=True) # 1. 绘制股价和均线 ax1.plot(df.index, df['收盘'], label='收盘价', linewidth=1.5, color='black') ax1.plot(df.index, df['MA5'], label='MA5', linewidth=1.2, color='blue') ax1.plot(df.index, df['MA10'], label='MA10', linewidth=1.2, color='green') ax1.plot(df.index, df['MA20'], label='MA20', linewidth=1.2, color='orange') ax1.plot(df.index, df['MA60'], label='MA60', linewidth=1.2, color='red') ax1.set_title(f'{stock_code} 股价与均线走势') ax1.set_ylabel('价格 (元)') ax1.legend() ax1.grid(True, linestyle='--', alpha=0.7) # 2. 绘制成交量 ax2.bar(df.index, df['成交量'], label='成交量', color='purple', alpha=0.6) ax2.set_title('成交量') ax2.set_ylabel('成交量') ax2.grid(True, linestyle='--', alpha=0.7) # 3. 绘制RSI ax3.plot(df.index, df['RSI14'], label='RSI14', linewidth=1.2, color='brown') ax3.axhline(y=70, color='red', linestyle='--', alpha=0.7, label='超买线') ax3.axhline(y=30, color='green', linestyle='--', alpha=0.7, label='超卖线') ax3.set_title('RSI指标') ax3.set_ylabel('RSI值') ax3.legend() ax3.grid(True, linestyle='--', alpha=0.7) # 4. 绘制收盘价标准差 ax4.plot(df.index, df['收盘价标准差'], label='收盘价标准差', linewidth=1.2, color='teal') ax4.set_title('股价变化标准差') ax4.set_ylabel('标准差') ax4.set_xlabel('日期') ax4.legend() ax4.grid(True, linestyle='--', alpha=0.7) # 调整布局 plt.tight_layout() plt.subplots_adjust(hspace=0.4) # 显示图表 plt.show() if __name__ == "__main__": # 设置参数 stock_code = "SH600938" # 中国工商银行 start_date = "2025-01-01" end_date = datetime.now().strftime("%Y-%m-%d") print(f"正在获取 {stock_code} 从 {start_date} 到 {end_date} 的数据...") # 获取数据 stock_data = get_stock_data(stock_code, start_date, end_date) if stock_data is not None and not stock_data.empty: print(f"成功获取 {len(stock_data)} 条数据") # 计算指标 print("正在计算技术指标...") stock_data_with_indicators = calculate_technical_indicators(stock_data) # 显示数据预览 print("\n数据预览:") print(stock_data_with_indicators.tail()) # 绘图 print("\n正在绘制图表...") plot_stock_analysis(stock_data_with_indicators, stock_code) else: print("获取数据失败,请检查股票代码和网络连接")股票数据分析程序总结
程序功能
本程序实现了股票数据的获取、技术指标计算和可视化分析功能,主要包括:
- 数据获取:使用akshare库获取指定股票的历史日线数据
- 指标计算:使用pandas计算多种常用技术指标
- 可视化分析:通过matplotlib绘制直观的分析图表
技术实现
1. 数据获取 (
get_stock_data函数)- 使用akshare库获取A股股票历史数据
- 支持自动转换股票代码格式(如’SH600938’转换为’sh600938’)
- 支持自动转换日期格式(如’2024-01-01’转换为’20240101’)
2. 指标计算 (
calculate_technical_indicators函数)- 均线指标:计算5日、10日、20日和60日均线
- RSI指标:计算14日相对强弱指标
- 成交量:直接从原始数据获取
- 股价变化标准差:计算20日窗口的收盘价标准差
- 日收益率:用于风险分析参考
3. 可视化分析 (
plot_stock_analysis函数)- 绘制4个子图的综合分析图表:
- 股价与多周期均线对比图
- 成交量柱状图
- RSI指标图(含超买超卖线)
- 股价变化标准差图
- 支持中文显示,确保图表可读性
- 提供网格线、图例等辅助元素
使用方法
- 确保安装了必要的库:
pandas、numpy、matplotlib、akshare - 修改
stock_code、start_date参数可查看不同股票和时间段的数据 - 运行程序后会自动执行数据获取、指标计算和图表绘制
优势
- 无需注册账户即可使用(避免了tqcenter需要登录的问题)
- 代码简洁易懂,便于修改和扩展
- 支持多种常用技术指标,满足基本分析需求
- 图表直观清晰,便于理解股票走势和指标变化
该程序适合股票投资者和分析师进行基本的技术分析,也可作为学习金融数据处理和可视化的参考示例。

-
还清洗衣机款
自动还款成功!您的信用卡4740,人民币元账户于2025年12月27日自动还款RMB7415.88元,账单已结清。【中国银行】
-
To check Ubuntu system version
cnliutz@ubuntu:~$ cat /etc/os-release
PRETTY_NAME=”Ubuntu 24.04.2 LTS”
NAME=”Ubuntu”
VERSION_ID=”24.04″
VERSION=”24.04.2 LTS (Noble Numbat)”
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL=”https://www.ubuntu.com/”
SUPPORT_URL=”https://help.ubuntu.com/”
BUG_REPORT_URL=”https://bugs.launchpad.net/ubuntu/”
PRIVACY_POLICY_URL=”https://www.ubuntu.com/legal/terms-and-policies/privacy-policy”
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
### cnliutz@ubuntu:~$ cat /etc/issue
Ubuntu 24.04.2 LTS \n \lcnliutz@ubuntu:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04.2 LTS
Release: 24.04
Codename: noble
## cnliutz@ubuntu:~$ hostnamectl
Static hostname: ubuntu
Icon name: computer-vm
Chassis: vm 🖴
Machine ID: d5dccf907ca4483793c3149154734375
Boot ID: 27c1bbddb5084eae8a5f78fa0fcae3dc
Virtualization: vmware
Operating System: Ubuntu 24.04.2 LTS
Kernel: Linux 6.14.0-27-generic
Architecture: x86-64
Hardware Vendor: VMware, Inc.
Hardware Model: VMware Virtual Platform
Firmware Version: 6.00
Firmware Date: Thu 2020-11-12
Firmware Age: 5y 1month 2w 1d -
激活win10系统
Active Windows 10 家庭版
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。尝试新的跨平台 PowerShell https://aka.ms/pscore6
PS C:\Users\czliu> irm https://get.activated.win | iex
————————————– —————–
Need help? Check our homepage: https://massgrave.devResult
PS C:\Users\czliu>
Checking OS Info [Windows 10 家庭版 | 19043.928 | AMD64]
Checking Internet Connection [Connected]
Initiating Diagnostic Tests…
Checking WPA Registry Count [5]Installing Generic Product Key [LIU-YTMG3-N6DKC-DKB77-7M9GH-8HVX7] [Successful]
Generating GenuineTicket.xml [Successful]
Done.
Converted license Microsoft.Windows.101.X19-98868_8wekyb3d8bbwe and stored at C:\ProgramData\Microsoft\Windows\ClipSvc\Install\Migration\6bbb87ed-3a1a-4688-9d8a-3282103f441a.xml.
Successfully converted 1 licenses from genuine authorization tickets on disk.
Done.Activating…
Windows 10 家庭版 is permanently activated with a digital license.
Press any key to Go back…
-
网站可疑日志分析
根据您提供的日志文件内容,这份名为“access.log-2025122521-可疑访问.txt”的文件记录了针对域名 192.168.31.189/ 的一系列访问请求,主要特征为“超长URL”,且多数请求来自内网IP 192.168.1.29。以下是基于日志内容的详细总结:
一、 总体情况
时间范围:日志记录的时间跨度为2025年12月23日至12月25日。
目标主机:所有请求均指向 192.168.31.189/,这是一个基于WordPress搭建的网站(从/wp-admin/路径可推断)。
主要特征:绝大多数请求被标记为“超长URL”,涉及对WordPress REST API端点的复杂查询。
请求来源:主要来自IP地址 192.168.1.29(内网地址),另有一条记录来自 127.0.0.1(本地回环地址)。二、 请求模式分析
日志中的请求呈现出高度规律性,主要分为两个批次,均围绕 /burst/v1/data/ 下的数据分析API端点进行:第一批请求(2025-12-23 04:57:44):
针对日期范围 2025-12-16 至 2025-12-22(date_range=last-7-days)。
使用了固定的 nonce=e61dd62337。
连续访问了多个数据端点,包括:
/insights:获取核心洞察数据(访客数、页面浏览量)。
/compare:进行数据对比。
/datatable:获取数据表格,分别按referrer(引荐来源)和page_url(页面URL)分组统计。
/devicesTitleAndValue 与 /devicesSubtitle:获取设备相关数据。
所有请求均返回HTTP状态码 200(成功)。第二批请求(2025-12-25 07:06:00):
针对更新的日期范围 2025-12-18 至 2025-12-24(date_range=last-7-days)。
使用了新的 nonce=d8b8d3d049。
访问的端点与第一批类似,包括/insights、/compare、/devicesTitleAndValue、/devicesSubtitle以及两个/datatable请求(分别按referrer和page_url分组,但查询的指标metrics更为丰富,如增加了bounce_rate跳出率、conversions转化等)。
所有请求同样返回HTTP状态码 200。其他请求:
在2025-12-23 06:11:58,有一条来自 127.0.0.1 的对 /wp-admin/load-styles.php 的请求,用于加载WordPress管理后台的样式文件,属于正常的管理行为。
三、 关键发现与评估
行为性质:日志中记录的请求模式,非常类似于网站数据分析插件(插件名可能为“Burst Statistics”或类似)在后台自动拉取统计报表数据的行为。/burst/v1/data/ 这一路径暗示了其与统计分析功能的相关性。
“可疑”点分析:文件标题中的“可疑访问”可能源于以下几点:
高频与规律性:在极短时间内(同秒内)发起多个复杂API请求。
内网来源:主要请求来自内网IP (192.168.1.29),可能代表内部管理员的主动查询,也可能是服务器本地脚本或服务的调用。
超长URL:参数极其冗长,包含了大量的空值或默认值过滤器(filters参数中大量键值为空字符串),这是此类统计API查询的典型特征,但可能被简单的日志监控规则标记为异常。
安全状态:所有记录的请求均返回 200 状态码,未发现明显的攻击payload(如SQL注入、路径遍历、命令执行等常见攻击特征)。这些请求更像是授权用户或服务在正常使用网站的数据统计功能。四、 总结建议
综上所述,该日志文件所记录的“可疑访问”极大概率是网站内部数据分析功能的正常操作,而非外部攻击行为。建议:确认来源:核实IP 192.168.1.29 是否为授权的管理员或内部服务器地址。
检查插件:登录WordPress后台,确认是否安装了名为“Burst”或功能类似的统计插件,并检查其数据查询日志或设置。
调整监控规则:考虑优化日志告警规则,将此类来自可信内网IP、访问特定统计API路径且参数规范的请求加入白名单或降低告警级别,以避免误报。如果您需要针对其中某一次具体的请求进行深入分析,可以提供更详细的要求。
