2026-02-11 23:36:07 +08:00
2026-02-04 18:35:10 +08:00

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% ✅ 预测平衡

⚠️ 注意事项

  1. 53.10%准确率说明:仅比随机猜测高3.1%,适合小仓位测试
  2. 1小时预测的局限性:价格变化接近随机游走,技术指标效果有限
  3. 数据要求:需要至少169小时的历史数据

📄 许可

MIT License

S
Description
No description provided
Readme
41 MiB
0 Stars 1 Watchers 0 Forks
Languages
Python 90.3%
HTML 6.5%
JavaScript 1.8%
CSS 0.8%
Batchfile 0.4%
Other 0.2%