Quantitative Trading
· 阅读需 20 分钟
很多新手听到“量化”“编程”就望而却步,其实量化交易的核心很简单:用计算机程序替代人工,把交易逻辑(比如“什么时候买、什么时候卖”)写成可执行的规则,让电脑自动完成交易,本质是“纪律化交易”,核心目的是克服人性的贪婪、恐惧,实现高效、稳定的收益。 一句话区分:传统人工交易靠“看盘、凭感觉”,量化交易靠“数据、靠代码”。
本教程核心定位:零基础友好,不堆砌复杂理论,全程围绕“能学会、能落地”展开,从“不懂量化”到“能独立搭建策略、小额实盘”,再到“精通优化”,一步一步带你走,无需金融、编程专业背景。
适用人群:零基础新手、有股票/基金交易经验想提升效率者、对编程+数据感兴趣的学习者;学习周期:每天1-2小时,3个月入门,6-12个月精通。
第一部分:入门认知(打地基,避坑第一步)
1.1 量化交易核心术语(必懂,不然后续看不懂) 新手不用死记硬背,理解含义即可,后续用到会反复强化:
- 标的:交易的对象,新手优先选A股股票、ETF(流动性好、风险可控),后期可尝试期货、数字货币(风险较高);
- 策略:量化的“灵魂”,就是一套可量化、可重复的交易规则(比如“5日均线金叉买入,死叉卖出”);
- 回测:用历史数据测试策略效果(比如用过去5年的股票数据,看策略能赚多少、亏多少),是策略落地前的必经步骤;
- 模拟盘:用虚拟资金实盘演练,和真实交易流程一致,无资金风险,用于验证策略;
- 实盘:用真实资金交易,会面临滑点、手续费等真实问题;
- 滑点:实际成交价格与预期价格的偏差(比如计划10元买,实际10.02元成交),实盘必须考虑;
- 夏普比率:衡量“风险调整后收益”,数值越高越好(新手目标≥1.5),低于1说明风险过高;
- 最大回撤:策略一段时间内的最大亏损幅度(新手目标≤15%),回撤越小,策略越稳健;
- 过拟合:新手最容易踩的坑——为了贴合历史数据,设置过多特殊参数,导致策略在历史中盈利,实盘却亏损。 1.2 量化交易的优势与误区(新手必看) 1.2.1 核心优势(为什么要做量化)
- 纪律性:严格执行预设规则,不被情绪左右(不会追高、不会割肉割在最低点);
- 高效性:电脑能同时分析上千只股票,人工几小时的工作量,程序几分钟搞定;
- 可复制性:策略验证有效后,可重复使用,无需每次重新分析;
- 风险可控:通过程序预设止损、止盈,快速控制亏损,避免亏得更多。 1.2.2 新手常见误区(避开这些,少走1年弯路)
- 误区1:量化=稳赚不亏—— 量化只是“降低风险、提升效率”,不是保本,极端行情(如股灾)也会亏损;
- 误区2:不用懂编程,靠工具就能做好—— 工具只是辅助,不懂编程无法优化策略、解决实盘问题,新手必须掌握基础Python;
- 误区3:回测盈利,实盘就一定盈利—— 回测是“理想情况”,实盘有滑点、手续费、市场风格变化,回测盈利≠实盘盈利;
- 误区4:追求复杂策略—— 新手优先从简单策略入手(如均线策略),复杂策略易出错、难优化;
- 误区5:投入大量资金试错—— 新手先从小额实盘(1-5万)开始,验证策略后再逐步加仓。 1.3 量化交易完整流程(记住这个,后续学习不迷路) 所有量化交易都围绕这个流程展开,新手按步骤来,不会乱:
- 明确需求:确定交易标的(如股票)、周期(如日线)、风险偏好(如稳健型);
- 工具准备:学会Python、数据获取、回测工具的基础用法;
- 搭建策略:设计可量化的交易规则(买入、卖出、止损、止盈);
- 回测验证:用历史数据测试策略,优化参数,确保策略有效;
- 模拟盘测试:用虚拟资金演练,熟悉流程,解决回测未考虑的问题;
- 小额实盘:用少量真实资金运行,监控策略表现;
- 策略优化:根据实盘数据,调整规则、完善逻辑,持续提升收益。
第二部分:基础工具(手把手搭建,新手也能搞定)
量化交易的核心工具:Python(编程)+ 数据获取 + 回测平台,不用追求复杂工具,掌握这3个,就能满足从入门到进阶的需求,全程免费。 2.1 编程基础:Python入门(量化必备,极简版) 量化最常用的编程语言是Python,简单易懂、生态完善,新手不用精通,掌握“基础语法+数据处理”即可,不用学完所有Python内容,只学有用的。 2.1.1 环境搭建(3步搞定,全程免费)
- 安装Python:去官网(https://www.python.org/)下载,选择3.8-3.10版本(兼容性最好),安装时勾选“Add Python to PATH”(方便后续调用);
- 安装IDE(编程工具):新手推荐“PyCharm Community Edition”(免费),下载后安装,打开即可创建Python项目;
- 安装必备库:打开PyCharm的“Terminal”(终端),输入以下命令,一键安装所有需要的库(复制粘贴即可):
pip install pandas numpy tushare matplotlib scipy backtrader
2.1.2 新手必备Python语法(只学3点,够用)
- 数据类型:重点掌握DataFrame(pandas的核心,用于存储股票表格数据,如开盘价、收盘价);
- 基础操作:for循环(遍历多只股票)、if-else(实现策略逻辑,如“如果金叉,就买入”);
- 数据处理:用pandas读取、筛选、计算数据(如计算5日均线)。 极简示例(感受一下,后续会详细讲):用pandas计算股票5日均线
import pandas as pd
# 读取股票数据(后续讲如何获取)
df = pd.read_csv("stock_data.csv")
# 计算5日均线(close是收盘价)
df["MA5"] = df["close"].rolling(window=5).mean()
# 打印结果
print(df[["date", "close", "MA5"]].head())
2.2 数据获取:免费、稳定的数据源(新手首选)
没有数据,就无法回测和策略搭建,新手优先用免费数据源,无需付费,满足基础需求。
2.2.1 首选:Tushare(国内股票数据,免费版足够)
1. 注册账号:去Tushare官网(https://tushare.pro/)注册,完成实名认证(免费版需要);
2. 获取token:登录后,在“个人中心→接口token”复制自己的token(用于调用数据);
3. 调用数据(完整代码,复制可运行):获取贵州茅台(600519.SH)2020-2024年日线数据
import tushare as ts
# 替换成自己的token
ts.set_token("你的token")
pro = ts.pro_api()
# 获取贵州茅台日线数据(2020-2024)
df = pro.daily(ts_code="600519.SH", start_date="20200101", end_date="20241231")
# 按日期升序排列(方便后续分析)
df = df.sort_values("trade_date")
# 保存数据(方便后续复用)
df.to_csv("600519_daily.csv", index=False)
# 打印前5行数据
print(df.head())
2.2.2 备用数据源(免费,无需实名认证)
- baostock:免费获取A股、港股、美股数据,无需实名认证,适合快速获取数据;
- 聚宽(JoinQuant):网页版平台,内置数据和回测工具,无需本地搭建环境,适合新手快速上手。 2.3 回测工具:Backtrader(开源、易用,新手首选) 回测工具的作用:用历史数据模拟交易,自动计算收益率、夏普比率、最大回撤等指标,不用手动计算,验证策略是否有效。 核心优势:免费开源、支持多种标的、语法简单,新手容易上手,后续策略搭建全程用它。 极简示例:后续第三部分会用它搭建完整策略,这里先记住——Backtrader能帮我们快速验证策略,不用自己写复杂的计算逻辑。 第三部分:核心策略(从简单到复杂,落地为王) 策略是量化的灵魂,新手遵循“从简单到复杂”的原则,先掌握“单因子策略”(如均线策略),再进阶“多因子策略”,避免一开始陷入复杂逻辑。 3.1 新手入门:最易上手的策略——均线交叉策略(日线级) 均线交叉策略是量化入门的“敲门砖”,逻辑简单、易实现、风险可控,适合新手第一次搭建策略,学会这个,就掌握了策略搭建的核心逻辑。 3.1.1 策略逻辑(明确、可量化,无模糊表述)
- 标的:A股股票(如贵州茅台、招商银行);
- 周期:日线数据(每天1个数据点,波动平缓,适合新手);
- 均线设置:5日均线(短期趋势)、20日均线(长期趋势);
- 买入信号:5日均线向上穿过20日均线(金叉),买入股票,仓位100%(新手简化操作);
- 卖出信号:5日均线向下穿过20日均线(死叉),卖出全部股票,空仓;
- 止损止盈:暂时不额外设置(先掌握核心逻辑,后续再添加)。 3.1.2 完整回测代码(复制可运行,带注释) 将以下代码复制到PyCharm,替换自己的Tushare token,即可运行,查看策略效果(注释详细,新手能看懂每一步):
import backtrader as bt
import tushare as ts
import pandas as pd
# 1. 定义均线交叉策略
class MaCrossStrategy(bt.Strategy):
# 策略参数(均线周期,可后续优化)
params = (
('ma_short', 5), # 短期均线:5日
('ma_long', 20), # 长期均线:20日
)
def __init__(self):
# 初始化两条均线指标
self.ma_short = bt.indicators.SimpleMovingAverage(
self.data.close, period=self.params.ma_short
)
self.ma_long = bt.indicators.SimpleMovingAverage(
self.data.close, period=self.params.ma_long
)
# 计算交叉信号(金叉:短期穿长期,死叉:长期穿短期)
self.crossover = bt.indicators.CrossOver(self.ma_short, self.ma_long)
def next(self):
# 没有持仓,且出现金叉 → 买入
if not self.position and self.crossover > 0:
self.buy(size=100) # 买入100股(新手固定仓位,简化操作)
# 有持仓,且出现死叉 → 卖出
elif self.position and self.crossover < 0:
self.sell(size=100) # 卖出100股
# 2. 获取股票数据(Tushare)
ts.set_token("你的token") # 替换成自己的token
pro = ts.pro_api()
# 获取贵州茅台(600519.SH)2020-2024年日线数据
df = pro.daily(ts_code="600519.SH", start_date="20200101", end_date="20241231")
# 调整数据格式(适配Backtrader)
df = df.sort_values("trade_date") # 按日期升序
df.rename(columns={ # 重命名列名,符合Backtrader要求
"trade_date": "date",
"open": "open",
"high": "high",
"low": "low",
"close": "close",
"vol": "volume"
}, inplace=True)
df["date"] = pd.to_datetime(df["date"]) # 转换日期格式
df.set_index("date", inplace=True) # 设日期为索引
# 3. 运行回测
cerebro = bt.Cerebro() # 初始化回测引擎
cerebro.addstrategy(MaCrossStrategy) # 添加策略
# 添加数据到回测引擎
data = bt.feeds.PandasData(dataname=df)
cerebro.adddata(data)
# 设置初始资金(10万元)
cerebro.broker.setcash(100000.0)
# 设置手续费(A股:万1.5佣金,千1印花税,卖出时收取)
cerebro.broker.setcommission(commission=0.00015, stamp_duty=0.001)
# 设置滑点(0.1%,模拟真实交易偏差)
cerebro.broker.set_slippage_perc(perc=0.001)
# 打印初始资金
print(f"初始资金: {cerebro.broker.getvalue():.2f}元")
# 运行回测
cerebro.run()
# 打印最终资金
print(f"最终资金: {cerebro.broker.getvalue():.2f}元")
# 绘制回测图表(直观查看策略表现,如收益率、交易点)
cerebro.plot()
```
3.1.3 回测结果分析(新手重点看这4个指标)
运行代码后,会得到“最终资金”“回测图表”和关键指标,新手不用纠结复杂数据,重点关注这4点:
- 总收益率:(最终资金-初始资金)/初始资金,比如10万变15万,收益率50%;
- 夏普比率:≥1.5合格,低于1说明策略风险太高,收益不值得;
- 最大回撤:≤15%合格,回撤越大,策略越不稳定;
- 交易次数:日线级策略,每年20-50次为宜,过多会增加手续费成本。
优化方向:如果收益率低、回撤大,可调整均线周期(如5日改10日、20日改60日),或更换标的。
3.2 进阶:单因子升级——市盈率+趋势跟踪策略
均线策略只关注“价格趋势”,进阶一步,加入“价值因子”——市盈率(PE),筛选低估值股票,兼顾“价值+趋势”,策略更稳健,避免买入高泡沫股票。
3.2.1 策略逻辑
1. 选股条件:市盈率(PE-TTM)低于行业平均,且低于自身近3年平均PE(低估值);
2. 买入信号:满足选股条件 + 5日均线金叉20日均线(趋势向上);
3. 卖出信号:市盈率高于行业平均(估值过高),或5日均线死叉20日均线(趋势向下);
4. 止损:亏损达到5%,自动卖出(控制单个标的风险)。
核心优化:加入估值筛选,降低回撤;保留趋势跟踪,避免在下跌趋势中持有,比单纯均线策略更靠谱。
3.3 高阶:多因子策略(多维度筛选,提升收益)
当你熟练掌握单因子策略后,可进阶多因子策略——结合多个因子(如市盈率、市净率、成交量、ROE),从多个维度筛选标的,进一步提升收益稳定性。
核心逻辑:给每个因子设定“打分标准”(如PE越低得分越高,ROE越高得分越高),对所有股票打分,筛选得分前20的股票,再结合趋势信号交易。
注意:多因子策略复杂度高,需要更多财务数据和参数优化,新手建议先熟练单因子,再逐步尝试。
## 第四部分:实战落地(从模拟盘到实盘,关键一步)
回测盈利≠实盘盈利,实战是检验策略的唯一标准,新手必须经历“模拟盘→小额实盘→正常实盘”的过程,避免一开始投入大量资金。
4.1 模拟盘测试(必做,新手第一步)
模拟盘是“虚拟资金”交易,和实盘流程完全一致,无资金风险,核心目的:熟悉流程、验证策略、解决回测未考虑的问题(如停牌、滑点)。
4.1.1 模拟盘平台推荐(新手首选)
- 聚宽(JoinQuant):网页版,内置模拟盘,支持自定义策略,无需本地搭建环境,操作简单;
- 同花顺模拟盘:手机APP,适合快速熟悉交易流程,直观查看持仓和盈亏;
- 本地模拟:用Backtrader结合实时数据,模拟实盘交易。
4.1.2 模拟盘测试要点(至少1个月)
1. 测试周期:至少1个月,覆盖上涨、下跌、震荡3种行情,验证策略在不同行情下的表现;
2. 重点关注:策略执行力(是否严格按信号交易)、滑点/手续费对收益的影响、停牌股票的处理;
3. 优化调整:如果模拟盘收益率大幅低于回测,或回撤过大,调整策略参数(如均线周期、止损比例)。
4.2 小额实盘(新手进阶,控制风险)
模拟盘测试通过后(如1个月收益率≥5%,最大回撤≤10%),可开始小额实盘,建议投入资金≤总资金的10%(如总资金10万,实盘投入1万),重点是“验证策略可行性”,不是追求高收益。
4.2.1 实盘平台对接(Python+券商API)
新手首选“同花顺iFinD开放平台”“东方财富API”,或券商自带API(如华泰、中信),对接流程3步:
1. 注册开发者账号:在券商或开放平台注册,申请API权限;
2. 获取API密钥:获取appkey、secret,用于Python调用;
3. 修改策略代码:将回测策略改成“实时交易逻辑”(如每隔1分钟获取一次实时数据,判断是否触发信号)。
注意:实盘前,务必核对API参数,避免代码错误导致误操作(如多买、多卖)。
4.2.2 实盘注意事项(新手必守)
- 仓位控制:单只股票仓位≤50%,总仓位≤80%,避免满仓;
- 实时监控:每天查看策略表现,及时处理异常(如API连接失败、股票停牌);
- 记录日志:记录每次交易的时间、价格、盈亏,用于后续优化;
- 心态放平:实盘难免亏损,不要因单次亏损否定策略,重点看长期表现(3-6个月)。
4.3 实盘优化(持续迭代,越做越好)
实盘不是终点,而是策略优化的开始,根据实盘数据,重点优化3点:
1. 参数优化:调整均线周期、止损比例、选股条件,适应市场风格变化;
2. 风险控制:添加更精细的规则(如单日最大亏损限制、仓位限制);
3. 因子更新:根据市场变化,新增/删除因子(如震荡行情,增加成交量因子)。
## 第五部分:风险控制(量化的生命线,重中之重)
量化交易的核心不是“赚多少钱”,而是“保住本金、控制风险”——即使策略收益率不高,只要能控制回撤,长期坚持就能获得稳定收益,新手最容易忽略这一点,导致实盘亏损。
5.1 新手必防的4类风险
- 市场风险:股灾、行业利空,导致所有股票下跌(可通过分散标的、控制仓位缓解);
- 策略风险:过拟合(回测盈利,实盘亏损),解决方法:减少参数、模拟盘充分测试;
- 操作风险:代码错误、API故障、误操作,解决方法:实盘前反复测试代码;
- 流动性风险:买入成交量过小的股票,无法卖出,导致亏损扩大(新手避开小盘股)。
5.2 新手必守的6条风控规则(强制执行)
1. 仓位控制:总仓位≤80%,单只股票仓位≤50%,绝不满仓;
2. 止损规则:单笔交易最大亏损≤5%,触发止损立即卖出,不犹豫;
3. 止盈规则:单笔盈利≥10%,卖出50%仓位,剩余仓位设“移动止损”(如盈利回吐到5%,立即卖出);
4. 分散投资:同时持有3-5只标的,避开单一股票、单一行业;
5. 避免过拟合:回测时,不设置过多特殊参数,优先用通用参数(如5、10、20日均线);
6. 定期复盘:每周、每月复盘,分析亏损原因,优化策略。
## 第六部分:进阶精通(从合格到专业)
当你能独立完成“策略搭建→回测→模拟盘→小额实盘”,并能持续优化策略时,就已经入门了。要达到“精通”,还需要从4个方面提升。
6.1 编程能力提升(量化的核心工具)
- 深入Python:掌握pandas、numpy高级用法,学习Matplotlib绘制专业分析图表;
- 机器学习:学习线性回归、决策树、LSTM等算法,用于预测股票价格、挖掘优质因子;
- 并发编程:用多线程、多进程,提高数据获取和交易执行效率(如同时分析上千只股票)。
6.2 策略体系完善(从单一到多元)
- 拓展策略类型:学习套利策略(如沪深300ETF套利)、对冲策略(股票+期货对冲)、高频交易(分钟线/秒线级,后期尝试);
- 搭建策略组合:将不同类型策略组合(如趋势+套利),降低单一策略风险;
- 结合宏观经济:关注GDP、CPI、利率等,调整策略(如经济下行时,降低仓位)。
6.3 数据深度挖掘(核心竞争力)
- 拓展数据源:获取分钟线、秒线数据(高频策略)、财务数据(价值因子)、舆情数据(情绪因子);
- 数据预处理:学习处理缺失数据、异常数据,提高数据质量;
- 因子挖掘:自己挖掘新的有效因子(如换手率因子、成交量变化率因子),打造专属策略。
6.4 实战经验积累(精通的关键)
- 长期实盘:坚持1年以上实盘,积累不同行情下的经验;
- 复盘总结:每次亏损后,分析原因(策略、市场、操作),形成复盘报告;
- 交流学习:加入量化社群,和同行交流,避免闭门造车。
## 第七部分:新手常见问题+避坑指南
7.1 新手高频问题解答
- Q:零基础,多久能学会?—— 每天1-2小时,1-2个月掌握基础工具和简单策略,3-6个月实现小额实盘;
- Q:不懂编程,能做量化吗?—— 很难,编程是核心工具,新手可从极简Python入手,不用精通,但必须会基础操作;
- Q:回测盈利,实盘为什么亏?—— 核心原因:过拟合、滑点/手续费、市场风格变化,解决方法:模拟盘充分测试、及时优化;
- Q:需要投入很多资金吗?—— 不需要,新手1-5万小额实盘即可,重点是验证策略;
- Q:适合新手的标的有哪些?—— 优先A股股票、ETF,流动性好、风险可控,后期可尝试期货。
7.2 新手必避的5个坑
1. 坑1:盲目追求高收益率—— 回测收益率90%以上,大概率是过拟合,实盘必亏;
2. 坑2:跳过模拟盘,直接实盘—— 模拟盘是必经之路,跳过会因操作失误或策略问题亏损;
3. 坑3:过度优化参数—— 为贴合历史数据修改多个参数,导致策略无法适应新行情;
4. 坑4:集中持仓—— 把所有资金投一只股票,一旦下跌,亏损惨重;
5. 坑5:不复盘—— 实盘后不复盘,无法发现问题,难以提升,最终被市场淘汰。
## 第八部分:总结+3个月学习计划(直接落地)
8.1 核心总结
量化交易的本质是“用数据和代码实现纪律性交易”,新手入门的关键是“先打基础、再练策略、后做实战”,不急于求成,重点是“控制风险、持续优化”。
记住:量化不是“稳赚不亏”,而是“在控制风险的前提下,实现长期稳定收益”,即使顶尖策略也会亏损,关键是长期坚持、不断迭代。
8.2 新手3个月学习计划(可直接照做)
第1个月:打基础(工具+认知)
1. 第1-2周:学习Python基础(语法、pandas数据处理),搭建量化环境;
2. 第3-4周:学习Tushare数据获取,掌握Backtrader基础用法,理解量化流程。
第2个月:练策略(搭建+回测)
1. 第1-2周:搭建均线交叉策略,完成回测,分析结果,优化参数;
2. 第3-4周:搭建市盈率+趋势策略,对比两个策略表现,掌握优化方法。
第3个月:做实战(模拟盘+小额实盘)
1. 第1-2周:在聚宽/同花顺模拟盘运行策略,熟悉流程,优化策略;
2. 第3-4周:小额实盘(1-5万),监控表现,做好复盘,调整策略。
附录:常用工具与学习资源(新手必备)
1. 编程工具
- IDE:PyCharm(免费版)、VS Code;
- 数据处理:pandas、numpy;
- 回测框架:Backtrader、vn.py;
- 可视化:Matplotlib、Seaborn。
2. 数据源
- 免费:Tushare、baostock、聚宽(网页版);
- 付费:Wind、Choice(进阶后使用)。
