Contents

量化交易

参考资料

股票知识

一、市场与交易所结构

  • 中国大陆主要有两家证券交易所:
    • 上海证券交易所(简称“沪市”)
    • 深圳证券交易所(简称“深市”)
  • 沪市常见代码段(主板):
    • 600、601、603 等【主板】
  • 深市常见代码段:
    • 000 开头【主板】
    • 002 开头【原中小板;自 2021 年 4 月 6 日起与深市主板合并,公司类别统一为“主板 A 股”,代码沿用原中小板“002001–004999”区间,该区间现由深市主板使用】
    • 300 开头【创业板】 补充说明:
  • “中小板”作为独立板块已并入深市主板,前端行情展示与指数名称已相应调整,但个股代码与简称保持不变。因此,你现在在软件中仍能看到大量“002”开头的股票,它们目前都归属于深市主板。

二、常用指数

  • 上证综指(上证指数)
    • 含义:上海证券交易所发布的综合指数,反映沪市整体股价走势。
    • 样本:沪市全部上市股票(含 A 股、B 股)。
    • 编制:以发行量为权数,采用派许加权公式计算。
  • 深证成指(深圳成份指数)
    • 含义:深市的标尺性指数之一。
    • 样本:从深市选取市值大、流动性好的股票构成,目前样本数量为 500 只。
    • 特征:偏重制造业与新兴产业,兼顾主板与创业板公司,具有较明显的成长与科技风格。
  • 中小板指数
    • 含义:原中小板行情的指数化跟踪。
    • 现状:两板合并后,相关指数进行名称适应性调整,但指数序列仍延续使用。实务中可理解为“原中小板样本在合并后的延续性指数”。
  • 创业板指数
    • 含义:刻画创业板整体表现的宽基指数。
    • 特征:样本以成长型、创新型中小企业为主,波动相对更大,成长属性突出。

三、交易基本规则

  • 交易时间(沪深统一):
    • 周一至周五(法定节假日除外)
    • 上午:9:30–11:30
    • 下午:13:00–15:00
  • 最小交易单位:
    • 以“股”为报价单位。
    • 1 手= 100 股;买入申报数量必须为 100 股或其整数倍。
  • 涨跌幅限制(整体框架):
    • 主板(沪深):
      • 普通股票:通常为上一交易日收盘价的 ±10%。
      • ST/*ST 等风险警示股票:单日涨跌幅限制为 5%(监管已启动将主板 ST 股统一为 10%的征求意见,后续以正式规则为准)。
    • 科创板、创业板:
      • 新股上市前 5 个交易日不设涨跌幅限制;
      • 自第 6 个交易日起,日常涨跌幅限制为 ±20%。
    • 北交所:
      • 上市首日无涨跌幅限制,此后为 ±20%(不同阶段存在盘中临时停牌等机制)。
    • 超过有效价格范围的委托视为无效(不同板块还有“价格笼子”等细则)。
  • 交收制度(沪深 A 股):
    • T 日:当日交易日。
    • T+1 交收:当日买入的证券,在自动完成交割过户后,最早可在下一交易日卖出。

四、行情页面常用概念与指标

  • 量比(衡量相对成交量的强弱)
    • 含义:当前每分钟平均成交量与过去 5 个交易日每分钟平均成交量的比值。
    • 计算要点:
      • 当前每分钟平均成交量=当日累计成交量/当日累计成交时间(分钟)。
      • 量比=当前每分钟平均成交量/过去 5 日平均每分钟成交量。
    • 应用:
      • 量比 ≈1:成交量与近期平均接近;
      • 量比>1:成交相对放量,市场关注度提高;
      • 量比<1:成交相对缩量,市场情绪偏谨慎。
  • 开盘价
    • 含义:每个交易日开盘后第一笔成交价。
  • 换手率(衡量交投活跃程度)
    • 含义:一定时期内成交量与股份总数的比率,反映筹码转手的频率。
    • 常见口径:
      • 总换手率=(期间成交量/发行总股数)×100%;
      • 流通股换手率=(期间成交量/流通股本)×100%(A 股实务更常用)。
    • 注意:
      • 使用“总股本”与“流通股本”算出的换手率含义略有差异;实务中多采用流通股本口径。
  • 总手
    • 含义:当日自开盘起累计成交的手数(1 手= 100 股)。
  • 委比(衡量买卖委托力量对比)
    • 含义:通过未成交委托盘的对比,反映某一时段内买方与卖方的相对强弱。
    • 计算公式:
      • 委比=(委买手数-委卖手数)/(委买手数+委卖手数)×100%。
    • 档位口径:
      • 行情一般显示买一~买五、卖一~卖五,委买手数通常取买入五档总量,委卖手数取卖出五档总量。
    • 含义:
      • 委比为正且较大:买方委托量占优,短期买盘力量偏强;
      • 委比为负且绝对值较大:卖方委托量占优,短期卖压偏重。
    • 注意:
      • 委比只反映“未成交委托”,易被挂单与撤单干扰,需结合成交量、分时走势综合判断。
  • 分时价位线(黄黑走势线)
    • 含义:展示当天价格随时间变化的曲线。
    • 黑线:实时成交价(即时价)。
    • 黄线:成交均价(当日累计成交金额/累计成交股数)。
  • K 线与成交量颜色(国内常见配色)
    • 收阴:收盘价低于开盘价;成交量通常显示为绿色柱。
    • 收阳:收盘价高于开盘价;成交量通常显示为红色柱。
    • K 线整体用来刻画一段时间内股价的开盘、收盘、最高、最低等走势结构。

五、均线与常见技术指标

  • 均线(MA)
    • 含义:对一定周期内的收盘价进行平均,得到一条平滑曲线。
    • 多头排列(偏多信号):
      • 短期均线在中期均线上方,中期均线在长期均线上方。
    • 空头排列(偏空信号):
      • 短期均线在中期均线下方,中期均线在长期均线下方。
  • MACD(指数平滑异同移动平均线)
    • 含义:利用快速与慢速移动平均线之间的聚合与分离,判断趋势强弱与转折。
    • 应用:
      • MACD 由负转正:暗示市场由偏空转为偏多;
      • MACD 由正转负:暗示市场由偏多转为偏空。
  • RSI(相对强弱指数)
    • 含义:统计一段时间内上涨点数与下跌点数的比率,衡量价格运动中的“相对强弱”。
    • 常用区间:
      • RSI<30:可能进入超卖区间,存在技术性反弹可能;
      • RSI>70:可能进入超买区间,存在技术性回调压力。

六、主要投资风格(简要)

风格 持有周期 核心思路
技术分析 较短 通过价格、成交量、指标等判断趋势或择时交易。
趋势交易 中长 顺应中长周期趋势,强调止损与跟随。
价值投资 较长 侧重公司基本面与估值,寻找价格不高于内在价值的标的。

七、用一个例子理解股票的本质

下面用一个“开公司”的故事,把股票的基本含义串起来。

1. 创业与发行股票

  • 假设你和合伙人看好空调市场,成立“清凉空调制造有限公司”。
  • 启动需要大量资金:生产线、厂房、技术、用工、原材料等,初步估算需要 1000 万元。
  • 创始团队自筹 500 万元,仍需再募集 500 万元。
  • 你们将公司总股本设为 100 万股,每 1 股代表公司一百万分之一的所有权。
  • 向公众发行 50 万股新股(假设创始人原持有的 50 万股为原始股,不在本次发行中出售),每股发行价:
    • 500 万元/50 万股= 10 元/股。
  • 花 10 元买入 1 股“清凉空调”,意味着你拥有这家公司一百万分之一的所有权,成为股东。

2. 股价上涨:市场看好公司前景

  • 公司运营良好:
    • 节能省电、制冷效果强的产品推出;
    • 营销有力、品牌提升;
    • 遇上酷暑,订单暴增,利润快速增长。
  • 市场预期变好,投资者更愿出高价持有“清凉空调”股票。
  • 假设在交易所,投资者 B 愿意以 15 元/股从投资者 A 处买入。
  • 股价从 10 元升至 15 元,本质反映市场对公司未来盈利与成长性的乐观预期,买方愿意为这份“所有权”支付更高溢价。

3. 分红收益:分享公司盈利

  • 年底,公司实现净利润 200 万元(扣除成本、税费等)。
  • 董事会决定利润处置方式:
    • 一部分用于再投资(扩建厂房、研发新产品、开拓新市场),以提升未来盈利能力;
    • 另一部分用于现金分红,回馈股东。
  • 假设拿出 100 万元进行现金分红:
    • 每股分红= 100 万元/100 万股= 1 元/股。
    • 若你持有 10,000 股,则获得分红= 1 元/股 ×10,000 股= 10,000 元。
  • 小结:
    • 股票投资的回报主要来自两部分:
      • 分红(现金回报);
      • 股价上涨带来的资本利得。

4. 股价下跌:市场担忧或公司遇挫

  • 假设第二年:
    • 夏天异常凉爽,空调需求锐减;
    • 或者竞争对手推出革命性新品,市场份额被抢占;
    • 或者关键原材料(如铜)价格暴涨,成本剧增,利润大幅下滑甚至亏损。
  • 投资者开始担忧公司未来盈利,持有者想尽快卖出,潜在买方只愿给出较低报价。
  • 最终,投资者 C 可能不得不以 6 元/股的价格将股票卖给投资者 D。
  • 股价从 15 元(甚至 10 元)跌至 6 元,反映市场对公司未来盈利能力与风险的悲观预期;作为“所有权凭证”的价值,在公司基本面恶化时随之缩水。

八、实务中的注意事项

  • 交易成本与佣金
    • 选券商时要关注佣金费率(例如万三)。
    • 粗略测算:若 1 万元本金每周交易 3 次,一年约 150 次,按单边万三估算:
      • 1 万元 ×0.03%×150≈450 元(大致相当于若干本投资书的费用,说明频繁交易会推高成本)。
  • 如何从财务角度初筛“好公司”
    • 可参考的门槛(仅为起点,需结合行业与周期综合判断):
      • 连续 5 年 ROE>15%;
      • 毛利率>30%;
      • 资产负债率<50%。
  • 买卖时机的辅助判断
    • 关注政策信号与宏观数据;
    • 结合技术指标与成交量,对趋势与位置形成判断。
  • 理解涨跌的不对称性
    • 亏损后的回本幅度大于表面跌幅:
      • 100 元跌至 50 元,跌幅 50%,但从 50 元涨回 100 元需涨幅 100%,而非 50%。
  • 止损与复盘
    • 单笔亏损超过 10%时,应立刻复盘,避免情绪化加仓;
    • 控制单笔与总仓位,是长期生存的关键之一。

九、概念辨析与常见误区(补充)

  • “中小板”还存在吗?
    • 板块层面已与深市主板合并,行情不再单独展示“中小板”专区;相关指数做了名称调整但序列延续。
    • 个股代码(如 002 开头)继续使用,但归类为深市主板。
  • 涨跌幅“10%”是否适用所有 A 股?
    • 否。主板普通股多为 ±10%,但 ST/*ST、创业板、科创板、北交所以及新股前几日等有差异。
  • “委比”能代表真实买卖意愿吗?
    • 委比只统计未成交委托,容易受到挂单与撤单的干扰,不能单独作为买卖依据。
  • 换手率用“总股本”还是“流通股本”?
    • 理论上两种口径都存在,但 A 股实务更常用流通股本口径,更能反映真实流通筹码的换手情况。

拓展与后续学习建议

  • 延伸阅读方向
    • 指数投资与 ETF:
      • 深入理解宽基指数(沪深 300、中证 500、中证 1000 等)与行业/主题指数的区别;
      • 通过指数基金/ETF 实践资产配置。
    • 财务报表与公司分析:
      • 学习资产负债表、利润表、现金流量表的阅读;
      • 掌握 ROE、毛利率、负债率、经营现金流等核心指标及其组合应用。
    • 风险管理与组合构建:
      • 分散化、仓位控制与止损规则的体系化;
      • 不同大类资产(股票、债券、货币、商品)之间的相关性。
    • 行为金融与决策心理:
      • 认识过度自信、损失厌恶、锚定效应等常见偏差;
      • 通过纪律与流程降低情绪对交易的干扰。
  • 高阶应用场景(供长期规划参考)
    • 可转债、权证与衍生品(期权、期货)的基础知识;
    • 再平衡策略与长期再投资计划;
    • 事件驱动(财报、并购、回购等)与宏观周期视角。 参考与校验资料(节选)
  • 深市主板与中小板合并与指数调整。
  • 指数编制:上证综指的样本与加权方式;深证成指样本与结构。
  • 交易规则与涨跌幅限制。
  • 委比公式与档位口径。
  • 量比与换手率的计算与实务口径。

量化交易(Quantitative Trading)

利用数学模型、统计方法和计算机编程进行金融交易的一种体系化方法。典型做法包括:在同一资产或不同交易所之间捕捉买卖价差等微小获利机会。其目标是提升交易效率与决策一致性,在不同市场环境下追求更稳定的收益表现。为降低通信延迟,一些机构会把服务器集群部署在离交易所机房较近的数据中心(即所谓的托管/共址)。

  • 数学模型与算法:量化交易依赖数学与统计学模型(例如价格形态、趋势分析、波动性预测)来解读与预测市场行为。
  • 数据驱动:大量使用历史与实时市场数据(如价格、成交量、盘口深度等)构建并验证策略。
  • 自动化执行:交易信号通常由计算机程序自动执行,减少人工干预,实现实时或接近实时的响应。
  • 风险管理:通过仓位控制、止损与对冲等手段管理组合整体风险暴露,减小不利波动带来的冲击。
  • 频段划分:按持仓周期与换手速度可分为高频交易(HFT,极短时间内大量成交)与低频交易(较长持仓周期)。
  • 机器学习:部分策略使用机器学习算法从历史数据中学习模式,并辅助预测或决策优化。

1.1 策略与评估指标

  • 因子(Factor)
    用于刻画资产或市场特征的量化变量,例如价格、均线、市值、成交量等。
  • 信号(Signal)
    由策略与因子计算得出的交易指令(例如买入、卖出或持仓),通常基于对市场状态的定量判断。
  • 回测(Backtesting)
    在历史市场数据上模拟策略执行,以评估其绩效与稳健性的过程。
    回测中一个关键问题是防止“过拟合/过度拟合”(在样本内表现极好、样本外失效),需要通过样本外测试与走步前测(Walk-forward)等方式加强检验。
  • Alpha
    衡量策略相对于基准(常见为市场指数)的超额收益部分,正的 Alpha 意味着策略在调整风险暴露后仍取得额外收益。
  • Beta
    衡量投资组合相对于市场的敏感性。例如 Beta 大于 1 表示比市场更敏感、小于 1 则相对更稳定。
  • 夏普比率(Sharpe Ratio)
    风险调整后收益的经典指标,通常计算方式为(策略收益率 − 无风险利率)/ 收益率的标准差,反映每承担一单位总风险所获得的超额收益。
  • 最大回撤(Maximum Drawdown)
    策略在历史上任意区间可能损失的最大幅度(用峰到谷的跌幅衡量),常用于刻画极端风险。
  • 资金管理(Money Management)
    对资金与仓位进行规划的方法,包括组合分散、仓位上下限与动态再平衡等,用以控制整体风险。
  • 收益(Return)
    投资盈利或亏损的度量,常用百分比表示,是策略绩效评估的基础。

1.2 市场与合约基础

  • 股票(Stocks)
    代表公司所有权的权益证券,持有者享有分红与投票权,并承担相应风险。
  • 投资组合(Portfolio)
    由多种资产(股票、债券、期货等)构成的集合,通过组合化配置可以分散单一资产风险、平滑收益。
  • 算法交易(Algorithmic Trading)
    依据预设规则与数学模型进行下单与执行的交易方式,多由程序驱动,以提升速度与一致性。
  • 标的
    合同中权利义务共同指向的对象,是合同成立的必要条件。金融合约的标的可以是财产(如股票、债券、商品)或行为。

1.3 美国三大股指(要点)

  • 道琼斯工业平均指数(DJIA)
    历史悠久的股票指数,属于价格加权的算术平均股价指数,样本为 30 只知名工业公司股票。
  • 标普 500(S&P 500)
    覆盖约 500 家美国上市公司的市值加权指数,具有采样广、代表性强的特点,是广泛使用的市场基准。
  • 纳斯达克 100(NASDAQ 100)
    聚焦纳斯达克交易所中 100 只高成长、高科技、非金融类个股,被视为美国科技股的重要代表。
    这些指数从不同角度反映证券市场的整体走势与结构变化。

二、量化模型与策略类型

量化模型是借助数学与统计学工具,基于历史与实时数据对金融市场行为进行建模与预测的框架。常见模型与策略包括:

  • 蒙特卡洛模拟(Monte Carlo Simulation)
    通过生成大量随机情景来评估组合的风险与收益分布,是处理不确定性的常用数值方法。
  • 移动平均策略
    以股价的短期与长期移动平均线为基础:
    • 短期均线上穿长期均线时给出买入信号;
    • 短期均线下穿长期均线时给出卖出信号。
  • 均值回归策略
    基于价格在偏离历史均值后倾向于回归的假设。
    当价格相对均值偏离超过阈值时,产生反向交易信号(超卖时买入、超买时卖出)。
  • 动量策略
    基于趋势延续的假设,通过价格变化率或其他趋势指标识别上涨或下跌动量,顺势产生交易信号。
  • 市场中性策略
    同时做多与做空相关资产,利用相对强弱或价差收益,尽量对冲系统性风险暴露。
  • 套利(Arbitrage)
    依托统计学或经济学上的定价偏差,在不同资产或市场间进行对冲或无风险/低风险组合,锁定套利空间。
  • 事件驱动策略
    监控新闻、财报、宏观数据与公司事件,在特定事件触发后执行交易。
  • 机器学习策略
    利用回归、分类或深度学习从大规模历史数据中学习模式,对价格走势或风险状态进行预测,并生成交易信号。
  • 高频交易(High-Frequency Trading)
    通过极低延迟的下单与撤单,在极短时间内捕捉微小价差与流动性溢价,通常伴随极高换手与极短持仓时间。
    策略与模型多种多样,可根据资产类别、市场环境与个人偏好进行组合与调优。但无论采用何种模型,都应经过充分回测与样本外检验,并配合完善的风险管理。

三、量化回测与实证流程

回测是在历史数据上模拟策略执行并评估其表现的方法,目的是:

  • 理解策略在不同市况(牛市、熊市、震荡)下的盈亏特征;
  • 发现潜在缺陷与极端风险(如回撤集中期);
  • 为后续优化与实盘参数选择提供依据。

3.1 回测步骤(典型流程)

  • 定义交易规则
    明确买入、卖出与持仓的条件,可基于技术指标、因子阈值、事件触发等。
  • 获取历史数据
    获取目标资产(股票、期货、外汇等)的价格、成交量以及其他可观测的市场数据。
  • 模拟交易
    按时间顺序将规则应用于历史数据,记录虚拟的持仓、成交与盈亏。
  • 计算绩效指标
    常用指标包括年化收益率、最大回撤、夏普比率等,用于比较不同参数与策略版本的表现。
  • 优化与迭代
    根据结果调整参数或修改规则,但需警惕对历史样本的过拟合,应结合样本外测试与走步前测等方法进行稳健性检验。
  • 防止“未来函数”与数据泄漏
    在回测中必须确保:
    • 任一时点的决策只使用该时点及以前的信息;
    • 不在训练/调参阶段提前“偷看”后续数据;
    • 使用样本外(Out‑of‑Sample)或滚动前测(Walk‑Forward)等手段验证策略的泛化能力。

四、数据获取与工具

4.1 使用 yfinance 获取金融数据

示例:以 Microsoft(MSFT)为例,yfinance 可提供行情、财报、股东、期权、新闻等多维数据:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import yfinance as yf
msft = yf.Ticker("MSFT")
# 基本信息
msft.info
# 历史行情(示例:最近 1 个月)
hist = msft.history(period="1mo")
msft.history_metadata  # 历史数据元信息(先调用 history)
# 公司行为(分红、拆股、资本利得等)
msft.actions
msft.dividends
msft.splits
msft.capital_gains  # 对共同基金/ETF 更常用
# 股本信息
msft.get_shares_full(start="2022-01-01", end=None)
# 财务报表
msft.income_stmt           # 利润表
msft.quarterly_income_stmt # 季度利润表
msft.balance_sheet         # 资产负债表
msft.quarterly_balance_sheet
msft.cashflow              # 现金流量表
msft.quarterly_cashflow
# 更多用法可参考 Ticker.get_income_stmt() 等方法文档
# 股东结构
msft.major_holders
msft.institutional_holders
msft.mutualfund_holders
# 盈利发布日期(默认:未来 4 个季度 + 过去 8 个季度)
msft.earnings_dates
# 如需更多条目,可使用 limit 参数:msft.get_earnings_dates(limit=XX)
# 国际证券识别码(ISIN)
msft.isin
# 期权
msft.options                  # 可用到期日列表
opt = msft.option_chain('YYYY-MM-DD')
# opt.calls / opt.puts 分别为看涨与看跌链
# 新闻
msft.news

4.2 数据可视化要点

常用的图表类型:

  • 分类数据:分组柱状图、箱线图等,用于不同组别之间的比较。
  • 矩阵数据:热力图,适合展示相关矩阵或因子暴露矩阵。
  • 分面绘图:在多子图中按类别、时间或因子拆分展示,便于比较不同维度下的模式。

五、回测框架示例:Zipline

Zipline 是一个用于量化研究与算法交易回测的开源框架(由 Quantopian 开发),可与多种数据源集成。
安装:

1
pip install zipline

使用 Quandl(现 Nasdaq Data Link)作为数据源:

  • 注册并获取 API Key:https://data.nasdaq.com/account/profile
  • 设置环境变量并导入数据:
1
2
set QUANDL_API_KEY=your_key
zipline ingest -b quandl

基本策略脚本(示例:每个交易日固定买入 10 股 AAPL):

1
2
3
4
5
6
from zipline.api import order, record, symbol
def initialize(context):
    pass
def handle_data(context, data):
    order(symbol('AAPL'), 10)
    record(AAPL=data.current(symbol('AAPL'), 'price'))

执行回测:

1
zipline run -f my_strategy.py --start 2016-1-1 --end 2018-1-1 -o buyapple_out.pickle --no-benchmark

常用参数说明:

  • -f my_strategy.py:指定策略文件。
  • --start--end:设置回测区间。
  • -o buyapple_out.pickle:将回测结果(交易记录与绩效指标)序列化为 pickle 文件。
  • --no-benchmark:不使用基准指数进行比较。
    读取结果(使用 pickle):
1
2
3
4
import pickle
with open('./buyapple_out.pickle', 'rb') as f:
    result = pickle.load(f)
print(result)

六、K 线与折线图示例(Matplotlib / Pyecharts)

6.1 折线图示例:收盘价走势与收益率可视化

获取贵州茅台(600519.SS)的历史行情并绘图:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt
symbol = "600519.SS"
start = "2022-01-01"
end   = "2023-01-01"
data = yf.download(symbol, start=start, end=end)
print(data.describe())
# 收盘价走势
data['Close'].plot(figsize=(10, 6), label=symbol)
plt.title(f"{symbol} Stock Price")
plt.xlabel("Date")
plt.ylabel("Price")
plt.legend()
plt.show()

A 股代码在 yfinance 中的命名:

  • 上海证券交易所(SSE):后缀 .SS
  • 深圳证券交易所(SZSE):后缀 .SZ
    数据索引为 Date,常见字段包括 Open、High、Low、Close、Adj Close、Volume。

6.2 移动平均交叉策略示例

以 50 日与 200 日均线为例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import yfinance as yf
import matplotlib.pyplot as plt
symbol = "600519.SS"
start = "2023-05-01"
end   = "2023-12-01"
data = yf.download(symbol, start=start, end=end)
data['MA_50']  = data['Close'].rolling(window=50).mean()
data['MA_200'] = data['Close'].rolling(window=200).mean()
data['Signal'] = 0
data.loc[data['MA_50'] > data['MA_200'], 'Signal'] = 1   # 短期上穿长期:买入
data.loc[data['MA_50'] < data['MA_200'], 'Signal'] = -1  # 短期下穿长期:卖出
plt.figure(figsize=(10, 6))
plt.plot(data['Close'], label='Close Price')
plt.plot(data['MA_50'], label='50-day Moving Average')
plt.plot(data['MA_200'], label='200-day Moving Average')
# 买卖信号标记
plt.scatter(
    data[data['Signal'] == 1].index,
    data[data['Signal'] == 1]['MA_50'],
    marker='^', color='g', label='Buy Signal'
)
plt.scatter(
    data[data['Signal'] == -1].index,
    data[data['Signal'] == -1]['MA_50'],
    marker='v', color='r', label='Sell Signal'
)
plt.title("Maotai Stock Price with Moving Averages")
plt.xlabel("Date")
plt.ylabel("Price (CNY)")
plt.legend()
plt.show()

6.3 K 线图示例(Pyecharts)

安装:

1
pip install pyecharts

示例:贵州茅台 K 线图(三年区间):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import yfinance as yf
from pyecharts import options as opts
from pyecharts.charts import Kline
from datetime import datetime, timedelta
stock_code = "600519.SS"
end_date   = datetime.now().strftime('%Y-%m-%d')
start_date = (datetime.now() - timedelta(days=3 * 365)).strftime('%Y-%m-%d')
stock_data = yf.download(stock_code, start=start_date, end=end_date)
# 转换为 pyecharts 要求的 [open, close, low, high] 格式
kline_data = []
for index, row in stock_data.iterrows():
    kline_data.append([row['Open'], row['Close'], row['Low'], row['High']])
kline = (
    Kline()
    .add_xaxis(xaxis_data=stock_data.index.strftime('%Y-%m-%d').tolist())
    .add_yaxis(series_name="Kline", y_axis=kline_data)
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(is_scale=True),
        yaxis_opts=opts.AxisOpts(is_scale=True),
        title_opts=opts.TitleOpts(title="贵州茅台 Kline 图示例"),
        datazoom_opts=[
            opts.DataZoomOpts(pos_bottom="-2%", range_start=0, range_end=100, type_="inside"),
            opts.DataZoomOpts(pos_bottom="-2%", range_start=0, range_end=100, type_="slider"),
        ],
        toolbox_opts=opts.ToolboxOpts(
            feature={
                "dataZoom": {"yAxisIndex": "none"},
                "restore": {},
                "saveAsImage": {},
            }
        ),
    )
)
kline.render("maotai_kline_chart.html")

K 线图常用于展示开盘价、收盘价、最高价与最低价,帮助观察价格结构与波动特征。

6.4 简单收益回测示例

基于日度收益率与简单信号构造策略收益,并绘制累计收益曲线:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
data['Signal'] = 0
data['Daily_Return'] = data['Close'].pct_change()
# 信号示例:前一日涨幅为正则今日持仓
data.loc[data['Daily_Return'] > 0, 'Signal'] = 1
# 策略收益(昨日信号 × 今日收益率)
data['Strategy_Return'] = data['Signal'].shift(1) * data['Daily_Return']
data['Cumulative_Return'] = (1 + data['Strategy_Return']).cumprod()
plt.figure(figsize=(10, 6))
plt.plot(data['Cumulative_Return'], label='Strategy Cumulative Return', color='b')
plt.plot(data['Close'] / data['Close'].iloc[0], label='Stock Cumulative Return', color='g')
plt.title("Cumulative Return of Strategy vs. Stock")
plt.xlabel("Date")
plt.ylabel("Cumulative Return")
plt.legend()
plt.show()

常用方法:

  • pct_change():计算相邻期收益率;
  • cumprod():计算累计乘积,用于构造净值/累计收益曲线。

七、LongPort OpenAPI 简介

LongPort 提供程序化的行情与交易接口,可用于搭建行情监控、策略分析与自动化交易工具。结合量化模型与回测体系,可以实现从研究到实盘的闭环流程。


拓展与后续学习建议

  • 风险管理与组合优化
    深入学习均值-方差模型、风险平价、在险价值(VaR)与条件 VaR(CVaR)等,帮助构建更稳健的组合。
  • 回测与过拟合
    系统学习样本内/样本外划分、走步前测(Walk-forward)、交叉验证,以及过拟合检测方法,提升回测结论的可信度。
  • 因子投资与多因子模型
    探索常见因子(价值、规模、质量、动量、低波动等)与因子组合方法,以及行业与风格中性化处理。
  • 机器学习与深度学习在量化中的应用
    从监督学习(回归/分类)到强化学习(交易策略优化),再到自然语言处理(新闻与舆情分析),逐步构建更复杂的模型。
  • 实盘工程与基础设施
    研究订单路由、撮合机制、延迟优化(托管/共址)、数据质量清洗与异常检测,以及合规与风控体系建设。
  • 开源框架与社区
    除 Zipline 外,可关注 Backtrader、QuantLib、VectorBT 等开源项目;关注量化社区与论文,持续跟踪研究前沿。