Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

1602-cai/platform

Repository files navigation

可转债信号监控平台

一个智能的可转债信号监控和自动交易平台,实时监控股票异动并自动买入对应可转债。

🚀 项目特性

  • 实时监控:毫秒级股票价格监控,自动检测涨停和大涨信号
  • 智能交易:信号触发时自动执行可转债买入交易
  • 可视化界面:直观的卡片式股票-可转债配对显示
  • 深度分析:双图表详情页面提供技术分析
  • 云端架构:零本地存储,所有数据托管在云端
  • 灵活清理:智能数据清理,控制存储成本

🏗️ 技术架构

前端技术栈

  • 框架:Next.js 14 + React 18
  • 样式:Tailwind CSS + shadcn/ui
  • 图表:Recharts
  • 状态管理:Zustand
  • 部署:Vercel

后端技术栈

  • 框架:Python + FastAPI
  • 数据库:PostgreSQL (Railway)
  • 数据源:Tushare API
  • 部署:Railway

系统架构图

用户界面 (Vercel) ↔ API服务 (Railway) ↔ 云数据库 (Railway PostgreSQL)
 ↕
 数据源 (Tushare)
 ↕
 交易接口 (待集成)

📋 开发环境要求

系统要求

  • Node.js 18+
  • Python 3.9+
  • Git
  • Railway 账户
  • Vercel 账户

环境变量

# 后端环境变量 (Railway)
DATABASE_URL=postgresql://...
TUSHARE_TOKEN=a0c3518c35f2494d5ee0b99792e0359005d793f3af65dcf13892c5e0
REDIS_URL=redis://... (可选)
# 前端环境变量 (Vercel)
NEXT_PUBLIC_API_URL=https://your-railway-app.railway.app

🚀 快速开始

1. 克隆项目

git clone <repository-url>
cd bond-monitoring-platform

2. 后端设置

cd backend
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env # 配置环境变量
uvicorn app.main:app --reload

3. 前端设置

cd frontend
npm install
cp .env.example .env.local # 配置环境变量
npm run dev

4. 数据库迁移

# Railway 会自动创建数据库
# 运行初始化脚本
python backend/scripts/init_db.py

📁 项目结构

bond-monitoring-platform/
├── backend/ # 后端服务
│ ├── app/
│ │ ├── api/ # API路由
│ │ ├── core/ # 核心业务逻辑
│ │ ├── models/ # 数据模型
│ │ ├── services/ # 外部服务集成
│ │ └── utils/ # 工具函数
│ ├── scripts/ # 数据库脚本
│ ├── requirements.txt
│ └── Dockerfile
├── frontend/ # 前端应用
│ ├── components/ # React组件
│ ├── pages/ # Next.js页面
│ ├── hooks/ # 自定义hooks
│ ├── lib/ # 工具库
│ ├── styles/ # 样式文件
│ └── public/ # 静态资源
├── docs/ # 项目文档
└── README.md

🔌 API 接口文档

核心API

获取监控数据

GET /api/monitoring/pairs

获取股票-可转债配对监控数据

响应示例:

{
 "data": [
 {
 "stockCode": "000001.SZ",
 "stockName": "平安银行",
 "stockPrice": 10.50,
 "stockChange": 2.5,
 "bondCode": "113048.SZ",
 "bondName": "华正转债",
 "bondPrice": 125.50,
 "bondChange": 1.8,
 "conversionPrice": 8.50,
 "premium": 45.2,
 "maturityDate": "2026年12月31日",
 "signalType": "big_rise"
 }
 ],
 "total": 100,
 "page": 1,
 "pageSize": 20
}

执行交易

POST /api/trading/execute

请求体:

{
 "bondCode": "113048.SZ",
 "orderType": "buy",
 "quantity": 100,
 "price": 125.50
}

数据清理

POST /api/admin/cleanup

请求体:

{
 "dataTypes": ["signals", "trades"],
 "timeRange": {
 "hours": 24
 },
 "previewOnly": false
}

🗄️ 数据库设计

核心表结构

bonds (可转债基础信息)

CREATE TABLE bonds (
 id SERIAL PRIMARY KEY,
 ts_code VARCHAR(20) UNIQUE NOT NULL,
 bond_name VARCHAR(100),
 stock_code VARCHAR(20),
 stock_name VARCHAR(100),
 conversion_price DECIMAL(10,2),
 maturity_date DATE,
 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

price_ticks (实时价格数据)

CREATE TABLE price_ticks (
 id SERIAL PRIMARY KEY,
 stock_code VARCHAR(20) NOT NULL,
 price DECIMAL(10,2) NOT NULL,
 volume BIGINT,
 timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_price_ticks_stock_time ON price_ticks(stock_code, timestamp DESC);

signals (信号记录)

CREATE TABLE signals (
 id SERIAL PRIMARY KEY,
 stock_code VARCHAR(20) NOT NULL,
 bond_code VARCHAR(20),
 signal_type VARCHAR(20),
 trigger_value DECIMAL(10,2),
 status VARCHAR(20) DEFAULT 'pending',
 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

trades (交易记录)

CREATE TABLE trades (
 id SERIAL PRIMARY KEY,
 signal_id INTEGER REFERENCES signals(id),
 bond_code VARCHAR(20),
 order_id VARCHAR(50),
 order_volume INTEGER,
 order_price DECIMAL(10,2),
 executed_at TIMESTAMP,
 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

🎯 核心业务逻辑

信号检测算法

涨停信号

def detect_limit_up(price_data: List[PriceTick]) -> bool:
 """检测涨停信号"""
 if not price_data:
 return False
 current_price = price_data[-1].price
 prev_close = price_data[-2].price if len(price_data) > 1 else current_price
 # 计算涨跌幅
 change_percent = (current_price - prev_close) / prev_close * 100
 # 涨停阈值 (不同市场不同)
 limit_up_threshold = 10.0 # A股涨停10%
 return change_percent >= limit_up_threshold

大涨信号

def detect_big_rise(price_data: List[PriceTick], time_window: int = 5) -> bool:
 """检测大涨信号 (5分钟内涨幅超过3%)"""
 if len(price_data) < time_window:
 return False
 # 获取时间窗口内的价格
 window_prices = price_data[-time_window:]
 start_price = window_prices[0].price
 end_price = window_prices[-1].price
 # 计算涨幅
 rise_percent = (end_price - start_price) / start_price * 100
 return rise_percent >= 3.0

数据清理策略

自动清理

  • 价格数据:保留24小时
  • 信号记录:已执行保留24小时,未执行保留6小时
  • 交易记录:保留7天

手动清理

支持自定义清理范围:

  • 时间范围:最近N小时/日期范围
  • 数据类型:信号/交易/缓存
  • 预览模式:先预览再执行

🚀 部署指南

Railway 后端部署

  1. 连接GitHub仓库
  2. 配置环境变量
  3. 部署服务
  4. 配置数据库

Vercel 前端部署

  1. 连接GitHub仓库
  2. 配置环境变量
  3. 自动部署

📊 监控和维护

系统监控

  • 数据库容量监控
  • API响应时间
  • 信号检测准确率
  • 交易执行成功率

日志管理

  • 应用日志
  • 错误日志
  • 交易日志
  • 清理日志

🔒 安全考虑

API安全

  • 请求频率限制
  • 输入验证
  • 错误信息过滤

数据安全

  • 敏感信息加密
  • 访问权限控制
  • 数据备份

🤝 贡献指南

  1. Fork 项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 创建 Pull Request

📝 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情

📞 联系方式

项目维护者 - your-email@example.com

项目链接: https://github.com/your-username/bond-monitoring-platform

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /