From 8e860361ec787c714af2602a99915fc0a4c30c03 Mon Sep 17 00:00:00 2001 From: drjones Date: Sun, 2 Aug 2026 19:25:58 -0700 Subject: [PATCH] feat: 5-coin fleet (DOGE/SOL/ETH/XRP/BTC), enriched context (multi-TF trend, orderbook depth, BTC corr, WR history, regime), memory system (learned patterns), self-adapting overrides, fleet dashboard with per-coin RSI/mom --- __pycache__/bot.cpython-311.pyc | Bin 45103 -> 51966 bytes __pycache__/bot.cpython-314.pyc | Bin 41634 -> 49773 bytes bot.log | 38 ++++++++++++++++++++++++++++++++ bot.py | 34 ++++++++++++++++++++++++++++ btc.db | Bin 0 -> 53248 bytes btc.json | 28 +++++++++++++++++++++++ btc.lock | 0 dashboard.py | 30 ++++++++++++++++++++----- doge.db | Bin 57344 -> 69632 bytes eth.db | Bin 61440 -> 61440 bytes sol.db | Bin 57344 -> 69632 bytes xrp.db | Bin 0 -> 32768 bytes xrp.json | 29 ++++++++++++++++++++++++ xrp.lock | 0 14 files changed, 153 insertions(+), 6 deletions(-) create mode 100644 btc.db create mode 100644 btc.json create mode 100644 btc.lock create mode 100644 xrp.db create mode 100644 xrp.json create mode 100644 xrp.lock diff --git a/__pycache__/bot.cpython-311.pyc b/__pycache__/bot.cpython-311.pyc index 00cfc5957ae83937fe08d6d37196c963005ee6da..469a446674267f3cc3bd0b3e97dcef2af696cc5d 100644 GIT binary patch delta 9949 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 delta 4242 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 z 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 D!;Y}9 delta 4450 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 So=r1kqb=;M7DO7(ru+w4f??DE diff --git a/bot.log b/bot.log index 85d036c..59fe756 100644 --- a/bot.log +++ b/bot.log @@ -1714,3 +1714,41 @@ sqlite3.OperationalError: no such column: id 2026-08-02 19:08:26,747 POST NO x1 KXETH15M-26AUG022215-15 @ 50¢ — DOWN: DOWN spike 0.06% conf=0.65 [RSI oversold + Fear, but 15m momentum DOWN suggests fading t] 2026-08-02 19:08:45,920 loop error: name 'llm_vote' is not defined 2026-08-02 19:09:12,858 loop error: name 'llm_vote' is not defined +2026-08-02 19:12:26,076 POST YES x1 KXDOGE15M-26AUG022215-15 @ 50¢ — ⚠ RSI 0 extreme oversold → fade UP +2026-08-02 19:12:53,256 POST YES x1 KXSOL15M-26AUG022215-15 @ 50¢ — ⚠ RSI 0 extreme oversold → fade UP +2026-08-02 19:13:21,404 POST YES x1 KXETH15M-26AUG022215-15 @ 50¢ — ⚠ RSI 0 extreme oversold → fade UP +2026-08-02 19:13:25,646 loop error: name 'llm_vote' is not defined +2026-08-02 19:13:51,321 loop error: name 'llm_vote' is not defined +2026-08-02 19:15:01,182 HEDGE KXBTC15M-TEST: no@45¢ + yes@42¢ → locked 13¢ +2026-08-02 19:15:18,405 K4LSH1_OPS online — mode=AUTO dry_run=False stake=10¢ max_spend=100¢ +2026-08-02 19:15:23,184 K4LSH1_OPS online — mode=AUTO dry_run=False stake=10¢ max_spend=100¢ +2026-08-02 19:15:23,184 staggering start by 20s +2026-08-02 19:15:28,159 K4LSH1_OPS online — mode=AUTO dry_run=False stake=10¢ max_spend=100¢ +2026-08-02 19:15:28,159 staggering start by 40s +2026-08-02 19:15:31,318 POST YES x1 KXDOGE15M-26AUG022230-30 @ 50¢ — ⚠ RSI 0 extreme oversold → fade UP +2026-08-02 19:15:55,907 POST NO x1 KXSOL15M-26AUG022230-30 @ 50¢ — ⚠ RSI 100 extreme overbought → fade DOWN +2026-08-02 19:16:31,965 POST NO x1 KXETH15M-26AUG022230-30 @ 50¢ — ⚠ RSI 100 extreme overbought → fade DOWN +2026-08-02 19:18:30,203 127.0.0.1 - - [02/Aug/2026 19:18:30] "GET /api/state HTTP/1.1" 200 - +2026-08-02 19:18:33,639 127.0.0.1 - - [02/Aug/2026 19:18:33] "GET /api/state HTTP/1.1" 200 - +2026-08-02 19:18:38,654 127.0.0.1 - - [02/Aug/2026 19:18:38] "GET /api/state HTTP/1.1" 200 - +2026-08-02 19:18:43,929 127.0.0.1 - - [02/Aug/2026 19:18:43] "GET /api/state HTTP/1.1" 200 - +2026-08-02 19:18:48,928 127.0.0.1 - - [02/Aug/2026 19:18:48] "GET /api/state HTTP/1.1" 200 - +2026-08-02 19:18:51,913 127.0.0.1 - - [02/Aug/2026 19:18:51] "GET /api/fleet HTTP/1.1" 200 - +2026-08-02 19:20:28,696 POST YES x1 KXDOGE15M-26AUG022230-30 @ 50¢ — ⚠ RSI 0 extreme oversold → fade UP +2026-08-02 19:20:53,823 POST NO x1 KXSOL15M-26AUG022230-30 @ 50¢ — DOWN: UP spike 0.20% conf=0.65 [RSI 78/81 overbought, sharp UP momentum fading] +2026-08-02 19:21:25,982 POST NO x1 KXETH15M-26AUG022230-30 @ 50¢ — ⚠ RSI 94 extreme overbought → fade DOWN +2026-08-02 19:21:49,882 K4LSH1_OPS online — mode=AUTO dry_run=False stake=10¢ max_spend=100¢ +2026-08-02 19:21:54,860 K4LSH1_OPS online — mode=AUTO dry_run=False stake=10¢ max_spend=100¢ +2026-08-02 19:21:54,860 staggering start by 20s +2026-08-02 19:21:59,877 K4LSH1_OPS online — mode=AUTO dry_run=False stake=10¢ max_spend=100¢ +2026-08-02 19:21:59,877 staggering start by 40s +2026-08-02 19:22:02,504 POST YES x1 KXDOGE15M-26AUG022230-30 @ 50¢ — ⚠ RSI 0 extreme oversold → fade UP +2026-08-02 19:22:04,906 K4LSH1_OPS online — mode=AUTO dry_run=False stake=10¢ max_spend=100¢ +2026-08-02 19:22:04,906 staggering start by 60s +2026-08-02 19:22:09,928 K4LSH1_OPS online — mode=AUTO dry_run=False stake=10¢ max_spend=100¢ +2026-08-02 19:22:09,928 staggering start by 80s +2026-08-02 19:22:26,930 POST NO x1 KXSOL15M-26AUG022230-30 @ 50¢ — DOWN: UP spike 0.13% conf=0.65 [RSI(5m)=75 overbought, fading the spike] +2026-08-02 19:23:03,239 POST YES x1 KXETH15M-26AUG022230-30 @ 50¢ — ⚠ RSI 0 extreme oversold → fade UP +2026-08-02 19:23:11,364 skip KXXRP15M-26AUG022230-30: no swing (0.000% < 0.005%) +2026-08-02 19:23:40,530 skip KXBTC15M-26AUG022230-30: no swing (0.000% < 0.005%) +2026-08-02 19:25:31,546 POST YES x1 KXDOGE15M-26AUG022230-30 @ 50¢ — ⚠ RSI 0 extreme oversold → fade UP diff --git a/bot.py b/bot.py index 2dcc9f7..29fcf8b 100644 --- a/bot.py +++ b/bot.py @@ -276,6 +276,14 @@ def enriched_context(cfg, price, mom, mom_score, conn): if "fee_fast" in ix: lines.append(f"mempool fast fee: {ix['fee_fast']} sat/vB") + # Learned patterns from past bets + learnings = conn.execute("SELECT v FROM kv WHERE k='learnings'").fetchone() + if learnings: + try: + for l in json.loads(learnings[0])[-5:]: + lines.append(f"LEARNED: {l}") + except Exception: pass + lines.append("") lines.append("You trade 15-minute crypto up/down binary contracts by FADING spikes:") lines.append("- Sharp UP move → bet DOWN (mean reversion)") @@ -284,6 +292,8 @@ def enriched_context(cfg, price, mom, mom_score, conn): lines.append("- Consider: RSI extremes (>80 or <20 = high-prob fade), 24h range position, BTC macro direction") lines.append("Reply with ONLY JSON: {\"vote\":\"UP\"|\"DOWN\"|\"SKIP\",\"conf\":0.0-1.0,\"why\":\"<10 words>\"}") return "\n".join(lines) + +def llm_vote(cfg, price, mom, mom_score, conn): """Two-tier: qwen3.5 (fast gate, 0.4s on MacBook) → ornith (deep verify on RTX 3070). Gate handles clear signals; borderline calls escalate to ornith for final verdict.""" coin = cfg.get("coin","BTC") @@ -495,6 +505,30 @@ def adapt_controls(conn, cfg): conn.commit() LOG.info(f"🔧 self-adapt: {ov.get('reason')} — override={json.dumps({k:v for k,v in ov.items() if k!='reason'})}") _last_adapt_ts = time.time() + # extract learnings from resolved bets + lp = ( + f"Recent trades: {json.dumps([{'side':r[0],'pnl':r[1],'price':r[2]} for r in resolved[:10]])}. " + "Extract 1-2 actionable trading patterns. Reply with ONLY JSON array of strings, e.g.: " + '["RSI < 20 UP bets won 3/4 times","DOGE fades after 0.1% spike lose 60%"]' + ) + try: + r3 = requests.post(fast_url+"/api/generate", + json={"model": cfg.get("fast_llm_model","qwen3.5:4b"), "prompt": lp, + "stream": False, "think": False, "options": {"temperature": 0.1, "num_predict": 60}}, + timeout=10) + txt3 = r3.json().get("response","") + s3, e3 = txt3.find("["), txt3.rfind("]")+1 + new_learnings = json.loads(txt3[s3:e3]) if s3 >= 0 else [] + if new_learnings: + existing = conn.execute("SELECT v FROM kv WHERE k='learnings'").fetchone() + old = json.loads(existing[0]) if existing else [] + old.extend(new_learnings) + conn.execute("INSERT OR REPLACE INTO kv(k,v) VALUES ('learnings',?)", + (json.dumps(old[-20:]),)) # keep last 20 + conn.commit() + LOG.info(f"🧠 learned: {new_learnings}") + except Exception: + pass except Exception: pass # silently skip on failure diff --git a/btc.db b/btc.db new file mode 100644 index 0000000000000000000000000000000000000000..1cbd88a5169701ff1b2b24ab4261a03e2aa9062e GIT binary patch literal 53248 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 literal 0 HcmV?d00001 diff --git a/btc.json b/btc.json new file mode 100644 index 0000000..3cb6bc5 --- /dev/null +++ b/btc.json @@ -0,0 +1,28 @@ +{ + "api_key_id": "28d5876b-2ece-4aa3-aa17-ec96e1e706eb", + "key_path": "/Users/drjones/kalshi-bot/kalshi_private_key.pem", + "mode": "AUTO", + "dry_run": false, + "stake_cents": 10, + "max_contracts": 1, + "daily_loss_cap_cents": 500, + "min_conf": 0.5, + "ollama_url": "http://10.30.20.186:11434", + "ollama_model": "ornith:latest", + "swing_threshold_pct": 0.005, + "learning": true, + "kill": false, + "coin": "BTC", + "series": "KXBTC15M", + "start_delay": 0, + "db_path": "btc.db", + "post_price_cents": 50, + "max_spend_cents": 100, + "decision_interval_sec": 300, + "start_delay_sec": 80, + "fast_llm_url": "http://localhost:11434", + "fast_llm_model": "qwen3.5:4b", + "deep_llm_url": "http://10.30.20.186:11434", + "deep_llm_model": "ornith:latest", + "color": "#f7931a" +} \ No newline at end of file diff --git a/btc.lock b/btc.lock new file mode 100644 index 0000000..e69de29 diff --git a/dashboard.py b/dashboard.py index 08afe8d..71450c6 100644 --- a/dashboard.py +++ b/dashboard.py @@ -201,7 +201,7 @@ h1{font-size:1rem;letter-spacing:3px}.dim{color:#0a5f2e}