第2章:Python基础回顾——环境配置与语法速通
说实话,很多新手学量化交易,第一关就卡在环境配置上。
我见过太多人,代码写好了,结果跑不起来。原因很简单——Python环境没配好。今天咱们就把这事一次性搞定。
2.1 Anaconda:量化交易的瑞士军刀
Anaconda是什么?说白了,它是一个Python发行版,自带了一堆数据科学和量化常用的库。你不需要一个个去pip install,省心不少。
为什么我推荐Anaconda?
- 自带conda包管理器——比pip更稳,依赖冲突少
- 预装200+常用库——numpy、pandas、matplotlib全都有
- 环境隔离——不同项目用不同Python版本,互不干扰
安装要点:
下载时选对系统版本(Windows/Mac/Linux)。安装路径不要有中文,不要有空格。我个人习惯装到C盘根目录下的某个文件夹,比如 C:\anaconda3。
避坑指南:
我曾经在项目里因为路径带了中文,导致pandas读取csv文件时报编码错误。查了半天才发现是路径问题。嗯,从那以后我所有工具都装英文路径。
2.2 Jupyter Notebook:交互式编程利器
Jupyter Notebook是量化交易员的标配。为什么?因为它支持边写代码边看结果,还能加注释、画图表。你想想看,做策略回测时,每一步都能看到中间结果,调试起来多方便。
启动方式:
# 在终端或Anaconda Prompt中输入
jupyter notebook
启动后浏览器会自动打开一个页面。你可以在里面新建Python文件,写代码、跑结果。
常用快捷键:
| 快捷键 | 功能 |
|---|---|
| Shift + Enter | 运行当前单元格并跳到下一个 |
| Ctrl + Enter | 运行当前单元格但不跳转 |
| Esc + A | 在上方插入新单元格 |
| Esc + B | 在下方插入新单元格 |
| Esc + M | 切换为Markdown模式(写注释用) |
注意:Jupyter Notebook的单元格是有状态的。你运行过的变量会一直保留在内存里。如果改了前面的代码,记得重新运行一下相关单元格,否则结果可能不对。
2.3 Python基础语法速通
这部分我尽量精简。量化交易里常用的语法其实不多,咱们挑重点讲。
2.3.1 变量与数据类型
Python是动态类型语言。你不需要声明变量类型,直接赋值就行。
# 数值类型
price = 100.5 # 浮点数
volume = 5000 # 整数
is_bullish = True # 布尔值
# 字符串
symbol = "AAPL"
# 列表——存多个股票代码
stocks = ["AAPL", "GOOGL", "MSFT"]
# 字典——存股票信息
stock_info = {
"AAPL": {"price": 150, "volume": 10000},
"GOOGL": {"price": 2800, "volume": 5000}
}
我个人习惯:变量名用下划线命名法,比如 close_price、moving_average。这样代码可读性高,别人一看就懂。
2.3.2 循环——处理时间序列数据
量化交易里,循环用得最多的地方就是遍历历史数据。
# for循环——遍历股票列表
prices = [100, 102, 101, 105, 103]
for i, price in enumerate(prices):
print(f"第{i+1}天的收盘价: {price}")
# while循环——适合条件不确定的场景
day = 0
while day < len(prices):
print(f"处理第{day+1}天数据")
day += 1
经验之谈:处理大量数据时,尽量用向量化操作(比如pandas的apply),别用纯Python循环。我曾经用for循环处理10万条数据,跑了3分钟。换成向量化后,3秒搞定。差距就是这么大。
2.3.3 函数——封装交易逻辑
函数是代码复用的基础。写量化策略时,每个信号计算、风险控制都可以封装成函数。
def calculate_sma(prices, window=5):
"""计算简单移动平均线"""
if len(prices) < window:
return None
return sum(prices[-window:]) / window
def check_buy_signal(price, sma):
"""判断买入信号"""
if sma is None:
return False
return price > sma
# 使用示例
current_price = 105
sma_5 = calculate_sma([100, 102, 101, 105, 103])
if check_buy_signal(current_price, sma_5):
print("触发买入信号!")
注意:函数名要能说明功能。别用 func1、func2 这种名字。你过两周再看,绝对想不起来是干嘛的。
2.3.4 类——构建交易系统
类适合封装复杂的状态和行为。比如一个简单的交易策略类:
class MovingAverageStrategy:
def __init__(self, short_window=5, long_window=20):
self.short_window = short_window
self.long_window = long_window
self.position = 0 # 持仓状态
def generate_signal(self, prices):
"""生成交易信号"""
if len(prices) < self.long_window:
return "hold"
short_sma = sum(prices[-self.short_window:]) / self.short_window
long_sma = sum(prices[-self.long_window:]) / self.long_window
if short_sma > long_sma and self.position == 0:
self.position = 1
return "buy"
elif short_sma < long_sma and self.position == 1:
self.position = 0
return "sell"
else:
return "hold"
# 使用
strategy = MovingAverageStrategy(short_window=5, long_window=20)
signal = strategy.generate_signal([100, 102, 101, 105, 103, 106, 108])
print(f"信号: {signal}")
核心要点:
__init__是构造函数,初始化对象时自动调用self代表实例本身,所有方法都要带这个参数- 类的好处是能把数据和操作数据的方法打包在一起
2.4 本章知识体系
下面这张图帮你理清本章的知识结构:
这张图把本章内容分成三大块:环境配置、Jupyter使用、基础语法。三者缺一不可。环境是基础,Jupyter是工具,语法是核心。搞定了这些,后面写策略代码就顺手多了。
最后说一句:别急着把所有语法都背下来。量化交易里常用的就那么几个——列表、字典、循环、函数、类。先会用,再慢慢深入。我刚开始也是边写边查,慢慢就熟了。
公众号:蓝海资料掘金营,微信deep3321