mirror of
https://github.com/RomySaputraSihananda/ares.git
synced 2026-08-01 04:57:45 +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:
@@ -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 EquityChart from "@/components/EquityChart";
|
||||
import TradesRefresher from "@/components/TradesRefresher";
|
||||
@@ -12,10 +12,9 @@ export default async function TradesPage() {
|
||||
let error = false;
|
||||
|
||||
try {
|
||||
const now = new Date().toISOString().slice(0, 19);
|
||||
[account, deals] = await Promise.all([
|
||||
getAccount(),
|
||||
getDeals("2026-06-01T00:00:00", now),
|
||||
getAllDeals("2026-06-10T00:00:00"),
|
||||
]);
|
||||
} catch { error = true; }
|
||||
|
||||
|
||||
@@ -104,3 +104,35 @@ export async function getDeals(dateFrom: string, dateTo: string, symbol?: string
|
||||
const w = await apiFetch<DataVec<Deal>>(path);
|
||||
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