作者: dolphin

  • God’s Final Wake-Up Call – Dallin H. Oaks

    https://youtube.com/watch?v=3gHmKXv9_AU
  • 和弦

    ☝️ 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("获取数据失败,请检查股票代码和网络连接")

    股票数据分析程序总结

    程序功能

    本程序实现了股票数据的获取、技术指标计算和可视化分析功能,主要包括:

    1. 数据获取:使用akshare库获取指定股票的历史日线数据
    2. 指标计算:使用pandas计算多种常用技术指标
    3. 可视化分析:通过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指标图(含超买超卖线)
    • 股价变化标准差图
    • 支持中文显示,确保图表可读性
    • 提供网格线、图例等辅助元素

    使用方法

    1. 确保安装了必要的库:pandasnumpymatplotlibakshare
    2. 修改stock_codestart_date参数可查看不同股票和时间段的数据
    3. 运行程序后会自动执行数据获取、指标计算和图表绘制

    优势

    • 无需注册账户即可使用(避免了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 \l

    cnliutz@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.dev

    Result

    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路径且参数规范的请求加入白名单或降低告警级别,以避免误报。

    如果您需要针对其中某一次具体的请求进行深入分析,可以提供更详细的要求。