常用工具库


mplfinance库的主要作用

mplfinance是一个基于Matplotlib的金融数据可视化库,专注于生成金融时间序列图表,尤其适用于股票、加密货币等市场的分析。其核心功能包括:

  1. 绘制K线图(蜡烛图):展示开盘价、最高价、最低价、收盘价(OHLC)的波动形态

  2. 技术指标叠加:支持移动平均线(MA)、布林带(Bollinger Bands)、成交量柱状图等

  3. 多子图与自定义样式:通过外部轴模式(子图)同时展示价格与成交量,或自定义颜色、网格线等视觉元素

  4. 动态图表与动画

    :支持实时数据更新和动态展示(需结合其他库如matplotlib.animation


常用函数及参数

1. 核心函数:mpf.plot()

用于绘制基础金融图表,核心参数如下:

参数 说明 示例
data 包含OHLC数据的Pandas DataFrame,索引需为DatetimeIndex,列名需包含OpenHighLowClose(必选),Volume(可选) mpf.plot(data, type='candle')
type 图表类型:'candle'(K线图)、'line'(折线图)、'renko'(砖型图)、'pnf'(点数图) type='candle'
volume 是否显示成交量柱状图(需数据含Volume列) volume=True
mav 移动平均线周期(整数或元组):mav=10(单条均线)、mav=(5,20)(多条均线) mav=(5,10,30)
style 预设样式:'yahoo''classic''charles'等,或自定义样式 style='yahoo'
title 图表标题(需避免中文,需额外设置字体) title='AAPL Stock Price'
ylabel 主图Y轴标签(默认显示价格) ylabel='Price ($)'
ylabel_lower 成交量子图Y轴标签 ylabel_lower='Volume'
show_nontrading 是否显示非交易日(默认False,数据间无间隔) show_nontrading=True
savefig 保存图表路径(如savefig='chart.png' savefig='output.png'

示例代码

import mplfinance as mpf
import pandas as pd

# 示例数据(需包含OHLC和Volume列)
data = pd.DataFrame({
    'Open': [100, 102, 101],
    'High': [105, 106, 107],
    'Low': [99, 101, 100],
    'Close': [102, 103, 104],
    'Volume': [10000, 12000, 9000]
}).set_index(pd.date_range('2023-01-01', periods=3))

# 绘制K线图+成交量+均线
mpf.plot(
    data,
    type='candle',
    volume=True,
    mav=(5,10),
    style='yahoo',
    title='示例K线图',
    ylabel='Price',
    ylabel_lower='Volume'
)

2. 扩展函数

(1) mpf.make_addplot()

用于在主图上叠加附加图表(如均线、技术指标):

# 添加EMA20均线
apds = [mpf.make_addplot(data['EMA20'], color='red', panel=0)]
mpf.plot(data, addplot=apds)
(2) mpf.make_mpf_style()

自定义图表样式(颜色、网格线等):

custom_style = mpf.make_mpf_style(
    base_mpf_style='yahoo',
    rc={'axes.labelcolor': 'blue'}
)
mpf.plot(data, style=custom_style)

关键使用注意事项

  1. 数据格式要求

    • DataFrame必须包含OpenHighLowClose列,索引为DatetimeIndex
    • 若需成交量,需包含Volume列
  2. 中文显示问题

    • 需提前设置Matplotlib字体参数:

      import matplotlib.pyplot as plt
      plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体
      plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题
      
  3. 性能优化

    • 大数据集建议使用downsample=’mean’

      参数降采样,或限制显示时间范围


MarkupSafe库的核心作用

MarkupSafe是一个专注于安全字符串处理的Python库,主要用于防止Web开发中的跨站脚本攻击(XSS)。其核心功能包括:

  1. 自动转义危险字符:将<>&等字符转换为HTML实体(如<>&),避免恶意代码注入。
  2. 安全字符串标记:通过Markup类标记已转义的字符串为“安全”,防止模板引擎二次转义。
  3. 与模板引擎集成:无缝支持Jinja2、Flask等框架,确保动态内容渲染时的安全性

常用函数与类

1. 核心函数

  • escape(s)
    将字符串中的危险字符转义为HTML实体,返回转义后的字符串。

    from markupsafe import escape
    escaped = escape('<script>alert("XSS")</script>')
    print(escaped)  # 输出: &lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;
    
  • Markup(s)
    创建一个“安全字符串”对象,标记内容为已转义且无需二次处理。
    ​示例​​:

    from markupsafe import Markup
    safe_html = Markup('<b>Bold Text</b>')
    print(safe_html)  # 输出: <b>Bold Text</b>(直接输出原始字符)
    

2. 字符串操作方法

  • __add__(拼接)
    支持安全字符串的拼接,结果仍为安全字符串。
    ​示例​​:

    part1 = Markup('<h1>标题</h1>')
    part2 = Markup('<p>内容</p>')
    combined = part1 + part2  # 结果为安全字符串
    
  • format(\*args, \**kwargs)
    安全地格式化字符串,自动转义占位符中的危险字符。
    ​示例​​:

    template = Markup('Hello, {name}!')
    rendered = template.format(name='<script>alert("XSS")</script>')
    print(rendered)  # 输出: Hello, &lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;!
    
  • unescape()
    将安全字符串还原为原始字符串(需谨慎使用)。
    ​示例​​:

    safe_str = Markup('<em>Hello</em>')
    raw_str = safe_str.unescape()  # 输出: <em>Hello</em>
    

3. 高级功能

自定义转义规则

通过传递自定义函数给escape()

覆盖默认转义行为。

def custom_escape(s):
    return s.replace('&', '&amp;').replace('<', '&lt;')
escaped = escape('<&>', custom_escape)  # 输出: &lt;&amp;

实际应用场景

1. 防止用户输入注入

在Web表单中处理用户评论或搜索内容时,自动转义危险字符:

from flask import Flask, request
from markupsafe import escape
app = Flask(__name__)
@app.route('/comment', methods=['POST'])
def post_comment():
    user_comment = request.form.get('comment')
    safe_comment = escape(user_comment)  # 转义用户输入
    return f"<div>Comment: {safe_comment}</div>"

2. 模板引擎安全渲染

与Jinja2集成,自动转义模板变量:

from jinja2 import Template
from markupsafe import Markup
template = Template("Profile: {{ user_input }}")
rendered = template.render(user_input=Markup('<script>alert("XSS")</script>'))
# 输出: Profile: <script>alert("XSS")</script>(安全显示)

3. 动态生成HTML内容

构建安全的HTML列表或表格:

items = [1, 2, '<script>alert("XSS")</script>']
safe_items = [Markup(f"<li>{item}</li>") for item in items]
html = "<ul>" + "".join(safe_items) + "</ul>"
# 输出: <ul><li>1</li><li>2</li><li>&lt;script&gt;alert("XSS")&lt;/script&gt;</li></ul>

注意事项

  1. 类型限制:escape()

    仅接受字符串或Markup对象,传递其他类型会报错

  2. 性能优化:对大量数据频繁转义时,建议复用Markup对象以减少开销。

  3. 与模板引擎配合:Jinja2默认自动转义变量,但显式使用Markup可明确标记安全内容

以下是关于Python的Flask库的核心功能、常用装饰器及函数的详细解析,结合其轻量级Web框架的设计特点:


Flask库的主要作用

Flask是一个轻量级Web框架,核心作用包括:

  1. 快速构建Web应用:通过路由、模板引擎和请求处理机制简化开发流程。
  2. 模块化设计:支持蓝图(Blueprint)划分功能模块,适合中大型项目
  3. 扩展性强:通过扩展(如Flask-SQLAlchemy、Flask-Login)集成数据库、认证等功能。
  4. 灵活性高:开发者可自由选择组件(如模板引擎、数据库ORM)。

常用装饰器

1. 路由与请求处理

  • @app.route()
    定义URL路由,绑定视图函数。支持动态路由参数和HTTP方法限制。
    ​示例​​:

    @app.route('/user/<username>')  # 动态路由
    def show_user(username):
        return f"User: {username}"
    @app.route('/submit', methods=['POST'])  # 限制请求方法
    def submit_form():
        return "处理表单提交"
    
  • @app.before_request & @app.after_request
    在请求处理前/后执行函数,用于权限校验、日志记录等。
    ​示例​​:

    @app.before_request
    def check_auth():
        if not request.headers.get('Authorization'):
            return "未授权", 401
    
    @app.after_request
    def add_header(response):
        response.headers['X-Custom-Header'] = 'FlaskDemo'
        return response
    
  • @app.errorhandler()
    处理特定HTTP错误(如404、500)。
    ​示例​​:

    @app.errorhandler(404)
    def page_not_found(error):
        return render_template('404.html'), 404
    

2. 认证与权限

  • @login_required(Flask-Login扩展)

    保护路由,仅允许已登录用户访问。

    from flask_login import login_required
    @app.route('/dashboard')
    @login_required
    def dashboard():
        return "控制面板"
    

3. 上下文管理

  • @app.context_processor

    向所有模板注入全局变量。

    @app.context_processor
    def inject_user():
        return dict(current_user=get_current_user())
    

三、常用函数

1. 请求处理相关

  • request
    获取客户端请求数据(如参数、表单、JSON)。
    ​示例​​:

    from flask import request
    @app.route('/search')
    def search():
        keyword = request.args.get('q')  # 获取查询参数
        return f"搜索关键词:{keyword}"
    
  • render_template()
    渲染HTML模板并返回响应。
    ​示例​​:

    from flask import render_template
    @app.route('/')
    def home():
        return render_template('index.html', title='首页')
    

2. 响应生成相关

  • jsonify()
    将Python对象转换为JSON响应。
    ​示例​​:

    from flask import jsonify
    @app.route('/data')
    def get_data():
        data = {'name': 'Alice', 'age': 30}
        return jsonify(data)
    
  • redirect()
    重定向到指定URL。
    ​示例​​:

    from flask import redirect, url_for
    @app.route('/old-page')
    def old_page():
        return redirect(url_for('new_page'))  # 重定向到新路由
    

3. 应用配置相关

  • app.config.from_pyfile()

    从配置文件加载设置

    示例

    app.config.from_pyfile('config.cfg')  # 加载config.cfg中的配置
    

四、自定义装饰器示例

1. 参数校验装饰器

from functools import wraps
from flask import request, jsonify

def validate_json(*expected_keys):
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            data = request.get_json()
            if not all(key in data for key in expected_keys):
                return jsonify({"error": "缺少参数"}), 400
            return func(data, *args, **kwargs)
        return wrapper
    return decorator

@app.route('/api/data', methods=['POST'])
@validate_json('username', 'password')
def create_user(data):
    # 处理用户创建逻辑
    return jsonify({"message": "用户创建成功"})

2. 认证装饰器

from functools import wraps
from flask import request, abort
def api_key_required(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        api_key = request.headers.get('X-API-Key')
        if api_key != 'SECRET_KEY':
            abort(403)  # 禁止访问
        return func(*args, **kwargs)
    return wrapper

@app.route('/secure-endpoint')
@api_key_required
def secure_endpoint():
    return "授权访问成功"

akshare库的主要作用

akshare是一个开源的金融数据接口库,专注于提供多市场、多周期的金融数据获取功能,其核心作用包括:

  1. 覆盖广泛的数据类型:包括股票、期货、基金、外汇、数字货币、宏观经济等
  2. 支持实时与历史数据:提供实时行情(如A股、期货)和历史数据(日线、分钟线)
  3. 数据格式标准化:返回Pandas DataFrame,便于后续分析与可视化
  4. 本地化数据源适配:整合国内主流财经平台(如东方财富、新浪财经)的数据接口

官网

mplfinance

matplotlib

flask


文章作者: 读序
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 读序 !
  目录