Fix fetchDaysTraded to use reports API with bearer auth and correct daysTraded counting

- Replace fill/ldeps and fill/list approaches with Tradovate reports API
- Add bearer auth to getreport polling (root cause of prior 404s)
- Use endDate = tomorrow to ensure current-session fills are included
- Count all traded days when minDayPnL is 0, otherwise count days >= minDayPnL
- Add PATCH /api/debug endpoint for proxying raw Tradovate API calls

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Senofy
2026-03-09 18:57:12 -05:00
co-authored by Claude Sonnet 4.6
parent 95e7433941
commit 570a54fe60
10 changed files with 218 additions and 66 deletions
+10 -4
View File
@@ -26,11 +26,15 @@ export async function GET() {
const daysTraded: number = client.daysTraded[acc.id] ?? 0;
const totalProfit = dailyPnL.reduce((sum, d) => sum + d.pnl, 0);
// Determine if today's daily target was hit
// Compute daily target and targetHit in one place — the single source of truth.
const cfg = getAccountConfig(acc.name, f.accounts);
const autoLiqThreshold = client.autoLiqThresholds[acc.id] ?? 0;
const isDead = autoLiqThreshold > 0 && cash.amount <= autoLiqThreshold;
let targetHit = false;
if (cfg) {
const target = computeDailyTarget(cfg.profit_target, cfg.consistency, totalProfit, dailyPnL);
let dailyTarget: { amount: number; path: 'first_day' | 'normal_day' | 'reduced_day' } | null = null;
if (cfg && !isDead) {
const target = computeDailyTarget(cfg.profit_target, cfg.consistency, totalProfit, dailyPnL, cfg.min_day_pnl, cfg.min_trading_days);
dailyTarget = target;
// Condition 1: profit target already exceeded (target=0), still need days → any activity counts
// Condition 2: target > 0 → must have made at least the computed daily target
targetHit =
@@ -47,9 +51,11 @@ export async function GET() {
realizedPnL: cash.realizedPnL,
daysTraded,
hasPosition: !!client.positions[acc.id],
autoLiqThreshold: client.autoLiqThresholds[acc.id] ?? 0,
autoLiqThreshold,
totalProfit,
targetHit,
dailyTarget,
dailyPnL,
};
});
return { firm: f.name, connected: true, accounts, perContractFees: client.perContractFees };