开发者
外部 API 与接口文档
为你的自有系统签发密钥、订阅事件推送,并按标准化接口读取本系统的衍生分析与交易信号。系统不直接执行交易。
API 客户端
接入概览
演示数据
数据许可边界
Webhook 订阅
调用日志
接口文档
认证与签名
signing string
METHOD\nPATH_WITH_QUERY\nX-PM-Timestamp\nX-PM-Nonce\nSHA256_HEX(body)python
import hashlib
import hmac
import os
import time
import uuid
import requests
BASE_URL = "https://api.phoenix-mountain.example"
# 凭证一律从环境变量读取,严禁写进代码或提交进仓库
API_KEY = os.environ["PM_API_KEY"] # 密钥前缀,形如 pmk_live_7f3a2c
API_SECRET = os.environ["PM_API_SECRET"] # 创建密钥时一次性返回的明文 Secret
def signed_headers(method: str, path_with_query: str, body: bytes = b"") -> dict:
timestamp = str(int(time.time()))
nonce = uuid.uuid4().hex # 32 位随机串,5 分钟内不可重复
body_hash = hashlib.sha256(body).hexdigest()
payload = "\n".join([method.upper(), path_with_query, timestamp, nonce, body_hash])
signature = hmac.new(API_SECRET.encode(), payload.encode(), hashlib.sha256).hexdigest()
return {
"X-PM-Key": API_KEY,
"X-PM-Timestamp": timestamp,
"X-PM-Nonce": nonce,
"X-PM-Signature": signature,
"Content-Type": "application/json",
}
path = "/v1/signals?market=HK&status=ACTIVE"
resp = requests.get(BASE_URL + path, headers=signed_headers("GET", path), timeout=10)
if resp.status_code == 429:
raise RuntimeError("触发限流,请按 Retry-After 指数退避后重试")
resp.raise_for_status()
# 过期信号必须视为无效,不得继续按有效信号处理
now = time.time()
usable = [
s for s in resp.json()["items"]
if s["status"] == "ACTIVE" and time.mktime(time.strptime(s["expiresAt"][:19], "%Y-%m-%dT%H:%M:%S")) > now
]标准化交易信号
| 字段 | 类型 | 说明 |
|---|---|---|
| signalId | string | 信号唯一 ID,用于去重与回溯 |
| market / symbol | 'HK' | 'US' / string | 市场与标的代码,首期只覆盖普通股票与 ETF |
| action | 'WATCH' | 'BUY' | 'ADD' | 'HOLD' | 'REDUCE' | 'EXIT' | 标准化动作,不含下单指令 |
| strategyType | string | 对应的策略周期类型(波段、中线、高股息等) |
| targetWeight | number | 建议目标仓位权重(0–1),最终仓位由调用方风控决定 |
| entryZone / addZone / reduceZone | { min, max } | null | 建仓、加仓与减仓的价格区间 |
| stopLevels / takeProfitLevels | number[] | 分档止损位与分档止盈位 |
| confidence | number (0–1) | 模型判断的把握程度,不是结果确定性 |
| riskLevel | 'LOW' | 'MEDIUM' | 'HIGH' | 风险等级 |
| validFrom | ISO 8601 | 信号生效时间关键约束 |
| expiresAt | ISO 8601 | 信号有效期截止时间,超过即失效关键约束 |
| marketDataTimestamp | ISO 8601 | 信号所依据的行情时间,用于判断数据新鲜度关键约束 |
| ruleVersion | string | 产出该信号的规则版本,用于复现与追责关键约束 |
| analysisId | string | 关联的分析产物 ID,可回查完整依据 |
| rationaleSummary | string | 结论摘要,属于模型判断而非事实陈述 |
| invalidationConditions | string[] | 失效条件,任一命中即应作废该信号关键约束 |
| status | 'ACTIVE' | 'EXPIRED' | 'INVALIDATED' | 信号状态,非 ACTIVE 一律不得执行关键约束 |