mirror of
https://github.com/RomySaputraSihananda/ares.git
synced 2026-08-21 14:48:21 +00:00
fix(web/trades): fetch deals per-day to bypass MT5 bridge per-request limit
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
36037d7b2b
commit
6cd8959c2d
@@ -1,4 +1,4 @@
|
|||||||
import { getAccount, getDeals, type Deal } from "@/lib/mt5";
|
import { getAccount, getAllDeals, type Deal } from "@/lib/mt5";
|
||||||
import { formatCurrency, formatDate } from "@/lib/format";
|
import { formatCurrency, formatDate } from "@/lib/format";
|
||||||
import EquityChart from "@/components/EquityChart";
|
import EquityChart from "@/components/EquityChart";
|
||||||
import TradesRefresher from "@/components/TradesRefresher";
|
import TradesRefresher from "@/components/TradesRefresher";
|
||||||
@@ -12,10 +12,9 @@ export default async function TradesPage() {
|
|||||||
let error = false;
|
let error = false;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const now = new Date().toISOString().slice(0, 19);
|
|
||||||
[account, deals] = await Promise.all([
|
[account, deals] = await Promise.all([
|
||||||
getAccount(),
|
getAccount(),
|
||||||
getDeals("2026-06-01T00:00:00", now),
|
getAllDeals("2026-06-10T00:00:00"),
|
||||||
]);
|
]);
|
||||||
} catch { error = true; }
|
} catch { error = true; }
|
||||||
|
|
||||||
|
|||||||
@@ -104,3 +104,35 @@ export async function getDeals(dateFrom: string, dateTo: string, symbol?: string
|
|||||||
const w = await apiFetch<DataVec<Deal>>(path);
|
const w = await apiFetch<DataVec<Deal>>(path);
|
||||||
return w.data;
|
return w.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fetch all deals from startDate to now by querying one day at a time,
|
||||||
|
// working around the MT5 bridge per-request deal limit.
|
||||||
|
export async function getAllDeals(startDate: string): Promise<Deal[]> {
|
||||||
|
const start = new Date(startDate);
|
||||||
|
const now = new Date();
|
||||||
|
const days: Array<[string, string]> = [];
|
||||||
|
|
||||||
|
const cur = new Date(start);
|
||||||
|
while (cur <= now) {
|
||||||
|
const next = new Date(cur);
|
||||||
|
next.setUTCDate(next.getUTCDate() + 1);
|
||||||
|
days.push([
|
||||||
|
cur.toISOString().slice(0, 19),
|
||||||
|
next.toISOString().slice(0, 19),
|
||||||
|
]);
|
||||||
|
cur.setUTCDate(cur.getUTCDate() + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const chunks = await Promise.all(days.map(([f, t]) => getDeals(f, t)));
|
||||||
|
const seen = new Set<number>();
|
||||||
|
const result: Deal[] = [];
|
||||||
|
for (const chunk of chunks) {
|
||||||
|
for (const deal of chunk) {
|
||||||
|
if (!seen.has(deal.ticket)) {
|
||||||
|
seen.add(deal.ticket);
|
||||||
|
result.push(deal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user