@gonzih/polymarket-arb 1.0.7 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/claude.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { MomentumSignal } from "./signal.js";
2
2
  import type { Contract, WhaleFadeSignal } from "./polymarket.js";
3
+ import type { SimulationResult } from "./simulationSignal.js";
3
4
  export type TradeAnalysis = {
4
5
  confidence: number;
5
6
  kelly_fraction: number;
@@ -10,6 +11,7 @@ export type ExtraContext = {
10
11
  whaleFade?: WhaleFadeSignal | null;
11
12
  simulationGap?: number | null;
12
13
  highConfidenceEdge?: boolean;
14
+ simulation?: SimulationResult;
13
15
  };
14
16
  export declare function analyzeTradeOpportunity(signal: MomentumSignal, contract: Contract, extra?: ExtraContext): Promise<TradeAnalysis | null>;
15
17
  //# sourceMappingURL=claude.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAKjE,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,QAAQ,EAClB,KAAK,CAAC,EAAE,YAAY,GACnB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAsE/B"}
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAK9D,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B,CAAC;AAEF,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,QAAQ,EAClB,KAAK,CAAC,EAAE,YAAY,GACnB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA6E/B"}
package/dist/claude.js CHANGED
@@ -21,6 +21,13 @@ export async function analyzeTradeOpportunity(signal, contract, extra) {
21
21
  if (extra.highConfidenceEdge !== undefined) {
22
22
  extraContext += `\nHigh-confidence edge: ${extra.highConfidenceEdge ? "YES — whale fade and simulation both agree on direction" : "NO"}.`;
23
23
  }
24
+ if (extra.simulation) {
25
+ const sim = extra.simulation;
26
+ const edgeSign = sim.edge > 0 ? "+" : "";
27
+ extraContext += `\n4-agent debate signal: ${sim.signal} | Synthetic P(YES)=${(sim.syntheticProb * 100).toFixed(1)}% | Edge=${edgeSign}${(sim.edge * 100).toFixed(1)}pp | Spread=${(sim.spread * 100).toFixed(1)}pp`;
28
+ const breakdown = sim.agents.map((a) => `${a.agent}=${(a.prob * 100).toFixed(0)}%`).join(", ");
29
+ extraContext += `\n Agent breakdown: ${breakdown}`;
30
+ }
24
31
  }
25
32
  const prompt = `You are a prediction market arbitrage assistant. Analyze this trade opportunity and respond in JSON only.
26
33
 
@@ -1 +1 @@
1
- {"version":3,"file":"claude.js","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"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"}
package/dist/daemon.d.ts CHANGED
@@ -6,9 +6,14 @@ export declare class TradingDaemon {
6
6
  private lastSignal;
7
7
  private dayResetTimer;
8
8
  private simCache;
9
+ private lastDebateSimAt;
10
+ private lastMarketOdds;
11
+ private debateScheduleTimer;
12
+ private activeMarkets;
9
13
  constructor(paperMode?: boolean);
10
14
  start(): void;
11
15
  stop(): void;
16
+ private scheduleDebateSimulation;
12
17
  private scheduleDayReset;
13
18
  }
14
19
  //# sourceMappingURL=daemon.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAiBA,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,QAAQ,CAA2E;gBAE/E,SAAS,UAAO;IAK5B,KAAK,IAAI,IAAI;IAoIb,IAAI,IAAI,IAAI;IAMZ,OAAO,CAAC,gBAAgB;CAWzB"}
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AA8BA,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,QAAQ,CAA2E;IAG3F,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,mBAAmB,CAA+B;IAC1D,OAAO,CAAC,aAAa,CAAyG;gBAElH,SAAS,UAAO;IAK5B,KAAK,IAAI,IAAI;IA0Mb,IAAI,IAAI,IAAI;IAOZ,OAAO,CAAC,wBAAwB;IA+BhC,OAAO,CAAC,gBAAgB;CAWzB"}
package/dist/daemon.js CHANGED
@@ -3,6 +3,7 @@ import { SignalEngine } from "./signal.js";
3
3
  import { fetchContracts, fetchRecentTrades, detectWhaleFade, placeOrder } from "./polymarket.js";
4
4
  import { analyzeTradeOpportunity } from "./claude.js";
5
5
  import { simulateMarket, computeHighConfidenceEdge } from "./simulate.js";
6
+ import { runSimulation, shouldRunSimulation, kellyAdjustment, logSimulationResult, } from "./simulationSignal.js";
6
7
  import { RiskManager } from "./kelly.js";
7
8
  import { log } from "./logger.js";
8
9
  const CLAUDE_CONFIDENCE_THRESHOLD = 0.65;
@@ -12,6 +13,11 @@ const SIM_MIN_VOLUME = 50_000; // 24h volume threshold for simulation
12
13
  const SIM_MIN_ODDS = 0.15; // skip simulation near certainty
13
14
  const SIM_MAX_ODDS = 0.85;
14
15
  const SIM_CACHE_TTL_MS = 2 * 60 * 60 * 1000; // re-run sim at most every 2h per market
16
+ // Debate simulation constants
17
+ const DEBATE_WHALE_THRESHOLD = 100_000; // run debate simulation on whale trades >= $100k
18
+ const DEBATE_ODDS_DELTA_THRESHOLD = 0.07; // 7% odds change triggers debate simulation
19
+ const DEBATE_SCHEDULE_MIN_MS = 4 * 60 * 60 * 1000; // 4h minimum
20
+ const DEBATE_SCHEDULE_MAX_MS = 6 * 60 * 60 * 1000; // 6h maximum
15
21
  export class TradingDaemon {
16
22
  feeds = new FeedManager();
17
23
  signals = new SignalEngine();
@@ -20,6 +26,11 @@ export class TradingDaemon {
20
26
  lastSignal = new Map();
21
27
  dayResetTimer = null;
22
28
  simCache = new Map();
29
+ // Debate simulation state
30
+ lastDebateSimAt = new Map();
31
+ lastMarketOdds = new Map();
32
+ debateScheduleTimer = null;
33
+ activeMarkets = new Map();
23
34
  constructor(paperMode = true) {
24
35
  this.paperMode = paperMode;
25
36
  log("info", { event: "daemon_start", paperMode, balance: INITIAL_BALANCE });
@@ -88,11 +99,76 @@ export class TradingDaemon {
88
99
  simulationGapPp: simulationGap,
89
100
  });
90
101
  }
102
+ // Track this market for scheduled debate simulations
103
+ const hoursToResolution = Math.max(0, (contract.expiresAt - Date.now()) / 3_600_000);
104
+ this.activeMarkets.set(contract.id, {
105
+ question: contract.question,
106
+ odds,
107
+ volume: 0, // volume not available in Contract type; will be checked against threshold
108
+ hoursToResolution,
109
+ });
110
+ // Check for odds delta trigger (>7% change since last observed)
111
+ const lastOdds = this.lastMarketOdds.get(contract.id);
112
+ const oddsDelta = lastOdds !== undefined ? Math.abs(odds - lastOdds) : 0;
113
+ this.lastMarketOdds.set(contract.id, odds);
114
+ // Run debate simulation on whale trade or odds delta
115
+ let debateResult = null;
116
+ if (whaleFade && whaleFade.size >= DEBATE_WHALE_THRESHOLD) {
117
+ log("info", {
118
+ event: "debate_sim_trigger",
119
+ reason: "whale_trade",
120
+ marketId: contract.id,
121
+ whaleSize: whaleFade.size,
122
+ });
123
+ debateResult = await runSimulation({
124
+ type: 'whale',
125
+ marketId: contract.id,
126
+ marketQuestion: contract.question,
127
+ marketOdds: odds,
128
+ volume: whaleFade.size,
129
+ hoursToResolution,
130
+ }).catch(() => null);
131
+ if (debateResult)
132
+ logSimulationResult(debateResult, contract.question);
133
+ }
134
+ else if (oddsDelta >= DEBATE_ODDS_DELTA_THRESHOLD) {
135
+ log("info", {
136
+ event: "debate_sim_trigger",
137
+ reason: "odds_delta",
138
+ marketId: contract.id,
139
+ oddsDelta: parseFloat((oddsDelta * 100).toFixed(2)),
140
+ });
141
+ debateResult = await runSimulation({
142
+ type: 'odds_delta',
143
+ marketId: contract.id,
144
+ marketQuestion: contract.question,
145
+ marketOdds: odds,
146
+ volume: 0,
147
+ hoursToResolution,
148
+ }).catch(() => null);
149
+ if (debateResult)
150
+ logSimulationResult(debateResult, contract.question);
151
+ }
152
+ // Apply Kelly adjustment from debate result
153
+ let kellyMultiplier = 1.0;
154
+ if (debateResult) {
155
+ kellyMultiplier = kellyAdjustment(debateResult);
156
+ if (kellyMultiplier === 0.0) {
157
+ log("info", {
158
+ event: "trade_skipped",
159
+ reason: "debate_volatility_signal",
160
+ marketId: contract.id,
161
+ spread: debateResult.spread,
162
+ });
163
+ return;
164
+ }
165
+ }
91
166
  // Ask Claude for analysis (with extra context)
92
167
  const analysis = await analyzeTradeOpportunity(signal, contract, {
93
168
  whaleFade,
94
169
  simulationGap,
95
170
  highConfidenceEdge,
171
+ simulation: debateResult ?? undefined,
96
172
  });
97
173
  if (!analysis)
98
174
  return;
@@ -106,9 +182,10 @@ export class TradingDaemon {
106
182
  });
107
183
  return;
108
184
  }
109
- // Size the position
185
+ // Size the position (apply debate Kelly multiplier)
110
186
  const price = contract.yesPrice;
111
- const size = this.risk.sizePosition(analysis.kelly_fraction, price);
187
+ const adjustedKelly = analysis.kelly_fraction * kellyMultiplier;
188
+ const size = this.risk.sizePosition(adjustedKelly, price);
112
189
  if (size <= 0) {
113
190
  log("info", { event: "trade_skipped", reason: "zero_size" });
114
191
  return;
@@ -121,7 +198,7 @@ export class TradingDaemon {
121
198
  size,
122
199
  price,
123
200
  confidence: analysis.confidence,
124
- kellyFraction: analysis.kelly_fraction,
201
+ kellyFraction: adjustedKelly,
125
202
  reasoning: analysis.reasoning,
126
203
  expiresAt: new Date(contract.expiresAt).toISOString(),
127
204
  paperMode: this.paperMode,
@@ -131,14 +208,45 @@ export class TradingDaemon {
131
208
  this.feeds.start();
132
209
  // Reset daily P&L at midnight
133
210
  this.scheduleDayReset();
211
+ // Schedule periodic debate simulations (every 4-6h)
212
+ this.scheduleDebateSimulation();
134
213
  log("info", { event: "feeds_started" });
135
214
  }
136
215
  stop() {
137
216
  this.feeds.stop();
138
217
  if (this.dayResetTimer)
139
218
  clearTimeout(this.dayResetTimer);
219
+ if (this.debateScheduleTimer)
220
+ clearTimeout(this.debateScheduleTimer);
140
221
  log("info", { event: "daemon_stopped" });
141
222
  }
223
+ scheduleDebateSimulation() {
224
+ const jitter = DEBATE_SCHEDULE_MIN_MS +
225
+ Math.random() * (DEBATE_SCHEDULE_MAX_MS - DEBATE_SCHEDULE_MIN_MS);
226
+ this.debateScheduleTimer = setTimeout(async () => {
227
+ log("info", { event: "debate_sim_scheduled_run", marketCount: this.activeMarkets.size });
228
+ for (const [marketId, market] of this.activeMarkets.entries()) {
229
+ if (!shouldRunSimulation(market.volume, market.hoursToResolution))
230
+ continue;
231
+ const lastRun = this.lastDebateSimAt.get(marketId) ?? 0;
232
+ if (Date.now() - lastRun < DEBATE_SCHEDULE_MIN_MS)
233
+ continue;
234
+ this.lastDebateSimAt.set(marketId, Date.now());
235
+ const result = await runSimulation({
236
+ type: 'scheduled',
237
+ marketId,
238
+ marketQuestion: market.question,
239
+ marketOdds: market.odds,
240
+ volume: market.volume,
241
+ hoursToResolution: market.hoursToResolution,
242
+ }).catch(() => null);
243
+ if (result)
244
+ logSimulationResult(result, market.question);
245
+ }
246
+ // Reschedule
247
+ this.scheduleDebateSimulation();
248
+ }, jitter);
249
+ }
142
250
  scheduleDayReset() {
143
251
  const now = new Date();
144
252
  const midnight = new Date(now);
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,8 +2,20 @@
2
2
  import { TradingDaemon } from "./daemon.js";
3
3
  import { log, logDir } from "./logger.js";
4
4
  const args = process.argv.slice(2);
5
- if (args.includes("--help") || args.includes("-h")) {
6
- console.log(`polymarket-arb Claude-powered prediction market arbitrage bot
5
+ // Backtest mode: `node dist/index.js backtest` or `docker run ... backtest`
6
+ if (args[0] === "backtest") {
7
+ import("./backtestRunner.js")
8
+ .then(({ runBacktest }) => runBacktest())
9
+ .then(() => process.exit(0))
10
+ .catch((err) => {
11
+ console.error("Backtest failed:", err);
12
+ process.exit(1);
13
+ });
14
+ // async import started; JS event loop keeps process alive until it resolves/rejects
15
+ }
16
+ else {
17
+ if (args.includes("--help") || args.includes("-h")) {
18
+ console.log(`polymarket-arb — Claude-powered prediction market arbitrage bot
7
19
 
8
20
  Usage: polymarket-arb [options]
9
21
 
@@ -11,6 +23,7 @@ Options:
11
23
  --paper Paper trading mode (default, no real orders)
12
24
  --live Live trading mode (requires POLYMARKET_API_KEY + POLYMARKET_SECRET)
13
25
  --log-dir Override log directory (default: ~/.polymarket-arb)
26
+ --backtest Run historical backtest (alias: pass 'backtest' as first arg)
14
27
  --help Show this help
15
28
 
16
29
  Environment variables:
@@ -21,41 +34,42 @@ Environment variables:
21
34
 
22
35
  Log directory: ${logDir()}
23
36
  `);
24
- process.exit(0);
25
- }
26
- // Determine paper mode
27
- const paperMode = args.includes("--live")
28
- ? false
29
- : args.includes("--paper")
30
- ? true
31
- : process.env.PAPER_MODE !== "false";
32
- if (!paperMode && !process.env.POLYMARKET_API_KEY) {
33
- console.error("ERROR: --live mode requires POLYMARKET_API_KEY environment variable");
34
- process.exit(1);
35
- }
36
- log("info", {
37
- event: "startup",
38
- mode: paperMode ? "paper" : "live",
39
- logDir: logDir(),
40
- nodeVersion: process.version,
41
- });
42
- if (process.env.CLAUDE_CODE_OAUTH_TOKEN) {
43
- log("info", { event: "claude_auth", method: "oauth_token" });
44
- }
45
- else {
46
- log("warn", { event: "claude_auth", method: "credential_file", note: "no CLAUDE_CODE_OAUTH_TOKEN set" });
37
+ process.exit(0);
38
+ }
39
+ // Determine paper mode
40
+ const paperMode = args.includes("--live")
41
+ ? false
42
+ : args.includes("--paper")
43
+ ? true
44
+ : process.env.PAPER_MODE !== "false";
45
+ if (!paperMode && !process.env.POLYMARKET_API_KEY) {
46
+ console.error("ERROR: --live mode requires POLYMARKET_API_KEY environment variable");
47
+ process.exit(1);
48
+ }
49
+ log("info", {
50
+ event: "startup",
51
+ mode: paperMode ? "paper" : "live",
52
+ logDir: logDir(),
53
+ nodeVersion: process.version,
54
+ });
55
+ if (process.env.CLAUDE_CODE_OAUTH_TOKEN) {
56
+ log("info", { event: "claude_auth", method: "oauth_token" });
57
+ }
58
+ else {
59
+ log("warn", { event: "claude_auth", method: "credential_file", note: "no CLAUDE_CODE_OAUTH_TOKEN set" });
60
+ }
61
+ const daemon = new TradingDaemon(paperMode);
62
+ daemon.start();
63
+ // Graceful shutdown
64
+ process.on("SIGTERM", () => {
65
+ log("info", { event: "sigterm_received" });
66
+ daemon.stop();
67
+ process.exit(0);
68
+ });
69
+ process.on("SIGINT", () => {
70
+ log("info", { event: "sigint_received" });
71
+ daemon.stop();
72
+ process.exit(0);
73
+ });
47
74
  }
48
- const daemon = new TradingDaemon(paperMode);
49
- daemon.start();
50
- // Graceful shutdown
51
- process.on("SIGTERM", () => {
52
- log("info", { event: "sigterm_received" });
53
- daemon.stop();
54
- process.exit(0);
55
- });
56
- process.on("SIGINT", () => {
57
- log("info", { event: "sigint_received" });
58
- daemon.stop();
59
- process.exit(0);
60
- });
61
75
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;iBAgBG,MAAM,EAAE;CACxB,CAAC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,uBAAuB;AACvB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACvC,CAAC,CAAC,KAAK;IACP,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC1B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,OAAO,CAAC;AAEvC,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;IAClD,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,GAAG,CAAC,MAAM,EAAE;IACV,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;IAClC,MAAM,EAAE,MAAM,EAAE;IAChB,WAAW,EAAE,OAAO,CAAC,OAAO;CAC7B,CAAC,CAAC;AAEH,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC;IACxC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;AAC/D,CAAC;KAAM,CAAC;IACN,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,gCAAgC,EAAE,CAAC,CAAC;AAC3G,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;AAC5C,MAAM,CAAC,KAAK,EAAE,CAAC;AAEf,oBAAoB;AACpB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC3C,MAAM,CAAC,IAAI,EAAE,CAAC;IACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC1C,MAAM,CAAC,IAAI,EAAE,CAAC;IACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ export type SimulationSignal = 'DIRECTIONAL' | 'VOLATILITY' | 'PASS';
2
+ export interface AgentEstimate {
3
+ agent: string;
4
+ prob: number;
5
+ reasoning: string;
6
+ }
7
+ export interface SimulationResult {
8
+ signal: SimulationSignal;
9
+ edge: number;
10
+ spread: number;
11
+ syntheticProb: number;
12
+ marketOdds: number;
13
+ agents: AgentEstimate[];
14
+ timestamp: number;
15
+ }
16
+ export interface SimulationTrigger {
17
+ type: 'scheduled' | 'whale' | 'odds_delta';
18
+ marketId: string;
19
+ marketQuestion: string;
20
+ marketOdds: number;
21
+ volume: number;
22
+ hoursToResolution: number;
23
+ }
24
+ /**
25
+ * Runs the 4-agent debate and returns a SimulationResult.
26
+ */
27
+ export declare function runSimulation(trigger: SimulationTrigger): Promise<SimulationResult>;
28
+ /**
29
+ * Checks whether a market qualifies to run simulation.
30
+ * Requires volume > 250k and hoursToResolution > 24.
31
+ */
32
+ export declare function shouldRunSimulation(volume: number, hoursToResolution: number): boolean;
33
+ /**
34
+ * Adjusts Kelly fraction based on simulation result.
35
+ * Returns multiplier: 1.0 (DIRECTIONAL low-spread), 0.5 (high spread), 0.0 (VOLATILITY).
36
+ */
37
+ export declare function kellyAdjustment(result: SimulationResult): number;
38
+ /**
39
+ * Logs simulation result to the log system.
40
+ */
41
+ export declare function logSimulationResult(result: SimulationResult, marketQuestion: string): void;
42
+ //# sourceMappingURL=simulationSignal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulationSignal.d.ts","sourceRoot":"","sources":["../src/simulationSignal.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,YAAY,GAAG,MAAM,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,WAAW,GAAG,OAAO,GAAG,YAAY,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAiFD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmCzF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAEtF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAIhE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAiB1F"}
@@ -0,0 +1,146 @@
1
+ // 4-agent async debate engine
2
+ // Triggers: scheduled (4-6h) + whale trade + odds delta (7%)
3
+ // Output: { signal: 'DIRECTIONAL'|'VOLATILITY'|'PASS', edge, spread, syntheticProb, agents }
4
+ import { execFile } from "child_process";
5
+ import { promisify } from "util";
6
+ import { log } from "./logger.js";
7
+ const execFileAsync = promisify(execFile);
8
+ const AGENTS = [
9
+ {
10
+ name: 'Bull',
11
+ system: `You are an institutional investor and prediction market bull. You look for institutional flow, narrative momentum, structural tailwinds, convexity. You find reasons YES is underpriced. Output: P(YES)=0.XX | Bull: [2 sentences]`,
12
+ },
13
+ {
14
+ name: 'Bear',
15
+ system: `You are a contrarian focused on retail participation decay. You track volume trends, whale vs retail mix, thin liquidity masking, post-hype base rates. You find reasons YES is overpriced. Output: P(YES)=0.XX | Bear: [2 sentences]`,
16
+ },
17
+ {
18
+ name: 'Regulator',
19
+ system: `You analyze from institutional power structure lens. What do regulatory bodies want? Who benefits from YES vs NO? You weight regulatory incentives heavily. Output: P(YES)=0.XX | Regulator: [2 sentences]`,
20
+ },
21
+ {
22
+ name: 'Contrarian',
23
+ system: `You are a professional contrarian. Markets overshoot on news, undershoot on slow change. You fade current consensus. Above 75%? Find the break narrative. Below 25%? Find the flip catalyst. Output: P(YES)=0.XX | Contrarian: [2 sentences]`,
24
+ },
25
+ ];
26
+ function parseAgentResponse(agentName, text) {
27
+ const match = text.match(/P\(YES\)=(\d+\.?\d*)/i);
28
+ const prob = match ? Math.max(0, Math.min(1, parseFloat(match[1]))) : 0.5;
29
+ // Extract reasoning: everything after the pipe separator
30
+ const pipeIdx = text.indexOf('|');
31
+ const reasoning = pipeIdx >= 0 ? text.slice(pipeIdx + 1).trim() : text.trim();
32
+ return { agent: agentName, prob, reasoning };
33
+ }
34
+ async function runAgent(agent, question, marketOdds) {
35
+ const prompt = `${agent.system}
36
+
37
+ Prediction market question: "${question}"
38
+ Current market price: ${(marketOdds * 100).toFixed(1)}% YES
39
+
40
+ Provide your probability estimate and reasoning.`;
41
+ try {
42
+ const { stdout } = await execFileAsync("claude", ["--print", "--model", "claude-haiku-4-5-20251001", prompt], {
43
+ timeout: 15000,
44
+ env: {
45
+ ...process.env,
46
+ CLAUDE_CODE_OAUTH_TOKEN: process.env.CLAUDE_CODE_OAUTH_TOKEN ?? '',
47
+ ANTHROPIC_AUTH_TOKEN: process.env.ANTHROPIC_AUTH_TOKEN ??
48
+ process.env.CLAUDE_CODE_OAUTH_TOKEN ??
49
+ '',
50
+ },
51
+ });
52
+ return parseAgentResponse(agent.name, stdout.trim());
53
+ }
54
+ catch {
55
+ return { agent: agent.name, prob: 0.5, reasoning: 'Agent failed — using fallback probability.' };
56
+ }
57
+ }
58
+ function computeMedian(values) {
59
+ if (values.length === 0)
60
+ return 0.5;
61
+ const sorted = [...values].sort((a, b) => a - b);
62
+ const mid = Math.floor(sorted.length / 2);
63
+ return sorted.length % 2 === 0
64
+ ? (sorted[mid - 1] + sorted[mid]) / 2
65
+ : sorted[mid];
66
+ }
67
+ function classifySignal(edge, spread) {
68
+ if (spread > 0.30)
69
+ return 'VOLATILITY';
70
+ if (Math.abs(edge) > 0.10 && spread < 0.20)
71
+ return 'DIRECTIONAL';
72
+ return 'PASS';
73
+ }
74
+ /**
75
+ * Runs the 4-agent debate and returns a SimulationResult.
76
+ */
77
+ export async function runSimulation(trigger) {
78
+ const agents = await Promise.all(AGENTS.map((a) => runAgent(a, trigger.marketQuestion, trigger.marketOdds)));
79
+ const probs = agents.map((a) => a.prob);
80
+ const syntheticProb = computeMedian(probs);
81
+ const spread = Math.max(...probs) - Math.min(...probs);
82
+ const edge = syntheticProb - trigger.marketOdds;
83
+ const signal = classifySignal(edge, spread);
84
+ const result = {
85
+ signal,
86
+ edge,
87
+ spread,
88
+ syntheticProb,
89
+ marketOdds: trigger.marketOdds,
90
+ agents,
91
+ timestamp: Date.now(),
92
+ };
93
+ log("info", {
94
+ source: "simulationSignal",
95
+ event: "simulation_complete",
96
+ triggerType: trigger.type,
97
+ marketId: trigger.marketId,
98
+ question: trigger.marketQuestion,
99
+ signal,
100
+ edge: parseFloat((edge * 100).toFixed(2)),
101
+ spread: parseFloat((spread * 100).toFixed(2)),
102
+ syntheticProb: parseFloat(syntheticProb.toFixed(4)),
103
+ marketOdds: trigger.marketOdds,
104
+ });
105
+ return result;
106
+ }
107
+ /**
108
+ * Checks whether a market qualifies to run simulation.
109
+ * Requires volume > 250k and hoursToResolution > 24.
110
+ */
111
+ export function shouldRunSimulation(volume, hoursToResolution) {
112
+ return volume > 250_000 && hoursToResolution > 24;
113
+ }
114
+ /**
115
+ * Adjusts Kelly fraction based on simulation result.
116
+ * Returns multiplier: 1.0 (DIRECTIONAL low-spread), 0.5 (high spread), 0.0 (VOLATILITY).
117
+ */
118
+ export function kellyAdjustment(result) {
119
+ if (result.signal === 'VOLATILITY')
120
+ return 0.0;
121
+ if (result.spread >= 0.20)
122
+ return 0.5;
123
+ return 1.0;
124
+ }
125
+ /**
126
+ * Logs simulation result to the log system.
127
+ */
128
+ export function logSimulationResult(result, marketQuestion) {
129
+ log("info", {
130
+ source: "simulationSignal",
131
+ event: "simulation_result",
132
+ marketQuestion,
133
+ signal: result.signal,
134
+ edge: parseFloat((result.edge * 100).toFixed(2)),
135
+ spread: parseFloat((result.spread * 100).toFixed(2)),
136
+ syntheticProb: parseFloat(result.syntheticProb.toFixed(4)),
137
+ marketOdds: result.marketOdds,
138
+ agents: result.agents.map((a) => ({
139
+ agent: a.agent,
140
+ prob: parseFloat(a.prob.toFixed(4)),
141
+ reasoning: a.reasoning,
142
+ })),
143
+ timestamp: result.timestamp,
144
+ });
145
+ }
146
+ //# sourceMappingURL=simulationSignal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulationSignal.js","sourceRoot":"","sources":["../src/simulationSignal.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gonzih/polymarket-arb",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "description": "Claude-powered Polymarket arbitrage bot — BTC/ETH momentum signal + AI trade analysis",
5
5
  "keywords": [
6
6
  "polymarket",
@@ -31,7 +31,8 @@
31
31
  "test": "vitest run",
32
32
  "test:watch": "vitest",
33
33
  "test:coverage": "vitest run --coverage",
34
- "test:integration": "vitest run --config vitest.integration.config.ts"
34
+ "test:integration": "vitest run --config vitest.integration.config.ts",
35
+ "backtest": "tsx src/backtestRunner.ts"
35
36
  },
36
37
  "engines": {
37
38
  "node": ">=18.0.0"