← back to Ken
Ken (Cody gate b): independence gate on winner-consensus — exclude control/indiscriminate strategies (random/spray_pray/full_send = noise/take-all; penny_pincher/nickel_slots/degen_lite = low-edge no quality gate) from driving REAL trades. Two correlated low-bar strategies agreeing was noise, not consensus. They still paper-trade as controls.
2f7617c1572efc0462932c6c29c0b46065b88884 · 2026-08-03 10:20:49 -0700 · steve@designerwallcoverings.com
Files touched
Diff
commit 2f7617c1572efc0462932c6c29c0b46065b88884
Author: steve@designerwallcoverings.com <steve@designerwallcoverings.com>
Date: Mon Aug 3 10:20:49 2026 -0700
Ken (Cody gate b): independence gate on winner-consensus — exclude control/indiscriminate strategies (random/spray_pray/full_send = noise/take-all; penny_pincher/nickel_slots/degen_lite = low-edge no quality gate) from driving REAL trades. Two correlated low-bar strategies agreeing was noise, not consensus. They still paper-trade as controls.
---
kalshi-dash/server.js | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/kalshi-dash/server.js b/kalshi-dash/server.js
index 5a416d0..0427969 100644
--- a/kalshi-dash/server.js
+++ b/kalshi-dash/server.js
@@ -7503,10 +7503,17 @@ async function getWinnerConsensusSignals() {
// by pure variance — P(>=12 wins | n=20, p=0.5) ~= 25%, so ~1-in-4 RANDOM portfolios would
// qualify as a "winner" that real money then follows. N=100 pushes the gate above noise.
const MIN_RESOLVED = 100, WIN_GATE = 0.60, MIN_AGREE = 2, MAX_MARKETS = 8;
+ // INDEPENDENCE GATE (2026-08-03, Cody gate): real bets follow "≥2 winners agree", but these
+ // strategies carry NO independent signal — they accept on pure randomness or take everything,
+ // so two of them co-holding a market is noise, not consensus. Exclude them from driving real
+ // trades (they still paper-trade as control groups). random/spray_pray = Math.random; full_send
+ // = every signal; penny_pincher/nickel_slots/degen_lite = low-edge with no quality gate.
+ const INDISCRIMINATE = "'random','spray_pray','full_send','penny_pincher','nickel_slots','degen_lite'";
try {
const { rows } = await kenQ(`
WITH winners AS (
SELECT p.id, p.name FROM ken_portfolios p JOIN ken_daily_pnl d ON d.portfolio_id = p.id
+ WHERE p.strategy NOT IN (${INDISCRIMINATE})
GROUP BY p.id, p.name
HAVING SUM(d.wins)+SUM(d.losses) >= ${MIN_RESOLVED}
AND SUM(d.wins)::float/NULLIF(SUM(d.wins)+SUM(d.losses),0) >= ${WIN_GATE}
← eb2e485 Ken: ROOT-CAUSE the paper over-credit — node-postgres return
·
back to Ken
·
Ken (Cody gate c): add read-only reconciliation canary — ver a33bc89 →