Repository for automatic basis trading between:
- Spot:
NEAR-USDT - Futures perpetual:
NEARUSDTM
The strategy is delta-neutral basis mean-reversion with RL decision making:
- baseline z-score policy
- Q-learning agent trained on basis features
- live/shadow execution through KuCoin SDK
Current runtime mode: RL-only (no baseline fallback in live decisions).
notebooks/lecture16_basis_rl_colab.ipynb- lecture16-style notebook entrypoint.notebooks/lecture17_near_basis_rl.ipynb- same demo notebook (alias copy).trade_signal_executor_kucoin.py- main CLI executor (train/shadow/live).run_trade_signal.py- cross-platform launcher.run_kucoin_trade_signal.ps1- Windows wrapper.run_kucoin_trade_signal.sh- macOS/Linux wrapper.src/kucoin_near_basis_rl/*.py- RL + feature engineering + KuCoin data/execution layer.config/micro_near_v1_1m.json- main 1-minute profile.config/micro_near_v1.json- alternative 15-minute profile.MODEL_SPEC.md- formal model/reward/risk description.
python -m venv venvWindows:
.\venv\Scripts\Activate.ps1
python -m pip install --upgrade pip wheel "setuptools<81"
python -m pip install -r requirements.txtmacOS/Linux:
source venv/bin/activate
python -m pip install --upgrade pip wheel "setuptools<81"
python -m pip install -r requirements.txt
chmod +x run_kucoin_trade_signal.shAll-in-one scripts package:
Windows PowerShell:
.\scripts\bot.ps1 -Action install
.\scripts\bot.ps1 -Action env-template
.\scripts\bot.ps1 -Action train-fast
.\scripts\bot.ps1 -Action shadow-oncemacOS/Linux:
chmod +x scripts/bot.sh
./scripts/bot.sh install
./scripts/bot.sh env-template
./scripts/bot.sh train-fast
./scripts/bot.sh shadow-onceBuild image:
docker build -t lecture17-kucoin-rl .One-command live (PowerShell):
.\scripts\bot.ps1 -Action docker-live-upThe script auto-removes old near-rl-live container name conflicts before start.
One-command live (bash):
./scripts/bot.sh docker-live-upOne-command logs/stop:
.\scripts\bot.ps1 -Action docker-live-logs
.\scripts\bot.ps1 -Action docker-live-downRun train:
docker run --rm -it -v ${PWD}/models:/app/models -v ${PWD}/reports:/app/reports -v ${PWD}/.runtime:/app/.runtime lecture17-kucoin-rl python run_trade_signal.py --mode train --config config/micro_near_v1_1m.json --model-path models/near_basis_qlearning.json --features-out reports/near_basis_features.csv --env-file .runtime/kucoin.envRun shadow once:
docker run --rm -it -v ${PWD}/models:/app/models -v ${PWD}/.runtime:/app/.runtime lecture17-kucoin-rl python run_trade_signal.py --mode shadow --once --config config/micro_near_v1_1m.json --model-path models/near_basis_qlearning.json --env-file .runtime/kucoin.envRun continuous live:
docker run -d --name near-rl-live --restart unless-stopped -v ${PWD}/models:/app/models -v ${PWD}/.runtime:/app/.runtime lecture17-kucoin-rl python run_trade_signal.py --mode live --run-real-order --config config/micro_near_v1_1m.json --model-path models/near_basis_qlearning.json --env-file .runtime/kucoin.envLive logs:
docker logs -f near-rl-liveStop live container:
docker rm -f near-rl-liveCreate local file .runtime/kucoin.env (ignored by git):
KUCOIN_API_KEY=...
KUCOIN_API_SECRET=...
KUCOIN_API_PASSPHRASE=...Notes:
KUCOIN_API_PASSPHRASEis required by KuCoin SDK for live trading.- Current project auto-loads
.runtime/kucoin.envin launcher/executor scripts.
python run_trade_signal.py --mode train --config config/micro_near_v1_1m.json --model-path models/near_basis_qlearning.json --features-out reports/near_basis_features.csvOptional train range:
python run_trade_signal.py --mode train --start "2026-01-01T00:00:00Z" --end "2026-03-01T00:00:00Z"Fast smoke-train (recommended first run):
python run_trade_signal.py --mode train --episodes 10 --start "2026-03-10T00:00:00Z" --end "2026-03-11T00:00:00Z"One cycle:
python run_trade_signal.py --mode shadow --once --config config/micro_near_v1_1m.json --model-path models/near_basis_qlearning.jsonLoop:
python run_trade_signal.py --mode shadow --config config/micro_near_v1_1m.json --model-path models/near_basis_qlearning.jsonpython run_trade_signal.py --mode live --run-real-order --config config/micro_near_v1_1m.json --model-path models/near_basis_qlearning.jsonOr with wrapper:
powershell -NoProfile -ExecutionPolicy Bypass -File .\run_kucoin_trade_signal.ps1 -Mode live -RunRealOrderOpen:
notebooks/lecture16_basis_rl_colab.ipynb
Notebook shows:
- Download/prepare KuCoin candles.
- Build basis features (
volume,volatility,z-score, etc). - Train RL model.
- Run one paper decision tick.
Note:
tick["action_source"]in logs showsrl_known_stateorrl_new_state.
Missing required env vars for live mode: fill.runtime/kucoin.envwith key/secret/passphrase.Invalid KC-API-PASSPHRASE: passphrase does not match API key.ConnectionError: check firewall/network access toapi.kucoin.comandapi-futures.kucoin.com.pkg_resources/NameErrorfromkucoin-python: runpython -m pip install "setuptools<81"and retry.ModuleNotFoundError: gymnasium / gym: runpython -m pip install -r requirements.txtagain (the package list includesgymnasium).
- Do not commit
.runtime/kucoin.env. - Use IP restrictions for API keys in production.
- Start from
shadowmode before enablinglive.
git init
git add .
git commit -m "KuCoin NEAR basis RL bot"
git branch -M main
git remote add origin https://github.com/<your_user>/<your_repo>.git
git push -u origin mainscripts/bot.ps1 and scripts/bot.sh support:
installenv-templatetrain-fasttrainshadow-onceshadowlivetestnotebookdocker-builddocker-shadow-oncedocker-live-updocker-live-logsdocker-live-down