Add trend MACD spot strategy
This commit is contained in:
@@ -5,18 +5,16 @@ Spot-бот для демо-торговли криптовалютой на р
|
||||
## Что реализовано
|
||||
|
||||
- Реальные market data Bybit Spot: REST bootstrap и WebSocket-обновления.
|
||||
- Фиксированный набор USDT spot-пар: `BTCUSDT`, `ETHUSDT`, `HYPEUSDT`, `SOLUSDT`, `LTCUSDT`, `XRPUSDT`.
|
||||
- Фиксированный набор USDT spot-пар для основной стратегии: `BTCUSDT`, `ETHUSDT`, `SOLUSDT`.
|
||||
- Paper trading с учетом cash, комиссий, проскальзывания, stop-loss, take-profit и trailing stop.
|
||||
- Spot-only логика: покупка базовой монеты за USDT и продажа обратно, без short и без плеча.
|
||||
- Live spot-ордеры явно отправляются без плеча: `category=spot`, `isLeverage=0`.
|
||||
- Анализ шаблонов рынка: трендовый откат, пробой вверх/вниз, ускоренное падение, боковик, перепроданность с разворотом и объемный всплеск.
|
||||
- Обучение на закрытых сделках: статистика PnL и win rate блокирует плохие пары/паттерны, а положительное матожидание масштабирует Kelly-размер входа.
|
||||
- LLM Advisor выключен по умолчанию; стратегия, обучение, grid и rebound работают без запросов к Ollama.
|
||||
- Динамический размер позиции: стратегия считает вход через fractional Kelly по вероятности прогноза, stop/take и издержкам, затем ограничивает сумму через `MIN_POSITION_USDT`..`MAX_POSITION_USDT` и лимиты экспозиции.
|
||||
- Автоматический grid-режим: бот включает grid-входы на боковике, покупает только в нижней части диапазона и выключает grid при падающих/опасных режимах.
|
||||
- Вероятностный rebound-вход: после снижения бот отдельно оценивает стабилизацию, отскок от локального low, RSI, объем и рыночные ограничения; такой вход ограничен меньшим размером позиции.
|
||||
- Прогнозирование временных рядов: только экспортированная PyTorch `LSTM/GRU`-модель для ожидаемой доходности и оценки неопределенности по validation MAE. Встроенные не-torch fallback-прогнозы удалены; если валидного torch-артефакта нет, прогноз для пары недоступен.
|
||||
- Защитные блокировки входа: явно отрицательные LONG-шаблоны и setups с сильной отрицательной статистикой обучения запрещают новые покупки.
|
||||
- Основная стратегия `trend_macd`: вход на `1h`, дневной фильтр тренда на `1d`, long только если цена выше дневной EMA200 и дневная EMA50 выше EMA200.
|
||||
- Вход `trend_macd`: MACD на `1h` пересекает signal вверх, цена выше EMA50, RSI в диапазоне `45..65`, спред и ликвидность проходят runtime-фильтры.
|
||||
- Выход `trend_macd`: MACD пересекает signal вниз, `1h` свеча закрылась ниже EMA50, сработал стоп `4%` или ATR trailing stop `2.2 ATR`.
|
||||
- Риск `trend_macd`: размер позиции считается как `equity * RISK_PER_TRADE_PERCENT / STOP_LOSS_PERCENT`, по умолчанию риск не выше `1%` депозита на сделку.
|
||||
- DCA/мартингейл отключены: в режиме `trend_macd` брокер не разрешает вторую позицию по той же паре.
|
||||
- Grid, rebound, adaptive learning, Kelly sizing и time-series forecast выключены по умолчанию и не участвуют в принятии решений `trend_macd`.
|
||||
- Быстрый режим торговли: отдельный короткий интервал цикла, короткий cooldown после выхода и лимит новых входов в минуту; выходы по риску этим лимитом не блокируются.
|
||||
- Веб-dashboard на русском: equity, cash, PnL, позиции, сделки, сигналы, события, свечные графики, переключатель быстрой торговли и индикаторы работы обучения.
|
||||
- SQLite runtime-хранилище в `runtime/tradebot.sqlite3`.
|
||||
@@ -74,7 +72,7 @@ Dashboard: <http://127.0.0.1:8787/>
|
||||
--epochs 60
|
||||
```
|
||||
|
||||
Файл из `TIME_SERIES_LSTM_MODEL_PATH` читается ботом автоматически. Экспортированные модели появляются в dashboard как `PyTorch LSTM` или `PyTorch GRU`; старый легкий reservoir LSTM-кандидат и все встроенные не-torch прогнозы удалены. Если валидной PyTorch модели для пары нет, бот не подставляет fallback-прогноз.
|
||||
Файл из `TIME_SERIES_LSTM_MODEL_PATH` читается ботом автоматически, если `TIME_SERIES_FORECAST_ENABLED=true`. В основной стратегии `trend_macd` прогноз выключен по умолчанию и не влияет на входы/выходы. Экспортированные модели появляются в dashboard как `PyTorch LSTM` или `PyTorch GRU`; старый легкий reservoir LSTM-кандидат и все встроенные не-torch прогнозы удалены.
|
||||
|
||||
Автопереобучение на Windows запускает PyTorch trainer, пишет лог в `runtime/torch_retrain.log` и защищается от параллельных запусков:
|
||||
|
||||
@@ -83,7 +81,7 @@ powershell -ExecutionPolicy Bypass -File tools\run_torch_retrain.ps1
|
||||
powershell -ExecutionPolicy Bypass -File tools\install_windows_torch_retrainer.ps1
|
||||
```
|
||||
|
||||
По умолчанию Windows-расписание переобучает PyTorch `LSTM/GRU` каждые 6 часов с `--limit 1000` на фиксированных парах `BTCUSDT,ETHUSDT,HYPEUSDT,SOLUSDT,LTCUSDT,XRPUSDT`. Параметры можно переопределить через env: `TORCH_RETRAIN_SYMBOLS`, `TORCH_RETRAIN_LIMIT`, `TORCH_RETRAIN_LOOKBACKS`, `TORCH_RETRAIN_ARCHITECTURES`, `TORCH_RETRAIN_HIDDEN_SIZES`, `TORCH_RETRAIN_LAYERS`, `TORCH_RETRAIN_DROPOUTS`, `TORCH_RETRAIN_EPOCHS`, `TORCH_RETRAIN_PATIENCE`, `TORCH_RETRAIN_INTERVAL`, `TORCH_RETRAIN_ENV`.
|
||||
По умолчанию Windows-расписание переобучает PyTorch `LSTM/GRU` каждые 6 часов с `--limit 1000` на парах `BTCUSDT,ETHUSDT,SOLUSDT`. Параметры можно переопределить через env: `TORCH_RETRAIN_SYMBOLS`, `TORCH_RETRAIN_LIMIT`, `TORCH_RETRAIN_LOOKBACKS`, `TORCH_RETRAIN_ARCHITECTURES`, `TORCH_RETRAIN_HIDDEN_SIZES`, `TORCH_RETRAIN_LAYERS`, `TORCH_RETRAIN_DROPOUTS`, `TORCH_RETRAIN_EPOCHS`, `TORCH_RETRAIN_PATIENCE`, `TORCH_RETRAIN_INTERVAL`, `TORCH_RETRAIN_ENV`.
|
||||
|
||||
## Docker
|
||||
|
||||
@@ -103,9 +101,12 @@ Dashboard: `http://<host>:8787/`
|
||||
TRADING_MODE=paper
|
||||
STARTING_BALANCE_USDT=100
|
||||
AUTO_SELECT_SYMBOLS=false
|
||||
TOP_SYMBOLS_COUNT=6
|
||||
SYMBOLS=BTCUSDT,ETHUSDT,HYPEUSDT,SOLUSDT,LTCUSDT,XRPUSDT
|
||||
BASE_INTERVAL=1
|
||||
TOP_SYMBOLS_COUNT=3
|
||||
SYMBOLS=BTCUSDT,ETHUSDT,SOLUSDT
|
||||
STRATEGY_MODE=trend_macd
|
||||
BASE_INTERVAL=60
|
||||
TREND_INTERVAL=D
|
||||
TREND_KLINE_LIMIT=260
|
||||
LOOP_INTERVAL_SECONDS=5
|
||||
FAST_TRADING_ENABLED=false
|
||||
FAST_LOOP_INTERVAL_SECONDS=1
|
||||
@@ -113,38 +114,42 @@ FAST_ENTRY_COOLDOWN_SECONDS=20
|
||||
MAX_ENTRIES_PER_MINUTE=12
|
||||
WEBSOCKET_ENABLED=true
|
||||
MIN_SIGNAL_CONFIDENCE=0.64
|
||||
PATTERN_ANALYSIS_ENABLED=true
|
||||
PATTERN_ANALYSIS_ENABLED=false
|
||||
PATTERN_SCORE_WEIGHT=0.18
|
||||
LEARNING_ENABLED=true
|
||||
LEARNING_ENABLED=false
|
||||
LEARNING_LOOKBACK_TRADES=120
|
||||
LEARNING_MIN_SAMPLES=3
|
||||
LEARNING_MAX_ADJUSTMENT=0.12
|
||||
LEARNING_MAX_POSITION_MULTIPLIER=1.6
|
||||
MIN_POSITION_USDT=1
|
||||
MAX_POSITION_USDT=20
|
||||
MAX_SYMBOL_EXPOSURE_USDT=20
|
||||
MAX_TOTAL_EXPOSURE_USDT=80
|
||||
MAX_OPEN_POSITIONS=80
|
||||
MAX_POSITIONS_PER_SYMBOL=20
|
||||
GRID_TRADING_ENABLED=true
|
||||
MAX_POSITION_USDT=25
|
||||
MAX_SYMBOL_EXPOSURE_USDT=25
|
||||
MAX_TOTAL_EXPOSURE_USDT=75
|
||||
MAX_OPEN_POSITIONS=3
|
||||
MAX_POSITIONS_PER_SYMBOL=1
|
||||
GRID_TRADING_ENABLED=false
|
||||
GRID_ENTRY_CONFIDENCE=0.58
|
||||
GRID_BUY_ZONE=0.45
|
||||
GRID_MAX_POSITION_USDT=8
|
||||
REBOUND_TRADING_ENABLED=true
|
||||
REBOUND_TRADING_ENABLED=false
|
||||
REBOUND_ENTRY_CONFIDENCE=0.58
|
||||
REBOUND_MIN_PROBABILITY=0.58
|
||||
REBOUND_MAX_POSITION_USDT=6
|
||||
KELLY_SIZING_ENABLED=true
|
||||
KELLY_SIZING_ENABLED=false
|
||||
KELLY_FRACTION=0.25
|
||||
KELLY_MAX_FRACTION=0.20
|
||||
TIME_SERIES_FORECAST_ENABLED=true
|
||||
RISK_PER_TRADE_PERCENT=0.01
|
||||
ATR_TRAILING_MULTIPLIER=2.2
|
||||
TREND_RSI_MIN=45
|
||||
TREND_RSI_MAX=65
|
||||
TIME_SERIES_FORECAST_ENABLED=false
|
||||
TIME_SERIES_MIN_CANDLES=120
|
||||
TIME_SERIES_FORECAST_HORIZON=3
|
||||
TIME_SERIES_MIN_EDGE_PERCENT=0.04
|
||||
TIME_SERIES_MAX_ADJUSTMENT=0.08
|
||||
TIME_SERIES_LSTM_ENABLED=true
|
||||
TIME_SERIES_LSTM_MODEL_PATH=runtime/lstm_forecaster.json
|
||||
STOP_LOSS_PERCENT=0.02
|
||||
STOP_LOSS_PERCENT=0.04
|
||||
TAKE_PROFIT_PERCENT=0.035
|
||||
TRAILING_STOP_PERCENT=0.015
|
||||
MIN_HOLD_SECONDS=180
|
||||
|
||||
Reference in New Issue
Block a user