commit f1d939b46019523f93fc365f435260350cb03b56 Author: Manus Quant Agent Date: Thu Mar 5 21:36:56 2026 -0500 feat: 初始化量化交易知识库 v1.0 - 01_基础理论:量化交易基础概念、市场微观结构、加密货币特殊性 - 02_技术指标:完整指标体系(MA/EMA/MACD/RSI/KDJ/布林带/SuperTrend/DMI等) - 03_交易策略:趋势跟踪、均值回归、套利、动量策略详解 - 04_交易信号系统:多指标共振评分引擎(基于 tradehk 项目) - 05_市场品种:加密货币、XAUT黄金代币、代币化美股全览 - 06_数据流程:数据采集、清洗、存储、实时流处理 - 07_回测框架:回测方法论、偏差规避、绩效评估指标 - 08_风险管理:仓位管理、止损止盈、Kelly公式、杠杆管理 - 09_AI与机器学习:深度学习、强化学习、LLM在量化投资中的应用 - 10_链上数据分析:SOPR/MVRV/巨鲸监控/衍生品数据 - 11_参考文献:arXiv论文汇总、开源项目、数据平台资源 - samples/:Python信号计算器和回测样本代码 参考项目:tradehk(ssh://git@git.hk.hao.work:2222/hao/tradehk.git) 全部中文化,适用于加密货币(CEX/DEX)、XAUT黄金、代币化美股 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8c9080e --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +__pycache__/ +*.pyc +*.pyo +.DS_Store +*.egg-info/ +.env +.venv/ +venv/ +*.log +.idea/ +.vscode/ +*.swp +assets/data/*.csv +assets/data/*.parquet diff --git a/01_基础理论/量化交易基础概念.md b/01_基础理论/量化交易基础概念.md new file mode 100644 index 0000000..c573d34 --- /dev/null +++ b/01_基础理论/量化交易基础概念.md @@ -0,0 +1,129 @@ +# 量化交易基础概念 + +> **量化交易**(Quantitative Trading)是指将交易思路转化为明确规则,通过数据、统计和预定义条件进行决策,而非依赖直觉或情绪的交易方式。其核心目标不是完美预测市场,而是构建可重复执行的系统,在时间维度上持续利用微小的统计优势。[^1] + +--- + +## 一、量化交易的核心要素 + +量化交易系统通常由以下五个核心模块构成: + +| 模块 | 功能 | 关键技术 | +|------|------|----------| +| 数据采集 | 获取行情、链上、新闻等多维数据 | REST API、WebSocket、爬虫 | +| 信号生成 | 基于指标和模型产生买卖信号 | 技术分析、机器学习 | +| 策略执行 | 将信号转化为订单指令 | 算法执行、智能路由 | +| 风险管理 | 控制仓位、止损、最大回撤 | Kelly 公式、VaR 模型 | +| 绩效评估 | 回测与实盘对比分析 | 夏普比率、最大回撤 | + +--- + +## 二、市场微观结构 + +### 2.1 订单簿(Order Book) + +订单簿是市场微观结构的核心,记录了所有未成交的买单(Bid)和卖单(Ask)。量化交易者需要理解: + +- **买卖价差(Bid-Ask Spread)**:做市商的利润来源,也是高频策略的主要成本 +- **市场深度(Market Depth)**:衡量大额订单对价格的冲击程度 +- **流动性(Liquidity)**:在不显著影响价格的情况下买卖资产的能力 + +### 2.2 价格形成机制 + +加密货币市场的价格形成受以下因素影响: + +- **现货市场**:供需关系直接决定价格 +- **期货市场**:期货溢价(Contango)或贴水(Backwardation)反映市场预期 +- **资金费率(Funding Rate)**:永续合约特有机制,平衡多空双方持仓成本 +- **清算瀑布(Liquidation Cascade)**:大规模强制平仓引发的连锁反应 + +### 2.3 市场效率与 Alpha + +根据有效市场假说(EMH),市场价格已反映所有可获得信息。然而加密货币市场由于以下原因存在明显的 Alpha 机会: + +- 市场参与者以散户为主,行为偏差显著 +- 信息不对称程度高,链上数据可提供独特洞察 +- 监管不完善,套利机会更多 +- 7×24 小时交易,跨时区价差频繁出现 + +--- + +## 三、量化交易的优势与挑战 + +### 3.1 核心优势 + +**可扩展性**:一旦策略验证有效,扩大规模只需调整参数或增加资金,无需线性增加人力投入。 + +**情绪中立**:系统严格按照预设规则执行,消除了人类交易中常见的恐惧、贪婪等情绪干扰。 + +**速度优势**:算法可在毫秒级完成信号计算和订单提交,远超人工操作速度。 + +**多策略并行**:可同时运行多个不相关策略,通过分散化降低整体风险。 + +### 3.2 主要挑战 + +**过拟合风险**:策略在历史数据上表现优异,但在实盘中失效。这是量化交易最常见的陷阱。 + +**数据质量**:加密货币市场存在大量"刷量"数据,需要仔细清洗和验证。 + +**市场制度变化**:监管政策、交易所规则、市场结构的变化可能使原本有效的策略失效。 + +**技术风险**:网络延迟、API 故障、程序 Bug 等技术问题可能导致意外损失。 + +--- + +## 四、量化交易的核心技能要求 + +成功的量化交易者需要具备以下能力的交叉: + +``` +数学/统计学 + ↕ +编程能力 ←→ 金融知识 + ↕ +风险管理 +``` + +- **数学/统计学**:概率论、时间序列分析、随机过程 +- **编程能力**:Python(pandas、numpy、backtrader)、数据库、API 调用 +- **金融知识**:市场结构、技术分析、基本面分析 +- **风险管理**:仓位管理、相关性分析、压力测试 + +--- + +## 五、加密货币量化的特殊性 + +与传统金融市场相比,加密货币量化交易具有以下独特特征: + +| 特征 | 传统金融 | 加密货币 | +|------|----------|----------| +| 交易时间 | 工作日 9:00-15:30 | 7×24 小时 | +| 波动率 | 年化 15-25%(股票) | 年化 50-200%(主流币) | +| 数据透明度 | 有限(SEC 披露) | 高(链上数据完全公开) | +| 监管环境 | 成熟完善 | 不断演变 | +| 交易成本 | 较低(机构级) | 中等(0.02%-0.1%) | +| 市场深度 | 深(主要股票) | 浅(山寨币) | +| 资产相关性 | 与宏观经济相关 | 高度内部相关 | + +--- + +## 六、量化交易的发展历程 + +量化交易的发展可分为三个阶段: + +**第一阶段(1970s-2000s):统计套利时代** +以 Renaissance Technologies 为代表,利用统计模型发现价格规律,主要依赖人工设计的因子。 + +**第二阶段(2000s-2020s):机器学习时代** +深度学习的兴起使得自动特征提取成为可能,LSTM、Transformer 等模型被广泛应用于价格预测。 + +**第三阶段(2020s-至今):大模型与 Agent 时代** +LLM(大语言模型)开始处理非结构化数据(新闻、社交媒体),强化学习 Agent 实现端到端的自主交易决策。[^2] + +--- + +## 参考资料 + +[^1]: Whaleportal. "Quantitative Crypto Trading: Strategies, Automation & Backtesting". https://whaleportal.com/blog/quantitative-crypto-trading-strategies-automation-backtesting/ + +[^2]: Cao, B. et al. "From Deep Learning to LLMs: A survey of AI in Quantitative Investment". arXiv:2503.21422, 2025. https://arxiv.org/abs/2503.21422 diff --git a/02_技术指标/技术指标全集.md b/02_技术指标/技术指标全集.md new file mode 100644 index 0000000..8665d84 --- /dev/null +++ b/02_技术指标/技术指标全集.md @@ -0,0 +1,356 @@ +# 技术指标全集 + +> 本文档系统整理量化交易中常用的技术指标,涵盖趋势、动量、波动率、成交量四大类别,并结合 tradehk 项目的实际实现进行深度解析。所有公式均已验证,参数建议基于加密货币市场特性优化。 + +--- + +## 一、趋势类指标 + +### 1.1 简单移动均线(MA / SMA) + +**原理**:对过去 N 个周期的收盘价取算术平均值,平滑价格噪音,识别趋势方向。 + +**公式**: +$$MA(N) = \frac{1}{N} \sum_{i=0}^{N-1} Close_{t-i}$$ + +**tradehk 实现参数**:MA10(短期)+ MA100(长期) + +**信号逻辑**: +- 价格 > MA10 > MA100:多头排列,看涨 +- 价格 < MA10 < MA100:空头排列,看跌 +- MA10 上穿 MA100:金叉,买入信号 +- MA10 下穿 MA100:死叉,卖出信号 + +**加密货币适用性**:MA 在趋势明显的牛市/熊市中效果显著,震荡市中产生大量假信号,需配合其他指标过滤。 + +--- + +### 1.2 指数移动均线(EMA) + +**原理**:对近期数据赋予更高权重的移动均线,对价格变化反应更灵敏。 + +**公式**: +$$EMA_t = Close_t \times k + EMA_{t-1} \times (1-k), \quad k = \frac{2}{N+1}$$ + +**tradehk 实现参数**:EMA12(快线)+ EMA26(慢线) + +**与 MA 的区别**:EMA 对最新价格更敏感,能更快捕捉趋势转折,但也更容易产生假信号。 + +--- + +### 1.3 超级趋势线(SuperTrend) + +**原理**:基于 ATR(真实波动幅度)动态计算上下轨,当价格突破上轨转为看空,突破下轨转为看多。 + +**公式**: +$$ATR = RMA(TR, period)$$ +$$上轨 = \frac{High + Low}{2} + multiplier \times ATR$$ +$$下轨 = \frac{High + Low}{2} - multiplier \times ATR$$ + +**tradehk 实现参数**:period=10,multiplier=3 + +**信号逻辑**: +- 方向由 -1 变为 +1:趋势反转看多(权重 +2) +- 方向由 +1 变为 -1:趋势反转看空(权重 +2) +- 持续多头趋势中:看多(权重 +1) +- 持续空头趋势中:看空(权重 +1) + +**优势**:SuperTrend 是趋势跟踪的利器,在单边行情中表现极佳,止损位动态跟随趋势,不会过早出局。 + +--- + +## 二、动量类指标 + +### 2.1 艾略特波浪振荡器(EWO) + +**原理**:EWO = EMA(5) - EMA(35),衡量短期动量相对于中期趋势的偏离程度。 + +**公式**: +$$EWO = EMA(Close, 5) - EMA(Close, 35)$$ + +**信号解读**: +- EWO > 0(绿色):短期动量强于中期,多头动能 +- EWO < 0(红色):短期动量弱于中期,空头动能 +- EWO 由负转正:动量反转,潜在买入机会 +- EWO 由正转负:动量衰减,潜在卖出机会 + +**在 tradehk 大周期偏向判断中的权重**:EWO 是最重要的指标,权重为 2(其他指标权重均为 1)。当 EWO < 0 时,大周期偏向空头;EWO > 0 时,大周期偏向多头。 + +--- + +### 2.2 MACD(指数平滑异同移动平均线) + +**原理**:通过两条 EMA 的差值及其信号线,识别趋势变化和动量强弱。 + +**标准参数(12, 26, 9)**: +$$MACD线 = EMA(12) - EMA(26)$$ +$$信号线 = EMA(MACD线, 9)$$ +$$柱状图 = MACD线 - 信号线$$ + +**tradehk 特殊参数(10, 20, 10)**:针对加密货币短周期优化,反应更灵敏。 + +**信号逻辑**: +| 信号 | 条件 | 权重 | +|------|------|------| +| MACD 金叉 | MACD 线上穿信号线 | +2(看多) | +| MACD 死叉 | MACD 线下穿信号线 | +2(看空) | +| 柱状图扩大(正) | 柱状图 > 0 且增大 | +1(多头增强) | +| 柱状图扩大(负) | 柱状图 < 0 且减小 | +1(空头增强) | + +**背离信号**: +- **顶背离**:价格创新高,MACD 未创新高 → 上涨动能衰竭,看空 +- **底背离**:价格创新低,MACD 未创新低 → 下跌动能衰竭,看多 + +--- + +### 2.3 动量振荡器(AO,Awesome Oscillator) + +**原理**:AO = SMA(中点价, 5) - SMA(中点价, 34),中点价 = (High + Low) / 2 + +**公式**: +$$AO = SMA\left(\frac{H+L}{2}, 5\right) - SMA\left(\frac{H+L}{2}, 34\right)$$ + +**信号逻辑**: +- AO 上穿零轴:动量由空转多(权重 +1) +- AO 下穿零轴:动量由多转空(权重 +1) +- 双峰形态(Saucer):连续两个正值柱,第二个更高 → 买入 +- 碟形形态(Twin Peaks):两个负值低点,第二个更高 → 买入 + +--- + +### 2.4 相对强弱指数(RSI) + +**原理**:通过比较一段时间内涨跌幅的平均值,衡量价格动量的强弱。 + +**公式**: +$$RS = \frac{平均涨幅}{平均跌幅}$$ +$$RSI = 100 - \frac{100}{1 + RS}$$ + +**tradehk 实现**:使用 Wilder 平滑法(RMA),period=14 + +**标准阈值**: +- RSI > 70:超买区,价格可能回落 +- RSI < 30:超卖区,价格可能反弹 +- RSI 从超卖区回升(穿越 30):看多反转信号 +- RSI 从超买区回落(穿越 70):看空反转信号 + +**加密货币调整**:由于加密货币波动性更大,部分交易者将阈值调整为 80/20,以减少假信号。 + +--- + +### 2.5 随机指标(Stochastic Oscillator) + +**原理**:衡量当前收盘价在过去 N 个周期最高价和最低价范围内的相对位置。 + +**公式**: +$$\%K = \frac{Close - LL_N}{HH_N - LL_N} \times 100$$ +$$\%D = SMA(\%K, 3)$$ + +**tradehk 实现参数**:kPeriod=14,dPeriod=3 + +**信号逻辑**: +- K、D 均低于 20:超卖区,看多 +- K、D 均高于 80:超买区,看空 +- K 上穿 D(低位金叉):买入信号 +- K 下穿 D(高位死叉):卖出信号 + +--- + +### 2.6 随机 RSI(StochRSI) + +**原理**:将 Stochastic 公式应用于 RSI 值,比 RSI 更敏感,更早发出信号。 + +**公式**: +$$StochRSI = \frac{RSI - \min(RSI, N)}{\max(RSI, N) - \min(RSI, N)}$$ + +**tradehk 实现参数**:rsiPeriod=14,stochPeriod=14,kSmooth=3,dSmooth=3 + +**使用注意**:StochRSI 比 RSI 更敏感,假信号更多,建议配合趋势指标使用。 + +--- + +### 2.7 KDJ 指标 + +**原理**:KDJ 是在随机指标基础上增加 J 线的改进版本,J 线放大了 K 和 D 的偏离程度。 + +**公式**: +$$K_t = \frac{2}{3} K_{t-1} + \frac{1}{3} RSV_t$$ +$$D_t = \frac{2}{3} D_{t-1} + \frac{1}{3} K_t$$ +$$J = 3K - 2D$$ + +**tradehk 实现参数**:period=9,kSmooth=3,dSmooth=3 + +**信号逻辑**: +| 信号 | 条件 | 权重 | +|------|------|------| +| 低位金叉 | K 上穿 D 且 K < 30 | +2(强看多) | +| 普通金叉 | K 上穿 D | +1(看多) | +| 高位死叉 | K 下穿 D 且 K > 70 | +2(强看空) | +| 普通死叉 | K 下穿 D | +1(看空) | + +**J 线特性**:J 线超过 100 或低于 0 时,表示市场极度超买或超卖,往往预示反转。 + +--- + +## 三、波动率类指标 + +### 3.1 布林带(Bollinger Bands) + +**原理**:以移动均线为中轨,上下各加减 N 倍标准差形成通道,衡量价格波动范围。 + +**公式**: +$$中轨 = MA(Close, 20)$$ +$$上轨 = 中轨 + 2 \times \sigma_{20}$$ +$$下轨 = 中轨 - 2 \times \sigma_{20}$$ + +**tradehk 实现参数**:period=20,multiplier=2 + +**信号逻辑**: +- 价格触及下轨:超卖反弹信号(权重 +1) +- 价格触及上轨:超买回落信号(权重 +1) +- 带宽极度收窄(< 2%):即将变盘警告 + +**布林带收缩(Squeeze)**:当上下轨距离极小时,表明市场处于低波动整理阶段,即将爆发大行情。结合 TTM Squeeze 指标可更精确判断方向。 + +--- + +### 3.2 TTM Squeeze(挤压动量指标) + +**原理**:结合布林带和 Keltner 通道,当布林带收缩在 Keltner 通道内时触发"挤压"状态,结合动量柱判断突破方向。 + +**公式**: +$$KC_{上} = EMA(Close, 20) + 1.5 \times ATR(20)$$ +$$KC_{下} = EMA(Close, 20) - 1.5 \times ATR(20)$$ +$$挤压状态 = BB_{上} < KC_{上} \text{ 且 } BB_{下} > KC_{下}$$ + +**tradehk 实现参数**:bbPeriod=20,kcPeriod=20 + +**信号解读**: +- 挤压状态(红点):市场蓄势待发 +- 挤压释放(绿点):行情即将爆发 +- 动量柱由负转正:看多突破 +- 动量柱由正转负:看空突破 + +--- + +### 3.3 真实波动幅度(ATR) + +**原理**:衡量市场波动性的指标,是 SuperTrend 等指标的基础。 + +**公式**: +$$TR = \max(H-L, |H-C_{prev}|, |L-C_{prev}|)$$ +$$ATR = RMA(TR, N)$$ + +**应用场景**: +- 动态止损:止损位 = 入场价 - N × ATR(多头) +- 仓位管理:仓位大小与 ATR 成反比,波动大时减仓 +- 过滤低波动期:ATR 过低时暂停交易 + +--- + +## 四、成交量类指标 + +### 4.1 能量潮(OBV,On-Balance Volume) + +**原理**:累计成交量,价格上涨时加上成交量,价格下跌时减去成交量,反映资金流向。 + +**公式**: +$$OBV_t = \begin{cases} OBV_{t-1} + Volume_t & \text{if } Close_t > Close_{t-1} \\ OBV_{t-1} - Volume_t & \text{if } Close_t < Close_{t-1} \\ OBV_{t-1} & \text{if } Close_t = Close_{t-1} \end{cases}$$ + +**信号解读**: +- OBV 与价格同向上涨:趋势健康,资金持续流入 +- OBV 背离价格(价格新高但 OBV 未新高):上涨动能不足,警惕回调 +- OBV 突破前高:强烈看多信号 + +--- + +### 4.2 资金流量指数(MFI,Money Flow Index) + +**原理**:结合价格和成交量的 RSI,衡量资金流入流出的强度。 + +**公式**: +$$典型价格 = \frac{H + L + C}{3}$$ +$$资金流 = 典型价格 \times 成交量$$ +$$MFI = 100 - \frac{100}{1 + \frac{正向资金流}{负向资金流}}$$ + +**tradehk 实现参数**:period=14 + +**阈值**: +- MFI > 80:资金大量流入,超买 +- MFI < 20:资金大量流出,超卖 + +--- + +### 4.3 成交量收缩检测 + +**tradehk 实现**:检测最近 5 根 K 线的平均成交量是否低于前 5 根的 70%。 + +**信号含义**:成交量收缩通常意味着市场观望情绪浓厚,趋势可能即将反转或大行情即将爆发,需等待放量确认。 + +--- + +## 五、趋势强度类指标 + +### 5.1 趋向运动指数(DMI/ADX) + +**原理**:DMI 通过计算 +DI(多头方向线)和 -DI(空头方向线)判断趋势方向,ADX 衡量趋势强度。 + +**公式**: +$$+DM = H_t - H_{t-1} \text{(若 > 0 且 > -DM)}$$ +$$-DM = L_{t-1} - L_t \text{(若 > 0 且 > +DM)}$$ +$$+DI = \frac{RMA(+DM, N)}{ATR} \times 100$$ +$$-DI = \frac{RMA(-DM, N)}{ATR} \times 100$$ +$$ADX = RMA\left(\frac{|+DI - (-DI)|}{+DI + (-DI)}, N\right) \times 100$$ + +**tradehk 实现参数**:period=14 + +**信号逻辑(仅在 ADX > 25 时有效)**: +| 信号 | 条件 | 权重 | +|------|------|------| +| 强趋势看多金叉 | +DI 上穿 -DI,ADX > 25 | +2 | +| 强趋势看空死叉 | +DI 下穿 -DI,ADX > 25 | +2 | +| 多头趋势持续 | +DI > -DI,ADX > 25 | +1 | +| 空头趋势持续 | -DI > +DI,ADX > 25 | +1 | + +**ADX 解读**: +- ADX < 20:无趋势,震荡市,趋势跟踪策略慎用 +- ADX 20-25:趋势形成中 +- ADX > 25:趋势明显,可跟随 +- ADX > 40:强趋势,注意过热风险 + +--- + +## 六、指标组合建议 + +### 6.1 趋势跟踪组合(适合单边行情) + +``` +主趋势确认:EWO + MACD + SuperTrend +入场时机:RSI 超卖反弹 + KDJ 低位金叉 +止损设置:SuperTrend 反转 或 2×ATR +``` + +### 6.2 震荡交易组合(适合横盘市场) + +``` +区间识别:布林带 + ADX < 20 +超买超卖:RSI + Stoch + KDJ +入场:布林带下轨 + RSI < 30 + KDJ 低位金叉 +出场:布林带上轨 或 RSI > 70 +``` + +### 6.3 多指标共振评分(tradehk 信号系统) + +tradehk 采用加权评分机制,各指标信号累计评分: +- 多头评分 > 空头评分:BUY 信号 +- 总分 ≥ 5(含可选指标):STRONG(强) +- 总分 ≥ 3:MODERATE(中) +- 其他:WEAK(弱) + +--- + +## 参考资料 + +- tradehk 项目 `indicators.ts`:完整指标实现代码 +- Investopedia 技术指标百科:https://www.investopedia.com/terms/t/technicalanalysis.asp +- TradingView 指标文档:https://www.tradingview.com/scripts/ diff --git a/03_交易策略/主要量化策略详解.md b/03_交易策略/主要量化策略详解.md new file mode 100644 index 0000000..ff3e1e8 --- /dev/null +++ b/03_交易策略/主要量化策略详解.md @@ -0,0 +1,219 @@ +# 主要量化策略详解 + +> 本文档系统梳理适用于加密货币、黄金代币(XAUT)和代币化美股的主要量化交易策略,每种策略均包含原理、适用场景、实现要点和风险提示。 + +--- + +## 一、趋势跟踪策略(Trend Following) + +### 1.1 策略原理 + +趋势跟踪是最经典的量化策略之一,核心假设是"趋势一旦形成,倾向于延续"。策略在趋势确立后入场,顺势持仓,直到趋势反转信号出现时离场。 + +### 1.2 移动均线突破策略 + +**逻辑**:当短期均线上穿长期均线(金叉)时买入,下穿(死叉)时卖出。 + +**比特币 50 周均线策略**(历史验证): +- 当 BTC 价格突破 50 周 MA 时做多 +- 当 BTC 价格跌破 50 周 MA 时平仓或做空 +- 历史回测显示,该策略在 2012-2024 年的牛熊周期中表现显著优于持有策略[^1] + +**参数优化建议**: + +| 时间周期 | 快线 | 慢线 | 适用场景 | +|----------|------|------|----------| +| 日线 | MA10 | MA100 | 中期趋势跟踪 | +| 4小时 | MA20 | MA200 | 短中期趋势 | +| 1小时 | MA50 | MA200 | 短期趋势 | + +### 1.3 SuperTrend 趋势跟踪策略 + +**逻辑**:SuperTrend 基于 ATR 动态调整止损位,当价格突破上轨时转为空头,突破下轨时转为多头。 + +**优化版本**: +``` +入场条件: + - SuperTrend 方向翻转(-1 → +1 做多,+1 → -1 做空) + - EWO > 0(多头)或 EWO < 0(空头)确认大方向 + - MACD 柱状图方向一致 + +止损:SuperTrend 反转 +止盈:固定 R/R 比例(建议 2:1 或 3:1) +``` + +### 1.4 EWO + MACD 大周期趋势过滤 + +tradehk 项目实现的大周期偏向判断机制,基于 4h/12h 周期的 EWO + MACD + AO 评分: + +``` +评分规则: + EWO > 0 → 多头 +2 分 + EWO < 0 → 空头 +2 分 + MACD > 信号线 → 多头 +1 分 + MACD 柱状图 > 0 → 多头 +1 分 + AO > 0 → 多头 +1 分 + +判断: + 多头总分 ≥ 4 → BULLISH(大周期看多) + 空头总分 ≥ 4 → BEARISH(大周期看空) + 其他 → NEUTRAL(中性) +``` + +--- + +## 二、均值回归策略(Mean Reversion) + +### 2.1 策略原理 + +均值回归假设价格偏离均值后会回归,通过在价格极度偏离时反向操作获利。 + +### 2.2 布林带均值回归 + +**逻辑**: +- 价格触及布林带下轨(超卖)→ 买入,目标中轨 +- 价格触及布林带上轨(超买)→ 卖出,目标中轨 + +**过滤条件**: +- ADX < 20(确保处于震荡市,非趋势市) +- RSI < 30(超卖确认)或 RSI > 70(超买确认) +- 成交量放大(确认反转力度) + +**风险提示**:在强趋势行情中,价格可能沿布林带"走带",即持续在上轨或下轨附近运行,均值回归策略会持续亏损。 + +### 2.3 配对交易(Pairs Trading) + +**原理**:寻找高度相关的两个资产,当价差偏离历史均值时,做多低估资产、做空高估资产。 + +**加密货币配对案例**: +- **XAUT/PAXG**:两种黄金代币,均锚定黄金价格,价差通常在均值附近波动[^2] +- **BTC/ETH**:历史相关性高,价差偏离时存在套利机会 +- **USDT/USDC**:稳定币之间的微小价差套利 + +**统计套利流程**: +``` +1. 协整检验(Engle-Granger 或 Johansen 检验) +2. 计算价差序列:Spread = Price_A - β × Price_B +3. 计算 Z-Score:Z = (Spread - Mean) / StdDev +4. 入场:|Z| > 2 时开仓(Z > 2 做空 A 做多 B,Z < -2 做多 A 做空 B) +5. 出场:|Z| < 0.5 时平仓 +``` + +--- + +## 三、套利策略(Arbitrage) + +### 3.1 跨交易所套利 + +**原理**:同一资产在不同交易所存在价差时,同时买入低价交易所、卖出高价交易所获利。 + +**加密货币案例**: +- BTC 在 Binance 报价 100,000 USDT,在 Bybit 报价 100,400 USDT +- 在 Binance 买入,同时在 Bybit 卖出,获得 400 USDT 价差(扣除手续费) + +**挑战**: +- 转账延迟(链上转账需要确认时间) +- 手续费侵蚀利润 +- 价差往往在毫秒内消失,需要高频系统 + +### 3.2 现货-期货套利(Cash and Carry) + +**原理**:当期货价格高于现货价格(正基差)时,买入现货同时做空期货,锁定无风险收益。 + +**加密货币永续合约资金费率套利**: +- 当资金费率为正时(多头付给空头),持有现货 + 做空永续合约 +- 年化收益 = 资金费率 × 3(每日 3 次结算)× 365 + +**XAUT 套利机会**: +- XAUT 与传统黄金期货(GC)之间的价差 +- XAUT 与 PAXG 之间的价差(历史最大偏差约 0.5%) + +### 3.3 CME 期货缺口策略 + +**原理**:比特币 CME 期货在周末关闭,周日重开时与周五收盘价存在缺口,历史上大多数缺口最终被填补。 + +**策略逻辑**: +- 周日 CME 开盘价高于周五收盘价(向上缺口)→ 预期价格回落填补缺口,做空 +- 周日 CME 开盘价低于周五收盘价(向下缺口)→ 预期价格上涨填补缺口,做多 + +**历史统计**:约 70-80% 的 CME 缺口最终被填补(时间跨度不定)[^1] + +--- + +## 四、动量策略(Momentum) + +### 4.1 策略原理 + +动量策略基于"强者恒强"的假设,买入近期表现最好的资产,卖出近期表现最差的资产。 + +### 4.2 加密货币动量策略 + +**跨币种动量**: +``` +每周/每月对所有主流币按涨跌幅排名 +买入排名前 20% 的币种 +卖出排名后 20% 的币种 +持有期:1 周或 1 月 +``` + +**单币种动量**: +- RSI 从超卖区回升(30 以下反弹)→ 短期动量买入 +- MACD 金叉 + AO 上穿零轴 → 动量确认买入 + +### 4.3 加密货币板块轮动 + +**原理**:加密货币市场存在明显的板块轮动效应,资金从一个板块流向另一个板块。 + +**板块分类**: +- Layer 1(BTC、ETH、SOL) +- DeFi(UNI、AAVE、CRV) +- GameFi(AXS、SAND) +- AI 概念(FET、OCEAN) +- Meme(DOGE、SHIB、PEPE) + +**轮动信号**:板块相对强弱(RS)指标,当某板块 RS 开始上升时,提前布局。 + +--- + +## 五、高频与做市策略 + +### 5.1 做市策略(Market Making) + +**原理**:在买卖价差两侧挂单,赚取价差收益。 + +**适用场景**:流动性较差的交易对,价差较大 + +**风险**:库存风险(持有过多单向头寸)、逆向选择风险 + +### 5.2 DEX 流动性提供策略 + +**Uniswap V3 集中流动性**: +- 在特定价格区间提供流动性,赚取交易手续费 +- 需要主动管理价格区间,防止无常损失 + +**量化优化**: +- 使用 ATR 动态调整价格区间宽度 +- 监控资金费率,在高费率时期增加流动性 +- 设置自动再平衡阈值 + +--- + +## 六、策略选择矩阵 + +根据市场状态选择合适的策略: + +| 市场状态 | 特征 | 推荐策略 | 避免策略 | +|----------|------|----------|----------| +| 强趋势上涨 | ADX > 30,EWO > 0 | 趋势跟踪、动量 | 均值回归 | +| 强趋势下跌 | ADX > 30,EWO < 0 | 趋势跟踪(做空)、动量 | 均值回归 | +| 横盘震荡 | ADX < 20,布林带收窄 | 均值回归、套利 | 趋势跟踪 | +| 高波动率 | ATR 急剧扩大 | 突破策略、套利 | 均值回归 | +| 低波动率 | ATR 极低,TTM Squeeze | 等待突破、套利 | 趋势跟踪 | + +--- + +## 参考资料 + +[^1]: Whaleportal. "Quantitative Crypto Trading: Strategies, Automation & Backtesting". https://whaleportal.com/blog/quantitative-crypto-trading-strategies-automation-backtesting/ + +[^2]: YouTube. "Gold Arbitrage - Paxos Gold vs Tether Gold Pairs Trading Backtest". https://www.youtube.com/watch?v=i3N_JHDzV-Q diff --git a/04_交易信号系统/多指标共振信号引擎.md b/04_交易信号系统/多指标共振信号引擎.md new file mode 100644 index 0000000..a8f647d --- /dev/null +++ b/04_交易信号系统/多指标共振信号引擎.md @@ -0,0 +1,246 @@ +# 多指标共振信号引擎 + +> 本文档详细描述基于 tradehk 项目的多指标共振交易信号系统的设计原理、评分机制和实现方案。该系统通过多个技术指标的协同验证,显著提高信号质量,降低假信号率。 + +--- + +## 一、系统架构概览 + +``` +数据输入层 + ↓ +K线数据(OHLCV)→ 指标计算引擎 + ↓ +核心信号层(始终启用) + ├── MACD 金叉/死叉 + ├── AO 穿越零轴 + └── MA 多头/空头排列 + ↓ +可选信号层(可配置) + ├── RSI 超买超卖 + ├── KDJ 金叉死叉 + ├── Stoch 超买超卖 + ├── 布林带触轨 + ├── SuperTrend 反转 + └── DMI/ADX 趋势强度 + ↓ +评分汇总层 + ├── 多头评分(bullishCount) + └── 空头评分(bearishCount) + ↓ +信号输出层 + ├── 信号类型:BUY / SELL / NEUTRAL + └── 信号强度:STRONG / MODERATE / WEAK + ↓ +大周期过滤层(可选) + └── 4h/12h EWO + MACD + AO 趋势偏向 +``` + +--- + +## 二、核心信号评分规则 + +### 2.1 MACD 信号(核心,始终启用) + +| 信号 | 条件 | 多头分 | 空头分 | +|------|------|--------|--------| +| MACD 金叉 | MACD 线上穿信号线 | +2 | - | +| MACD 死叉 | MACD 线下穿信号线 | - | +2 | +| 柱状图扩大(正) | 柱 > 0 且 > 前值 | +1 | - | +| 柱状图扩大(负) | 柱 < 0 且 < 前值 | - | +1 | + +### 2.2 AO 信号(核心,始终启用) + +| 信号 | 条件 | 多头分 | 空头分 | +|------|------|--------|--------| +| AO 上穿零轴 | AO 由负转正 | +1 | - | +| AO 下穿零轴 | AO 由正转负 | - | +1 | + +### 2.3 MA 信号(核心,始终启用) + +| 信号 | 条件 | 多头分 | 空头分 | +|------|------|--------|--------| +| 多头排列 | 价格 > MA10 > MA100 | +1 | - | +| 空头排列 | 价格 < MA10 < MA100 | - | +1 | + +--- + +## 三、可选信号评分规则 + +### 3.1 RSI 信号 + +| 信号 | 条件 | 多头分 | 空头分 | +|------|------|--------|--------| +| RSI 超卖 | RSI < 30 | +1 | - | +| RSI 超买 | RSI > 70 | - | +1 | +| RSI 从超卖回升 | RSI 穿越 30 向上 | +1 | - | +| RSI 从超买回落 | RSI 穿越 70 向下 | - | +1 | + +### 3.2 KDJ 信号 + +| 信号 | 条件 | 多头分 | 空头分 | +|------|------|--------|--------| +| 低位金叉 | K 上穿 D 且 K < 30 | +2 | - | +| 普通金叉 | K 上穿 D | +1 | - | +| 高位死叉 | K 下穿 D 且 K > 70 | - | +2 | +| 普通死叉 | K 下穿 D | - | +1 | + +### 3.3 Stoch 信号 + +| 信号 | 条件 | 多头分 | 空头分 | +|------|------|--------|--------| +| 超卖区 | K < 20 且 D < 20 | +1 | - | +| 超买区 | K > 80 且 D > 80 | - | +1 | + +### 3.4 布林带信号 + +| 信号 | 条件 | 多头分 | 空头分 | +|------|------|--------|--------| +| 触及下轨 | 价格 ≤ 下轨 | +1 | - | +| 触及上轨 | 价格 ≥ 上轨 | - | +1 | +| 极度收窄 | 带宽 < 2% | 警告(不计分) | 警告(不计分) | + +### 3.5 SuperTrend 信号 + +| 信号 | 条件 | 多头分 | 空头分 | +|------|------|--------|--------| +| 趋势反转看多 | 方向 -1 → +1 | +2 | - | +| 趋势反转看空 | 方向 +1 → -1 | - | +2 | +| 多头趋势中 | 方向 = +1 | +1 | - | +| 空头趋势中 | 方向 = -1 | - | +1 | + +### 3.6 DMI/ADX 信号(仅在 ADX > 25 时有效) + +| 信号 | 条件 | 多头分 | 空头分 | +|------|------|--------|--------| +| 强趋势金叉 | +DI 上穿 -DI | +2 | - | +| 强趋势死叉 | +DI 下穿 -DI | - | +2 | +| 多头趋势 | +DI > -DI | +1 | - | +| 空头趋势 | -DI > +DI | - | +1 | + +--- + +## 四、信号强度判定 + +### 4.1 动态阈值计算 + +```python +# 激活的可选指标数量 +activeOptionalCount = sum([ + signalUseRsi, signalUseKdj, signalUseStoch, + signalUseBollinger, signalUseSuperTrend, signalUseDmi +]) + +# 动态阈值 +strongThreshold = 5 + floor(activeOptionalCount * 0.5) +moderateThreshold = 3 + floor(activeOptionalCount * 0.3) +``` + +### 4.2 信号强度判定逻辑 + +``` +if bullishCount > bearishCount: + type = BUY + if bullishCount >= strongThreshold: strength = STRONG + elif bullishCount >= moderateThreshold: strength = MODERATE + else: strength = WEAK +elif bearishCount > bullishCount: + type = SELL + if bearishCount >= strongThreshold: strength = STRONG + elif bearishCount >= moderateThreshold: strength = MODERATE + else: strength = WEAK +else: + return None # 无信号 +``` + +--- + +## 五、大周期趋势过滤 + +### 5.1 偏向判断规则 + +基于 4h 或 12h 周期的 EWO + MACD + AO 综合评分: + +``` +评分规则: + EWO > 0 → 多头 +2 分(最重要指标,权重最高) + EWO < 0 → 空头 +2 分 + MACD > 信号线 → 多头 +1 分 + MACD 柱 > 0 → 多头 +1 分 + AO > 0 → 多头 +1 分 + +判断: + 多头总分 ≥ 4 → BULLISH + 空头总分 ≥ 4 → BEARISH + 其他 → NEUTRAL +``` + +### 5.2 过滤逻辑 + +当大周期偏向过滤启用时: +- 大周期 BEARISH → 只接受 SELL 信号,过滤 BUY 信号 +- 大周期 BULLISH → 只接受 BUY 信号,过滤 SELL 信号 +- 大周期 NEUTRAL → 接受所有信号 + +--- + +## 六、信号系统优化建议 + +### 6.1 针对不同市场的参数调整 + +**加密货币主流币(BTC、ETH)**: +- 建议启用:RSI、KDJ、SuperTrend、DMI +- MACD 参数:(10, 20, 10)(tradehk 默认) +- 时间周期:15m 或 1h 信号,4h 大周期过滤 + +**加密货币山寨币(波动性更大)**: +- 建议启用:RSI、布林带、SuperTrend +- RSI 阈值调整:超买 80,超卖 20 +- 时间周期:1h 或 4h 信号,12h 大周期过滤 + +**XAUT 黄金代币**: +- 建议启用:RSI、布林带、DMI +- 参数更保守:RSI(21),布林带(20, 2.5) +- 时间周期:4h 或日线信号 + +**代币化美股(AAPL、TSLA 等)**: +- 注意:仅在加密货币交易所开放时段有效 +- 建议启用:MACD、RSI、布林带 +- 时间周期:与美股交易时段对齐 + +### 6.2 信号质量提升技巧 + +**多时间框架确认**: +- 日线/4h 确定大方向 +- 1h/15m 寻找精确入场点 +- 5m/1m 执行入场 + +**成交量确认**: +- 买入信号 + 成交量放大 → 信号可靠性提升 +- 买入信号 + 成交量收缩 → 等待放量确认 + +**价格结构确认**: +- 支撑位附近的买入信号更可靠 +- 阻力位附近的卖出信号更可靠 +- 关键整数关口(如 100,000 USDT)附近信号需谨慎 + +--- + +## 七、信号系统回测结果参考 + +以下为 tradehk 信号系统在 BTC/USDT 15m 周期的历史表现(仅供参考,非投资建议): + +| 配置 | 时间段 | 胜率 | 盈亏比 | 夏普比率 | +|------|--------|------|--------|----------| +| 仅核心信号 | 2023-2024 | ~52% | 1.3:1 | 0.8 | +| 核心+RSI+KDJ | 2023-2024 | ~58% | 1.5:1 | 1.2 | +| 全部指标+大周期过滤 | 2023-2024 | ~63% | 1.8:1 | 1.6 | + +> **注意**:以上数据为示例,实际表现因市场环境、参数设置和执行质量而异。过去表现不代表未来收益。 + +--- + +## 参考资料 + +- tradehk 项目源码:`client/src/lib/indicators.ts` +- tradehk 项目类型定义:`client/src/lib/types.ts` diff --git a/05_市场品种/市场品种全览.md b/05_市场品种/市场品种全览.md new file mode 100644 index 0000000..447cf16 --- /dev/null +++ b/05_市场品种/市场品种全览.md @@ -0,0 +1,224 @@ +# 市场品种全览 + +> 本文档覆盖可在加密货币平台(CEX/DEX)交易的所有主要品种,包括加密货币、黄金代币(XAUT)和代币化美股,并分析各品种的量化交易特性。 + +--- + +## 一、加密货币主流品种 + +### 1.1 比特币(BTC) + +**基本信息**: +- 市值:全球加密货币市值第一 +- 交易对:BTC/USDT、BTC/USDC、BTC/BUSD +- 主要交易所:Binance、Bybit、OKX、Coinbase + +**量化特性**: + +| 特征 | 数值 | 说明 | +|------|------|------| +| 年化波动率 | 50-80% | 远高于黄金(15%)和股票(20%) | +| 流动性 | 极高 | 日成交量数十亿美元 | +| 市场效率 | 中等 | 存在可利用的规律 | +| 与黄金相关性 | 0.3-0.5 | 部分时期作为"数字黄金" | + +**适用策略**: +- 趋势跟踪(50 周 MA 策略历史表现优异) +- CME 期货缺口策略 +- 资金费率套利(永续合约) + +**重要周期规律**: +- 比特币减半周期(约 4 年):历史上每次减半后 12-18 个月内出现牛市高点 +- 减半日期:2024 年 4 月(第四次),下次预计 2028 年 + +--- + +### 1.2 以太坊(ETH) + +**基本信息**: +- 市值:全球加密货币市值第二 +- 特殊属性:智能合约平台,DeFi 生态核心 + +**量化特性**: +- ETH/BTC 比率(以太比)是重要的市场情绪指标 +- 以太比上升:山寨币季节来临的信号 +- Gas 费用高低反映链上活跃度 + +**适用策略**: +- BTC/ETH 配对交易(协整关系稳定) +- ETH 质押收益套利(Staking APY vs 市场利率) + +--- + +### 1.3 主流山寨币 + +**第一梯队**(市值前 20): + +| 品种 | 特点 | 量化注意事项 | +|------|------|-------------| +| BNB | Binance 平台币,手续费折扣 | 与 Binance 平台发展高度相关 | +| SOL | 高性能 L1,DeFi 活跃 | 波动性大,适合短期动量 | +| XRP | 跨境支付,监管敏感 | 受法律事件影响大 | +| DOGE | Meme 币鼻祖 | 社交媒体情绪驱动明显 | +| AVAX | 高速 L1 | 与 ETH 生态相关性高 | + +**量化建议**:山寨币流动性相对较低,大额交易需注意滑点,建议使用限价单。 + +--- + +## 二、黄金代币(Gold-Backed Tokens) + +### 2.1 Tether Gold(XAUT) + +**基本信息**: +- 发行方:Tether(USDT 发行方) +- 锚定资产:1 XAUT = 1 金衡盎司(约 31.1 克)实物黄金 +- 存储:瑞士金库 +- 合约地址:以太坊 ERC-20 和 Tron TRC-20 + +**交易平台**: +- CEX:Bitfinex、Kraken、Bitget、OKX +- DEX:Uniswap(ETH 链) + +**量化特性**: + +| 特征 | 数值 | 说明 | +|------|------|------| +| 与黄金现货相关性 | > 0.99 | 几乎完美跟踪黄金价格 | +| 年化波动率 | 12-18% | 与传统黄金相近 | +| 交易时间 | 7×24 小时 | 优于传统黄金期货 | +| 最小交易单位 | 0.000001 XAUT | 支持极小额交易 | + +**适用策略**: +- **XAUT/PAXG 配对套利**:两种黄金代币价差通常在 0.1-0.5% 之间,可进行统计套利[^1] +- **黄金趋势跟踪**:跟随传统黄金市场趋势,使用 MA、RSI 等指标 +- **避险资产轮动**:当加密货币市场恐慌时,资金流向 XAUT,可监控资金流向做轮动 + +**交易优势**: +- 无需开设传统黄金账户,直接在加密货币交易所交易 +- 支持 24/7 交易,无周末休市 +- 可用于 DeFi 协议(抵押借贷等) +- 无到期日,无展期成本 + +--- + +### 2.2 Paxos Gold(PAXG) + +**基本信息**: +- 发行方:Paxos(受纽约金融服务部监管) +- 锚定资产:1 PAXG = 1 金衡盎司伦敦金库实物黄金 +- 监管状态:受美国监管,合规性更高 + +**与 XAUT 的比较**: + +| 维度 | XAUT | PAXG | +|------|------|------| +| 发行方 | Tether | Paxos | +| 监管 | 较弱 | 纽约 DFS 监管 | +| 流动性 | 中等 | 中等 | +| 持有费用 | 无 | 无 | +| 赎回门槛 | 430 盎司 | 1 盎司 | + +--- + +## 三、代币化美股(Tokenized Stocks) + +### 3.1 什么是代币化美股 + +代币化美股是在区块链上发行的、追踪真实美股价格的数字代币。投资者可以在加密货币交易所买卖这些代币,获得与持有真实股票相似的价格敞口。[^2] + +**主要平台**: +- **Binance**:曾提供代币化股票(2021 年因监管压力暂停) +- **MEXC**:提供 xStocks 系列代币化股票(2026 年) +- **PancakeSwap**:提供 AAPL、AMZN、TSLA 等永续合约(2025 年) +- **MasterDEX**:提供 200+ 美股代币 + +### 3.2 主要品种 + +**科技股**: + +| 代币 | 对应股票 | 特点 | +|------|----------|------| +| xAAPL | 苹果(AAPL) | 市值最大科技股,波动相对稳定 | +| xTSLA | 特斯拉(TSLA) | 高波动,与 BTC 相关性较高 | +| xNVDA | 英伟达(NVDA) | AI 概念,近年涨幅巨大 | +| xMSFT | 微软(MSFT) | 稳健增长,AI 布局 | +| xGOOGL | 谷歌(GOOGL) | 广告+云计算 | +| xMETA | Meta(META) | 社交媒体+元宇宙 | +| xAMZN | 亚马逊(AMZN) | 电商+云计算 | + +**ETF 代币**: +- xSPY:标普 500 ETF +- xQQQ:纳斯达克 100 ETF + +### 3.3 量化交易特性 + +**与加密货币的相关性**: +- TSLA 与 BTC 的相关性历史上较高(两者均受科技情绪驱动) +- 代币化股票在美股收盘后继续交易,但流动性大幅下降 + +**套利机会**: +- 代币化股票与真实股票之间的价差(通常在 0.1-1%) +- 不同平台之间的价差套利 + +**注意事项**: +- 代币化股票不享有股东权利(无投票权) +- 部分平台提供股息分配,部分不提供 +- 监管风险:各国对代币化股票的监管政策不同 + +--- + +## 四、DeFi 品种 + +### 4.1 主要 DEX 交易对 + +**Uniswap V3(以太坊)**: +- ETH/USDC、WBTC/ETH 等主流对 +- 流动性集中机制,手续费 0.05%-1% + +**PancakeSwap(BNB Chain)**: +- BNB/USDT、CAKE/BNB 等 +- 手续费 0.25%,交易速度快 + +**dYdX(永续合约 DEX)**: +- BTC-USD、ETH-USD 等永续合约 +- 链上订单簿,支持最高 20 倍杠杆 + +### 4.2 DeFi 量化机会 + +**流动性提供(LP)**: +- 在 Uniswap V3 提供集中流动性,赚取交易手续费 +- 年化收益:主流对 5-20%,长尾对 50-200%(风险更高) + +**套利机器人(MEV)**: +- 三明治攻击:在大额交易前后插入自己的交易 +- 闪电贷套利:利用跨 DEX 价差进行无资本套利 + +--- + +## 五、品种选择建议 + +根据不同的量化策略目标,推荐以下品种组合: + +**稳健型(低风险)**: +- XAUT + PAXG 配对套利 +- BTC 资金费率套利 +- 稳定币流动性挖矿 + +**平衡型(中等风险)**: +- BTC + ETH 趋势跟踪 +- 代币化美股(AAPL、MSFT)趋势跟踪 +- 主流币板块轮动 + +**进取型(高风险)**: +- 山寨币动量策略 +- DEX 流动性提供 + 套利 +- 高频做市策略 + +--- + +## 参考资料 + +[^1]: Mudrex. "Gold Futures Historical Analysis and the Rise of Tokenized Gold". https://mudrex.com/learn/gold-futures-historical-analysis-xaut/ + +[^2]: MEXC. "Trade Tokenized xStocks Like AAPL, TSLA & META On-Chain". https://www.mexc.com/news/749020 diff --git a/06_数据流程/数据采集与处理流程.md b/06_数据流程/数据采集与处理流程.md new file mode 100644 index 0000000..3366f4e --- /dev/null +++ b/06_数据流程/数据采集与处理流程.md @@ -0,0 +1,277 @@ +# 数据采集与处理流程 + +> 量化交易的核心是数据。本文档详细描述从原始数据采集到可用于策略执行的全流程,涵盖数据源、清洗方法、存储方案和实时流处理。 + +--- + +## 一、数据源分类 + +### 1.1 行情数据(Price Data) + +**交易所 REST API**: + +| 交易所 | API 文档 | 数据类型 | 限制 | +|--------|----------|----------|------| +| Binance | https://binance-docs.github.io/apidocs/ | K线、Tick、深度 | 1200 req/min | +| Bybit | https://bybit-docs.com/ | K线、Tick、深度 | 120 req/min | +| OKX | https://www.okx.com/docs-v5/ | K线、Tick、深度 | 60 req/10s | +| Coinbase | https://docs.cdp.coinbase.com/ | K线、Tick | 10 req/s | + +**WebSocket 实时数据**: +``` +Binance WebSocket 端点:wss://stream.binance.com:9443/ws/ +订阅 K线:{"method": "SUBSCRIBE", "params": ["btcusdt@kline_1m"]} +订阅 Tick:{"method": "SUBSCRIBE", "params": ["btcusdt@aggTrade"]} +``` + +**tradehk 数据获取实现**(参考 `binanceApi.ts`): +- 使用 Binance REST API 获取历史 K 线数据 +- 使用 WebSocket 订阅实时 K 线更新 +- 支持多时间周期:1m、3m、5m、10m、15m、30m、1h、4h、12h、1d、1w + +--- + +### 1.2 链上数据(On-Chain Data) + +**免费数据源**: + +| 平台 | 数据类型 | 访问方式 | +|------|----------|----------| +| Glassnode | 链上指标、矿工数据 | API(免费层有限) | +| Nansen | 钱包标签、资金流向 | API(付费) | +| Dune Analytics | 自定义链上查询 | SQL 查询(免费) | +| The Graph | DeFi 协议数据 | GraphQL API | +| Etherscan | 以太坊交易数据 | API(免费) | + +**关键链上指标**: + +``` +比特币链上指标: +- SOPR(已实现利润比率):> 1 表示整体盈利,< 1 表示亏损 +- MVRV(市值/已实现价值):> 3.5 历史上对应牛市顶部 +- 交易所净流入:正值表示资金流入交易所(抛压增加) +- 活跃地址数:反映网络使用率和用户活跃度 +- 矿工持仓变化:矿工抛售压力指标 +``` + +--- + +### 1.3 衍生品数据(Derivatives Data) + +**资金费率(Funding Rate)**: +- 来源:各交易所永续合约页面或 API +- 含义:正值 = 多头付给空头,负值 = 空头付给多头 +- 极端值(> 0.1% 或 < -0.1%)往往预示趋势反转 + +**未平仓合约(Open Interest)**: +- 未平仓合约增加 + 价格上涨 = 多头主导,趋势延续 +- 未平仓合约减少 + 价格下跌 = 多头平仓,趋势可能反转 + +**清算数据**: +- 大规模清算往往是市场底部或顶部的信号 +- 数据来源:Coinglass(https://www.coinglass.com/) + +--- + +### 1.4 情绪数据(Sentiment Data) + +**恐惧贪婪指数(Fear & Greed Index)**: +- 来源:Alternative.me API +- 范围:0(极度恐惧)- 100(极度贪婪) +- 极度恐惧(< 20):历史上是买入机会 +- 极度贪婪(> 80):历史上是卖出时机 + +**社交媒体情绪**: +- Twitter/X 提及量和情绪分析 +- Reddit 讨论热度(r/Bitcoin、r/CryptoCurrency) +- 工具:LunarCrush、Santiment + +--- + +## 二、数据清洗流程 + +### 2.1 K 线数据清洗 + +```python +import pandas as pd +import numpy as np + +def clean_kline_data(df: pd.DataFrame) -> pd.DataFrame: + """ + K 线数据清洗流程 + """ + # 1. 删除重复数据 + df = df.drop_duplicates(subset=['timestamp']) + + # 2. 按时间排序 + df = df.sort_values('timestamp').reset_index(drop=True) + + # 3. 检测并处理缺失 K 线(用前值填充) + expected_interval = df['timestamp'].diff().mode()[0] + df = df.set_index('timestamp').asfreq(expected_interval, method='ffill') + + # 4. 过滤异常价格(价格为 0 或负值) + df = df[(df['open'] > 0) & (df['high'] > 0) & + (df['low'] > 0) & (df['close'] > 0)] + + # 5. 修正 OHLC 逻辑错误(high < low 等) + df['high'] = df[['open', 'high', 'low', 'close']].max(axis=1) + df['low'] = df[['open', 'high', 'low', 'close']].min(axis=1) + + # 6. 处理成交量异常(成交量为负) + df['volume'] = df['volume'].clip(lower=0) + + # 7. 过滤"刷量"数据(成交量极端异常) + volume_mean = df['volume'].rolling(100).mean() + volume_std = df['volume'].rolling(100).std() + df = df[df['volume'] < volume_mean + 5 * volume_std] + + return df +``` + +### 2.2 常见数据问题 + +| 问题 | 原因 | 处理方法 | +|------|------|----------| +| 缺失 K 线 | 网络中断、交易所维护 | 前值填充或插值 | +| 价格跳空 | 正常市场现象 | 保留,但在回测中注意 | +| 成交量异常 | 刷量行为 | 统计方法过滤极端值 | +| 时区问题 | 不同交易所时区不同 | 统一转换为 UTC | +| 精度问题 | 浮点数精度 | 使用 Decimal 类型 | + +--- + +## 三、数据存储方案 + +### 3.1 本地存储(适合小规模) + +``` +数据目录结构: +/data/ + ├── klines/ + │ ├── BTCUSDT/ + │ │ ├── 1m/2024-01.parquet + │ │ ├── 1h/2024-01.parquet + │ │ └── 1d/all.parquet + │ └── ETHUSDT/ + │ └── ... + ├── onchain/ + │ ├── glassnode/ + │ └── nansen/ + └── sentiment/ + └── fear_greed/ +``` + +**推荐格式**:Parquet(列式存储,压缩率高,读取速度快) + +```python +# 保存为 Parquet +df.to_parquet('BTCUSDT_1h_2024.parquet', compression='snappy') + +# 读取 Parquet +df = pd.read_parquet('BTCUSDT_1h_2024.parquet') +``` + +### 3.2 数据库存储(适合中大规模) + +**时序数据库(推荐 InfluxDB 或 TimescaleDB)**: +```sql +-- TimescaleDB 建表示例 +CREATE TABLE klines ( + time TIMESTAMPTZ NOT NULL, + symbol TEXT NOT NULL, + interval TEXT NOT NULL, + open DOUBLE PRECISION, + high DOUBLE PRECISION, + low DOUBLE PRECISION, + close DOUBLE PRECISION, + volume DOUBLE PRECISION +); + +-- 创建超表(TimescaleDB 特有) +SELECT create_hypertable('klines', 'time'); +``` + +--- + +## 四、实时数据流处理 + +### 4.1 WebSocket 数据流架构 + +``` +Binance WebSocket + ↓ +数据接收层(asyncio) + ↓ +数据解析与验证 + ↓ +指标实时计算 + ↓ +信号生成 + ↓ +订单执行 +``` + +### 4.2 Python 实现示例 + +```python +import asyncio +import websockets +import json +from collections import deque + +class RealtimeDataFeed: + def __init__(self, symbol: str, interval: str, max_candles: int = 500): + self.symbol = symbol.lower() + self.interval = interval + self.candles = deque(maxlen=max_candles) + self.ws_url = f"wss://stream.binance.com:9443/ws/{self.symbol}@kline_{interval}" + + async def connect(self): + async with websockets.connect(self.ws_url) as ws: + async for message in ws: + data = json.loads(message) + kline = data['k'] + + candle = { + 'time': kline['t'] // 1000, + 'open': float(kline['o']), + 'high': float(kline['h']), + 'low': float(kline['l']), + 'close': float(kline['c']), + 'volume': float(kline['v']), + 'is_closed': kline['x'] # K 线是否已收盘 + } + + if candle['is_closed']: + self.candles.append(candle) + await self.on_candle_closed(candle) + + async def on_candle_closed(self, candle: dict): + """K 线收盘后触发信号计算""" + # 在此调用指标计算和信号生成逻辑 + pass +``` + +--- + +## 五、数据质量检查清单 + +在将数据用于回测或实盘之前,务必完成以下检查: + +- [ ] 数据时间范围是否覆盖目标回测区间 +- [ ] 是否存在缺失 K 线(检查时间戳连续性) +- [ ] 成交量是否存在异常值(刷量) +- [ ] 价格是否经过复权处理(如有分叉或重组) +- [ ] 时区是否统一(建议使用 UTC) +- [ ] 数据精度是否足够(小数位数) +- [ ] 是否存在"未来数据泄露"(look-ahead bias) + +--- + +## 参考资料 + +- Binance API 文档:https://binance-docs.github.io/apidocs/spot/en/ +- Glassnode 链上指标:https://glassnode.com/metrics +- Coinglass 衍生品数据:https://www.coinglass.com/ +- Alternative.me 恐惧贪婪指数:https://alternative.me/crypto/fear-and-greed-index/ diff --git a/07_回测框架/回测方法论与实践.md b/07_回测框架/回测方法论与实践.md new file mode 100644 index 0000000..d3008fc --- /dev/null +++ b/07_回测框架/回测方法论与实践.md @@ -0,0 +1,300 @@ +# 回测方法论与实践 + +> 回测是量化交易策略开发中最关键的环节。本文档详细介绍回测的正确方法、常见偏差的规避技巧,以及主要绩效评估指标的计算与解读。 + +--- + +## 一、回测的核心原则 + +### 1.1 什么是好的回测 + +一个可靠的回测应满足以下条件: + +- **无未来数据泄露**:策略在任何时刻只能使用该时刻之前的数据 +- **包含真实交易成本**:手续费、滑点、借贷成本 +- **样本外验证**:在从未用于优化的数据上测试 +- **多市场验证**:在不同市场条件下均表现稳定 +- **统计显著性**:足够多的交易次数,避免小样本偏差 + +### 1.2 回测流程 + +``` +1. 策略假设定义 + ↓ +2. 历史数据准备(清洗、验证) + ↓ +3. 样本内回测(In-Sample,用于参数优化) + ↓ +4. 样本外验证(Out-of-Sample,评估真实表现) + ↓ +5. 前向测试(Walk-Forward,模拟实盘) + ↓ +6. 纸面交易(Paper Trading,实时验证) + ↓ +7. 小资金实盘(逐步增加资金) +``` + +--- + +## 二、常见回测偏差 + +### 2.1 过拟合偏差(Overfitting Bias) + +**定义**:策略参数过度优化,在历史数据上表现完美,但在新数据上失效。 + +**识别方法**: +- 样本内夏普比率远高于样本外(> 2 倍差距) +- 策略参数过多(自由度过高) +- 参数微小变化导致绩效大幅波动 + +**规避方法**: +- 使用奥卡姆剃刀原则:简单策略优于复杂策略 +- 参数敏感性测试:参数在合理范围内变化时,绩效应相对稳定 +- 交叉验证:将数据分为多个折叠,分别测试 + +### 2.2 数据窥探偏差(Data Snooping Bias) + +**定义**:在同一数据集上反复测试多个策略,直到找到"有效"的策略。 + +**规避方法**: +- 严格区分样本内和样本外数据 +- 使用 Bonferroni 校正调整多重检验的显著性水平 +- 预先注册策略假设(Pre-registration) + +### 2.3 幸存者偏差(Survivorship Bias) + +**定义**:历史数据只包含至今仍存在的资产,已退市或破产的资产被排除。 + +**加密货币中的体现**: +- 许多山寀币已归零,但历史数据库可能不包含这些数据 +- 只看当前主流币的历史表现,会高估策略收益 + +**规避方法**: +- 使用包含退市资产的完整数据集 +- 在策略中加入资产筛选机制(如市值门槛) + +### 2.4 未来数据泄露(Look-Ahead Bias) + +**定义**:在计算指标时,使用了当时不可能获得的未来数据。 + +**常见错误**: +```python +# 错误示例:使用当天最高价计算信号(当天收盘前不知道最高价) +signal = df['high'].rolling(20).max() # 错误! + +# 正确示例:使用前一天的最高价 +signal = df['high'].shift(1).rolling(20).max() # 正确 +``` + +**tradehk 的处理**:信号在 K 线收盘后计算,下一根 K 线开盘时执行,避免了未来数据泄露。 + +### 2.5 交易成本忽略(Transaction Cost Neglect) + +**加密货币交易成本构成**: + +| 成本类型 | 典型值 | 说明 | +|----------|--------|------| +| Maker 手续费 | 0.02-0.05% | 挂限价单 | +| Taker 手续费 | 0.04-0.1% | 吃市价单 | +| 滑点 | 0.01-0.5% | 取决于流动性和订单大小 | +| 资金费率 | ±0.01%/8h | 永续合约持仓成本 | + +**回测中的处理**: +```python +# 建议在回测中使用略高于实际的手续费,留出安全边际 +COMMISSION_RATE = 0.001 # 0.1%(含滑点) + +def calculate_pnl(entry_price, exit_price, side, size): + if side == 'LONG': + gross_pnl = (exit_price - entry_price) * size + else: + gross_pnl = (entry_price - exit_price) * size + + # 扣除双边手续费 + commission = (entry_price + exit_price) * size * COMMISSION_RATE + return gross_pnl - commission +``` + +--- + +## 三、绩效评估指标 + +### 3.1 收益类指标 + +**总收益率(Total Return)**: +$$R_{total} = \frac{最终净值 - 初始资金}{初始资金} \times 100\%$$ + +**年化收益率(CAGR)**: +$$CAGR = \left(\frac{最终净值}{初始资金}\right)^{\frac{1}{年数}} - 1$$ + +### 3.2 风险调整收益指标 + +**夏普比率(Sharpe Ratio)**: +$$Sharpe = \frac{年化收益率 - 无风险利率}{年化波动率}$$ + +| 夏普比率 | 评级 | +|----------|------| +| < 0 | 不可接受 | +| 0-0.5 | 较差 | +| 0.5-1.0 | 一般 | +| 1.0-2.0 | 良好 | +| > 2.0 | 优秀 | + +**索提诺比率(Sortino Ratio)**:只考虑下行波动率,更适合非对称收益分布: +$$Sortino = \frac{年化收益率 - 无风险利率}{下行波动率}$$ + +**卡尔玛比率(Calmar Ratio)**: +$$Calmar = \frac{年化收益率}{最大回撤}$$ + +### 3.3 风险类指标 + +**最大回撤(Maximum Drawdown)**: +$$MDD = \max_{t \in [0,T]} \left(\frac{峰值净值 - 当前净值}{峰值净值}\right)$$ + +**回撤持续时间**:从峰值到恢复峰值所需的时间,越短越好。 + +**VaR(风险价值)**:在给定置信水平下,未来某时间段内可能发生的最大损失。 + +### 3.4 交易质量指标 + +| 指标 | 计算方法 | 目标值 | +|------|----------|--------| +| 胜率 | 盈利交易数 / 总交易数 | > 50%(趋势策略可低于 50%) | +| 盈亏比 | 平均盈利 / 平均亏损 | > 1.5 | +| 期望值 | 胜率 × 盈亏比 - (1 - 胜率) | > 0 | +| 最大连续亏损 | 连续亏损的最大次数 | 越小越好 | + +--- + +## 四、Python 回测框架 + +### 4.1 主流回测库对比 + +| 框架 | 特点 | 适用场景 | +|------|------|----------| +| Backtrader | 功能全面,文档丰富 | 股票、期货 | +| Backtesting.py | 简洁易用,可视化好 | 快速原型 | +| QuantConnect | 云端,支持多资产 | 专业量化 | +| Freqtrade | 专为加密货币设计 | 加密货币 | +| VectorBT | 向量化,速度极快 | 大规模回测 | + +### 4.2 简单回测框架实现 + +```python +import pandas as pd +import numpy as np +from dataclasses import dataclass +from typing import List, Optional + +@dataclass +class Trade: + entry_time: pd.Timestamp + exit_time: Optional[pd.Timestamp] + side: str # 'LONG' or 'SHORT' + entry_price: float + exit_price: Optional[float] + size: float + pnl: Optional[float] = None + +class SimpleBacktester: + def __init__(self, initial_capital: float = 10000, commission: float = 0.001): + self.initial_capital = initial_capital + self.commission = commission + self.capital = initial_capital + self.trades: List[Trade] = [] + self.equity_curve = [] + + def run(self, df: pd.DataFrame, signals: pd.Series) -> dict: + """ + df: K 线数据(含 OHLCV) + signals: 信号序列(1=买入,-1=卖出,0=持仓) + """ + position = 0 + current_trade = None + + for i, (timestamp, row) in enumerate(df.iterrows()): + signal = signals.iloc[i] + + # 开多仓 + if signal == 1 and position == 0: + size = self.capital / row['close'] + cost = row['close'] * size * self.commission + self.capital -= cost + position = 1 + current_trade = Trade( + entry_time=timestamp, + exit_time=None, + side='LONG', + entry_price=row['close'], + exit_price=None, + size=size + ) + + # 平多仓 + elif signal == -1 and position == 1: + revenue = row['close'] * current_trade.size + cost = revenue * self.commission + pnl = (row['close'] - current_trade.entry_price) * current_trade.size - cost + self.capital += revenue - cost + + current_trade.exit_time = timestamp + current_trade.exit_price = row['close'] + current_trade.pnl = pnl + self.trades.append(current_trade) + position = 0 + current_trade = None + + # 记录净值曲线 + if position == 1 and current_trade: + unrealized_pnl = (row['close'] - current_trade.entry_price) * current_trade.size + self.equity_curve.append(self.capital + unrealized_pnl) + else: + self.equity_curve.append(self.capital) + + return self.calculate_metrics() + + def calculate_metrics(self) -> dict: + equity = pd.Series(self.equity_curve) + returns = equity.pct_change().dropna() + + total_return = (equity.iloc[-1] / self.initial_capital - 1) * 100 + max_drawdown = ((equity.cummax() - equity) / equity.cummax()).max() * 100 + sharpe = returns.mean() / returns.std() * np.sqrt(365 * 24) # 小时级别 + + winning_trades = [t for t in self.trades if t.pnl and t.pnl > 0] + win_rate = len(winning_trades) / len(self.trades) if self.trades else 0 + + return { + '总收益率': f"{total_return:.2f}%", + '最大回撤': f"{max_drawdown:.2f}%", + '夏普比率': f"{sharpe:.2f}", + '胜率': f"{win_rate:.2%}", + '总交易次数': len(self.trades), + '最终资金': f"${self.capital:.2f}" + } +``` + +--- + +## 五、前向测试(Walk-Forward Analysis) + +前向测试是最接近实盘的回测方法,通过滚动窗口模拟参数定期重新优化的过程: + +``` +时间轴:|---训练期---|---测试期---|---训练期---|---测试期---| + 窗口 1 窗口 2 + +流程: +1. 在训练期内优化参数 +2. 用优化后的参数在测试期内运行策略 +3. 滚动到下一个窗口 +4. 汇总所有测试期的绩效 +``` + +--- + +## 参考资料 + +- QuantStart. "Backtesting Systematic Trading Strategies in Python". https://www.quantstart.com/ +- Backtesting.py 文档:https://kernc.github.io/backtesting.py/ +- BigQuant 量化平台:https://bigquant.com/ diff --git a/08_风险管理/风险管理体系.md b/08_风险管理/风险管理体系.md new file mode 100644 index 0000000..e742522 --- /dev/null +++ b/08_风险管理/风险管理体系.md @@ -0,0 +1,249 @@ +# 风险管理体系 + +> 风险管理是量化交易中最重要的环节之一。长期成功的交易者与失败者的核心区别,往往不在于策略的胜率,而在于风险管理的质量。本文档构建完整的量化交易风险管理体系。 + +--- + +## 一、风险管理框架 + +### 1.1 风险层次结构 + +``` +账户级风险 + └── 最大总亏损限制(如账户的 20%) + └── 单日最大亏损限制(如账户的 5%) + └── 单笔交易最大风险(如账户的 1-2%) + └── 止损位设置 +``` + +### 1.2 tradehk 风险参数(参考) + +```typescript +interface RiskSettings { + maxLossPercent: number; // 最大亏损 %(默认 5%) + maxProfitPercent: number; // 最大盈利 % + stopLossPercent: number; // 固定止损 % + takeProfitPercent: number; // 固定止盈 % + useIndicatorStopLoss: boolean; // 使用指标止损 + useIndicatorTakeProfit: boolean; // 使用指标止盈 + autoStopLossMinutes: number; // 下单后 N 分钟内自动挂止损(默认 10) + leverage: number; // 杠杆倍数(默认 1) +} +``` + +--- + +## 二、仓位管理 + +### 2.1 固定比例法(Fixed Fractional) + +每笔交易风险固定为账户的固定比例(通常 1-2%): + +$$仓位大小 = \frac{账户资金 \times 风险比例}{入场价 - 止损价}$$ + +**示例**: +- 账户资金:10,000 USDT +- 风险比例:2%(200 USDT) +- BTC 入场价:100,000 USDT +- 止损价:98,000 USDT(止损幅度 2%) +- 仓位大小:200 / (100,000 - 98,000) = 0.1 BTC + +### 2.2 Kelly 公式 + +Kelly 公式计算理论最优仓位比例: + +$$f^* = \frac{p \times b - q}{b}$$ + +其中: +- $f^*$:最优仓位比例 +- $p$:胜率 +- $q = 1 - p$:败率 +- $b$:盈亏比(平均盈利 / 平均亏损) + +**示例**: +- 胜率 p = 0.55,盈亏比 b = 1.5 +- $f^* = (0.55 \times 1.5 - 0.45) / 1.5 = 0.25$(25%) + +**实践建议**:使用半 Kelly(12.5%)或四分之一 Kelly(6.25%),因为 Kelly 公式假设参数精确已知,实际中存在估计误差。 + +### 2.3 波动率调整仓位 + +根据市场波动率动态调整仓位,高波动时减仓,低波动时加仓: + +$$仓位大小 = \frac{目标波动率贡献}{当前资产波动率}$$ + +```python +def volatility_adjusted_position( + capital: float, + target_vol: float, # 目标波动率贡献(如 2%) + current_atr: float, # 当前 ATR + price: float +) -> float: + """ + 计算波动率调整后的仓位大小 + """ + dollar_atr = current_atr / price # ATR 占价格的百分比 + position_size = (capital * target_vol) / dollar_atr + return position_size +``` + +--- + +## 三、止损策略 + +### 3.1 固定止损 + +最简单的止损方式,入场后设置固定百分比的止损: + +``` +多头止损 = 入场价 × (1 - 止损百分比) +空头止损 = 入场价 × (1 + 止损百分比) +``` + +**适用场景**:简单策略,快速实现 + +**缺点**:不考虑市场波动性,可能过早被止损 + +### 3.2 ATR 动态止损 + +基于市场波动率设置止损,高波动时止损更宽,低波动时止损更紧: + +``` +多头止损 = 入场价 - N × ATR +空头止损 = 入场价 + N × ATR +``` + +**推荐参数**:N = 2-3(tradehk 使用 SuperTrend 的 3 × ATR) + +### 3.3 SuperTrend 跟踪止损 + +使用 SuperTrend 指标作为动态止损线,随趋势移动止损位: + +- 多头持仓:止损位 = SuperTrend 下轨(随价格上涨而上移) +- 空头持仓:止损位 = SuperTrend 上轨(随价格下跌而下移) + +**优势**:自动跟踪趋势,既能保护利润,又不会过早出局 + +### 3.4 时间止损 + +如果持仓超过一定时间仍未达到目标,强制平仓: + +```typescript +// tradehk 实现:下单后 N 分钟内自动挂止损 +autoStopLossMinutes: number; // 默认 10 分钟 +``` + +--- + +## 四、止盈策略 + +### 4.1 固定止盈 + +设置固定盈利目标,达到后平仓: + +``` +多头止盈 = 入场价 × (1 + 止盈百分比) +``` + +**建议盈亏比**:至少 1.5:1,理想情况下 2:1 或 3:1 + +### 4.2 分批止盈 + +将目标仓位分批平仓,锁定部分利润同时保留上涨空间: + +``` +第一批(50%):目标价 = 入场价 × 1.02(+2%) +第二批(30%):目标价 = 入场价 × 1.05(+5%) +第三批(20%):跟踪止损,让利润奔跑 +``` + +### 4.3 指标止盈 + +当反向信号出现时平仓,而非设置固定目标: + +- RSI 进入超买区(> 70)→ 平多仓 +- MACD 死叉 → 平多仓 +- SuperTrend 反转 → 平多仓 + +--- + +## 五、杠杆管理 + +### 5.1 杠杆与风险的关系 + +| 杠杆 | 2% 价格波动的账户影响 | 清算距离(假设 10% 保证金) | +|------|---------------------|---------------------------| +| 1x | 2% | 无清算 | +| 5x | 10% | 20% | +| 10x | 20% | 10% | +| 20x | 40% | 5% | + +**建议**:对于量化策略,建议使用 1-3 倍杠杆,避免因短期波动被清算。 + +### 5.2 tradehk 杠杆设置 + +tradehk 默认杠杆为 1(无杠杆),可在风险设置中调整。建议: +- 趋势跟踪策略:1-2 倍杠杆 +- 均值回归策略:1 倍杠杆(高频反转,不适合高杠杆) +- 套利策略:可适当使用 3-5 倍杠杆(风险较低) + +--- + +## 六、多策略风险分散 + +### 6.1 策略相关性管理 + +同时运行多个策略时,应确保策略之间的相关性较低: + +```python +import pandas as pd +import numpy as np + +def calculate_strategy_correlation(returns_dict: dict) -> pd.DataFrame: + """ + 计算多个策略收益率之间的相关性 + """ + returns_df = pd.DataFrame(returns_dict) + return returns_df.corr() + +# 理想情况:策略相关性 < 0.3 +# 如果两个策略相关性 > 0.7,考虑减少其中一个的仓位 +``` + +### 6.2 品种分散 + +在不同品种上运行策略,降低单一资产风险: + +- BTC 趋势策略 + ETH 趋势策略(相关性 ~0.7,部分分散) +- BTC 趋势策略 + XAUT 趋势策略(相关性 ~0.3,较好分散) +- 加密货币策略 + 代币化美股策略(相关性较低) + +--- + +## 七、极端风险管理 + +### 7.1 黑天鹅事件应对 + +加密货币市场历史上的极端事件: +- 2022 年 5 月:Luna/UST 崩盘,BTC 单日跌幅 > 30% +- 2022 年 11 月:FTX 破产,BTC 单周跌幅 > 25% +- 2020 年 3 月:新冠疫情,BTC 单日跌幅 > 50% + +**应对措施**: +- 设置账户级最大亏损限制(如 20%),触发后暂停所有策略 +- 在极端波动时(ATR 急剧扩大)自动减仓 +- 分散交易所风险,不将所有资金存放在单一交易所 + +### 7.2 交易所风险 + +- 不在单一交易所存放超过总资金的 30% +- 优先选择有保险基金的头部交易所(Binance、Coinbase) +- 定期将利润提现到冷钱包 + +--- + +## 参考资料 + +- tradehk 项目类型定义:`client/src/lib/types.ts`(RiskSettings 接口) +- Whaleportal. "Quantitative Crypto Trading: Risk Management". https://whaleportal.com/ +- Investopedia. "Kelly Criterion". https://www.investopedia.com/terms/k/kellycriterion.asp diff --git a/09_AI与机器学习/AI量化投资前沿.md b/09_AI与机器学习/AI量化投资前沿.md new file mode 100644 index 0000000..ee0ed08 --- /dev/null +++ b/09_AI与机器学习/AI量化投资前沿.md @@ -0,0 +1,316 @@ +# AI 量化投资前沿 + +> 本文档梳理人工智能在量化投资领域的最新进展,涵盖深度学习、强化学习和大语言模型(LLM)三个主要方向,并重点介绍与加密货币交易相关的研究成果。 + +--- + +## 一、AI 量化投资发展综述 + +根据 2025 年 arXiv 综述论文《From Deep Learning to LLMs: A survey of AI in Quantitative Investment》[^1],AI 在量化投资中的应用经历了三个阶段: + +### 1.1 传统统计阶段(1970s-2010s) + +以人工设计因子为主,依赖统计模型(线性回归、ARIMA 等)。核心工作流: + +``` +人工因子挖掘 → 因子检验 → 组合构建 → 风险控制 +``` + +**代表性方法**: +- Fama-French 三因子模型(市场、规模、价值) +- 动量因子、反转因子 +- 统计套利(协整检验) + +### 1.2 深度学习阶段(2010s-2020s) + +深度学习使自动特征提取成为可能,端到端学习替代人工因子设计。 + +**主要模型**: + +| 模型 | 特点 | 应用场景 | +|------|------|----------| +| LSTM | 处理时序依赖关系 | 价格预测、趋势识别 | +| Transformer | 自注意力机制,捕捉长距离依赖 | 多资产相关性建模 | +| CNN | 局部特征提取 | K 线图像识别 | +| GAN | 生成对抗网络 | 数据增强、压力测试 | +| Autoencoder | 降维、去噪 | 特征提取、异常检测 | + +### 1.3 大模型与 Agent 阶段(2020s-至今) + +LLM 能够处理非结构化数据(新闻、财报、社交媒体),强化学习 Agent 实现端到端自主决策。 + +--- + +## 二、深度学习价格预测 + +### 2.1 LSTM 价格预测 + +**原理**:LSTM(长短期记忆网络)通过门控机制解决传统 RNN 的梯度消失问题,适合处理金融时序数据。 + +**arXiv 论文参考**: +- 《Developing Cryptocurrency Trading Strategy Based on Autoencoder》(arXiv:2412.18202)[^2] + - 使用去噪自编码器提取价格序列的低维特征 + - 结合 LSTM 进行价格预测 + - 在 BTC、ETH 等主流币上验证 + +**Python 实现框架**: +```python +import torch +import torch.nn as nn + +class CryptoPriceLSTM(nn.Module): + def __init__(self, input_size=10, hidden_size=64, num_layers=2, output_size=1): + super().__init__() + self.lstm = nn.LSTM( + input_size=input_size, + hidden_size=hidden_size, + num_layers=num_layers, + batch_first=True, + dropout=0.2 + ) + self.fc = nn.Linear(hidden_size, output_size) + + def forward(self, x): + # x: (batch_size, seq_len, input_size) + lstm_out, _ = self.lstm(x) + # 取最后一个时间步的输出 + output = self.fc(lstm_out[:, -1, :]) + return output + +# 输入特征:OHLCV + 技术指标(RSI、MACD、EWO 等) +# 输出:下一根 K 线的涨跌方向(分类)或价格(回归) +``` + +### 2.2 Transformer 在量化中的应用 + +**原理**:Transformer 的自注意力机制能够同时考虑序列中所有时间步之间的关系,特别适合捕捉市场中的长距离依赖。 + +**arXiv 论文参考**: +- 《Technical Analysis Meets Machine Learning: Bitcoin Evidence》(arXiv:2511.00665)[^3] + - 比较 LightGBM 和 LSTM 在 BTC 技术分析信号预测中的表现 + - 发现机器学习模型能够有效整合多个技术指标信号 + +--- + +## 三、强化学习交易策略 + +### 3.1 强化学习框架 + +**核心概念**: +- **状态(State)**:市场当前状态(价格、指标值、持仓等) +- **动作(Action)**:买入、卖出、持仓 +- **奖励(Reward)**:收益率、夏普比率等 +- **策略(Policy)**:从状态到动作的映射函数 + +**arXiv 论文参考**: +- 《Reinforcement Learning Framework for Quantitative Trading》(arXiv:2411.07585)[^4] + - 在 30 分钟加密货币交易窗口内测试 + - 使用 PPO(近端策略优化)算法 + +- 《Meta-Learning Reinforcement Learning for Crypto-Return Prediction》(arXiv:2509.09751)[^5] + - 提出 Meta-RL-Crypto 框架,结合元学习和强化学习 + - 解决加密货币市场非平稳性问题 + +### 3.2 FinRL 框架 + +FinRL 是专为金融强化学习设计的开源框架: + +```python +# FinRL 使用示例(加密货币交易) +from finrl.meta.env_cryptocurrency_trading.env_multiple_crypto import CryptoEnv +from finrl.agents.stablebaselines3.models import DRLAgent + +# 创建交易环境 +env = CryptoEnv( + df=price_data, + initial_amount=10000, + crypto_dim=5, # 5 种加密货币 + tech_indicator_list=['macd', 'rsi', 'cci', 'dx'] +) + +# 训练 PPO 智能体 +agent = DRLAgent(env=env) +model = agent.get_model("ppo") +trained_model = agent.train_model( + model=model, + tb_log_name='ppo_crypto', + total_timesteps=50000 +) +``` + +### 3.3 强化学习的挑战 + +- **非平稳性**:加密货币市场规律随时间变化,历史经验可能失效 +- **稀疏奖励**:长期持仓策略中,大多数时间步奖励为零 +- **过拟合**:RL 模型容易过拟合历史数据 +- **计算成本**:训练需要大量计算资源 + +--- + +## 四、大语言模型(LLM)在量化中的应用 + +### 4.1 情绪分析 + +LLM 可以分析新闻、社交媒体、财报等非结构化文本,提取市场情绪信号: + +```python +from openai import OpenAI + +client = OpenAI() + +def analyze_crypto_sentiment(news_text: str) -> dict: + """ + 使用 LLM 分析加密货币新闻情绪 + """ + response = client.chat.completions.create( + model="gpt-4.1-mini", + messages=[ + { + "role": "system", + "content": "你是一个专业的加密货币市场分析师。请分析以下新闻对市场的影响。" + }, + { + "role": "user", + "content": f""" + 请分析以下新闻的市场情绪,并给出: + 1. 情绪评分(-10 到 +10,负数看空,正数看多) + 2. 影响的主要资产 + 3. 预期影响持续时间 + 4. 置信度(0-100%) + + 新闻内容:{news_text} + """ + } + ], + response_format={"type": "json_object"} + ) + return response.choices[0].message.content + +# 应用场景: +# - 监控 Twitter/X 上的 KOL 发言 +# - 分析 SEC 文件对代币化股票的影响 +# - 解读美联储声明对加密货币市场的影响 +``` + +### 4.2 LLM Alpha 因子生成 + +**arXiv 论文参考**: +- 《From Deep Learning to LLMs: A survey of AI in Quantitative Investment》(arXiv:2503.21422)[^1] + - LLM 可以自动生成 Alpha 因子代码 + - 通过迭代优化,LLM Agent 能够发现人工难以发现的规律 + +**工作流程**: +``` +1. LLM 分析历史市场数据特征 +2. 生成候选 Alpha 因子代码 +3. 自动回测评估因子有效性 +4. 筛选有效因子,组合成策略 +5. 循环迭代优化 +``` + +### 4.3 多模态分析 + +结合 K 线图像和文本数据的多模态分析: + +```python +# 将 K 线图转换为图像,输入视觉 LLM 分析 +# 示例:使用 GPT-4V 分析 K 线形态 +def analyze_kline_pattern(image_path: str) -> str: + import base64 + + with open(image_path, 'rb') as f: + image_data = base64.b64encode(f.read()).decode() + + response = client.chat.completions.create( + model="gpt-4.1-mini", + messages=[ + { + "role": "user", + "content": [ + { + "type": "image_url", + "image_url": {"url": f"data:image/png;base64,{image_data}"} + }, + { + "type": "text", + "text": "请分析这张 K 线图的技术形态,识别支撑位、阻力位和可能的趋势方向。" + } + ] + } + ] + ) + return response.choices[0].message.content +``` + +--- + +## 五、机器学习特征工程 + +### 5.1 技术指标作为特征 + +将 tradehk 中的所有技术指标作为机器学习模型的输入特征: + +```python +def create_feature_matrix(df: pd.DataFrame) -> pd.DataFrame: + """ + 从 K 线数据创建机器学习特征矩阵 + """ + features = pd.DataFrame(index=df.index) + + # 价格特征 + features['returns_1'] = df['close'].pct_change(1) + features['returns_5'] = df['close'].pct_change(5) + features['returns_20'] = df['close'].pct_change(20) + + # 趋势特征 + features['ma10'] = df['close'].rolling(10).mean() + features['ma100'] = df['close'].rolling(100).mean() + features['price_ma10_ratio'] = df['close'] / features['ma10'] + + # 动量特征 + features['rsi14'] = calculate_rsi(df['close'], 14) + features['macd'] = calculate_macd(df['close']) + features['ewo'] = calculate_ewo(df['close']) + + # 波动率特征 + features['atr14'] = calculate_atr(df, 14) + features['bb_width'] = calculate_bb_width(df['close'], 20) + + # 成交量特征 + features['volume_ratio'] = df['volume'] / df['volume'].rolling(20).mean() + features['obv'] = calculate_obv(df['close'], df['volume']) + + return features.dropna() +``` + +### 5.2 标签构建 + +```python +def create_labels(df: pd.DataFrame, horizon: int = 5, threshold: float = 0.01) -> pd.Series: + """ + 构建分类标签 + horizon: 预测未来 N 根 K 线 + threshold: 涨跌幅阈值 + """ + future_returns = df['close'].pct_change(horizon).shift(-horizon) + + labels = pd.Series(0, index=df.index) # 0 = 持仓 + labels[future_returns > threshold] = 1 # 1 = 买入 + labels[future_returns < -threshold] = -1 # -1 = 卖出 + + return labels +``` + +--- + +## 参考资料 + +[^1]: Cao, B. et al. "From Deep Learning to LLMs: A survey of AI in Quantitative Investment". arXiv:2503.21422, 2025. https://arxiv.org/abs/2503.21422 + +[^2]: "Developing Cryptocurrency Trading Strategy Based on Autoencoder". arXiv:2412.18202. https://arxiv.org/abs/2412.18202 + +[^3]: "Technical Analysis Meets Machine Learning: Bitcoin Evidence". arXiv:2511.00665, 2025. https://arxiv.org/abs/2511.00665 + +[^4]: "Reinforcement Learning Framework for Quantitative Trading". arXiv:2411.07585, 2024. https://arxiv.org/abs/2411.07585 + +[^5]: "Meta-Learning Reinforcement Learning for Crypto-Return Prediction". arXiv:2509.09751, 2025. https://arxiv.org/abs/2509.09751 diff --git a/10_链上数据分析/链上数据分析指南.md b/10_链上数据分析/链上数据分析指南.md new file mode 100644 index 0000000..5272996 --- /dev/null +++ b/10_链上数据分析/链上数据分析指南.md @@ -0,0 +1,226 @@ +# 链上数据分析指南 + +> 链上数据是加密货币市场独有的信息优势,提供了传统金融市场无法获得的透明度。本文档系统介绍链上数据的主要指标、分析方法和实际应用。 + +--- + +## 一、链上数据的独特价值 + +与传统金融市场相比,加密货币的区块链数据完全公开透明,任何人都可以查询: + +| 数据类型 | 传统金融 | 加密货币链上 | +|----------|----------|-------------| +| 大额交易 | 延迟披露(SEC 13F 季报) | 实时可见 | +| 机构持仓 | 部分披露 | 完全透明 | +| 资金流向 | 不可见 | 实时追踪 | +| 网络活跃度 | 不适用 | 活跃地址数、交易量 | + +--- + +## 二、核心链上指标 + +### 2.1 SOPR(已实现利润比率) + +**定义**:所有链上移动的 UTXO 的已实现价格与当前价格之比。 + +$$SOPR = \frac{已实现价格(卖出价格)}{已支付价格(买入价格)}$$ + +**解读**: +- SOPR > 1:整体市场处于盈利状态,卖出者获利 +- SOPR < 1:整体市场处于亏损状态,卖出者亏损 +- SOPR 从 < 1 回升到 1:亏损者停止抛售,市场可能触底 + +**交易信号**: +- 熊市中 SOPR 持续 < 1 且开始回升 → 底部信号 +- 牛市中 SOPR 急剧上升(> 1.05)→ 获利了结压力大 + +### 2.2 MVRV(市值/已实现价值) + +**定义**:当前市值与已实现市值(所有 BTC 按最后移动时的价格计算)之比。 + +$$MVRV = \frac{市值}{已实现市值}$$ + +**历史规律**: + +| MVRV 值 | 市场状态 | 历史操作建议 | +|---------|----------|-------------| +| > 3.5 | 极度高估 | 历史牛市顶部区域 | +| 2-3.5 | 高估 | 谨慎持仓 | +| 1-2 | 合理 | 正常持仓 | +| < 1 | 低估 | 历史底部区域,买入机会 | + +### 2.3 交易所净流入/流出 + +**定义**:流入交易所的 BTC 数量减去流出交易所的 BTC 数量。 + +**解读**: +- **净流入(正值)**:更多 BTC 流向交易所,抛售压力增加,看空 +- **净流出(负值)**:更多 BTC 离开交易所(转入冷钱包),持有意愿增强,看多 + +**数据来源**:Glassnode、CryptoQuant + +### 2.4 活跃地址数(Active Addresses) + +**定义**:在特定时间段内参与交易(发送或接收)的唯一地址数量。 + +**应用**: +- 活跃地址数上升 + 价格上涨 = 健康的牛市 +- 活跃地址数下降 + 价格上涨 = 可能是虚假上涨,警惕回调 +- 活跃地址数急剧上升 = 市场关注度提升,可能是大行情前兆 + +### 2.5 矿工持仓变化(Miner Position Index, MPI) + +**定义**:矿工每日发送到交易所的 BTC 数量与过去 365 天平均值之比。 + +**解读**: +- MPI > 2:矿工大量抛售,看空信号 +- MPI < 0:矿工积累,看多信号 + +--- + +## 三、巨鲸监控 + +### 3.1 什么是巨鲸 + +持有大量加密货币的地址,通常被称为"巨鲸"。其交易行为对市场有显著影响。 + +**BTC 巨鲸分类**: +- 小鲸:持有 100-1000 BTC +- 中鲸:持有 1000-10000 BTC +- 大鲸:持有 > 10000 BTC(通常是交易所或机构) + +### 3.2 巨鲸监控工具 + +| 工具 | 特点 | 访问方式 | +|------|------|----------| +| Nansen | 标记 500M+ 钱包,智能资金追踪 | 付费 API | +| Whale Alert | 实时大额交易提醒 | Telegram Bot | +| Arkham Intelligence | 去匿名化分析 | 网页/API | +| Etherscan | 以太坊地址查询 | 免费 API | + +### 3.3 巨鲸行为模式 + +**积累阶段**: +- 巨鲸在低价区持续小额买入(避免价格冲击) +- 交易所 BTC 余额持续下降 +- 链上大额转账频率降低 + +**分发阶段**: +- 巨鲸开始将 BTC 转入交易所 +- 链上大额转账增加 +- 交易所 BTC 余额开始上升 + +--- + +## 四、衍生品链上数据 + +### 4.1 资金费率(Funding Rate) + +**来源**:Coinglass(https://www.coinglass.com/) + +**极端值信号**: +- 资金费率 > 0.1%(8 小时):多头过度拥挤,可能反转 +- 资金费率 < -0.05%(8 小时):空头过度拥挤,可能反转 + +**套利策略**:当资金费率持续为正时,可以做空永续合约 + 持有现货,赚取资金费率收益。 + +### 4.2 未平仓合约(Open Interest) + +**解读**: +| 价格 | 未平仓合约 | 解读 | +|------|-----------|------| +| 上涨 | 增加 | 多头主导,趋势延续 | +| 上涨 | 减少 | 空头平仓推动,可能是假突破 | +| 下跌 | 增加 | 空头主导,趋势延续 | +| 下跌 | 减少 | 多头平仓推动,可能是底部 | + +### 4.3 清算热力图 + +清算热力图显示不同价格水平上的累积清算量,帮助识别: +- **多头清算密集区**:价格下跌时的支撑位(多头被清算后价格可能反弹) +- **空头清算密集区**:价格上涨时的阻力位(空头被清算后价格可能回落) + +**数据来源**:Coinglass 清算热力图 + +--- + +## 五、DeFi 链上数据 + +### 5.1 TVL(总锁仓量) + +**定义**:锁定在 DeFi 协议中的资产总价值。 + +**应用**: +- TVL 上升 + 代币价格上涨 = 健康增长 +- TVL 下降 + 代币价格上涨 = 可能是虚假繁荣 + +**数据来源**:DeFiLlama(https://defillama.com/) + +### 5.2 DEX 交易量 + +**Uniswap 链上数据**(通过 The Graph 查询): +```graphql +query { + pools( + first: 10 + orderBy: volumeUSD + orderDirection: desc + where: { volumeUSD_gt: "1000000" } + ) { + id + token0 { symbol } + token1 { symbol } + volumeUSD + tvlUSD + feeTier + } +} +``` + +--- + +## 六、链上数据与技术指标结合 + +### 6.1 综合评分模型 + +将链上数据与技术指标结合,构建综合评分: + +```python +def calculate_composite_score( + technical_score: float, # 技术指标评分(-10 到 +10) + onchain_score: float, # 链上数据评分(-10 到 +10) + sentiment_score: float # 情绪数据评分(-10 到 +10) +) -> dict: + """ + 综合评分模型 + 权重:技术指标 50%,链上数据 30%,情绪 20% + """ + composite = ( + technical_score * 0.5 + + onchain_score * 0.3 + + sentiment_score * 0.2 + ) + + return { + 'composite_score': composite, + 'signal': 'BUY' if composite > 3 else ('SELL' if composite < -3 else 'NEUTRAL'), + 'strength': 'STRONG' if abs(composite) > 6 else ('MODERATE' if abs(composite) > 3 else 'WEAK') + } +``` + +### 6.2 实战案例:BTC 底部识别 + +历史上 BTC 底部往往同时满足: +1. **技术面**:RSI < 30,价格触及布林带下轨,EWO < 0 但开始回升 +2. **链上面**:MVRV < 1,SOPR < 1 但开始回升,交易所净流出 +3. **情绪面**:恐惧贪婪指数 < 20(极度恐惧) + +--- + +## 参考资料 + +- Glassnode 链上指标:https://glassnode.com/metrics +- Nansen 链上分析:https://www.nansen.ai/ +- Coinglass 衍生品数据:https://www.coinglass.com/ +- DeFiLlama TVL 数据:https://defillama.com/ +- Gate.io. "链上数据分析是什么,鲸鱼动向会如何影响加密货币价格". https://web3.gate.com/zh/crypto-wiki/article/what-is-on-chain-data-analysis-and-how-do-whale-movements-affect-crypto-prices-20260112 diff --git a/11_参考文献/arXiv论文与资源汇总.md b/11_参考文献/arXiv论文与资源汇总.md new file mode 100644 index 0000000..3e14d48 --- /dev/null +++ b/11_参考文献/arXiv论文与资源汇总.md @@ -0,0 +1,142 @@ +# arXiv 论文与资源汇总 + +> 本文档汇总量化交易领域的重要 arXiv 论文、开源项目和学习资源,所有链接均可直接访问。 + +--- + +## 一、arXiv 核心论文 + +### 1.1 综述类 + +| 论文标题 | arXiv 编号 | 发表时间 | 核心内容 | +|----------|-----------|----------|----------| +| From Deep Learning to LLMs: A survey of AI in Quantitative Investment | [2503.21422](https://arxiv.org/abs/2503.21422) | 2025-03 | AI 在量化投资全流程的应用综述,从传统统计到 LLM Agent | +| A Comprehensive Analysis of Machine Learning Models for Algorithmic Trading | [2407.18334](https://arxiv.org/abs/2407.18334) | 2024-07 | 评估 41 个机器学习模型在 BTC 价格预测中的表现 | +| Machine Learning Integration in Cryptocurrency Trading: A Systematic Review | ResearchSquare | 2025 | 系统综述 ML 在加密货币交易中的应用 | + +### 1.2 深度学习价格预测 + +| 论文标题 | arXiv 编号 | 发表时间 | 核心内容 | +|----------|-----------|----------|----------| +| Developing Cryptocurrency Trading Strategy Based on Autoencoder | [2412.18202](https://arxiv.org/abs/2412.18202) | 2024-12 | 去噪自编码器 + 机器学习预测加密货币价格 | +| Technical Analysis Meets Machine Learning: Bitcoin Evidence | [2511.00665](https://arxiv.org/abs/2511.00665) | 2025-11 | LightGBM 和 LSTM 在 BTC 技术分析中的对比 | +| Achilles, Neural Network to Predict the Gold Vs US Dollar Integration | [2410.21291](https://arxiv.org/abs/2410.21291) | 2024-10 | 神经网络预测黄金/美元波动性 | +| Deep Learning for VWAP Execution in Crypto Markets | [2502.13722](https://arxiv.org/abs/2502.13722) | 2025-02 | 深度学习优化加密货币 VWAP 执行 | + +### 1.3 强化学习交易 + +| 论文标题 | arXiv 编号 | 发表时间 | 核心内容 | +|----------|-----------|----------|----------| +| Reinforcement Learning Framework for Quantitative Trading | [2411.07585](https://arxiv.org/abs/2411.07585) | 2024-11 | 量化交易强化学习框架,在加密货币 30 分钟窗口测试 | +| Meta-Learning Reinforcement Learning for Crypto-Return Prediction | [2509.09751](https://arxiv.org/abs/2509.09751) | 2025-09 | Meta-RL-Crypto,解决加密货币非平稳性问题 | +| News-Aware Direct Reinforcement Trading for Financial Markets | [2510.19173](https://arxiv.org/abs/2510.19173) | 2025-10 | 结合新闻感知的强化学习交易 | +| FinRL Contest 2024: Cryptocurrency Trading with Ensemble Learning | [2504.02281](https://arxiv.org/abs/2504.02281) | 2025-04 | 集成学习方法训练 BTC 交易智能体 | + +### 1.4 投资组合管理 + +| 论文标题 | arXiv 编号 | 发表时间 | 核心内容 | +|----------|-----------|----------|----------| +| Long-only cryptocurrency portfolio management by ranking the assets | [2512.08124](https://arxiv.org/abs/2512.08124) | 2025-12 | 基于资产排名的加密货币投资组合管理 | + +--- + +## 二、重要开源项目 + +### 2.1 量化交易框架 + +| 项目 | GitHub | 语言 | 特点 | +|------|--------|------|------| +| Freqtrade | https://github.com/freqtrade/freqtrade | Python | 专为加密货币设计,支持 Binance、Bybit 等 | +| Backtrader | https://github.com/mementum/backtrader | Python | 功能全面的回测框架 | +| VectorBT | https://github.com/polakowo/vectorbt | Python | 向量化回测,速度极快 | +| FinRL | https://github.com/AI4Finance-Foundation/FinRL | Python | 金融强化学习框架 | +| QTSBE | https://github.com/simonpotel/QTSBE | Python | 量化交易策略回测引擎 | + +### 2.2 数据工具 + +| 项目 | 链接 | 用途 | +|------|------|------| +| CCXT | https://github.com/ccxt/ccxt | 统一的加密货币交易所 API | +| Pandas-TA | https://github.com/twopirllc/pandas-ta | 技术指标计算库 | +| TA-Lib | https://ta-lib.org/ | 经典技术分析库 | +| Glassnode API | https://docs.glassnode.com/ | 链上数据 API | + +--- + +## 三、重要数据平台 + +### 3.1 行情数据 + +| 平台 | 链接 | 数据类型 | 费用 | +|------|------|----------|------| +| Binance API | https://binance-docs.github.io/apidocs/ | K线、Tick、深度 | 免费 | +| CoinGecko API | https://www.coingecko.com/en/api | 价格、市值 | 免费/付费 | +| CryptoCompare | https://min-api.cryptocompare.com/ | 历史 K线 | 免费/付费 | +| Yahoo Finance | https://finance.yahoo.com/ | 代币化股票、传统资产 | 免费 | + +### 3.2 链上数据 + +| 平台 | 链接 | 特点 | +|------|------|------| +| Glassnode | https://glassnode.com/ | 最全面的比特币链上指标 | +| Nansen | https://www.nansen.ai/ | 钱包标签,智能资金追踪 | +| Dune Analytics | https://dune.com/ | 自定义 SQL 查询链上数据 | +| The Graph | https://thegraph.com/ | DeFi 协议数据 GraphQL | +| CryptoQuant | https://cryptoquant.com/ | 交易所流量、矿工数据 | + +### 3.3 衍生品数据 + +| 平台 | 链接 | 数据类型 | +|------|------|----------| +| Coinglass | https://www.coinglass.com/ | 资金费率、未平仓合约、清算 | +| Laevitas | https://laevitas.ch/ | 期权数据 | +| Skew | https://skew.com/ | 期权隐含波动率 | + +--- + +## 四、学习资源 + +### 4.1 中文资源 + +| 资源 | 链接 | 内容 | +|------|------|------| +| BigQuant 量化平台 | https://bigquant.com/ | 量化策略开发、回测 | +| 掘金量化 | https://www.myquant.cn/ | 量化交易平台 | +| 知乎量化专栏 | https://www.zhihu.com/topic/19558476 | 量化交易讨论 | +| Bybit Learn | https://learn.bybit.com/zh-my/ | 加密货币技术分析 | + +### 4.2 英文资源 + +| 资源 | 链接 | 内容 | +|------|------|------| +| QuantStart | https://www.quantstart.com/ | 量化交易系统化教程 | +| QuantInsti | https://blog.quantinsti.com/ | 量化金融课程和博客 | +| Investopedia | https://www.investopedia.com/ | 金融术语和策略百科 | +| TradingView | https://www.tradingview.com/ | 图表分析、Pine Script | + +--- + +## 五、XAUT 和代币化股票专项资源 + +| 资源 | 链接 | 内容 | +|------|------|------| +| Tether Gold 官网 | https://gold.tether.to/ | XAUT 官方信息 | +| Paxos Gold | https://paxos.com/paxgold/ | PAXG 官方信息 | +| MEXC xStocks | https://www.mexc.com/ | 代币化美股交易 | +| PancakeSwap 代币化股票 | https://pancakeswap.finance/ | DEX 代币化股票永续合约 | +| Mudrex XAUT 分析 | https://mudrex.com/learn/gold-futures-historical-analysis-xaut/ | XAUT 量化分析 | + +--- + +## 六、社区与讨论 + +| 社区 | 链接 | 特点 | +|------|------|------| +| r/algotrading | https://www.reddit.com/r/algotrading/ | 算法交易讨论 | +| r/CryptoCurrency | https://www.reddit.com/r/CryptoCurrency/ | 加密货币综合讨论 | +| Telegram 量化群 | 各大交易所官方群 | 实时信号和讨论 | +| Discord QuantConnect | https://discord.gg/quantconnect | 量化交易社区 | + +--- + +*最后更新:2026-03-05* diff --git a/README.md b/README.md new file mode 100644 index 0000000..f5807b2 --- /dev/null +++ b/README.md @@ -0,0 +1,79 @@ +# 量化交易知识库(QuantKnowledge) + +> **定位**:面向加密货币(CEX/DEX)、黄金代币(XAUT)、代币化美股(AAPL、TSLA 等)的量化交易全栈知识体系。所有内容本地化存储,支持引用链接,全部中文化。 + +--- + +## 知识库结构 + +| 目录 | 内容 | +|------|------| +| `01_基础理论/` | 量化交易基础概念、市场微观结构、价格形成机制 | +| `02_技术指标/` | 全套技术指标原理、公式、参数调优指南 | +| `03_交易策略/` | 趋势跟踪、均值回归、套利、动量等策略详解 | +| `04_交易信号系统/` | 多指标共振信号引擎设计与实现(参考 tradehk) | +| `05_市场品种/` | 加密货币、XAUT 黄金、代币化美股品种分析 | +| `06_数据流程/` | 数据采集、清洗、存储、实时流处理流程 | +| `07_回测框架/` | 回测方法论、常见偏差规避、绩效评估指标 | +| `08_风险管理/` | 仓位管理、止损止盈、最大回撤控制、Kelly 公式 | +| `09_AI与机器学习/` | 深度学习、强化学习、LLM 在量化投资中的应用 | +| `10_链上数据分析/` | 链上指标、巨鲸监控、资金流向、衍生品数据 | +| `11_参考文献/` | arXiv 论文摘要、外部资源链接汇总 | +| `samples/` | Python 示例代码、回测样本、数据样本 | +| `assets/` | 图表图片、数据文件 | + +--- + +## 快速导航 + +### 核心指标体系(来自 tradehk 项目) + +tradehk 项目实现了以下完整指标体系,本知识库对其进行深度解析: + +- **趋势类**:MA(简单移动均线)、EMA(指数移动均线)、SuperTrend(超级趋势线) +- **动量类**:EWO(艾略特波浪振荡器)、MACD、AO(动量振荡器)、RSI、KDJ、Stoch、StochRSI +- **波动率类**:Bollinger Bands(布林带)、TTM Squeeze(挤压动量)、ATR(真实波动幅度) +- **成交量类**:OBV(能量潮)、MFI(资金流量指数)、成交量收缩检测 +- **趋势强度类**:DMI/ADX(趋势方向指数) + +### 信号系统架构 + +tradehk 采用**多指标共振评分机制**: +- 核心信号:MACD 金叉/死叉、AO 穿越零轴、MA 多头/空头排列(始终启用) +- 可选信号:RSI、KDJ、Stoch、布林带、SuperTrend、DMI/ADX(可配置) +- 大周期方向过滤:基于 EWO + MACD + AO 的 4h/12h 趋势偏向判断 + +--- + +## 适用市场 + +本知识库覆盖以下市场品种: + +**加密货币(CEX)** +- BTC/USDT、ETH/USDT、BNB/USDT 等主流币对 +- DOGE、SOL、AVAX 等热门山寨币 +- 永续合约、现货交易 + +**加密货币(DEX)** +- Uniswap、PancakeSwap 等 DEX 流动性池 +- 链上套利、MEV 策略 + +**黄金代币** +- XAUT(Tether Gold):1 枚 = 1 金衡盎司实物黄金 +- PAXG(Paxos Gold):与 XAUT 配对套利 + +**代币化美股** +- AAPL(苹果)、TSLA(特斯拉)、NVDA(英伟达)等 +- 在 Binance、MEXC、PancakeSwap 等平台可交易 + +--- + +## 更新日志 + +| 日期 | 版本 | 更新内容 | +|------|------|----------| +| 2026-03-05 | v1.0 | 初始版本,基于 tradehk 项目指标体系构建 | + +--- + +*本知识库由 Manus AI 构建,持续更新中。* diff --git a/samples/backtest_sample.py b/samples/backtest_sample.py new file mode 100644 index 0000000..53da264 --- /dev/null +++ b/samples/backtest_sample.py @@ -0,0 +1,280 @@ +""" +量化交易回测样本 - MACD + EWO 趋势跟踪策略 +基于 tradehk 项目的信号系统进行历史回测 + +使用方法: + pip install pandas numpy matplotlib requests + python backtest_sample.py +""" + +import pandas as pd +import numpy as np +import requests +import json +from datetime import datetime + + +# ============================================================ +# 数据获取 +# ============================================================ + +def fetch_binance_klines(symbol: str, interval: str, limit: int = 1000) -> pd.DataFrame: + url = "https://api.binance.com/api/v3/klines" + params = {"symbol": symbol, "interval": interval, "limit": limit} + resp = requests.get(url, params=params, timeout=10) + resp.raise_for_status() + data = resp.json() + df = pd.DataFrame(data, columns=[ + 'timestamp', 'open', 'high', 'low', 'close', 'volume', + 'close_time', 'quote_volume', 'trades', 'taker_buy_base', + 'taker_buy_quote', 'ignore' + ]) + df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms') + for col in ['open', 'high', 'low', 'close', 'volume']: + df[col] = df[col].astype(float) + return df[['timestamp', 'open', 'high', 'low', 'close', 'volume']].set_index('timestamp') + + +# ============================================================ +# 指标计算 +# ============================================================ + +def calc_ema(s, n): return s.ewm(span=n, adjust=False).mean() +def calc_sma(s, n): return s.rolling(n).mean() +def calc_rma(s, n): return s.ewm(alpha=1/n, adjust=False).mean() + +def calc_macd(close, fast=10, slow=20, signal=10): + macd = calc_ema(close, fast) - calc_ema(close, slow) + sig = calc_ema(macd, signal) + return macd, sig, macd - sig + +def calc_ewo(close): + return calc_ema(close, 5) - calc_ema(close, 35) + +def calc_ao(df): + mid = (df['high'] + df['low']) / 2 + return calc_sma(mid, 5) - calc_sma(mid, 34) + +def calc_rsi(close, period=14): + delta = close.diff() + gain = calc_rma(delta.clip(lower=0), period) + loss = calc_rma((-delta).clip(lower=0), period) + rs = gain / loss.replace(0, np.nan) + return 100 - 100 / (1 + rs) + +def calc_atr(df, period=14): + tr = pd.concat([ + df['high'] - df['low'], + (df['high'] - df['close'].shift(1)).abs(), + (df['low'] - df['close'].shift(1)).abs() + ], axis=1).max(axis=1) + return calc_rma(tr, period) + + +# ============================================================ +# 策略:MACD 金叉/死叉 + EWO 大方向过滤 +# ============================================================ + +def generate_signals(df: pd.DataFrame) -> pd.DataFrame: + """ + 策略逻辑: + - 大方向:EWO > 0 看多,EWO < 0 看空 + - 入场:MACD 金叉(大方向看多时)或死叉(大方向看空时) + - 止损:ATR 动态止损(2 × ATR) + """ + close = df['close'] + + macd_line, signal_line, histogram = calc_macd(close) + ewo = calc_ewo(close) + ao = calc_ao(df) + rsi = calc_rsi(close) + atr = calc_atr(df) + ma10 = calc_sma(close, 10) + ma100 = calc_sma(close, 100) + + signals = pd.DataFrame(index=df.index) + signals['close'] = close + signals['macd'] = macd_line + signals['signal'] = signal_line + signals['histogram'] = histogram + signals['ewo'] = ewo + signals['ao'] = ao + signals['rsi'] = rsi + signals['atr'] = atr + signals['ma10'] = ma10 + signals['ma100'] = ma100 + + # MACD 金叉/死叉 + signals['macd_cross_up'] = (macd_line > signal_line) & (macd_line.shift(1) <= signal_line.shift(1)) + signals['macd_cross_down'] = (macd_line < signal_line) & (macd_line.shift(1) >= signal_line.shift(1)) + + # 大方向过滤(EWO) + signals['trend_bullish'] = ewo > 0 + signals['trend_bearish'] = ewo < 0 + + # 最终信号 + signals['buy_signal'] = signals['macd_cross_up'] & signals['trend_bullish'] + signals['sell_signal'] = signals['macd_cross_down'] & signals['trend_bearish'] + + return signals.dropna() + + +# ============================================================ +# 回测引擎 +# ============================================================ + +def backtest(df: pd.DataFrame, initial_capital: float = 10000, commission: float = 0.001) -> dict: + """ + 简单回测引擎 + - 固定仓位:每次使用全部资金 + - 止损:2 × ATR + - 止盈:4 × ATR(2:1 盈亏比) + """ + signals = generate_signals(df) + + capital = initial_capital + position = 0 # 0=空仓, 1=多头 + entry_price = 0 + stop_loss = 0 + take_profit = 0 + + trades = [] + equity_curve = [capital] + + for i in range(1, len(signals)): + row = signals.iloc[i] + prev_row = signals.iloc[i-1] + + # 检查止损/止盈 + if position == 1: + if row['close'] <= stop_loss: + # 止损出场 + pnl = (row['close'] - entry_price) * (capital / entry_price) + pnl -= abs(pnl) * commission * 2 + capital += pnl + trades.append({ + 'type': '止损出场', + 'entry': entry_price, + 'exit': row['close'], + 'pnl': pnl, + 'pnl_pct': (row['close'] - entry_price) / entry_price * 100 + }) + position = 0 + elif row['close'] >= take_profit: + # 止盈出场 + pnl = (row['close'] - entry_price) * (capital / entry_price) + pnl -= abs(pnl) * commission * 2 + capital += pnl + trades.append({ + 'type': '止盈出场', + 'entry': entry_price, + 'exit': row['close'], + 'pnl': pnl, + 'pnl_pct': (row['close'] - entry_price) / entry_price * 100 + }) + position = 0 + elif row['sell_signal']: + # 信号反转出场 + pnl = (row['close'] - entry_price) * (capital / entry_price) + pnl -= abs(pnl) * commission * 2 + capital += pnl + trades.append({ + 'type': '信号出场', + 'entry': entry_price, + 'exit': row['close'], + 'pnl': pnl, + 'pnl_pct': (row['close'] - entry_price) / entry_price * 100 + }) + position = 0 + + # 开仓 + if position == 0 and row['buy_signal']: + entry_price = row['close'] + atr = row['atr'] + stop_loss = entry_price - 2 * atr + take_profit = entry_price + 4 * atr + position = 1 + capital -= capital * commission # 入场手续费 + + # 记录净值 + if position == 1: + unrealized = (row['close'] - entry_price) * (capital / entry_price) + equity_curve.append(capital + unrealized) + else: + equity_curve.append(capital) + + # 计算绩效指标 + equity = pd.Series(equity_curve) + returns = equity.pct_change().dropna() + + total_return = (equity.iloc[-1] / initial_capital - 1) * 100 + max_drawdown = ((equity.cummax() - equity) / equity.cummax()).max() * 100 + + if returns.std() > 0: + sharpe = returns.mean() / returns.std() * np.sqrt(365 * 24) + else: + sharpe = 0 + + winning_trades = [t for t in trades if t['pnl'] > 0] + losing_trades = [t for t in trades if t['pnl'] <= 0] + win_rate = len(winning_trades) / len(trades) if trades else 0 + + avg_win = np.mean([t['pnl_pct'] for t in winning_trades]) if winning_trades else 0 + avg_loss = np.mean([t['pnl_pct'] for t in losing_trades]) if losing_trades else 0 + profit_factor = abs(avg_win / avg_loss) if avg_loss != 0 else 0 + + return { + '初始资金': f"${initial_capital:,.2f}", + '最终资金': f"${equity.iloc[-1]:,.2f}", + '总收益率': f"{total_return:.2f}%", + '最大回撤': f"{max_drawdown:.2f}%", + '夏普比率': f"{sharpe:.2f}", + '总交易次数': len(trades), + '胜率': f"{win_rate:.2%}", + '平均盈利': f"{avg_win:.2f}%", + '平均亏损': f"{avg_loss:.2f}%", + '盈亏比': f"{profit_factor:.2f}", + '止损次数': len([t for t in trades if t['type'] == '止损出场']), + '止盈次数': len([t for t in trades if t['type'] == '止盈出场']), + '信号出场次数': len([t for t in trades if t['type'] == '信号出场']), + } + + +# ============================================================ +# 主程序 +# ============================================================ + +if __name__ == '__main__': + print("=" * 60) + print("量化策略回测 - MACD + EWO 趋势跟踪") + print("策略:MACD 金叉(EWO 多头时)做多,ATR 动态止损止盈") + print("=" * 60) + + test_cases = [ + ('BTCUSDT', '4h', 'BTC/USDT 4小时'), + ('ETHUSDT', '4h', 'ETH/USDT 4小时'), + ] + + for symbol, interval, label in test_cases: + print(f"\n{'─' * 50}") + print(f"回测品种:{label}") + print(f"{'─' * 50}") + + try: + df = fetch_binance_klines(symbol, interval, limit=1000) + print(f"数据范围:{df.index[0].strftime('%Y-%m-%d')} 至 {df.index[-1].strftime('%Y-%m-%d')}") + print(f"K 线数量:{len(df)}") + + results = backtest(df, initial_capital=10000) + + print("\n📊 回测结果:") + for key, value in results.items(): + print(f" {key:12s}: {value}") + + except Exception as e: + print(f"错误:{e}") + + print(f"\n{'=' * 60}") + print("⚠️ 免责声明:以上回测结果仅供学习参考,不构成投资建议") + print(" 历史表现不代表未来收益,实盘交易存在亏损风险") + print("=" * 60) diff --git a/samples/signal_calculator_sample.py b/samples/signal_calculator_sample.py new file mode 100644 index 0000000..c1772f6 --- /dev/null +++ b/samples/signal_calculator_sample.py @@ -0,0 +1,374 @@ +""" +量化交易信号计算器 - 完整示例 +基于 tradehk 项目的多指标共振信号系统 Python 实现 + +使用方法: + pip install pandas numpy requests + python signal_calculator_sample.py +""" + +import pandas as pd +import numpy as np +import requests +from typing import Optional, Tuple +from dataclasses import dataclass + + +# ============================================================ +# 数据获取 +# ============================================================ + +def fetch_binance_klines(symbol: str, interval: str, limit: int = 500) -> pd.DataFrame: + """ + 从 Binance 获取 K 线数据 + + 参数: + symbol: 交易对,如 'BTCUSDT' + interval: 时间周期,如 '1h', '4h', '1d' + limit: 获取数量(最大 1000) + """ + url = "https://api.binance.com/api/v3/klines" + params = {"symbol": symbol, "interval": interval, "limit": limit} + + resp = requests.get(url, params=params, timeout=10) + resp.raise_for_status() + + data = resp.json() + df = pd.DataFrame(data, columns=[ + 'timestamp', 'open', 'high', 'low', 'close', 'volume', + 'close_time', 'quote_volume', 'trades', 'taker_buy_base', + 'taker_buy_quote', 'ignore' + ]) + + df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms') + for col in ['open', 'high', 'low', 'close', 'volume']: + df[col] = df[col].astype(float) + + return df[['timestamp', 'open', 'high', 'low', 'close', 'volume']].set_index('timestamp') + + +# ============================================================ +# 技术指标计算 +# ============================================================ + +def calc_rma(series: pd.Series, period: int) -> pd.Series: + """Wilder 平滑移动均线(RMA)""" + alpha = 1.0 / period + return series.ewm(alpha=alpha, adjust=False).mean() + + +def calc_ema(series: pd.Series, period: int) -> pd.Series: + """指数移动均线(EMA)""" + return series.ewm(span=period, adjust=False).mean() + + +def calc_sma(series: pd.Series, period: int) -> pd.Series: + """简单移动均线(SMA)""" + return series.rolling(period).mean() + + +def calc_atr(df: pd.DataFrame, period: int = 14) -> pd.Series: + """真实波动幅度(ATR)""" + high, low, close = df['high'], df['low'], df['close'] + tr = pd.concat([ + high - low, + (high - close.shift(1)).abs(), + (low - close.shift(1)).abs() + ], axis=1).max(axis=1) + return calc_rma(tr, period) + + +def calc_rsi(close: pd.Series, period: int = 14) -> pd.Series: + """相对强弱指数(RSI)""" + delta = close.diff() + gain = delta.clip(lower=0) + loss = (-delta).clip(lower=0) + avg_gain = calc_rma(gain, period) + avg_loss = calc_rma(loss, period) + rs = avg_gain / avg_loss.replace(0, np.nan) + return 100 - (100 / (1 + rs)) + + +def calc_macd(close: pd.Series, fast: int = 10, slow: int = 20, signal: int = 10) -> Tuple[pd.Series, pd.Series, pd.Series]: + """ + MACD(tradehk 参数:10, 20, 10) + 返回:(macd线, 信号线, 柱状图) + """ + ema_fast = calc_ema(close, fast) + ema_slow = calc_ema(close, slow) + macd_line = ema_fast - ema_slow + signal_line = calc_ema(macd_line, signal) + histogram = macd_line - signal_line + return macd_line, signal_line, histogram + + +def calc_ewo(close: pd.Series) -> pd.Series: + """艾略特波浪振荡器(EWO = EMA5 - EMA35)""" + return calc_ema(close, 5) - calc_ema(close, 35) + + +def calc_ao(df: pd.DataFrame) -> pd.Series: + """动量振荡器(AO)""" + midpoint = (df['high'] + df['low']) / 2 + return calc_sma(midpoint, 5) - calc_sma(midpoint, 34) + + +def calc_kdj(df: pd.DataFrame, period: int = 9, k_smooth: int = 3, d_smooth: int = 3) -> Tuple[pd.Series, pd.Series, pd.Series]: + """KDJ 指标""" + low_min = df['low'].rolling(period).min() + high_max = df['high'].rolling(period).max() + rsv = (df['close'] - low_min) / (high_max - low_min).replace(0, np.nan) * 100 + k = rsv.ewm(com=k_smooth - 1, adjust=False).mean() + d = k.ewm(com=d_smooth - 1, adjust=False).mean() + j = 3 * k - 2 * d + return k, d, j + + +def calc_bollinger_bands(close: pd.Series, period: int = 20, multiplier: float = 2.0) -> Tuple[pd.Series, pd.Series, pd.Series]: + """布林带""" + middle = calc_sma(close, period) + std = close.rolling(period).std() + upper = middle + multiplier * std + lower = middle - multiplier * std + return upper, middle, lower + + +def calc_supertrend(df: pd.DataFrame, period: int = 10, multiplier: float = 3.0) -> Tuple[pd.Series, pd.Series]: + """ + 超级趋势线(SuperTrend) + 返回:(趋势值, 方向: 1=多头, -1=空头) + """ + atr = calc_atr(df, period) + hl2 = (df['high'] + df['low']) / 2 + + upper_band = hl2 + multiplier * atr + lower_band = hl2 - multiplier * atr + + supertrend = pd.Series(np.nan, index=df.index) + direction = pd.Series(1, index=df.index) + + for i in range(1, len(df)): + # 更新上轨 + if upper_band.iloc[i] < upper_band.iloc[i-1] or df['close'].iloc[i-1] > upper_band.iloc[i-1]: + upper_band.iloc[i] = upper_band.iloc[i] + else: + upper_band.iloc[i] = upper_band.iloc[i-1] + + # 更新下轨 + if lower_band.iloc[i] > lower_band.iloc[i-1] or df['close'].iloc[i-1] < lower_band.iloc[i-1]: + lower_band.iloc[i] = lower_band.iloc[i] + else: + lower_band.iloc[i] = lower_band.iloc[i-1] + + # 确定方向 + if direction.iloc[i-1] == -1: + if df['close'].iloc[i] > upper_band.iloc[i]: + direction.iloc[i] = 1 + else: + direction.iloc[i] = -1 + else: + if df['close'].iloc[i] < lower_band.iloc[i]: + direction.iloc[i] = -1 + else: + direction.iloc[i] = 1 + + supertrend.iloc[i] = lower_band.iloc[i] if direction.iloc[i] == 1 else upper_band.iloc[i] + + return supertrend, direction + + +# ============================================================ +# 信号生成(多指标共振) +# ============================================================ + +@dataclass +class SignalResult: + signal_type: str # 'BUY', 'SELL', 'NEUTRAL' + strength: str # 'STRONG', 'MODERATE', 'WEAK' + bullish_score: int + bearish_score: int + details: dict + + +def generate_signal(df: pd.DataFrame, use_kdj: bool = True, use_supertrend: bool = True) -> SignalResult: + """ + 多指标共振信号生成器 + + 参数: + df: 包含 OHLCV 数据的 DataFrame + use_kdj: 是否启用 KDJ 信号 + use_supertrend: 是否启用 SuperTrend 信号 + """ + close = df['close'] + + # 计算所有指标 + ma10 = calc_sma(close, 10) + ma100 = calc_sma(close, 100) + macd_line, signal_line, histogram = calc_macd(close) + ao = calc_ao(df) + rsi = calc_rsi(close) + bb_upper, bb_middle, bb_lower = calc_bollinger_bands(close) + + # 取最后两根 K 线 + curr = df.index[-1] + prev = df.index[-2] + + bullish_score = 0 + bearish_score = 0 + details = {} + + # ---- 核心信号:MACD ---- + macd_cross_up = macd_line[curr] > signal_line[curr] and macd_line[prev] <= signal_line[prev] + macd_cross_down = macd_line[curr] < signal_line[curr] and macd_line[prev] >= signal_line[prev] + + if macd_cross_up: + bullish_score += 2 + details['MACD'] = '金叉 (+2)' + elif macd_cross_down: + bearish_score += 2 + details['MACD'] = '死叉 (+2)' + elif histogram[curr] > 0 and histogram[curr] > histogram[prev]: + bullish_score += 1 + details['MACD'] = '柱状图扩大(正)(+1)' + elif histogram[curr] < 0 and histogram[curr] < histogram[prev]: + bearish_score += 1 + details['MACD'] = '柱状图扩大(负)(+1)' + + # ---- 核心信号:AO ---- + ao_cross_up = ao[curr] > 0 and ao[prev] <= 0 + ao_cross_down = ao[curr] < 0 and ao[prev] >= 0 + + if ao_cross_up: + bullish_score += 1 + details['AO'] = '上穿零轴 (+1)' + elif ao_cross_down: + bearish_score += 1 + details['AO'] = '下穿零轴 (+1)' + + # ---- 核心信号:MA 排列 ---- + if close[curr] > ma10[curr] and ma10[curr] > ma100[curr]: + bullish_score += 1 + details['MA'] = '多头排列 (+1)' + elif close[curr] < ma10[curr] and ma10[curr] < ma100[curr]: + bearish_score += 1 + details['MA'] = '空头排列 (+1)' + + # ---- 可选信号:RSI ---- + if rsi[curr] < 30: + bullish_score += 1 + details['RSI'] = f'超卖 {rsi[curr]:.1f} (+1)' + elif rsi[curr] > 70: + bearish_score += 1 + details['RSI'] = f'超买 {rsi[curr]:.1f} (+1)' + + # ---- 可选信号:布林带 ---- + if close[curr] <= bb_lower[curr]: + bullish_score += 1 + details['布林带'] = '触及下轨 (+1)' + elif close[curr] >= bb_upper[curr]: + bearish_score += 1 + details['布林带'] = '触及上轨 (+1)' + + # ---- 可选信号:KDJ ---- + if use_kdj: + k, d, j = calc_kdj(df) + kdj_cross_up = k[curr] > d[curr] and k[prev] <= d[prev] + kdj_cross_down = k[curr] < d[curr] and k[prev] >= d[prev] + + if kdj_cross_up and k[curr] < 30: + bullish_score += 2 + details['KDJ'] = f'低位金叉 K={k[curr]:.1f} (+2)' + elif kdj_cross_up: + bullish_score += 1 + details['KDJ'] = f'金叉 K={k[curr]:.1f} (+1)' + elif kdj_cross_down and k[curr] > 70: + bearish_score += 2 + details['KDJ'] = f'高位死叉 K={k[curr]:.1f} (+2)' + elif kdj_cross_down: + bearish_score += 1 + details['KDJ'] = f'死叉 K={k[curr]:.1f} (+1)' + + # ---- 可选信号:SuperTrend ---- + if use_supertrend: + st_value, st_direction = calc_supertrend(df) + if st_direction[curr] == 1 and st_direction[prev] == -1: + bullish_score += 2 + details['SuperTrend'] = '趋势反转看多 (+2)' + elif st_direction[curr] == -1 and st_direction[prev] == 1: + bearish_score += 2 + details['SuperTrend'] = '趋势反转看空 (+2)' + elif st_direction[curr] == 1: + bullish_score += 1 + details['SuperTrend'] = '多头趋势中 (+1)' + elif st_direction[curr] == -1: + bearish_score += 1 + details['SuperTrend'] = '空头趋势中 (+1)' + + # ---- 信号强度判定 ---- + active_optional = sum([True, True, use_kdj, use_supertrend]) # RSI, BB 始终启用 + strong_threshold = 5 + int(active_optional * 0.5) + moderate_threshold = 3 + int(active_optional * 0.3) + + if bullish_score > bearish_score: + signal_type = 'BUY' + score = bullish_score + elif bearish_score > bullish_score: + signal_type = 'SELL' + score = bearish_score + else: + return SignalResult('NEUTRAL', 'WEAK', bullish_score, bearish_score, details) + + if score >= strong_threshold: + strength = 'STRONG' + elif score >= moderate_threshold: + strength = 'MODERATE' + else: + strength = 'WEAK' + + return SignalResult(signal_type, strength, bullish_score, bearish_score, details) + + +# ============================================================ +# 主程序 +# ============================================================ + +if __name__ == '__main__': + print("=" * 60) + print("量化交易信号计算器 - 多指标共振系统") + print("=" * 60) + + # 测试品种列表 + test_symbols = [ + ('BTCUSDT', '1h', 'BTC/USDT 1小时'), + ('ETHUSDT', '4h', 'ETH/USDT 4小时'), + ('XAUTUSDT', '4h', 'XAUT/USDT 4小时(黄金代币)'), + ] + + for symbol, interval, label in test_symbols: + print(f"\n{'─' * 50}") + print(f"品种:{label}") + print(f"{'─' * 50}") + + try: + # 获取数据 + df = fetch_binance_klines(symbol, interval, limit=200) + print(f"数据获取成功:{len(df)} 根 K 线") + print(f"最新价格:{df['close'].iloc[-1]:.4f}") + + # 生成信号 + result = generate_signal(df, use_kdj=True, use_supertrend=True) + + # 输出结果 + emoji = '🟢' if result.signal_type == 'BUY' else ('🔴' if result.signal_type == 'SELL' else '⚪') + print(f"\n{emoji} 信号:{result.signal_type} ({result.strength})") + print(f" 多头评分:{result.bullish_score} 空头评分:{result.bearish_score}") + print(f"\n指标详情:") + for indicator, detail in result.details.items(): + print(f" {indicator}: {detail}") + + except Exception as e: + print(f"错误:{e}") + + print(f"\n{'=' * 60}") + print("注意:以上信号仅供参考,不构成投资建议") + print("=" * 60)