第二章:开发环境搭建
说实话,搭建开发环境这事儿,看着简单,但坑是真不少。我见过太多人花了一整天装环境,结果还没开始写代码就心态崩了。今天咱们一步步来,把这事儿理顺。
2.1 Python虚拟环境配置
为什么要用虚拟环境?说白了,就是防止不同项目之间的包打架。你想想看,项目A需要pandas 1.0,项目B需要pandas 2.0,要是装在一个环境里,那不乱套了?
我个人习惯用 venv,Python 3.3以上自带,不用额外装东西。操作起来也很简单:
# 创建虚拟环境
python -m venv hk_quant_env
# 激活虚拟环境(Windows)
hk_quant_env\Scripts\activate
# 激活虚拟环境(Mac/Linux)
source hk_quant_env/bin/activate
# 退出虚拟环境
deactivate
.venv 文件夹,这样一眼就能看出来这是个虚拟环境。很多IDE(比如VS Code)也会自动识别。
激活后,你会看到终端前面多了个 (hk_quant_env) 的标识。嗯,看到这个就说明环境已经切过来了。
接下来装几个必备包:
pip install pandas numpy matplotlib
pip install yfinance # 雅虎财经数据源
pip install requests beautifulsoup4 # 爬取新浪财经用
pip install sqlalchemy pymysql # 数据库连接
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名
2.2 港股数据源API申请
做量化交易,数据就是命根子。港股数据源我主要用两个:Yahoo Finance 和 新浪财经。各有各的优缺点,我分别说说。
2.2.1 Yahoo Finance
Yahoo Finance 的好处是免费、数据全、接口稳定。港股代码格式是 XXXX.HK,比如腾讯是 0700.HK。
import yfinance as yf
# 获取腾讯控股的历史数据
ticker = yf.Ticker("0700.HK")
hist = ticker.history(period="1y") # 过去一年数据
print(hist.head())
这里有个坑——Yahoo Finance 有时候会返回空数据。我遇到过好几次,后来发现是因为网络问题。解决办法很简单:加个重试机制。
import time
from functools import wraps
def retry(func, max_retries=3, delay=2):
@wraps(func)
def wrapper(*args, **kwargs):
for i in range(max_retries):
try:
return func(*args, **kwargs)
except Exception as e:
print(f"第{i+1}次尝试失败: {e}")
time.sleep(delay)
raise Exception("重试次数用完了")
return wrapper
@retry
def get_stock_data(ticker_str):
ticker = yf.Ticker(ticker_str)
return ticker.history(period="1mo")
data = get_stock_data("0700.HK")
2.2.2 新浪财经
新浪财经的实时数据比Yahoo快,但历史数据没那么全。我一般用新浪拿实时行情,用Yahoo拿历史数据。
import requests
import json
def get_sina_realtime(symbol):
"""获取新浪财经实时行情"""
url = f"http://hq.sinajs.cn/list=hk{symbol}"
headers = {
"Referer": "https://finance.sina.com.cn",
"User-Agent": "Mozilla/5.0"
}
resp = requests.get(url, headers=headers)
# 返回格式:var hq_str_hk00700="腾讯控股,380.000,382.000,..."
return resp.text
# 获取腾讯实时行情
data = get_sina_realtime("00700")
print(data)
2.3 数据库安装与配置
数据存哪儿?小打小闹用CSV文件也行,但要做正经的量化系统,还是得上数据库。我个人推荐MySQL,社区活跃、文档多、坑少。
2.3.1 MySQL安装
Windows用户直接去官网下载安装包,一路下一步就行。Mac用户用Homebrew:
brew install mysql
brew services start mysql
安装完后,记得设置root密码:
mysql_secure_installation
2.3.2 创建数据库和表
-- 创建数据库
CREATE DATABASE hk_quant DEFAULT CHARACTER SET utf8mb4;
-- 创建股票日线数据表
CREATE TABLE daily_data (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(10) NOT NULL COMMENT '股票代码',
trade_date DATE NOT NULL COMMENT '交易日期',
open_price DECIMAL(10,3) COMMENT '开盘价',
high_price DECIMAL(10,3) COMMENT '最高价',
low_price DECIMAL(10,3) COMMENT '最低价',
close_price DECIMAL(10,3) COMMENT '收盘价',
volume BIGINT COMMENT '成交量',
amount DECIMAL(20,2) COMMENT '成交额',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_code_date (code, trade_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2.3.3 Python连接数据库
from sqlalchemy import create_engine
import pandas as pd
# 连接数据库
engine = create_engine(
"mysql+pymysql://root:你的密码@localhost:3306/hk_quant",
echo=False
)
# 将DataFrame写入数据库
df = get_stock_data("0700.HK")
df.to_sql(
name="daily_data",
con=engine,
if_exists="append",
index=True
)
# 从数据库读取数据
query = "SELECT * FROM daily_data WHERE code = '0700.HK'"
result = pd.read_sql(query, con=engine)
print(result.head())
2.4 本章知识体系
下面这张图把整个开发环境的结构梳理了一下,你看一眼就能明白各个组件之间的关系:
这张图把咱们今天搭建的三个部分串起来了。Python环境是核心,数据源和数据库是两翼。数据从API来,经过清洗,存到数据库,最后供策略调用。
- 虚拟环境用
venv,简单可靠 - Yahoo Finance 拿历史数据,新浪财经拿实时数据
- 数据库用MySQL,注意字段类型选DECIMAL
- 所有代码都加上异常处理和重试机制
环境搭好了,后面写策略、做回测就顺手多了。记住,磨刀不误砍柴工,环境这块儿花点时间,后面能省不少事。
公众号:蓝海资料掘金营,微信deep3321