diff --git a/models/database.db b/models/database.db index 9b0a1dd..2af1c7a 100644 Binary files a/models/database.db and b/models/database.db differ diff --git a/requirements.txt b/requirements.txt index 6d71bb4..7442157 100644 --- a/requirements.txt +++ b/requirements.txt @@ -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 diff --git a/strategy/config.py b/strategy/config.py index 30fb207..bcb2fb1 100644 --- a/strategy/config.py +++ b/strategy/config.py @@ -33,8 +33,8 @@ KLINE_PERIODS = { # 主周期(用于生成信号) PRIMARY_PERIOD = 15 # 15分钟 -# 辅助周期(用于多周期融合特征) -AUX_PERIODS = [5, 60] +# 辅助周期(用于多周期融合特征);加入 1m 可捕捉 15m 内短时冲高回落,减少“涨到一半又跌止损” +AUX_PERIODS = [1, 5, 60] # ============ 指标参数 ============ INDICATOR_PARAMS = { diff --git a/四分之一,五分钟,反手条件充足.py b/四分之一,五分钟,反手条件充足.py index 4d84f6d..185a584 100644 --- a/四分之一,五分钟,反手条件充足.py +++ b/四分之一,五分钟,反手条件充足.py @@ -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) +# --------------------------------------------------------------------------- +# 开单逻辑:完全由 方案B(AI 策略)驱动 +# - 方案B:strategy.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) # 方案B:0=观望 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: diff --git a/如何运行.md b/如何运行.md new file mode 100644 index 0000000..397eccb --- /dev/null +++ b/如何运行.md @@ -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 + ```