mirror of
https://github.com/multipleof4/KalBot.git
synced 2026-03-16 21:41:02 +00:00
Fix: Explicitly set Surreal record IDs to save history
This commit is contained in:
@@ -96,8 +96,11 @@ export class PaperEngine {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIX: Pre-format the ID exactly as SurrealDB expects it to ensure perfect sync
|
||||||
|
const tradeId = `paper_positions:pt_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
||||||
|
|
||||||
const trade = {
|
const trade = {
|
||||||
id: `pt_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
|
id: tradeId,
|
||||||
strategy: signal.strategy,
|
strategy: signal.strategy,
|
||||||
ticker: signal.ticker,
|
ticker: signal.ticker,
|
||||||
side: signal.side.toLowerCase(),
|
side: signal.side.toLowerCase(),
|
||||||
@@ -124,7 +127,8 @@ export class PaperEngine {
|
|||||||
acct.openPositions.set(trade.ticker, list);
|
acct.openPositions.set(trade.ticker, list);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await db.create('paper_positions', trade);
|
// Force SurrealDB to use our exact record link ID
|
||||||
|
await db.create(tradeId, trade);
|
||||||
await this._saveState(acct);
|
await this._saveState(acct);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('[Paper] DB write error:', e.message);
|
console.error('[Paper] DB write error:', e.message);
|
||||||
@@ -172,21 +176,21 @@ export class PaperEngine {
|
|||||||
if (won) acct.wins++;
|
if (won) acct.wins++;
|
||||||
else acct.losses++;
|
else acct.losses++;
|
||||||
|
|
||||||
|
const recordId = pos.id.includes(':') ? pos.id : `paper_positions:${pos.id}`;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// FIX: Use explicit record identifier for SurrealDB updates
|
|
||||||
const recordId = pos.id.includes(':') ? pos.id : `paper_positions:${pos.id}`;
|
|
||||||
const updated = await db.query(
|
const updated = await db.query(
|
||||||
`UPDATE ${recordId} SET settled = true, result = $result, pnl = $pnl, settleTime = $settleTime`,
|
`UPDATE ${recordId} SET settled = true, result = $result, pnl = $pnl, settleTime = $settleTime`,
|
||||||
{ result, pnl: pos.pnl, settleTime: pos.settleTime }
|
{ result, pnl: pos.pnl, settleTime: pos.settleTime }
|
||||||
);
|
);
|
||||||
const rows = updated[0] || [];
|
const rows = updated[0] || [];
|
||||||
if (rows.length === 0) {
|
if (rows.length === 0) {
|
||||||
await db.create('paper_positions', { ...pos });
|
await db.create(recordId, { ...pos, id: recordId });
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('[Paper] Settle DB error:', e.message);
|
console.error('[Paper] Settle DB error:', e.message);
|
||||||
try {
|
try {
|
||||||
await db.create('paper_positions', { ...pos });
|
await db.create(recordId, { ...pos, id: recordId });
|
||||||
} catch (e2) {
|
} catch (e2) {
|
||||||
console.error('[Paper] Settle DB fallback error:', e2.message);
|
console.error('[Paper] Settle DB fallback error:', e2.message);
|
||||||
}
|
}
|
||||||
@@ -217,9 +221,6 @@ export class PaperEngine {
|
|||||||
return Array.from(tickers);
|
return Array.from(tickers);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Check unresolved tickers periodically for delayed Kalshi results
|
|
||||||
*/
|
|
||||||
async checkOrphans(getMarketFn) {
|
async checkOrphans(getMarketFn) {
|
||||||
const orphanTickers = this.getOpenTickers();
|
const orphanTickers = this.getOpenTickers();
|
||||||
if (!orphanTickers.length) return { settled: [], expired: [] };
|
if (!orphanTickers.length) return { settled: [], expired: [] };
|
||||||
@@ -263,15 +264,16 @@ export class PaperEngine {
|
|||||||
acct.totalPnL -= pos.cost;
|
acct.totalPnL -= pos.cost;
|
||||||
acct.losses++;
|
acct.losses++;
|
||||||
|
|
||||||
|
const recordId = pos.id.includes(':') ? pos.id : `paper_positions:${pos.id}`;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const recordId = pos.id.includes(':') ? pos.id : `paper_positions:${pos.id}`;
|
|
||||||
const updated = await db.query(
|
const updated = await db.query(
|
||||||
`UPDATE ${recordId} SET settled = true, result = $result, pnl = $pnl, settleTime = $settleTime`,
|
`UPDATE ${recordId} SET settled = true, result = $result, pnl = $pnl, settleTime = $settleTime`,
|
||||||
{ result: 'expired', pnl: pos.pnl, settleTime: pos.settleTime }
|
{ result: 'expired', pnl: pos.pnl, settleTime: pos.settleTime }
|
||||||
);
|
);
|
||||||
const rows = updated[0] || [];
|
const rows = updated[0] || [];
|
||||||
if (rows.length === 0) {
|
if (rows.length === 0) {
|
||||||
await db.create('paper_positions', { ...pos });
|
await db.create(recordId, { ...pos, id: recordId });
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('[Paper] Force-expire DB error:', e.message);
|
console.error('[Paper] Force-expire DB error:', e.message);
|
||||||
|
|||||||
Reference in New Issue
Block a user