233f0c5d10ea4f937066e51cd6506a0784f85d3c
- start_system.py: 跨平台进程管理 - Windows 使用 CREATE_NEW_PROCESS_GROUP 和 terminate() - Unix 使用 setsid 和 killpg - 自动检测并启用 Windows ANSI 颜色支持 - 设备选择逻辑优化: - macOS: 优先使用 MPS,回退到 CPU - Windows/Linux: 强制使用 CPU(无 CUDA 依赖) - 影响文件: - api/prediction_service.py - auto_trade_polymarket.py - training/config.py
Crypto Predictor
基于深度学习的加密货币价格预测系统,使用DLinear模型预测BTC未来1小时涨跌方向。
🎯 项目概况
当前最佳模型性能:
- 准确率: 53.10% ✅ (在2026年测试集上)
- 任务类型: 二分类(预测涨/跌)
- 特征: OHLCV + RSI + MACD (9个特征)
- 训练数据: 2020-2025年BTC小时数据(52,351个序列)
- 测试数据: 2026年1-29日(484个序列)
📊 模型性能指标
准确率 (Accuracy): 53.10%
精确率 (Precision): 51.79%
召回率 (Recall): 49.36%
F1分数: 0.5054
混淆矩阵:
预测涨且真涨: 116 (24.0%)
预测跌且真跌: 141 (29.1%)
预测涨但真跌: 108 (22.3%)
预测跌但真涨: 119 (24.6%)
预测分布:
预测上涨: 224 (46.3%)
预测下跌: 260 (53.7%)
实际上涨: 235 (48.6%)
实际下跌: 249 (51.4%)
偏差: -11个 (非常平衡)
🏗️ 项目结构
crypto_predictor/
├── data/
│ ├── fetcher.py # Binance数据获取
│ ├── preprocessor.py # 数据预处理
│ └── dataset.py # PyTorch数据集
├── models/
│ ├── base.py # 基础模型类
│ ├── dlinear/
│ │ └── model.py # DLinear模型实现
│ └── checkpoints/
│ └── dlinear_classification_2026/ # 最佳模型(53.10%)
│ ├── best_model.pt
│ ├── preprocessor.pkl
│ └── test_2026_results.json
├── training/
│ ├── trainer.py # 训练器
│ ├── config.py # 训练配置
│ └── evaluator.py # 评估器
├── train_classification_full.py # 分类任务训练脚本
├── test_2026_classification.py # 2026年测试脚本
└── requirements.txt
🚀 快速开始
1. 环境准备
# 创建conda环境
conda create -n crypto_pred python=3.12
conda activate crypto_pred
# 安装依赖
pip install -r requirements.txt
2. 训练模型
# 使用2020-2025年数据训练分类模型
python train_classification_full.py
3. 测试模型
# 在2026年数据上测试
python test_2026_classification.py
📈 使用最佳模型进行预测
import torch
import pickle
from data.fetcher import BinanceDataFetcher
from models.dlinear.model import DLinear
# 加载模型
device = torch.device('mps' if torch.backends.mps.is_available() else 'cpu')
checkpoint = torch.load('./models/checkpoints/dlinear_classification_2026/best_model.pt',
map_location=device)
model = DLinear(checkpoint['config'])
model.load_state_dict(checkpoint['model_state_dict'])
model.eval()
# 加载预处理器
with open('./models/checkpoints/dlinear_classification_2026/preprocessor.pkl', 'rb') as f:
preprocessor = pickle.load(f)
# 获取最新数据并预测
fetcher = BinanceDataFetcher()
df = fetcher.fetch_ohlcv('BTC', '1h', use_cache=False)
X, y, _ = preprocessor.preprocess(df, fit=False)
# 预测
with torch.no_grad():
logits = model(torch.FloatTensor(X[-1:]).to(device))
prob = torch.sigmoid(logits).item()
prediction = "上涨" if prob > 0.5 else "下跌"
print(f"预测: {prediction} (概率: {prob:.2%})")
🔬 实验历史
| 方案 | 任务类型 | 数据划分 | 准确率 | 主要问题 |
|---|---|---|---|---|
| 1 | 回归(收益率) | 95:5 | 50.23% | 接近随机 |
| 2 | 回归(收益率) | 直接2026 | 49.48% | 偏向预测上涨 |
| 3 | 回归(价格) | 直接2026 | 49.48% | MAPE 0.42% |
| 4 | 回归(价格) | 8:1:1 | 49.64% | 90%预测下跌 |
| 5 | 分类(涨跌) | 全量训练 | 53.10% ✅ | 预测平衡 |
⚠️ 注意事项
- 53.10%准确率说明:仅比随机猜测高3.1%,适合小仓位测试
- 1小时预测的局限性:价格变化接近随机游走,技术指标效果有限
- 数据要求:需要至少169小时的历史数据
📄 许可
MIT License
Languages
Python
90.3%
HTML
6.5%
JavaScript
1.8%
CSS
0.8%
Batchfile
0.4%
Other
0.2%