gagha
This commit is contained in:
Binary file not shown.
@@ -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
|
||||
|
||||
@@ -33,8 +33,8 @@ KLINE_PERIODS = {
|
||||
|
||||
# 主周期(用于生成信号)
|
||||
PRIMARY_PERIOD = 15 # 15分钟
|
||||
# 辅助周期(用于多周期融合特征)
|
||||
AUX_PERIODS = [5, 60]
|
||||
# 辅助周期(用于多周期融合特征);加入 1m 可捕捉 15m 内短时冲高回落,减少“涨到一半又跌止损”
|
||||
AUX_PERIODS = [1, 5, 60]
|
||||
|
||||
# ============ 指标参数 ============
|
||||
INDICATOR_PARAMS = {
|
||||
|
||||
@@ -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:
|
||||
|
||||
90
如何运行.md
Normal file
90
如何运行.md
Normal 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
|
||||
```
|
||||
Reference in New Issue
Block a user