Sign inSign up

devslaveux/kbot-stack:latest

Manifest digest

sha256:6a34795dff8169aee5554636aa7ec951803d6532cb97da1399eb3b11306c2714

Last pushed

2 months by devslaveux

Type

Compose

Manifest digest

sha256:6a34795dff8169aee5554636aa7ec951803d6532cb97da1399eb3b11306c2714

Compose file content

# KalshiBot5k — one-command deploy (OCI artifact, no files to ship).
#
# Publish (maintainer, after ./publish.sh pushes the images):
#     docker compose -f dist/docker-compose.yml publish -y --with-env devslaveux/kbot-stack:latest
#
# Run on ANY machine (after `docker login -u devslaveux` with a read-only token):
#     docker compose -f oci://docker.io/devslaveux/kbot-stack:latest up -d
#     -> open http://localhost:8080 and install your Kalshi key in Settings.
#
# Settings + credentials + trade data persist in named volumes (kbot-config, kbot-data) — there
# are NO host files to copy. The `environment:` block is the baked default config (safe: demo +
# dry-run + paused); anything you save in the dashboard is written to the volume and overrides it.
name: kalshibot5k
services:
  backend:
    image: devslaveux/kbot-backend:latest
    pull_policy: always
    environment:
      TZ: UTC
      # settings (.env) + private key live in the persisted volume; the dashboard writes them
      KBOT_ENV_FILE: /app/config/.env
      KALSHI_PRIVATE_KEY_PATH: /app/config/kalshi_private_key.pem
      # --- safe defaults for a fresh deploy (dashboard-saved values override these) ---
      # Boots paper + paused: the operator installs the Kalshi key, then flips DRY_RUN off and
      # unpauses in the dashboard once verified. Values here are conservative starting points;
      # tune sizing/gates in the dashboard (they persist to the volume and override this block).
      KALSHI_ENV: demo
      DRY_RUN: "true"
      START_PAUSED: "true"
      RESET_ON_START: "false"
      LOSS_CAP_ENABLED: "true"
      MAX_DAILY_LOSS_DOLLARS: "5.0"
      MAX_CONCURRENT_POSITIONS: "6"
      # --- settle-lock: THE primary strategy (buy near-locked settlement outcomes, hold to settle) ---
      SETTLE_ENABLED: "true"
      SETTLE_SHADOW: "false"
      # 15M single-strike series only (NO hourly between-brackets -- the residual-variance model
      # prices those unreliably and settle holds to settlement with no stop). BNB15M/HYPE15M are
      # sticky-thin indices: the sigma-floor guards them, but the model can still over-confidently
      # peg fair -- run them with a STRICT SETTLE_MIN_FAIR (0.90+) and watch the reject log.
      SETTLE_SERIES: KXBTC15M,KXETH15M,KXSOL15M,KXXRP15M,KXDOGE15M,KXBNB15M,KXHYPE15M
      SETTLE_MIN_FAIR: "0.90"       # validated operating point
      SETTLE_MARGIN_CENTS: "3"
      SETTLE_CONTRACTS: "1"         # floor size; raise via the dashboard once proven
      SETTLE_SIZE_BY_VOLUME: "true"
      SETTLE_CONTRACTS_MAX: "3"     # volume-scaling ceiling (conservative default)
      SETTLE_VOL_PER_CONTRACT: "500"
      # Settle is pure hold-to-settlement on the downside (the disaster-flip stop was removed
      # 2026-07-13). EARLY take-profit (opt-in): while >LOCK_SECS remain, lock a >=TP_CENTS/contract
      # net gain as a taker; inside the final LOCK_SECS hold to fee-free settlement. OFF = pure hold.
      SETTLE_TP_ENABLED: "false"
      SETTLE_TP_CENTS: "6"
      SETTLE_TP_LOCK_SECS: "60"
      SETTLE_PRICE_MIN: "50"
      SETTLE_PRICE_MAX: "97"
      # --- smart-stop exit rails (fair-anchored, mid-anchored, flash-wick debounced) ---
      SMART_STOP_ENABLED: "true"
      SMART_HARD_CAP_CENTS: "8"
      SMART_AGE_TIGHTEN_SEC: "90"
      SMART_TIGHT_CAP_CENTS: "6"
      SMART_CUT_CONFIRM_SEC: "2.0"
      SCALP_MAX_HOLD_SEC: "6600"    # must exceed SMART_AGE_TIGHTEN_SEC or the age-tighten is unreachable
      # --- fair-anchored maker (HF layer): SHADOW by default; opt into live in the dashboard ---
      MAKER_ENABLED: "true"
      MAKER_SHADOW: "true"
      MAKER_SERIES: KXBTC15M,KXETH15M,KXSOL15M,KXXRP15M,KXDOGE15M
      MAKER_CONTRACTS: "1"
      MAKER_MAX_INVENTORY: "2"
      # --- latency executor: off (no live edge in the recorded data) ---
      LAT_ENABLED: "false"
      STOP_CHECK_INTERVAL_SECONDS: "0.2"
      ONE_POSITION_PER_EVENT: "true"
    volumes:
      - kbot-config:/app/config     # .env + private key (dashboard-managed; persisted)
      - kbot-data:/app/data         # trade/state files (persisted)
    ports:
      - "8000:8000"
    restart: unless-stopped

  dashboard:
    image: devslaveux/kbot-dashboard:latest
    pull_policy: always
    ports:
      - "8080:80"     # open http://localhost:8080
    depends_on:
      - backend
    restart: unless-stopped

volumes:
  kbot-config:
  kbot-data:

Docker commands

docker compose -f oci://devslaveux/kbot-stack:latest up

Use the above command to pull and run the Compose file. Learn more.

Images used

Image


Pulls

1.4K

Stars

0

Last Updated

2 months

Image


Pulls

1.3K

Stars

0

Last Updated

2 months