一、Python 是什么?为什么量化交易都在用它?
Python 是一种解释型、高级、通用编程语言,强调代码可读性和简洁性。在金融领域,它已经成为量化交易、数据分析、回测的主流语言,主要原因是:
- 语法简单:接近自然语言,新手容易上手。
- 生态丰富:有大量金融、数据处理、机器学习的第三方库(pandas、numpy、scikit-learn、akshare 等)。
- 社区庞大:遇到问题几乎都能找到现成解决方案。
- 与券商/交易系统对接方便:很多量化平台(PTrade、掘金、QMT)都提供 Python API。
简单说:用 Python,你可以用很少的代码完成从数据获取、策略计算到下单的全流程。
二、量化中常用的几个 Python 库(你的代码用到的)
你之前看到的代码里,主要用了这几个库,它们是量化分析的四根柱子:
| 库名 | 作用 | 类比 |
|---|
| akshare | 获取A股实时/历史行情数据(分钟线、日线等) | 免费数据源,类似 Wind 但免费 |
| pandas | 数据处理、时间序列分析 | Excel 的超级升级版 |
| numpy | 数值计算(数组、数学函数) | 计算器的增强版 |
| matplotlib | 数据可视化(画图) | 画分时图、K线图 |
三、拆解你的“日内低点买入”代码(Python 工作流)
我把之前那套代码拆成 5 个步骤,每一步就是 Python 解决一个问题的典型方式:
1️⃣ 获取数据(akshare)
df = ak.stock_zh_a_minute(symbol="sz000001", period="1", adjust="qfq")
- 这行代码调用一个函数,从互联网拉取平安银行的 1 分钟 K 线数据。
ak.stock_zh_a_minute是 akshare 库里写好的功能,你只负责传参数(股票代码、周期、复权方式)。- 返回的数据自动变成一个DataFrame(pandas 的核心数据结构,就像一张表格)。
2️⃣ 清洗与计算指标(pandas + numpy)
df['ma_20'] = df['close'].rolling(window=20).mean()
df['macd_dif'] = exp12 - exp26
df['close']表示取表格中“收盘价”这一列。.rolling(window=20).mean()计算20 期移动平均线——这在 Excel 里需要写公式拖拽,Python 一行搞定。exp12 - exp26使用 numpy 的数组运算,无需写循环就能批量计算所有行的 MACD。
3️⃣ 逻辑判断(条件筛选)
if abs(cur['close'] - cur['ma_20']) / cur['ma_20'] < 0.005:
if prev['vol_ratio'] < 0.6:
if cur['vol_ratio'] > 1.5 and cur['close'] > cur['open']:
signals.append(...)
- 这是 Python 最基础的
if条件判断,逐行检查每根 K 线是否满足“缩量回踩均线 + 放量反弹”的条件。 abs()求绝对值,< 0.005代表价格在均线上下 0.5% 以内。- 整个逻辑翻译成中文:如果价格靠近均线,且之前缩量,且当前放量收阳,就认为出现信号。
4️⃣ 输出结果(print 与可视化)
print(f" ⏰ {s['time']} 价格: {s['price']:.2f} 类型: {s['type']}")
print是 Python 最直接输出方式。f"..."是格式化字符串,把变量插入到文本中。
ax1.plot(df.index, df['close'], label='收盘价')
ax1.scatter(sig['time'], sig['price'], color='red', marker='^')
matplotlib把数据画成折线图(plot)和散点图(scatter)。- 通过
ax1、ax2、ax3把一个窗口分成三个子图(价格、成交量、MACD)。
5️⃣ 主函数与模块化(ifname)
if __name__ == "__main__":
symbol = "sz000001"
...
plot_signals(df, signals)
- 这是 Python 的规范写法:只有直接运行这个文件时,才会执行这里的代码。如果别人把你这文件当模块导入,这段不会自动跑。
- 保证代码既可被复用,也能独立运行。
四、如果你是完全的 Python 新手,可以这样理解
可以把你之前看到的代码想象成一个自动化交易员的工作台:
| 步骤 | 传统手工 | Python 自动化 |
|---|
| 看行情 | 打开同花顺,翻找股票 | ak.stock_zh_a_minute()一秒拉几千只股票 |
| 算均线 | 鼠标拉公式,复制粘贴 | .rolling(window=20).mean()一行搞定 |
| 找符合条件的K线 | 肉眼扫描,拿本子记 | 循环+条件判断,瞬间筛选 |
| 画图 | 截图、手画 | plt.plot()自动生成分时图 |
| 执行交易 | 手动输入价格、数量 | 对接券商 API,自动下单 |
最关键的区别:手工只能盯三五只股票,Python 可以同时扫描全市场,而且严格执行规则,不受情绪影响。
五、学习路线建议(只需三步)
如果你希望用好 Python 做量化,不需要成为程序员,掌握以下三点就够了:
基础语法(1 周)
- 变量、列表、字典、循环、条件判断、函数定义。
- 网上搜“Python 30分钟速成”即可。
pandas 数据处理(1 周)
- 重点学:读取数据、选取列、条件筛选、时间序列操作。
- 推荐:pandas 官方 10 分钟入门。
实战写一个小策略(反复练习)
- 就从这个“日内低点买入”代码开始。
- 尝试修改参数(窗口长度、量比阈值),看看结果有什么变化。
- 增加止损、止盈条件。
六、一个最简单的 Python 量化示例(体会一下)
如果你完全没写过代码,下面这个例子可以帮你初步感受 Python 的“一句顶十行”:
# 计算某只股票过去20天收盘价的简单移动平均
import akshare as ak
# 获取日线数据(最近20个交易日)
df = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20250101", end_date="20250115")
# 计算20日均线
df['MA20'] = df['收盘'].rolling(window=20).mean()
# 找出收盘价在均线之上的日期(强势股)
strong_days = df[df['收盘'] > df['MA20']]
print(f"过去20个交易日中,有 {len(strong_days)} 天收盘价站上20日均线")
这段代码:获取数据 → 计算均线 → 筛选 → 输出统计结果。总行数不到 10,包含完整的数据处理流程。
七、总结
Python 对于你目前的需求(寻找量价共振、日内低点买入)来说,是“把想法变成可验证、可重复执行的程序”的工具。你不需要去学 Python 所有的语法,只需要掌握你代码里用到的那些功能(数据获取、pandas 计算、条件判断、画图),就能开始回测和改进自己的策略。
如果有具体哪一段代码不理解(比如rolling怎么用、expanding是什么),可以继续问我,我会更细化地解释。(AI生成)