import DashboardLayout from '../layouts/DashboardLayout'; import { styled } from '@mui/styles'; import { useEffect, useState } from 'react'; import { queryStrategiesMetrics } from '../api/bbgo'; import type { GridStrategy } from '../api/bbgo'; const StrategyContainer = styled('section')(() => ({ display: 'flex', flexDirection: 'column', justifyContent: 'space-around', width: '400px', height: '400px', border: '1px solid rgb(248, 149, 35)', borderRadius: '10px', padding: '10px', })); const Strategy = styled('div')(() => ({ fontSize: '20px', })); const StatusSign = styled('span')(() => ({ width: '10px', height: '10px', display: 'block', backgroundColor: 'rgb(113, 218, 113)', borderRadius: '50%', marginRight: '5px', })); const RunningTime = styled('div')(() => ({ display: 'flex', alignItems: 'center', })); const Description = styled('div')(() => ({ color: 'rgb(140, 140, 140)', '& .duration': { marginLeft: '3px', }, })); const Summary = styled('div')(() => ({ width: '100%', display: 'flex', justifyContent: 'space-around', backgroundColor: 'rgb(255, 245, 232)', })); const SummaryBlock = styled('div')(() => ({ padding: '5px 0 5px 0', })); const StatsTitle = styled('div')(() => ({ margin: '0 0 10px 0', })); const StatsValue = styled('div')(() => ({ marginBottom: '10px', color: 'rgb(123, 169, 90)', })); const Percentage = styled('div')(() => ({ color: 'rgb(123, 169, 90)', })); const Stats = styled('div')(() => ({ display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', columnGap: '10px', rowGap: '20px', })); export default function Strategies() { const [details, setDetails] = useState([]); useEffect(() => { queryStrategiesMetrics().then((value) => { setDetails(value); }); }, []); return ( {details.map((element) => { return ; })} ); } export function Detail({ data }:{ data: GridStrategy}) { const { strategy, stats, startTime } = data; const totalProfitsPercentage = (stats.totalProfits / stats.investment) * 100; const gridProfitsPercentage = (stats.gridProfits / stats.investment) * 100; const gridAprPercentage = (stats.gridProfits / 5) * 365; const now = Date.now(); const durationMilliseconds = now - startTime; const seconds = durationMilliseconds / 1000; const day = Math.floor(seconds / (60 * 60 * 24)); const hour = Math.floor((seconds % (60 * 60 * 24)) / 3600); const min = Math.floor(((seconds % (60 * 60 * 24)) % 3600) / 60); return ( {strategy}
{data[strategy].symbol}
Running for {day}D {hour}H {min}M 0 arbitrages in 24 hours / Total {stats.totalArbs}{' '} arbitrages Investment USDT
{stats.investment}
Total Profit USDT {stats.totalProfits} {totalProfitsPercentage}%
Grid Profits {stats.gridProfits} {gridProfitsPercentage}%
Floating PNL {stats.floatingPNL}
Grid APR {gridAprPercentage}%
Current Price
{stats.currentPrice}
Price Range
{stats.lowestPrice}~{stats.highestPrice}
); }