一文入门量化技术指标:原理详解与Python实战 TA-Lib & Pandas & Mplfinance
技术指标
是量化投资的核心工具,通过数学公式分析历史数据,辅助判断价格趋势与买卖时机。本文分为两部分:第一部分 详细解析趋势类、动量类、成交量类、波动类、复合类等五大类技术指标,涵盖各分类代表性指标的理论依据、数学公式、适用性及局限性,并探讨基本面结合与风险管理方法;
第二部分 结合 Python 的
TA-Lib
、Pandas
、Mplfinance
和Tushare
库,演示数据获取、指标计算及专业K线图可视化实操。文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。适合量化新手建立系统认知,为策略开发打下基础。
第一部分:技术指标知识点
一、技术指标分类
1. 趋势类
代表指标:
- Simple Moving Average (
SMA
):简单移动平均线,基本的移动平均线,用于识别趋势。 - Exponential Moving Average (
EMA
):指数移动平均线,给予近期价格更高权重,更灵敏地反映价格变化。 - Moving Average Convergence Divergence (
MACD
):移动平均收敛发散指标,通过两条移动平均线的交叉来判断买卖时机。 - Average Directional Index (
ADX
):平均趋向指数,衡量趋势的强度,而不考虑趋势的方向。 - Ichimoku Cloud (
Ichimoku
):一目均衡云,一种源自日本的综合指标,提供支撑位和阻力位、趋势方向和动量等信息。
核心功能:识别趋势方向、判断趋势强度、确定支撑阻力。
2. 动量类
代表指标:
- Relative Strength Index (
RSI
):相对强弱指数,衡量股票价格的涨跌速度和幅度,判断是否超买或超卖。 - Stochastic Oscillator (
Stochastic
):随机振荡指标,比较股票的收盘价与一段时间内的价格范围,识别超买或超卖状态。 - Commodity Channel Index (
CCI
):商品通道指数,用于识别超买或超卖状态。 - Money Flow Index (
MFI
):资金流量指标,结合价格和成交量,衡量资金流入和流出。 - Rate of Change (
ROC
):变化率指标,衡量价格变化的速度。
核心功能:衡量价格变化速度、识别超买超卖区域。
3. 成交量类
代表指标:
- On Balance Volume (
OBV
):能量潮,结合成交量和价格变化,判断资金流向。 - Chaikin Money Flow (
CMF
):蔡金资金流,用于衡量资金流入和流出。 - Volume Weighted Average Price (
VWAP
):成交量加权平均价,用于衡量成交量加权的平均价格。
核心功能:验证价格趋势可靠性、识别主力资金动向。
4. 波动类
代表指标:
- Average True Range (
ATR
):平均真实波幅,衡量市场波动率。 - Bollinger Bands (
Bollinger
):布林带,由一条移动平均线和两条标准差线组成,用于判断价格的波动范围。 - Keltner Channel (
Keltner
):凯尔特纳通道,用于衡量价格的波动范围和趋势。 - Standard Deviation (
StdDev
):标准差,衡量价格的波动程度。
核心功能:衡量市场波动率、识别突破信号。
5. 复合类
代表指标:
- Supertrend (
Supertrend
):超级趋势,用于生成趋势跟随信号。 - Alligator (
Alligator
):鳄鱼线,结合多个移动平均线,用于识别趋势和动能。 - Triple Exponential Moving Average (
TRIX
):三重指数平均线,用于识别趋势和生成交易信号。 - Donchian Channel (
Donchian
):唐奇安通道,用于识别趋势和突破信号。 - Ichimoku Cloud (
Ichimoku Cloud
):一目均衡云,一种复合指标,提供支撑位和阻力位、趋势方向和动量等信息。
核心功能:多维度信号融合、自动生成交易信号。
二、核心指标详解
2.1 趋势类指标
2.1.1 Simple Moving Average (SMA):简单移动平均线
- 理论依据:
基于价格均值回归理论,通过算术平均消除短期波动,提取趋势方向 - 数学公式:
- S M A ( n ) = 1 n ∑ i = 1 n C l o s e t − i + 1 SMA(n) = \frac{1}{n} \sum_{i=1}^{n} Close_{t-i+1} SMA(n)=n1∑i=1nCloset−i+1
- n n n为计算周期, C l o s e Close Close为收盘价序列
- 核心参数:
- 常用周期:5日(短期)、20日(中期)、200日(长期)
- 金叉/死叉:短期SMA上穿/下穿长期SMA
- 适用性:
- 判断多空分水岭(如股价与200日SMA的关系)
- 消除价格噪音,识别长期趋势
- 局限性:
- 滞后性显著,尤其在趋势反转初期
- 震荡行情中频繁产生虚假信号
- 风险管理:
- 金叉出现后需成交量放大确认
- 价格偏离SMA超过2倍ATR时警惕反转
2.1.2 Exponential Moving Average (EMA):指数移动平均线
- 理论依据:
基于时间加权平均理论,赋予近期价格更高权重,提升对趋势的敏感度 - 数学公式:
- E M A t = α ⋅ C l o s e t + ( 1 − α ) ⋅ E M A t − 1 EMA_t = \alpha \cdot Close_t + (1-\alpha) \cdot EMA_{t-1} EMAt=α⋅Closet+(1−α)⋅EMAt−1
- α = 2 n + 1 \alpha = \frac{2}{n+1} α=n+12, n n n为平滑周期
- 核心参数:
- 短期周期:12日(对应MACD快线)
- 长期周期:26日(对应MACD慢线)
- 适用性:
- 高频交易中的趋势捕捉
- 结合MACD形成动量-趋势复合策略
- 局限性:
- 单边行情中易引发过度交易
- 对价格跳空缺口的反应可能失真
- 风险管理:
- EMA斜率转平时启动动态止盈
- 价格与EMA乖离率超过15%时强制回调预警
2.1.3 Moving Average Convergence Divergence (MACD):移动平均收敛发散指标
- 理论依据:
- 基于双EMA的收敛与发散原理,MACD线(12日EMA-26日EMA)与信号线(9日EMA)的交互反映趋势动能变化
- 数学公式:
- M A C D 线 = E M A ( 12 ) − E M A ( 26 ) MACD线 = EMA(12) - EMA(26) MACD线=EMA(12)−EMA(26)
- 信号线 = E M A ( M A C D , 9 ) 信号线 = EMA(MACD, 9) 信号线=EMA(MACD,9)
- 柱状图 = M A C D 线 − 信号线 柱状图 = MACD线 - 信号线 柱状图=MACD线−信号线
- 核心参数:快线(12)、慢线(26)、信号线(9)
- 适用性:
- 中长线趋势跟踪
- 捕捉趋势反转早期信号
- 局限性:
- 单边行情中柱状图易出现持续性扩张导致信号滞后
- 基本面的结合:
- 行业ETF的MACD信号需结合行业景气度分析
- 风险管理:
- 柱状图连续3根缩量时部分平仓
- 零轴下方禁止做多
2.1.4 Average Directional Index (ADX):平均趋向指数
- 理论依据:
基于趋势强度量化理论,通过+DI(正向趋向指标)和-DI(负向趋向指标)的差值衡量趋势动能 - 数学公式:
- 真实波幅 T R = m a x ( H − L , ∣ H − P C ∣ , ∣ L − P C ∣ ) TR = max(H-L, |H-PC|, |L-PC|) TR=max(H−L,∣H−PC∣,∣L−PC∣) (PC为前日收盘价)
- + D M = H − H p r e v +DM = H - H_prev +DM=H−Hprev(若当日高点>前日高点且差值最大)
- − D M = L p r e v − L -DM = L_prev - L −DM=Lprev−L(若当日低点<前日低点且差值最大)
- + D I = 100 × E M A ( + D M , n ) / E M A ( T R , n ) +DI = 100 × EMA(+DM, n)/EMA(TR, n) +DI=100×EMA(+DM,n)/EMA(TR,n)
- − D I = 100 × E M A ( − D M , n ) / E M A ( T R , n ) -DI = 100 × EMA(-DM, n)/EMA(TR, n) −DI=100×EMA(−DM,n)/EMA(TR,n)
- A D X = E M A ( ∣ ( + D I − − D I ) ∣ / ( + D I + − D I ) , m ) × 100 ADX = EMA( |(+DI - -DI)| / (+DI + -DI) , m ) × 100 ADX=EMA(∣(+DI−−DI)∣/(+DI+−DI),m)×100
- 核心参数:
- 标准周期:14日(DI计算)
- 平滑周期:14日(ADX计算)
- 适用性:
- 识别趋势市场与震荡市场的转换
- 量化牛市/熊市强度等级
- 局限性:
- 滞后性明显,需配合价格形态使用
- 基本面的结合:
- ADX>25时关注财报季龙头股趋势延续性
- 风险管理:
- ADX连续3日下降时启动趋势保护策略
2.2 动量类指标
2.2.1 Relative Strength Index (RSI):相对强弱指数
- 理论依据:
- 均值回归理论,衡量价格变化的相对强度
- 牛顿第一定律在金融市场中的应用(物极必反)
- 数学公式:
- A v g G a i n = 1 n ∑ ( C l o s e t − C l o s e t − 1 ) + AvgGain = \frac{1}{n}\sum (Close_t - Close_{t-1})^+ AvgGain=n1∑(Closet−Closet−1)+
- A v g L o s s = 1 n ∑ ( C l o s e t − C l o s e t − 1 ) − AvgLoss = \frac{1}{n}\sum (Close_t - Close_{t-1})^- AvgLoss=n1∑(Closet−Closet−1)−
- R S I = 100 − 100 1 + A v g G a i n A v g L o s s RSI = 100 - \frac{100}{1 + \frac{AvgGain}{AvgLoss}} RSI=100−1+AvgLossAvgGain100
- 核心参数:标准周期14日,超买线70,超卖线30
- 适用性:
- 震荡行情中的波段操作
- 趋势中的回调入场机会
- 局限性:
- 单边行情中易出现持续超买/超卖
- 基本面的结合:
- 财报公布前RSI超买需警惕"利好兑现"风险
- 风险管理:
- 超买区做空需等待价格形态确认(如黄昏之星)
- 超卖区做多需结合成交量放大验证
2.2.2 Stochastic Oscillator (Stochastic):随机振荡指标
- 理论依据:
基于价格在周期内相对位置理论,当收盘价接近波动区间顶部时显示超买,接近底部时显示超卖 - 数学公式:
- % K = C l o s e − L n H n − L n × 100 \%K = \frac{Close - L_n}{H_n - L_n} \times 100 %K=Hn−LnClose−Ln×100( H n H_n Hn为 n n n日最高价, L n L_n Ln为 n n n日最低价)
- $%D = SMA(%K, m) $
- 核心参数:
- 标准周期:14日(%K计算周期)
- 平滑周期:3日(%D计算周期)
- 适用性:
- 震荡行情中的波段操作
- 捕捉短期反转机会
- 局限性:
- 单边趋势中指标长期处于极值区
- 需配合趋势指标过滤虚假信号
- 基本面的结合:
- 重要经济数据公布前避免使用(易引发极端波动)
- 风险管理:
- %K与%D在超买区死叉时止损
- 配合ATR设置1.5倍波动止损位
2.2.3 Commodity Channel Index (CCI):商品通道指数
- 理论依据:
- 价格偏离统计常态后向均值回归的特性
- 数学公式:
- 典型价 T P = H + L + C 3 TP = \frac{H+L+C}{3} TP=3H+L+C
- M D = 1 n ∑ ∥ T P i − S M A ( T P , n ) ∥ MD = \frac{1}{n}\sum\|TP_i - SMA(TP,n)\| MD=n1∑∥TPi−SMA(TP,n)∥
- C C I = T P − S M A ( T P , n ) 0.015 × M D CCI = \frac{TP - SMA(TP,n)}{0.015 \times MD} CCI=0.015×MDTP−SMA(TP,n)
- 核心参数:20日周期,阈值±100
- 适用性:
- 大宗商品期货的极端波动捕捉
- 股票短线超调反弹交易
- 局限性:
- 需配合波动率指标过滤虚假突破
- 风险管理:
- 突破300或跌破-300时警惕反转风险
- 结合ATR设置1.5倍波动区间止损
2.2.4 Money Flow Index (MFI):资金流量指标
- 理论依据:
结合价格与成交量的加权动量理论,量化资金流入/流出强度 - 数学公式:
- 典型价TP = (H+L+C)/3
- 资金流MF = TP × Volume
- 资金比率MR = 14日正MF总和 / 14日负MF总和
- MFI = 100 - (100 / (1 + MR))
- 核心参数:
- 标准周期:14日
- 阈值:超买80,超卖20
- 适用性:
- 识别主力资金异动
- 验证量价背离信号
- 局限性:
- 对低价股易产生误判(成交量绝对值干扰)
- 风险管理:
- MFI顶背离+成交量萎缩时强制止损
- 突破85时反向开仓需延迟2日确认
2.2.5 Rate of Change (ROC):变化率指标
- 理论依据:
价格动能守恒原理,反映价格变化的加速度 - 数学公式:
- R O C = [ ( C l o s e t / C l o s e t − n ) − 1 ] × 100 ROC = [(Close_t / Close_{t-n}) - 1] × 100 ROC=[(Closet/Closet−n)−1]×100
- 核心参数:
- 标准周期:12日
- 动能阈值:±5%为显著变动
- 适用性:
- 捕捉暴涨暴跌行情
- 量化市场情绪极端值
- 局限性:
- 需配合移动平均过滤噪音
- 风险管理:
- 当ROC超过3倍年化波动率时触发熔断机制
2.3 成交量类指标
2.3.1 On Balance Volume (OBV):能量潮
- 理论依据:
- 量在价先原理,资金流动方向预示价格趋势
- 数学公式:
- O B V t = O B V t − 1 + { + V t C l o s e t > C l o s e t − 1 − V t C l o s e t < C l o s e t − 1 0 平盘 OBV_t = OBV_{t-1} + \begin{cases} +V_t & Close_t > Close_{t-1} \\ -V_t & Close_t < Close_{t-1} \\ 0 & \text{平盘} \end{cases} OBVt=OBVt−1+⎩ ⎨ ⎧+Vt−Vt0Closet>Closet−1Closet<Closet−1平盘
- 核心参数:无固定周期,侧重形态分析
- 适用性:
- 识别主力资金建仓/派发
- 验证价格突破的有效性
- 局限性:
- 受异常成交量干扰较大(如大宗交易)
- 基本面的结合:
- 大股东减持期间OBV背离需特别关注
- 风险管理:
- OBV连续3日背离后强制止损
- 量价背离时仓位不超过1%
2.3.2 Chaikin Money Flow (CMF):蔡金资金流
- 理论依据:
量价分布理论,通过累计资金流验证价格可信度 - 数学公式:
- 资金流乘数 = [ ( C l o s e − L o w ) − ( H i g h − C l o s e ) ] / ( H i g h − L o w ) [(Close - Low) - (High - Close)] / (High - Low) [(Close−Low)−(High−Close)]/(High−Low)
- 资金流量 = 资金流乘数 × V o l u m e Volume Volume
- CMF = 21日资金流量总和 / 21日 V o l u m e Volume Volume总和
- 核心参数:
- 标准周期:21日
- 适用性:
- 识别机构资金持续流入标的
- 验证底部/顶部形态可靠性
- 局限性:
- 对日内振幅过小的股票失效
- 风险管理:
- CMF跌破-0.4触发清仓信号
- 结合OBV背离执行反向操作
2.3.3 Volume Weighted Average Price (VWAP)
-
理论依据:
市场成本理论,反映特定时段内真实平均交易成本 -
数学公式:
- VWAP的数学公式可以表示为: V W A P = ∑ ( P r i c e i × V o l u m e i ) ∑ V o l u m e i VWAP = \frac{\sum (Price_i \times Volume_i)}{\sum Volume_i} VWAP=∑Volumei∑(Pricei×Volumei)
- 其中, P r i c e i Price_i Pricei 表示第 i i i 笔交易的价格, V o l u m e i Volume_i Volumei 表示第 i i i 笔交易的成交量。
-
核心参数:
- 标准周期:日内交易常用1分钟/5分钟
-
适用性:
- 算法交易执行基准价
- 识别机构大宗交易时点
-
局限性:
- 仅适用于日内交易决策
-
风险管理:
- 价格偏离VWAP±2%触发套利对冲
- 尾盘30分钟跌破VWAP需强制平仓
2.4 波动类指标
2.4.1 Average True Range (ATR):平均真实波幅
- 理论依据:
基于价格波动区间理论,反映市场波动能量变化 - 数学公式:
- T R = max ( H − L , ∣ H − C l o s e p r e v ∣ , ∣ L − C l o s e p r e v ∣ ) TR = \max(H-L, |H-Close_{prev}|, |L-Close_{prev}|) TR=max(H−L,∣H−Closeprev∣,∣L−Closeprev∣)
- A T R = 1 n ∑ T R ATR = \frac{1}{n}\sum TR ATR=n1∑TR
- 核心参数:
- 标准周期:14日
- 波动阈值:2倍ATR为显著波动信号
- 适用性:
- 动态调整止损止盈位置
- 衡量市场恐慌/贪婪程度
- 局限性:
- 不指示价格方向仅反映波动幅度
- 基本面的结合:
- 财报季自动调高ATR系数至1.8倍
- 风险管理:
- 止损距离=入场价±3倍ATR
- 当日内ATR突破月均值时减仓50%
2.4.2 Bollinger Bands (Bollinger):布林带
- 理论依据:
- 价格波动服从正态分布,标准差度量波动率
- 数学公式:
- 中轨 = S M A ( 20 ) SMA(20) SMA(20)
- 上轨 = S M A ( 20 ) + 2 σ SMA(20) + 2\sigma SMA(20)+2σ
- 下轨 = S M A ( 20 ) − 2 σ SMA(20) - 2\sigma SMA(20)−2σ
- 核心参数:20日均线,2倍标准差
- 适用性:
- 震荡行情中的区间交易
- 趋势中的波动率突破策略
- 局限性:
- 单边行情中价格沿通道外侧持续运行
- 风险管理:
- 通道收窄时降低仓位至50%
- 突破上轨后回踩中轨止损
2.4.3 Keltner Channel (Keltner):凯尔特纳通道
- 理论依据:
基于波动率通道的突破理论,结合EMA与ATR构建动态区间 - 数学公式:
- 中轨 = E M A ( 20 ) EMA(20) EMA(20)
- 上轨 = E M A ( 20 ) + 2 × A T R ( 10 ) EMA(20) + 2×ATR(10) EMA(20)+2×ATR(10)
- 下轨 = E M A ( 20 ) − 2 × A T R ( 10 ) EMA(20) - 2×ATR(10) EMA(20)−2×ATR(10)
- 核心参数:
- EMA周期:20日
- ATR周期:10日
- 适用性:
- 趋势跟踪突破策略
- 波动率收缩扩张预警
- 风险管理:
- 通道突破后回撤50%幅度止损
- 通道斜率<30度时停止开仓
2.4.4 Standard Deviation (StdDev):标准差
- 理论依据:
正态分布原理,量化价格离散程度 - 数学公式:
- σ = ∑ ( C l o s e − S M A ) 2 n \sigma = \sqrt{\frac{\sum (Close - SMA)^2}{n}} σ=n∑(Close−SMA)2
- 核心参数:
- 标准周期:20日
- 适用性:
- 期权定价波动率计算
- 量化策略风险值评估
- 局限性:
- 需假设正态分布,与实际市场存在偏差
- 风险管理:
- 波动率突破历史平均值2倍时启动熔断
2.5 复合类指标
2.5.1 Supertrend (Supertrend):超级趋势
- 理论依据:
- 多因子合成趋势方向,结合波动率动态调整
- 数学公式:
- 基础线 = ( H i g h + L o w ) / 2 (High + Low)/2 (High+Low)/2
- 上轨 = 基础线 + 3 × A T R 基础线 + 3×ATR 基础线+3×ATR
- 下轨 = 基础线 − 3 × A T R 基础线 - 3×ATR 基础线−3×ATR
- 信号:收盘价突破轨道则反转趋势方向
- 核心参数:ATR周期10,乘数3
- 适用性:
- 程序化交易系统
- 中长线趋势跟踪
- 风险管理:
- 每次信号转换时重置止损
- 最大连续亏损次数3次后暂停策略
2.5.2 Alligator (Alligator):鳄鱼线
- 理论依据:
分形几何理论,通过三线排列识别市场平衡状态 - 数学公式:
- 颚部线(蓝)= S M M A ( 13 , 8 ) SMMA(13, 8) SMMA(13,8)
- 牙齿线(红)= S M M A ( 8 , 5 ) SMMA(8, 5) SMMA(8,5)
- 嘴唇线(绿)=
S
M
M
A
(
5
,
3
)
SMMA(5, 3)
SMMA(5,3)
(SMMA为平滑移动平均,参数为周期与偏移量)
- 核心参数:
- 睡眠期:三线纠缠(鳄鱼休眠)
- 进食期:三线发散(趋势启动)
- 适用性:
- 捕捉重大趋势转折点
- 过滤震荡行情无效信号
- 风险管理:
- 三线空头排列时禁止逆向操作
- 价格突破最远平衡线后回撤50%平仓
2.5.3 Triple Exponential Moving Average (TRIX):三重指数平均线
- 理论依据:
三重EMA平滑过滤短期波动,突出中长期趋势变化 - 数学公式:
- 单次EMA = E M A ( C l o s e , n ) EMA(Close, n) EMA(Close,n)
- 三次EMA = E M A ( E M A ( E M A ( C l o s e , n ) ) ) EMA(EMA(EMA(Close, n))) EMA(EMA(EMA(Close,n)))
- TRIX = 三次 E M A t − 三次 E M A t − 1 三次 E M A t − 1 × 100 \frac{三次EMA_t - 三次EMA_{t-1}}{三次EMA_{t-1}} \times 100 三次EMAt−1三次EMAt−三次EMAt−1×100
- 核心参数:
- 标准周期:12日
- 信号线周期:9日(TRIX的EMA)
- 适用性:
- 捕捉中长期趋势转折点
- 规避短期市场噪音干扰
- 局限性:
- 延迟较传统MA更大
- 需配合成交量确认突破
- 风险管理:
- TRIX与信号线金叉时,需MACD同步翻红才开仓
- 连续5日背离强制止损
2.5.4 Donchian Channel (Donchian):唐奇安通道
- 理论依据:
价格通道突破理论,通过N日最高/低价构建交易区间 - 数学公式:
- 上轨 = max ( H i g h , n ) \max(High, n) max(High,n)
- 下轨 = min ( L o w , n ) \min(Low, n) min(Low,n)
- 中轨 = ( 上轨 + 下轨 ) / 2 (上轨 + 下轨)/2 (上轨+下轨)/2
- 核心参数:
- 标准周期:20日
- 适用性:
- 趋势突破策略(海龟交易法则)
- 波动率扩张监控
- 风险管理:
- 突破20日新高后回撤2%止损
- 连续3日收于中轨下方强制离场
三、全局风险管理原则
3.1 多指标验证机制
- 指标配置:
- 核心组合:沪深300趋势强度(20日加权移动平均斜率) + 融资融券余额动量(5日指数平滑) + 北向资金净流入占比(3日滚动计算)
- 极端行情替代指标:涨停板个股采用封单量/流通市值比(阈值>5%)作为流动性验证
- 执行规则:
- 时间窗口:信号需在2个交易日内连续触发(适配T+1机制)
- 指标冲突容忍度:6项指标中允许2项背离(适应高波动市场环境)
- 熔断联动:当沪深300条件风险价值(CVaR)触及7%时,同步验证港股通标的与富时A50期指趋势一致性
3.2 波动率适配策略
-
动态仓位模型:
P o s i t i o n = A c c o u n t × R i s k % A T R a d j × P r i c e _ M u l t i p l i e r Position = \frac{Account \times Risk\%}{ATR_{adj} \times Price\_Multiplier} Position=ATRadj×Price_MultiplierAccount×Risk%
其中 A T R a d j ATR_{adj} ATRadj采用修正算法:
A T R a d j = M A X ( 涨停限制价格 , 前日收盘价 × 1.1 ) − M I N ( 跌停限制价格 , 前日收盘价 × 0.9 ) 当前价格 ATR_{adj} = \frac{MAX(涨停限制价格, 前日收盘价 \times 1.1) - MIN(跌停限制价格, 前日收盘价 \times 0.9)}{当前价格} ATRadj=当前价格MAX(涨停限制价格,前日收盘价×1.1)−MIN(跌停限制价格,前日收盘价×0.9) -
分级风控:
波动率区间 融资仓位上限 对冲要求 ATR<1.5% 担保比例≤130% 套利策略杠杆≤2倍 1.5%-3.5% 标准两融仓位 股指期货对冲≥30%头寸 ATR>3.5% 净头寸≤60% 期权组合Delta对冲≥0.6
3.3 黑天鹅事件防护
- 三级预警体系:
- 一级预警(中证1000波动指数>40):
- 股指期货对冲(IC/IM合约Delta中性≥50%)
- 固定收益资产占比提升至20%(以国债逆回购为主)
- 二级预警(北向资金单日净流出>180亿元):
- 增持50ETF认沽期权(Delta≤-0.7)
- 商品期货空头对冲(沪铜/螺纹钢合约)
- 三级预警(融资盘触及平仓线≥5%市值):
- 启动流动性应急协议,优先减持质押率>30%的个股
- 一级预警(中证1000波动指数>40):
- 政策响应:
实时监测监管动态(基于NLP的“市场稳定”政策文本分析),当相关表述频率陡增时,自动触发防御性调仓
3.4 跨市场联动监控
- 关联性监测:
- 股债溢价阈值:当(沪深300盈利率 - 10年期国债收益率)>3.5%时,强制仓位降至70%
- 汇率联动规则:在岸人民币汇率(USDCNH)20日波动率>1.2%时,限制外资持股超限标的的交易权限
- 流动性熔断机制:
- 个股量比连续2日<0.3且委比>2.0时,启动程序化减仓(挂单量≤市场深度5%)
- 重大事件前1小时启动弹性点差模型(点差基数×恐慌指数/10)
第二部分:Python 实现方法
1. Tushare数据获取与清洗
关键要点总结
- 权限管理:根据策略需求申请对应数据权限(如高频交易需L2行情)
- 复权验证:必须通过复权因子反向校验数据准确性
- 质量检查:重点监控成交量、价格跳空、数据连续性三大维度
- 存储规范:
Parquet
格式优先,避免使用CSV
长期存储
1.1 环境配置与API连接
安装与授权
# 安装Tushare库
pip install tushare
# 导入并初始化
import tushare as ts
pro = ts.pro_api('your_token') # 前往tushare.pro注册获取token
权限说明:
- 基础权限:可获取日线、基本面数据(2000积分)
- 高级权限:需5000+积分获取分钟级数据、融资融券明细
1.2 核心数据接口调用
示例1:股票日线数据获取
# 获取贵州茅台日线数据(后复权)
df = pro.daily(ts_code="600519.SH", start_date="20230101")
print(df[["trade_date", "open", "high", "low", "close", "vol"]].head())
输出:
trade_date open high low close vol
0 20250306 1474.0 1510.20 1472.08 1505.98 42167.64
1 20250305 1472.0 1474.00 1460.10 1466.37 24605.22
2 20250304 1485.0 1486.00 1465.21 1470.11 25211.21
3 20250303 1502.6 1520.99 1481.50 1487.02 31595.66
4 20250228 1485.5 1528.38 1482.00 1500.79 56128.95
示例2:财务数据获取
# 获取茅台资产负债表
balance = pro.balancesheet(
ts_code="600519.SH",
start_date="20200101",
fields="ann_date,end_date,total_assets, total_liab", # 资产总计、负债合计
)
print(balance.head())
ann_date end_date total_assets total_liab
0 20241026 20240930 2.867707e+11 3.908256e+10
1 20240809 20240630 2.792073e+11 5.116245e+10
2 20240427 20240331 2.855245e+11 3.698777e+10
3 20240403 20231231 2.726997e+11 4.904319e+10
4 20231021 20230930 2.620764e+11 3.705763e+10
1.3 专业级数据清洗
步骤1:基础清洗
# 处理缺失值与异常值
df.dropna(subset=["close"], inplace=True) # 删除无收盘价数据
df = df[df["vol"] > 0] # 过滤零成交量数据(停牌日)
# 时间格式转换
df["trade_date"] = pd.to_datetime(df["trade_date"], format="%Y%m%d")
df.set_index("trade_date", inplace=True)
# 按时间正序排列
df.sort_index(ascending=True, inplace=True)
步骤2:复权计算验证
# 验证复权正确性:比较复权因子计算的理论价格
from datetime import datetime
# 获取未复权数据
# 使用通用行情接口
df_raw = ts.pro_bar(ts_code="600519.SH", start_date="20230101", adj=None)
df_raw["trade_date"] = pd.to_datetime(df_raw["trade_date"])
# 计算复权因子
df_factor = pro.adj_factor(ts_code="600519.SH", start_date="20230101")
df_factor["trade_date"] = pd.to_datetime(df_raw["trade_date"])
# 合并数据
df_merge = pd.merge(df_raw, df_factor, on="trade_date")
# 验证后复权价格 = 未复权价格 * adj_factor
df_merge["calc_close"] = df_merge["close"] * df_merge["adj_factor"]
print("验证后复权价格")
print(df_merge[["trade_date", "close", "adj_factor", "calc_close"]].tail())
# 获取后复权数据
# 使用通用行情接口
df_fuquoted = ts.pro_bar(ts_code="600519.SH", start_date="20230101", adj="hfq")
df_fuquoted["trade_date"] = pd.to_datetime(df_raw["trade_date"])
print("获取后复权数据")
print(df_fuquoted[["trade_date", "close"]].tail())
输出:
验证后复权价格
trade_date close adj_factor calc_close
519 2023-01-09 1841.20 7.6508 14086.652960
520 2023-01-06 1803.77 7.6508 13800.283516
521 2023-01-05 1801.00 7.6508 13779.090800
522 2023-01-04 1725.01 7.6508 13197.706508
523 2023-01-03 1730.01 7.6508 13235.960508
获取后复权数据
trade_date close
519 2023-01-09 14086.65
520 2023-01-06 13800.28
521 2023-01-05 13779.09
522 2023-01-04 13197.71
523 2023-01-03 13235.96
计算结果是 13235.960508,四舍五入后一致,则验证通过。
通过 多维度交叉验证(数据源对比、价格连续性、除权事件反推)确保复权正确。若外部数据匹配且价格走势连续,则复权计算可信。
通用行情接口关键参数:
adj
:复权类型 (None
不复权,hfq
后复权,qfq
前复权)
步骤3:数据质量检查
# 检查数据连续性(剔除节假日停牌)
calendar = pro.trade_cal(exchange="SSE", start_date="20230101")
full_date_range = pd.date_range(start=df.index.min(), end=df.index.max(), freq="D")
missing_dates = full_date_range.difference(df.index)
print(missing_dates.values)
# 异常值检测(3σ原则)
mean, std = df["close"].mean(), df["close"].std()
df["z_score"] = (df["close"] - mean) / std
outliers = df[df["z_score"].abs() > 3]
print(outliers.values)
1.4 数据存储优化
# 使用PyArrow引擎存储为Parquet格式
df.to_parquet(
path=f"stock-data/600519.SH.parquet",
engine="pyarrow",
compression="zstd",
compression_level=3,
)
# 读取数据
df = pd.read_parquet(
path=f"stock-data/600519.SH.parquet",
filters=[("trade_date", ">", pd.to_datetime("20240101", format="%Y%m%d"))],
columns=["trade_date", "open", "high", "low", "close", "vol"],
)
print(df.head())
输出:
open high low close vol
trade_date
2024-01-02 1715.00 1718.19 1678.10 1685.01 32156.44
2024-01-03 1681.11 1695.22 1676.33 1694.00 20229.29
2024-01-04 1693.00 1693.00 1662.93 1669.00 21551.07
2024-01-05 1661.33 1678.66 1652.11 1663.36 20242.86
2024-01-08 1661.00 1662.00 1640.01 1643.99 25586.20
说明:
需安装pip install pyarrow
库支持Parquet
存储功能。
进阶请移步:Pandas+PyArrow:股票数据存储 Parquet 入门指引
1.5 特殊场景处理
案例:科创板涨跌停数据修正
# 科创板涨跌幅>20%时强制修正
def correct_price(df):
df['pct_chg'] = df['close'].pct_change()
mask = (df['pct_chg'].abs() > 0.2) & (df['name'].str.contains('688'))
df.loc[mask, 'close'] = df['pre_close'] * (1 + df['pct_chg'].clip(lower=-0.2, upper=0.2))
return df
常见问题排查:
- 接口返回空数据:检查token权限、股票代码后缀(如
.SH
/.SZ
) - 数据错位:确保交易日期排序为升序(TA-Lib指标计算依赖正确时序)
- 复权误差:对比Tushare复权数据与券商客户端数据差异
2. TA-Lib指标计算最佳实践
TA-Lib(Technical Analysis Library)是一个广泛应用于金融数据分析的Python库,支持超150种技术指标(如MACD、KDJ、布林带),适合量化交易和策略回测。
2.1 环境准备
安装库:
brew install ta-lib
pip install ta-lib
2.2 常用技术指标实现示例
示例数据准备:
import pandas as pd
import numpy as np
import talib
from datetime import datetime
# 读取已存储的 600519.SH 数据
df = pd.read_parquet(
path=f"stock-data/600519.SH.parquet",
engine="pyarrow",
filters=[("trade_date", ">", datetime(2024, 11, 1))],
)
# 数据预处理
df.index.rename("Date", inplace=True)
df.rename(
columns={
# 'trade_date': 'Date',
"open": "Open",
"high": "High",
"low": "Low",
"close": "Close",
"vol": "Volume",
},
inplace=True,
)
df.sort_index(ascending=True, inplace=True)
移动平均线(MA):
# 计算5日简单移动平均
df["MA5"] = talib.SMA(df["Close"], timeperiod=5)
# 计算20日指数移动平均
df["EMA20"] = talib.EMA(df["Close"], timeperiod=20)
相对强弱指数(RSI):
# 计算14日RSI
df["RSI14"] = talib.RSI(df["Close"], timeperiod=14)
# 过滤超买超卖信号
df["Overbought"] = (df["RSI14"] > 70).astype(int)
df["Oversold"] = (df["RSI14"] < 30).astype(int)
移动平均收敛发散指标(MACD):
# 计算MACD线、信号线、柱状图
df["MACD"], df["MACD_Signal"], df["MACD_Hist"] = talib.MACD(
df["Close"], fastperiod=12, slowperiod=26, signalperiod=9
)
2.3 量价因子实现示例
能量潮指标(OBV):
# 向量化计算OBV(无需循环)
df["Price_Change"] = df["Close"].diff()
df["OBV"] = (np.sign(df["Price_Change"]) * df["Volume"]).cumsum()
波动率因子:
# 计算20日年化波动率
df["Returns"] = df["Close"].pct_change()
df["Volatility"] = df["Returns"].rolling(20).std() * np.sqrt(252)
2.4 最佳实践建议
-
数据预处理:
- 确保时间序列按升序排列(
df.sort_index(inplace=True)
) - 处理缺失值(
df.ffill(inplace=True)
)
- 确保时间序列按升序排列(
-
向量化操作:
- 优先使用TA-Lib内置函数而非Pandas
apply
,速度可提升10-100倍
- 优先使用TA-Lib内置函数而非Pandas
-
参数调优:
- 根据策略周期调整参数(如
timeperiod=20
对应月度趋势) - 使用
talib.get_function_groups()
查看全部支持的指标
- 根据策略周期调整参数(如
2.5 注意事项
- 数据长度要求:部分指标(如
RSI(14)
)需要至少14个数据点,否则返回NaN - 数值精度:TA-Lib要求输入为
float64
,可用df.astype(np.float64)
转换 - 多因子合并:将同周期指标批量计算,减少I/O消耗
# 批量计算示例
indicators = {
'SMA20': lambda x: talib.SMA(x, 20),
'RSI14': lambda x: talib.RSI(x, 14)
}
for name, func in indicators.items():
df[name] = func(df['close'])
3. mplfinance专业级K线图绘制指南
mplfinance 是一个基于 Matplotlib 的 Python 库,专门用于绘制金融数据图表(如 K 线图、成交量图等)。
最佳实践总结:
- 使用
make_addplot()
分层叠加指标,避免重复绘图 - 通过
style
参数统一视觉风格 - 对高频数据启用
compress_maxamp
提升渲染速度 - 使用
mplfinance.original_flavor
兼容旧版API代码
3.1 环境准备与数据准备
安装库:
pip install mplfinance
数据要求:
- DataFrame必须包含
Open, High, Low, Close, Volume
列(可自定义名称,需通过参数映射) - 索引必须为
datetime
类型(建议用df.index = pd.to_datetime(df.index)
转换)
数据准备
import pandas as pd
import numpy as np
import talib
from datetime import datetime
# 读取已存储的 600519.SH 数据
df = pd.read_parquet(
path=f"stock-data/600519.SH.parquet",
engine="pyarrow",
filters=[("trade_date", ">", datetime(2024, 11, 1))],
)
# 数据预处理
df.index.rename("Date", inplace=True)
df.rename(
columns={
# 'trade_date': 'Date',
"open": "Open",
"high": "High",
"low": "Low",
"close": "Close",
"vol": "Volume",
},
inplace=True,
)
df.sort_index(ascending=True, inplace=True)
3.2 基础K线图绘制
import mplfinance as mpf
my_rc = {
"font.family": "Arial Unicode MS", # 设置中文支持字体
"axes.unicode_minus": False, # 解决负号显示问题
}
my_style = mpf.make_mpf_style(base_mpf_style="default", rc=my_rc)
# 绘制K线图
mpf.plot(
df,
type="candle",
style=my_style,
volume=True,
title="贵州茅台(600519.SH)日K线图",
ylabel="价格(元)",
ylabel_lower="成交量(手)",
datetime_format="%Y-%m-%d",
figratio=(15, 5),
savefig=dict(
fname="./export/kline_600519_SH.png",
dpi=300,
bbox_inches="tight",
),
)
3.3 高级定制技巧
(1)样式自定义
内置样式:'default'
, 'yahoo'
, 'binance'
, 'classic'
示例:自定义颜色:
my_style = mpf.make_mpf_style(
marketcolors=mpf.make_marketcolors(
up="#EB74C3", # 上涨K线颜色(柔和的玫红色)
down="#2ECC71", # 下跌K线颜色(清新的浅绿色)
edge="inherit", # K线边框颜色(继承)
wick="inherit", # 上下影线颜色(继承)
volume="inherit", # 成交量柱状图颜色(继承)
ohlc="inherit", # 分时线颜色(继承)
),
mavcolors=["#3498DB", "#9B59B6", "#E67E22"], # 均线颜色(蓝/紫/橙)
facecolor="#FFFFFF", # 图表背景色
gridcolor="#ECF0F3", # 网格线颜色(极浅灰)
gridstyle="--", # 网格线样式
y_on_right=False, # Y轴显示在左侧
rc={
"font.family": "Arial Unicode MS", # 字体设置,支持中文
"axes.labelcolor": "#2C3E3A", # 坐标轴标签颜色
"axes.edgecolor": "#BDC3C7", # 坐标轴颜色
},
)
# 绘制K线图
mpf.plot(
df,
type="hollow", # candle
style=my_style,
volume=True,
title="贵州茅台(600519.SH)日K线图",
ylabel="价格(元)",
ylabel_lower="成交量(手)",
figratio=(15, 5),
mav=(5, 20, 60), # 自动添加移动平均线
datetime_format="%Y-%m-%d",
savefig=dict(
fname="./export/kline_style_600519_SH.png",
dpi=300,
bbox_inches="tight",
),
)
示例:自定义绘制:
# 绘制图表并获取figure和axes对象
fig, axes = mpf.plot(
df,
type="candle", # hollow
style=my_style,
volume=True,
title="贵州茅台(600519.SH)日K线图",
ylabel="价格(元)",
ylabel_lower="成交量(手)",
figratio=(15, 5),
datetime_format="%Y-%m-%d",
returnfig=True,
)
# 为所有子图添加网格
for ax in axes:
ax.grid(True, color="gray", linestyle=":", linewidth=0.5)
# 确定成交量所在的坐标轴(通常为第二个axes)
vol_ax = axes[2] if len(axes) > 1 else axes > [0]
# 获取成交量柱子的容器(BarContainer)
vol_bars = vol_ax.containers[0]
# 遍历每个柱子并设置边框颜色
for i, bar in enumerate(vol_bars.get_children()):
row = df.iloc[i]
if row["Close"] >= row["Open"]:
bar.set_edgecolor(my_style["marketcolors"]["candle"]["up"])
else:
bar.set_edgecolor(my_style["marketcolors"]["candle"]["down"])
# 可选:设置成交量柱子填充色为透明,仅显示边框
# for bar in vol_bars.get_children():
# bar.set_facecolor(None)
# 刷新图像
fig.canvas.draw()
plt.savefig(
fname="./export/kline_draw_600519_SH.png",
dpi=300,
bbox_inches="tight",
)
plt.show()
(2)添加技术指标
示例:叠加移动平均线与MACD
# 计算指标(使用前文TA-Lib计算结果)
df["MA20"] = talib.SMA(df["Close"], 20)
df["MA60"] = talib.SMA(df["Close"], 60)
apd = mpf.make_addplot(
df[["MA20", "MA60"]],
secondary_y=False, # 是否使用副坐标轴
)
# 绘制K线图
mpf.plot(
df,
type="hollow",
style=my_style,
addplot=apd,
volume=True,
title="贵州茅台(600519.SH)日K线图",
ylabel="价格(元)",
ylabel_lower="成交量(手)",
figratio=(15, 5),
datetime_format="%Y-%m-%d",
savefig=dict(
fname="./export/kline_MACD_600519_SH.png",
dpi=300,
bbox_inches="tight",
),
)
(3)标注交易信号
示例:标记买卖点
# 示例:计算布林带
upper_band, middle_band, lower_band = talib.BBANDS(
df["Close"],
timeperiod=20, # 布林带计算周期,默认为20
nbdevup=2, # 上轨标准差倍数,默认为2
nbdevdn=2, # 下轨标准差倍数,默认为2
matype=0, # 移动平均类型,0表示简单移动平均
)
# 将结果添加到 DataFrame 中
df["Upper"] = upper_band
df["Lower"] = lower_band
# 生成信号
df["Buy_Signal"] = df["Close"] < df["Lower"] # 价格跌破下轨买入
df["Sell_Signal"] = df["Close"] > df["Upper"] # 价格突破上轨卖出
# 创建买卖信号的散点图数据列
df["Buy_Marker"] = df["Close"][
df["Buy_Signal"]
] # 仅在买入信号位置显示收盘价,其他为 NaN
df["Sell_Marker"] = df["Close"][
df["Sell_Signal"]
] # 仅在卖出信号位置显示收盘价,其他为 NaN
# 创建 addplot 对象
apd = [
mpf.make_addplot(df["MA20"]), # 添加 MA20 线
mpf.make_addplot(df["MA60"]), # 添加 MA60 线
mpf.make_addplot(
df["Buy_Marker"], type="scatter", marker="^", color="g", markersize=200
), # 买入信号散点
mpf.make_addplot(
df["Sell_Marker"], type="scatter", marker="v", color="r", markersize=200
), # 卖出信号散点
]
# 绘制K线图
mpf.plot(
df,
type="hollow",
style=my_style,
addplot=apd,
volume=True,
title="贵州茅台(600519.SH)日K线图",
ylabel="价格(元)",
ylabel_lower="成交量(手)",
figratio=(15, 5),
datetime_format="%Y-%m-%d",
savefig=dict(
fname="./export/kline_Signal_600519_SH.png",
dpi=300,
bbox_inches="tight",
),
)
3.4 专业级配置
(1)多图组合
价格+成交量+RSI三图布局:
# 创建addplot对象,将RSI放在第三个面板(索引2)
apd = mpf.make_addplot(df["RSI14"], panel=2, color="purple", ylabel="RSI")
# 使用mplfinance绘制,启用成交量并指定三个面板
fig, axes = mpf.plot(
df,
type="hollow",
style=my_style,
addplot=[apd],
volume=True,
title="贵州茅台(600519.SH)日K线图",
ylabel="价格(元)",
ylabel_lower="成交量(手)",
figratio=(15, 5),
panel_ratios=(3, 2, 2),
datetime_format="%Y-%m-%d",
returnfig=True,
)
# 在第三个面板(axes[2])中添加RSI的水平参考线
axes[2].axhline(70, ls="--", color="red")
axes[2].axhline(30, ls="--", color="green")
# axes[2].set_ylabel("RSI")
# 刷新图像
fig.canvas.draw()
plt.savefig(
fname="./export/kline_RSI_600519_SH.png",
dpi=300,
bbox_inches="tight",
)
plt.show()
(2)保存高清图片
mpf.plot(
df,
type="candle",
volume=True,
savefig=dict(fname="kline_chart.png", dpi=300, bbox_inches="tight"),
)
3.5 常见问题解决
- 中文乱码:
from matplotlib import rcParams
rcParams["font.family"] = "sans-serif"
rcParams["font.sans-serif"] = ["Arial Unicode MS"] # 设置中文支持字体
rcParams["axes.unicode_minus"] = False # 解决负号显示问题
rc = {
"font.family": "Arial Unicode MS", # 设置中文支持字体
"axes.unicode_minus": False, # 解决负号显示问题
}
my_style = mpf.make_mpf_style(base_mpf_style="default", rc=rc)
- 性能优化(10万+数据点):
- 使用参数
compress_maxamp=5
压缩数据 - 设置
update_width_config=dict(candle_linewidth=0.5)
减少线宽
- 时间范围筛选:
# 绘制最近100根K线
mpf.plot(df[-100:], type='candle')
3.6 参数说明
- 基础参数
参数 | 类型/默认值 | 描述 |
---|---|---|
data | DataFrame | 必需。包含金融数据的 DataFrame,需包含 Open , High , Low , Close 列,索引必须是时间序列。 |
type | str (默认: 'candle' ) | 图表类型。可选值:'candle' (K 线图)、'ohlc' (OHLC 图)、'line' (折线图)、'renko' (砖形图)、'pnf' (点数图)。 |
style | str/dict (默认: 'default' ) | 图表样式。内置样式如 'binance' 、'yahoo' 、'charles' ;也可通过字典自定义颜色。 |
title | str (默认: None) | 图表标题。 |
ylabel | str (默认: 'Price' ) | 价格轴(主图)的标签。 |
ylabel_lower | str (默认: 'Volume' 或 'Volume (USD)' ) | 成交量或其他副图标签。 |
show_nontrading | bool (默认: False) | 是否显示非交易日(如周末)。 |
figratio | tuple (默认: (10,6) ) | 图表宽高比,如 (12,6) 表示宽高比为 12:6。 |
figscale | float (默认: 1.0) | 图表缩放比例,数值越大图表尺寸越大。 |
returnfig | bool (默认: False) | 是否返回 (fig, axlist) 对象以便后续自定义。 |
- 成交量参数
参数 | 类型/默认值 | 描述 |
---|---|---|
volume | bool/dict (默认: False) | 是否显示成交量。若为字典,可自定义成交量样式(如颜色、位置)。例如:volume={'position': 'lower', 'upcolor': 'g', 'downcolor': 'r'} 。 |
volume_panel | int (默认: 2) | 成交量面板的位置(与主图的相对位置)。 |
- 技术指标参数
参数 | 类型/默认值 | 描述 |
---|---|---|
mav | int/list (默认: None) | 移动平均线周期。例如 mav=20 或 mav=(5,20,60) 显示多条均线。 |
addplot | DataFrame/list (默认: None) | 添加自定义技术指标或图形。需传递一个或多个 pd.DataFrame 或 mplfinance.make_addplot() 生成的对象。 |
panel | int (默认: 0) | 指定 addplot 的指标显示在哪个面板(0 为主图,1 为副图)。 |
- 样式与颜色参数
参数 | 类型/默认值 | 描述 |
---|---|---|
marketcolors | dict | 自定义颜色,覆盖 style 的默认设置。例如:{'up': '#00FF00', 'down': '#FF0000'} 。 |
linecolor | str | 折线图颜色(仅当 type='line' 时生效)。 |
mavcolors | list | 移动平均线颜色列表。例如:mavcolors=['blue', 'orange'] 。 |
- 其他参数
参数 | 类型/默认值 | 描述 |
---|---|---|
savefig | str/dict (默认: None) | 保存图表到文件。例如:savefig='chart.png' 或 savefig={'fname':'chart.png', 'dpi':300} 。 |
datetime_format | str | 时间轴格式,如 '%Y-%m-%d' 。 |
-
savefig参数列表
参数名 类型 默认值 描述 fname
str 必填 保存路径或文件名(如 "plot.png"
或"/path/to/plot.pdf"
)。dpi
int figure.dpi
图像分辨率(每英寸点数),默认继承自 Figure 对象的 dpi
。format
str None
文件格式(如 'png'
,'pdf'
,'svg'
)。若fname
含扩展名,则自动推断格式。bbox_inches
str/None None
裁剪边框。设为 'tight'
自动去除多余空白。pad_inches
float 0.1
当 bbox_inches='tight'
时,填充边距(英寸)。transparent
bool False
是否设置背景透明(适用于 PNG、SVG 等格式)。 facecolor
str 'white'
图像背景颜色(如 'none'
表示透明,或'#FFFFFF'
)。edgecolor
str 'white'
图像边框颜色。 orientation
str 'portrait'
方向: 'portrait'
(纵向)或'landscape'
(横向)。metadata
dict None
嵌入文件的元数据(如 PDF 的 {'Creator': 'My App', 'Title': 'Plot'}
)。 -
datetime_format参数列表
代码 说明 示例 %Y
四位年份 2023
%y
两位年份 23
%m
两位月份 04
(四月)%d
两位日期 07
%H
24小时制小时 15
%I
12小时制小时 03
%M
分钟 05
%S
秒 09
%a
缩写星期名 Mon
%b
缩写月份名 Apr
%p
上午/下午(AM/PM) PM
风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。