RSIChaikBot — minimal production-like runtime-каркас для long-only стратегии MACD + RSI reclaim на закрытых свечах.
Проект не заменяет исследовательский notebook и не пытается быть готовой live-trading системой. Его задача — вынести торговую идею в отдельную runtime-архитектуру с разделением на strategy, market polling, execution и persistence.
Имя проекта сохранено прежним, но текущая версия исследовательской логики в Strategy.ipynb уже не использует Chaikin-подтверждение.
Бот работает по закрытой свече и делает следующее:
- загружает и обновляет буфер market data
- ждёт только новые closed candles
- считает структурированный
Signal, а неbool - рассчитывает размер позиции через
risk_per_trade - передаёт ордерное намерение в execution layer
- сохраняет локальный state в JSON
- пишет сигналы и сделки в CSV
- может восстанавливаться после рестарта по локальному state
Это именно runtime skeleton: operational layer есть, но exchange-интеграция для live режима пока оставлена как явно обозначенный skeleton.
Это не готовая live-trading система.
Перед любым live использованием обязательно проверить:
- эквивалентность расчётов notebook и runtime-кода
- корректность логики входов и выходов на реальных closed candles
- учёт комиссий, slippage, tick size и lot size для конкретной биржи
- восстановление состояния после падения процесса и перезапуска контейнера
- reconciliation локального
stateс реальным состоянием биржи - сетевые ошибки, rate limits, таймауты, повторные запросы
- фактический порядок исполнения стопов, тейков и market exits
Paper mode по умолчанию предназначен только для проверки runtime-поведения и журналирования. Он не моделирует весь набор биржевых edge cases.
Стратегия long-only и строится на комбинации двух сигналов:
MACDдолжен быть bullish.RSIдолжен reclaim-нуться вверх через заданный порог.
Выходы поддерживаются в следующем порядке:
stop-losstake-profitпоRR- optional
signal exitпри ухудшении MACD / RSI timeoutпо числу баров
Стоп рассчитывается через ATR и atr_stop_mult.
Сильные стороны стратегии:
- фильтрация импульса через MACD
- вход не по любому RSI, а по reclaim через уровень
- формализованный риск-менеджмент через
risk_per_trade
Слабые стороны стратегии:
- чувствительность к задержкам и качеству closed-candle polling
- уязвимость к боковику и резким разворотам после входа
- результат сильно зависит от параметров RSI/MACD и модели исполнения
- локальный state без exchange reconciliation недостаточен для настоящего live режима
В корне проекта сохранён Strategy.ipynb.
Важно:
- notebook не заменяется runtime-кодом
- runtime сохраняет торговую идею, но оборачивает её в operational architecture
- research и runtime-код физически разделены по разным файлам
- execution, persistence и market polling не смешиваются с strategy logic
- перед live использованием нужно вручную проверить parity между notebook и runtime
Runtime не импортирует notebook напрямую и не пытается исполнять notebook-код в production loop.
RSIChaikBot/
├── Strategy.ipynb
├── rsi_chaik_bot/
│ ├── __init__.py
│ ├── app.py
│ ├── config.py
│ ├── models.py
│ ├── market.py
│ ├── strategy.py
│ ├── execution.py
│ ├── storage.py
│ └── utils.py
├── README.md
├── requirements.txt
├── .env.example
├── Dockerfile
├── docker-compose.yml
├── assets/
│ └── placeholder.txt
├── data/
├── logs/
└── state/
rsi_chaik_bot/app.py— главный entrypoint и runtime looprsi_chaik_bot/config.py— единая конфигурация, чтение.env, dataclass-style configrsi_chaik_bot/models.py— моделиCandle,Signal,PositionState,OrderIntent,OrderResult,BotStatersi_chaik_bot/market.py— initial history, polling по закрытым свечам, обновление буфераrsi_chaik_bot/strategy.py— чистое ядро стратегии без зависимости от executionrsi_chaik_bot/execution.py—BaseExecutionClient,PaperExecutionClient,LiveExecutionClientrsi_chaik_bot/storage.py— JSON state recovery, CSV logging сигналов и сделокrsi_chaik_bot/utils.py— logger, rounding, safe float, time helpers.env.example— пример переменных окруженияDockerfileиdocker-compose.yml— контейнеризация runtimedata/— CSV с сигналами и сделкамиlogs/— runtime-логи приложенияstate/— локальное состояние бота
Runtime-реализация проверяет условия в таком порядке:
- Прогрев индикаторов.
- Расчёт
RSI,MACD,ATR. - Если позиция уже открыта:
stop-loss -> take-profit -> signal exit -> timeout - Если позиции нет:
MACD bullish -> RSI reclaim - При валидном входе строятся
entry,stop,takeи риск на единицу. - Размер позиции считается в runtime через
risk_per_trade.
Linux/macOS:
python -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
python -m rsi_chaik_bot.appWindows PowerShell:
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
Copy-Item .env.example .env
python -m rsi_chaik_bot.appdocker build -t rsi-chaik-bot .
docker compose up --build -dОстановить сервис:
docker compose downОсновные переменные:
PAPER_MODE— paper или live режимSYMBOL,TIMEFRAME— рынок и таймфреймHISTORY_LIMIT— размер буфера свечейINITIAL_CASH,FEE_RATE,SLIPPAGE_PCT— execution settingsPRICE_STEP,QUANTITY_STEP,MIN_QUANTITY— ограничения округленияMACD_FAST,MACD_SLOW,MACD_SIGNAL— MACD-параметрыRSI_PERIOD,RSI_ENTRY_LEVEL,RSI_EXIT_LEVEL— RSI-параметрыATR_PERIOD,ATR_STOP_MULT— расчёт stop-lossENABLE_SIGNAL_EXIT— включение signal exitRISK_PER_TRADE,RR_TARGET,MAX_BARS_IN_TRADE— риск и сопровождение позицииKILL_SWITCH— глобальная блокировка торговой логики
Полный пример есть в .env.example.
