深入解析使用 Python 语言获取量化策略所需的股票行情数据的方法
在量化交易中,数据是构建策略的核心。对于美股、港股和 A 股市场,获取高质量的 美股实时行情API、美股行情api、美股历史数据api、美股数据api 等实时数据以及历史数据对于实现量化策略至关重要。特别是对 美股行情数据 和 美股分钟数据 的实时获取,对于基于短周期数据的交易策略尤为关键。本文将以 Python 为例,介绍如何通过 API 获取港股、美股、A 股的实时行情和 K 线数据,帮助你更好地进行量化分析和策略回测。
一、量化策略中的数据需求
量化策略通常依赖于以下几类数据:
- 实时行情数据:包括当前价格、成交量、涨跌幅等,适合用于实时交易决策。
- 历史 K 线数据:通常包括开盘价、最高价、最低价、收盘价以及成交量,广泛用于回测。
- 分钟级数据:对高频交易策略和短周期分析尤为重要。
在开发量化策略时,稳定且高质量的数据源对策略的成功至关重要。特别是实时数据和历史数据的获取,不仅能够支持策略的开发,还能在回测和实盘过程中提供精确的市场反映。
二、数据源简介:QOS行情API
QOS 提供了一个 RESTful API,能够获取 美股、港股、A股 的实时行情和历史 K 线数据。该 API 支持简单的 HTTP 请求,返回 JSON 格式的数据,非常适合与 Python 等编程语言进行快速集成。
API 提供的主要功能包括:
- 获取实时行情数据,例如当前股价、成交量、涨跌幅等。
- 获取历史 K 线数据,支持多种时间周期(如分钟线、日线等)。
- 支持美股、港股、A 股等多市场数据源。
三、安装依赖
使用 Python 获取数据时,通常需要用到 requests
库进行 HTTP 请求。首先,你需要安装这个库:
pip install requests
四、获取实时行情数据
以下是一个简单的 Python 示例,用于获取美股 Apple(AAPL)的实时行情数据:
import requests
import json
# 官网:https://qos.hk
# 免费api key注册申请:https://qos.hk
url = "https://api.qos.hk/snapshot?key=your-api-key"
payload = json.dumps({
"codes": [
"US:AAPL"
]
})
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
返回的数据将包含美股 Apple(AAPL)的实时行情数据信息:
{
"msg": "OK",
"data": [
{
"c": "US:AAPL",
"lp": "188.38",
"yp": "203.19",
"o": "193.89",
"h": "199.88",
"l": "187.34",
"ts": 1743796800,
"v": "125910913",
"t": "24244725108",
"s": 0,
"pq": {
"o": "206.25",
"lp": "193.91",
"ts": 1743773400,
"v": "2043000",
"t": "396809716.8140000105",
"h": "206.25",
"l": "190.33",
"yp": "203.19"
},
"aq": {
"o": "188.38",
"lp": "186.6",
"ts": 1743811197,
"v": "2591309",
"t": "487865398.9240000248",
"h": "188.98",
"l": "186.44",
"yp": "188.38"
},
"nq": {
"o": "203.36",
"lp": "202.22",
"ts": 1743753600,
"v": "96308",
"t": "19504344",
"h": "203.75",
"l": "201.34",
"yp": "203.19"
},
"tt": 2
}
]
}
五、获取历史 K 线数据
K 线数据通常用于策略回测和技术分析,下面的代码示例展示了如何获取美股 Apple(AAPL)最近 100 条 5 分钟的 K 线数据:
import requests
import json
# 官网:https://qos.hk
# 免费api key注册申请:https://qos.hk
url = "https://api.qos.hk/kline?key=your-api-key"
payload = json.dumps({
"kline_reqs": [
{
"c": "US:AAPL",
"co": 100, # 获取最近 100 条数据
"kt": 5 # K线周期:"1"为1分钟线,"5"为5分钟线,"1001"为日线等
}
]
})
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
每条 K 线记录通常包括时间、开盘价、收盘价、最高价、最低价和成交量等信息。
六、如何处理多市场数据
它支持多个市场的数据查询,通过传入的codes参数的前三位指定:
市场代码 | 说明 | 交易时间 |
---|---|---|
US |
美股 | 美股正常交易时间(美东部时间,ET):开盘时间:上午 9:30收盘时间:下午 4:00盘前交易:开始时间:上午 4:00 结束时间:上午 9:30 盘后交易: 开始时间:下午 4:00 结束时间:下午 8:00 夜盘交易: 开始时间:下午 8:00 结束时间:第二日上午 3:50 以上时间为美国当地时间,如果换算为其它时间时需要注意令时转换 夏令时(通常从3月的第二个星期日到11月的第一个星期日) 冬令时(通常从11月的第一个星期日到3月的第二个星期日) 转换为UTC+8冬令开市是22点30分,夏令开市是21点30分。 |
HK |
港股 | UTC+8 上午交易时段:9:30 - 12:00 下午交易时段:13:00 - 16:00 |
SZ |
A股深圳 | UTC+8 上午交易时段:9:30 - 11:30 下午交易时段:13:00 - 15:00 |
SH |
A股上海 | UTC+8 上午交易时段:9:30 - 11:30 下午交易时段:13:00 - 15:00 |
例如,获取港股腾讯控股的实时行情:
params = {
"codes": [
"HK:00700"
]
}
如果你想获取沪市 A 股的实时行情(例如茅台),可以这样写:
params = {
"codes": [
"SH:600519"
]
}
七、如何使用这些数据进行量化分析
获取到的实时数据和 K 线数据,通常需要使用 pandas 进行分析与处理。以下是一个简单的例子,计算美股 AAPL的 5日均线:
import pandas as pd
# 假设 kline_data 已经获取并包含所需字段
df = pd.DataFrame(kline_data)
df.columns = ["timestamp", "open", "high", "low", "close", "volume"]
# 计算 5 日均线
df["ma_5"] = df["close"].rolling(5).mean()
print(df[["timestamp", "close", "ma_5"]].tail())
通过上面的代码,你可以得到 AAPL 最近几天的收盘价和 5 日均线,作为一个简单的技术指标。
八、量化分析中的常见应用场景
通过 QOS行情API 提供的数据,我们可以做以下分析和策略开发:
- 回测:使用历史 K 线数据进行策略回测,判断策略的有效性。
- 实时交易:通过实时行情数据监控市场波动,根据策略发出买卖信号。
- 因子分析:基于 K 线数据、成交量等多维度数据进行因子提取与分析。
- 高频策略:结合分钟级数据进行短周期的技术分析,如使用均线、RSI 等指标进行择时。
例如,下面是一个简单的例子,利用移动平均线交叉策略来生成买入卖出信号:
# 假设 df 已经包含收盘价
df['ma_10'] = df['close'].rolling(window=10).mean()
df['ma_50'] = df['close'].rolling(window=50).mean()
# 策略:短期均线上穿长期均线时买入,下穿时卖出
df['signal'] = 0
df['signal'][df['ma_10'] > df['ma_50']] = 1 # 买入信号
df['signal'][df['ma_10'] < df['ma_50']] = -1 # 卖出信号
print(df[['timestamp', 'close', 'ma_10', 'ma_50', 'signal']].tail())
九、小结
通过 Python 获取 美股实时行情API 和 美股历史数据api,我们能够为量化策略提供稳定的数据支持。QOS API 提供了简单易用的数据获取方式,不仅涵盖了实时行情数据,还能帮助量化分析师获取历史 K 线数据。无论是做 美股分钟数据 的短周期策略,还是基于 美股K线 的长期策略,都可以通过这些 API 来满足数据需求。