Skip to content

chenzhiguo/quant-trading

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

长桥量化交易系统

基于 长桥 OpenAPI 的量化交易框架,支持策略扫描、信号推送和模拟交易。

⚠️ 重要提示: 当前连接的是模拟盘,所有交易操作均为模拟,不涉及真实资金。

📋 目录


项目结构

quant-trading/
├── .env                   # API 凭证(包含长桥 API Key,勿提交)
├── .gitignore
├── README.md              # 本文档
│
├── config/                # 配置模块
│   ├── __init__.py
│   ├── watchlist.py       # 自选股列表(美股、港股、AI概念等)
│   └── risk_config.json   # 风控配置
│
├── core/                  # 核心模块
│   ├── __init__.py
│   ├── data.py            # 数据获取(行情、K线)
│   ├── trader.py          # 交易执行(集成风控)
│   └── risk.py            # 风险管理模块
│
├── strategies/            # 交易策略
│   ├── __init__.py
│   ├── base.py            # 策略基类 + 技术指标计算
│   ├── ma_cross.py        # 均线交叉策略(金叉/死叉)
│   └── momentum.py        # 动量策略(趋势追踪 + RSI)
│
├── data/                  # 数据目录(自动生成)
│   ├── trades.jsonl       # 交易记录
│   ├── risk_events.jsonl  # 风控事件日志
│   └── risk_state.json    # 风控状态
│
├── main.py                # 交互式主程序(账户、行情、信号)
├── scan_signals.py        # 信号扫描脚本(供 cron 调用)
├── monitor_stops.py       # 止损止盈监控脚本
└── test_connection.py     # API 连接测试

账户信息

项目
账户类型 模拟盘 (Paper Trading)
模拟资金 HKD 800,000
港股行情 Level 1 实时
美股行情 Nasdaq Basic
A股行情 Level 1 实时

快速开始

1. 环境准备

# 进入项目目录
cd ~/clawd/quant-trading

# 激活虚拟环境
source .venv/bin/activate

2. 测试 API 连接

python test_connection.py

成功输出示例:

✅ 行情 API 连接成功
✅ 交易 API 连接成功
账户类型: 模拟盘

3. 运行主程序

python main.py

输出内容:

  • 💰 账户资金余额
  • 📊 当前持仓
  • 📈 实时行情(默认显示 5 只)
  • 🔍 信号扫描结果

4. 运行信号扫描(推送用)

# 格式化报告(适合消息推送)
python scan_signals.py

# JSON 格式输出(适合程序解析)
python scan_signals.py --json

核心模块

数据获取 (core/data.py)

DataFetcher 类封装了长桥行情 API:

方法 功能 返回值
get_realtime_quotes(symbols) 获取实时行情 行情列表
get_candlesticks(symbol, period, count) 获取 K 线数据 K 线列表
get_quote_with_change(symbols) 获取行情+涨跌幅 字典列表
get_kline_df(symbol, days) 获取 K 线(字典格式) [{date, open, high, low, close, volume}, ...]

使用示例:

from core.data import get_fetcher

fetcher = get_fetcher()

# 获取 NVDA 最近 50 天日K
data = fetcher.get_kline_df("NVDA.US", days=50)

# 获取实时行情
quotes = fetcher.get_quote_with_change(["AAPL.US", "GOOGL.US"])

交易执行 (core/trader.py)

Trader 类封装了长桥交易 API:

方法 功能 说明
get_account_balance() 查询账户余额 返回各币种余额
get_positions() 查询持仓 返回持仓列表
get_today_orders() 查询今日订单 -
submit_order(...) 提交订单 支持限价/市价
cancel_order(order_id) 取消订单 -

Dry Run 模式(默认开启):

from core.trader import get_trader

# dry_run=True(默认):只打印,不实际下单
trader = get_trader(dry_run=True)
trader.submit_order("AAPL.US", "buy", 10, price=150.0)
# 输出: 🔔 [DRY RUN] BUY 10 AAPL.US @ 150.0

# dry_run=False:实际下单(模拟盘)
trader = get_trader(dry_run=False)

交易策略

核心策略: Regime Switching (趋势/震荡自动切换)

结合 ADX (平均趋向指标) 自动识别市场状态,动态切换交易逻辑:

  1. 强趋势模式 (ADX > 30)

    • 策略:Alpha 101 (动量追踪)
    • 逻辑:强者恒强,顺势而为。如果 Alpha 因子为正,买入;为负,卖出。
    • 适用:大牛市、板块轮动主升浪。
  2. 观望模式 (20 <= ADX <= 30)

    • 策略:空仓等待
    • 逻辑:趋势不明显且震荡幅度不够,此时交易容易产生亏损(“绞肉机”行情)。系统将暂停开新仓,但会维持现有持仓的止损止盈。
  3. 震荡模式 (ADX < 20)

    • 策略:Mean Reversion (均值回归)
    • 逻辑:RSI 超卖 (<35) 买入,超买 (>65) 卖出。
    • 适用:箱体震荡、盘整行情。

智能风控 (Smart Stop)

风控系统现已全面升级为 波动率自适应 (Adaptive Risk) 模式:

风控项 逻辑 说明
ATR 止损 Cost - ATR * 3.0 无论是稳健股还是高波股,均使用 ATR 动态设置止损线,适应不同股票的波动特性。
追踪止盈 Trailing Stop 浮盈 > 5% 开启追踪;最高点回撤 5% 触发止盈。
观望区保护 Wait Zone 当 ADX 进入 20-30 区间时,禁止开新仓,防止在趋势反转初期频繁止损。

快速开始

BaseStrategy 提供以下技术指标计算方法:

# 移动平均线
ma = strategy.calculate_ma(data, period=20, key="close")

# RSI(相对强弱指数)
rsi = strategy.calculate_rsi(data, period=14)

自选股配置

编辑 config/watchlist.py 管理自选股:

# 美股科技股
US_TECH = [
    "AAPL.US",   # 苹果
    "MSFT.US",   # 微软
    "GOOGL.US",  # 谷歌
    "NVDA.US",   # 英伟达
    # ...
]

# 美股 AI 概念
US_AI = [
    "NVDA.US",   # 英伟达
    "AMD.US",    # AMD
    "PLTR.US",   # Palantir
    # ...
]

# 港股科技
HK_TECH = [
    "0700.HK",   # 腾讯
    "9988.HK",   # 阿里巴巴
    # ...
]

获取自选股:

from config.watchlist import get_watchlist

# 获取美股科技股
symbols = get_watchlist("us_tech")

# 获取所有自选股
symbols = get_watchlist("all")

# 可用分类: default, us_tech, us_ai, hk_tech, all

自动交易

系统支持全自动交易:扫描信号 → 风控检查 → 自动下单。

运行自动交易

cd ~/clawd/quant-trading
source .venv/bin/activate

# 预览模式(不实际下单)
python auto_trade.py --preview

# 执行自动交易
python auto_trade.py

# 指定策略和参数
python auto_trade.py --strategy momentum --max-buy 2 --min-confidence 0.2

自动交易参数

参数 默认值 说明
--preview, -p False 预览模式,不实际下单
--strategy, -s all 策略选择:all/ma/momentum
--watchlist, -w us_tech 自选股列表
--max-buy, -m 3 单次最多买入订单数
--min-confidence, -c 0.1 最低置信度要求

自动交易逻辑

  1. 卖出优先 —— 先处理卖出信号,释放资金
  2. 不重复买入 —— 已持有的股票不会再买
  3. 智能仓位 —— 自动计算买入数量(不超过单笔限制)
  4. 风控拦截 —— 违反风控规则的订单会被拒绝

定时任务

系统通过 Clawdbot Cron 实现自动化:

信号扫描任务

任务名 Cron 表达式 时间 (GMT+8) 说明
quant-signal-scan 30 21 * * 1-5 周一至周五 21:30 美股开盘前扫描
quant-signal-mid 0 0 * * 2-6 周二至周六 00:00 盘中扫描
quant-signal-close 30 3 * * 2-6 周二至周六 03:30 收盘前扫描

自动交易任务

任务名 Cron 表达式 时间 (GMT+8) 说明
quant-auto-trade 45 21 * * 1-5 周一至周五 21:45 开盘后自动交易

止损监控任务

任务名 Cron 表达式 时间 (GMT+8) 说明
quant-stop-monitor */10 22-23,0-4 * * 1-5 交易时段每10分钟 止损止盈监控

美股交易时间(北京时间):

  • 夏令时: 21:30 - 04:00
  • 冬令时: 22:30 - 05:00

手动触发:

cd ~/clawd/quant-trading
source .venv/bin/activate

# 信号扫描
python scan_signals.py

# 自动交易
python auto_trade.py

# 止损监控
python monitor_stops.py

风控模块

系统内置完整的风控管理模块 (core/risk.py),支持自动化风险控制。

风控配置

配置文件:config/risk_config.json

参数 默认值 说明
max_single_position_pct 10% 单笔最大仓位
max_total_position_pct 80% 总仓位上限
min_cash_reserve_pct 20% 最低现金保留
default_stop_loss_pct 5% 默认止损线
default_take_profit_pct 15% 默认止盈线
daily_loss_limit_pct 3% 每日最大亏损
daily_trade_limit 20 每日最大交易次数
max_order_value 50000 单笔最大金额
order_cooldown_seconds 60 同一股票下单冷却

核心功能

1. 订单验证

from core.trader import get_trader

trader = get_trader()

# 下单时自动进行风控检查
order = trader.submit_order("AAPL.US", "buy", 10, 150.0)
# 如果违反风控规则,订单会被拒绝并返回原因

2. 止损止盈监控

# 检查并执行止损止盈
executed = trader.check_and_execute_stops()

# 或使用监控脚本
# python monitor_stops.py

3. 智能仓位计算

# 自动计算合适的买入数量
order = trader.submit_order_with_size(
    symbol="NVDA.US",
    side="buy",
    price=188.50,
    risk_pct=0.08  # 使用 8% 仓位
)

4. 紧急停止

# 紧急停止所有交易
trader.emergency_stop("市场异常波动")

# 恢复交易
trader.resume_trading()

5. 风险报告

report = trader.get_risk_report()
print(report)

止损止盈监控

使用 monitor_stops.py 定期检查持仓并执行止损止盈:

# 检查并执行止损止盈
python monitor_stops.py

# 仅输出风险报告(不执行交易)
python monitor_stops.py --report-only

# 检查后发送通知
python monitor_stops.py --notify

可以配置为定时任务,在交易时段每隔 5-10 分钟执行一次。

交易日志

所有交易记录保存在 data/ 目录:

  • trades.jsonl - 交易记录
  • risk_events.jsonl - 风控事件
  • risk_state.json - 风控状态

开发指南

添加新策略

  1. strategies/ 目录创建新文件,如 rsi_reversal.py

  2. 继承 BaseStrategy 并实现 analyze 方法:

from .base import BaseStrategy, TradeSignal, Signal

class RSIReversalStrategy(BaseStrategy):
    name = "RSI Reversal"
    description = "RSI 超卖反转策略"
    
    def __init__(self, rsi_period: int = 14, oversold: int = 30):
        super().__init__()
        self.rsi_period = rsi_period
        self.oversold = oversold
    
    def analyze(self, symbol: str, data: list) -> TradeSignal:
        # 计算 RSI
        rsi_values = self.calculate_rsi(data, self.rsi_period)
        current_rsi = rsi_values[-1] if rsi_values else 50
        current_price = data[-1]["close"]
        
        # 超卖反转买入
        if current_rsi < self.oversold:
            return TradeSignal(
                symbol=symbol,
                signal=Signal.BUY,
                price=current_price,
                reason=f"RSI 超卖反转 ({current_rsi:.0f} < {self.oversold})",
                confidence=min((self.oversold - current_rsi) / 30, 1.0)
            )
        
        return TradeSignal(
            symbol=symbol,
            signal=Signal.HOLD,
            price=current_price,
            reason=f"RSI {current_rsi:.0f}",
            confidence=0.5
        )
  1. scan_signals.py 中添加新策略:
from strategies.rsi_reversal import RSIReversalStrategy

strategies = [
    MACrossStrategy(short_period=5, long_period=20),
    MomentumStrategy(lookback=20, rsi_period=14),
    RSIReversalStrategy(rsi_period=14, oversold=30),  # 新增
]

环境变量配置

.env 文件需包含长桥 API 凭证:

LONGPORT_APP_KEY=your_app_key
LONGPORT_APP_SECRET=your_app_secret
LONGPORT_ACCESS_TOKEN=your_access_token

获取方式:长桥开发者中心


常见问题

Q: 信号扫描显示的价格是实时的吗?

A: 扫描使用的是最近一个交易日的收盘价(日 K 线数据),而非实时盘口价格。美股收盘后扫描的是当天数据,未开盘时扫描的是前一交易日数据。

Q: 如何切换到实盘?

A: 需要在长桥开通实盘账户,并更新 .env 中的 API 凭证。代码层面需将 Traderdry_run 参数设为 False

Q: 为什么有些股票显示"无数据"?

A: 可能原因:

  1. 股票代码格式错误(需要 AAPL.US 格式)
  2. 该股票不在订阅行情范围内
  3. API 请求频率限制

许可证

仅供学习研究使用,不构成投资建议。


最后更新: 2026-01-28

About

Based on the Longbridge Open API, the quantitative trading framework supports strategy scanning, signal push and simulated trading. 基于长桥OpenAPI的量化交易框架,支持策略扫描、信号推送和模拟交易。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages