Skip to content

Latest commit

 

History

19 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages