量化交易多智能体系统,包含: - 分析师、投资组合经理、风险经理等智能体 - 股票分析、投资组合管理、风险控制工具 - React 前端界面 - FastAPI 后端服务 Co-Authored-By: Claude <noreply@anthropic.com>
86 lines
1.8 KiB
JavaScript
86 lines
1.8 KiB
JavaScript
/**
|
|
* Formatting utility functions
|
|
*/
|
|
|
|
/**
|
|
* Format time from timestamp
|
|
*/
|
|
export function formatTime(ts) {
|
|
try {
|
|
const d = new Date(ts);
|
|
return d.toLocaleString([], {
|
|
month: "2-digit",
|
|
day: "2-digit",
|
|
hour: "2-digit",
|
|
minute: "2-digit"
|
|
});
|
|
} catch {
|
|
return "";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Format date and time from timestamp
|
|
*/
|
|
export function formatDateTime(ts) {
|
|
try {
|
|
const d = new Date(ts);
|
|
const date = d.toLocaleDateString("en-US", { month: "short", day: "numeric" });
|
|
const time = d.toLocaleTimeString("en-US", { hour: "2-digit", minute: "2-digit", hour12: false });
|
|
return `${date} ${time}`;
|
|
} catch {
|
|
return "";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Format number with commas (no decimals)
|
|
*/
|
|
export function formatNumber(num) {
|
|
if (!isFinite(num)) {
|
|
return "-";
|
|
}
|
|
return Math.abs(num).toLocaleString(undefined, { maximumFractionDigits: 0 });
|
|
}
|
|
|
|
/**
|
|
* Format full number with commas for Y-axis
|
|
*/
|
|
export function formatFullNumber(num) {
|
|
if (!isFinite(num)) {
|
|
return "-";
|
|
}
|
|
return num.toLocaleString(undefined, { maximumFractionDigits: 0 });
|
|
}
|
|
|
|
/**
|
|
* Format ticker price with appropriate decimal places
|
|
*/
|
|
export function formatTickerPrice(price) {
|
|
if (!isFinite(price)) {
|
|
return "-";
|
|
}
|
|
if (price >= 1000) {
|
|
return price.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 });
|
|
} else if (price >= 1) {
|
|
return price.toFixed(2);
|
|
} else {
|
|
return price.toFixed(4);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Calculate duration between two timestamps
|
|
*/
|
|
export function calculateDuration(start, end) {
|
|
const diff = end - start;
|
|
const minutes = Math.floor(diff / 60000);
|
|
if (minutes < 60) {
|
|
return `${minutes}m`;
|
|
}
|
|
const hours = Math.floor(minutes / 60);
|
|
const mins = minutes % 60;
|
|
return `${hours}h ${mins}m`;
|
|
}
|
|
|