This commit is contained in:
27942
2026-02-21 14:46:34 +08:00
parent 93a9dfb4a7
commit 991135dcb1
5 changed files with 117 additions and 15 deletions

Binary file not shown.

View File

@@ -1,9 +1,14 @@
pandas>=2.0
numpy>=1.24
ta>=0.11.0
scikit-learn>=1.3
lightgbm>=4.0
xgboost>=2.0
matplotlib>=3.7
peewee>=3.16
loguru>=0.7
# 运行 四分之一,五分钟,反手条件充足.py 所需依赖(不指定版本)
tqdm
loguru
DrissionPage
bitmart-python-sdk-api
requests
peewee
pandas
numpy
joblib
scikit-learn
lightgbm
xgboost
ta

View File

@@ -33,8 +33,8 @@ KLINE_PERIODS = {
# 主周期(用于生成信号)
PRIMARY_PERIOD = 15 # 15分钟
# 辅助周期(用于多周期融合特征)
AUX_PERIODS = [5, 60]
# 辅助周期(用于多周期融合特征);加入 1m 可捕捉 15m 内短时冲高回落,减少“涨到一半又跌止损”
AUX_PERIODS = [1, 5, 60]
# ============ 指标参数 ============
INDICATOR_PARAMS = {

View File

@@ -10,7 +10,14 @@ from DrissionPage import ChromiumOptions
from bitmart.api_contract import APIContract
# 方案B从 strategy 模块获取实盘信号(需先运行 AI 策略训练保存模型,并保持 models/database.db 有最新 15m/5m/1h K 线,例如运行 抓取多周期K线.py
# ---------------------------------------------------------------------------
# 开单逻辑:完全由 方案BAI 策略)驱动
# - 方案Bstrategy.ai_strategy 的 get_live_signal(period=15),返回 0=观望 1=做多 2=做空
# - 每根新 15 分钟 K 线取一次信号,再根据当前持仓转为 开多/开空/反手多/反手空,由 execute_trade 执行开单
# 前置条件:
# 1. 先运行方案B训练并保存模型如 run_scheme_b_train.py 或 strategy.compare 方案B
# 2. models/database.db 中有最新 15m/5m/1h K 线(如运行 抓取多周期K线.py
# ---------------------------------------------------------------------------
sys.path.insert(0, str(Path(__file__).resolve().parent))
from strategy.ai_strategy import get_live_signal
@@ -698,13 +705,13 @@ class BitmartFuturesTransaction:
time.sleep(3)
continue
# 4. 方案B:仅在新的 15 分钟 K 线取一次信号0=观望, 1=做多, 2=做空)
# 4. 方案B 开单:新 15m K 线取一次 AI 信号 -> 转为开仓/反手 -> 下方执行开单
current_15m_id = int(time.time() // 900) * 900 # 15 分钟 bar 起始时间戳
signal = None
if current_15m_id != self.last_kline_time:
self.last_kline_time = current_15m_id
logger.info(f"进入新 15m K 线: {current_15m_id}")
raw = get_live_signal(period=15)
raw = get_live_signal(period=15) # 方案B0=观望 1=做多 2=做空
logger.info(f"方案B 信号: {raw} (0=观望 1=做多 2=做空), 当前持仓: {self.start}")
if raw == 1:
if self.start == 0:
@@ -729,7 +736,7 @@ class BitmartFuturesTransaction:
else:
self._current_kline_id_for_open = current_15m_id # 供 execute_trade 成功后记录
# 6. 有信号则执行交易
# 6. 方案B 开单:有信号则执行(开多/开空/反手多/反手空)
if signal:
trade_success = self.execute_trade(signal)
if trade_success:

90
如何运行.md Normal file
View File

@@ -0,0 +1,90 @@
# 如何运行代码
## 一、环境准备
1. **进入项目目录**
```powershell
cd c:\Users\27942\Desktop\codes\jyx_code4
```
2. **创建并激活 conda 环境(若尚未创建)**
```powershell
conda create -y -n jyx_code4 python=3.13
conda activate jyx_code4
```
3. **安装依赖**
```powershell
pip install -r requirements.txt
```
---
## 二、运行顺序(方案 B 实盘开单)
要运行主程序 **四分之一,五分钟,反手条件充足.py**(方案 B 开单),需先完成下面两步。
### 步骤 1抓取 K 线数据
保证 `models/database.db` 里有最新 1m / 5m / 15m / 1h 等 K 线:
```powershell
python 抓取多周期K线.py
```
脚本里默认会从 `2010-01-01` 起抓取所有周期;若需改日期或周期,可编辑该文件末尾 `collect_from_date` 的 `start_date` 和 `periods`。
### 步骤 2训练方案 B 并保存模型
```powershell
python run_scheme_b_train.py
```
可选参数:
- `--start 2024-01-01`:回测开始日期
- `--end 2024-12-31`:回测结束日期
- `--period 15`:主周期(默认 15 分钟)
训练完成后会在 `models/` 下生成:
- `scheme_b_last_model.joblib`
- `scheme_b_scaler.joblib`
- `scheme_b_features.json`
### 步骤 3运行实盘/模拟开单脚本
```powershell
python "四分之一,五分钟,反手条件充足.py"
```
该脚本会:
- 使用方案 B 的 15 分钟信号(含 1m/5m/1h 辅助特征)决定开多/开空/反手;
- 通过 BitMart 合约 API 与浏览器操作执行开单、平仓、止损止盈。
**注意**:脚本内含有 API Key、bit_id 等,请勿泄露;运行前确认已接受 conda 频道条款(若曾报 Terms of Service 错误,需先执行 `conda tos accept` 相关命令)。
---
## 三、其他脚本
| 脚本 | 说明 |
|------|------|
| `抓取多周期K线.py` | 抓取 1m/3m/5m/15m/30m/1h K 线到 `models/database.db` |
| `run_scheme_b_train.py` | 仅训练方案 B 并保存模型(供实盘用) |
| `四分之一,五分钟,反手条件充足.py` | 方案 B 实盘开单主程序 |
| `strategy/compare.py` | 方案 A vs 方案 B 回测对比(可选) |
---
## 四、常见问题
- **conda 报 Terms of Service**:在终端执行:
```powershell
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/msys2
```
- **方案 B 模型未找到**:先运行步骤 1 和步骤 2再运行主程序。
- **conda 命令找不到**:使用完整路径,例如:
```powershell
C:\Users\27942\Miniconda3\condabin\conda.bat activate jyx_code4
```