diff --git a/src/models.ts b/src/models.ts index b4b8cbe..8e79bbe 100644 --- a/src/models.ts +++ b/src/models.ts @@ -88,7 +88,7 @@ export interface TradingState { observations: Observation; } -export interface SandboxLogRow { +export interface AlgorithmDataRow { state: TradingState; orders: Record; conversions: number; @@ -100,7 +100,7 @@ export interface SandboxLogRow { export interface Algorithm { summary?: AlgorithmSummary; activityLogs: ActivityLogRow[]; - sandboxLogs: SandboxLogRow[]; + data: AlgorithmDataRow[]; } export type CompressedListing = [symbol: ProsperitySymbol, product: Product, denomination: Product]; @@ -144,7 +144,7 @@ export type CompressedTradingState = [ export type CompressedOrder = [symbol: ProsperitySymbol, price: number, quantity: number]; -export type CompressedSandboxLogRow = [ +export type CompressedAlgorithmDataRow = [ state: CompressedTradingState, orders: CompressedOrder[], conversions: number, diff --git a/src/pages/visualizer/OrdersTable.tsx b/src/pages/visualizer/OrdersTable.tsx index db633e6..1a125e2 100644 --- a/src/pages/visualizer/OrdersTable.tsx +++ b/src/pages/visualizer/OrdersTable.tsx @@ -1,12 +1,12 @@ import { Table } from '@mantine/core'; import { ReactNode } from 'react'; -import { SandboxLogRow } from '../../models.ts'; +import { AlgorithmDataRow } from '../../models.ts'; import { getAskColor, getBidColor } from '../../utils/colors.ts'; import { formatNumber } from '../../utils/format.ts'; import { SimpleTable } from './SimpleTable.tsx'; export interface OrdersTableProps { - orders: SandboxLogRow['orders']; + orders: AlgorithmDataRow['orders']; } export function OrdersTable({ orders }: OrdersTableProps): ReactNode { diff --git a/src/pages/visualizer/PositionChart.tsx b/src/pages/visualizer/PositionChart.tsx index b634a97..a67703f 100644 --- a/src/pages/visualizer/PositionChart.tsx +++ b/src/pages/visualizer/PositionChart.tsx @@ -17,9 +17,9 @@ function getLimit(algorithm: Algorithm, symbol: ProsperitySymbol): number { // This code will be hit when a new product is added to the competition and the visualizer isn't updated yet // In that case the visualizer doesn't know the real limit yet, so we make a guess based on the algorithm's positions - const product = algorithm.sandboxLogs[0].state.listings[symbol].product; + const product = algorithm.data[0].state.listings[symbol].product; - const positions = algorithm.sandboxLogs.map(row => row.state.position[product] || 0); + const positions = algorithm.data.map(row => row.state.position[product] || 0); const minPosition = Math.min(...positions); const maxPosition = Math.max(...positions); @@ -29,7 +29,7 @@ function getLimit(algorithm: Algorithm, symbol: ProsperitySymbol): number { export function PositionChart(): ReactNode { const algorithm = useStore(state => state.algorithm)!; - const symbols = Object.keys(algorithm.sandboxLogs[0].state.listings).sort((a, b) => a.localeCompare(b)); + const symbols = Object.keys(algorithm.data[0].state.listings).sort((a, b) => a.localeCompare(b)); const limits: Record = {}; for (const symbol of symbols) { @@ -41,7 +41,7 @@ export function PositionChart(): ReactNode { data[symbol] = []; } - for (const row of algorithm.sandboxLogs) { + for (const row of algorithm.data) { for (const symbol of symbols) { const position = row.state.position[symbol] || 0; data[symbol].push([row.state.timestamp, (position / limits[symbol]) * 100]); diff --git a/src/pages/visualizer/ProfitLossChart.tsx b/src/pages/visualizer/ProfitLossChart.tsx index 0c2be5a..17adec9 100644 --- a/src/pages/visualizer/ProfitLossChart.tsx +++ b/src/pages/visualizer/ProfitLossChart.tsx @@ -23,7 +23,7 @@ export function ProfitLossChart(): ReactNode { }, ]; - Object.keys(algorithm.sandboxLogs[0].state.listings) + Object.keys(algorithm.data[0].state.listings) .sort((a, b) => a.localeCompare(b)) .forEach(symbol => { const data = []; diff --git a/src/pages/visualizer/SandboxLogDetail.tsx b/src/pages/visualizer/TimestampDetail.tsx similarity index 95% rename from src/pages/visualizer/SandboxLogDetail.tsx rename to src/pages/visualizer/TimestampDetail.tsx index c797784..a8b2c19 100644 --- a/src/pages/visualizer/SandboxLogDetail.tsx +++ b/src/pages/visualizer/TimestampDetail.tsx @@ -1,7 +1,7 @@ import { Grid, Text, Title } from '@mantine/core'; import { ReactNode } from 'react'; import { ScrollableCodeHighlight } from '../../components/ScrollableCodeHighlight.tsx'; -import { SandboxLogRow } from '../../models.ts'; +import { AlgorithmDataRow } from '../../models.ts'; import { useStore } from '../../store.ts'; import { formatNumber } from '../../utils/format.ts'; import { ListingsTable } from './ListingsTable.tsx'; @@ -11,13 +11,13 @@ import { PositionTable } from './PositionTable.tsx'; import { ProfitLossTable } from './ProfitLossTable.tsx'; import { TradesTable } from './TradesTable.tsx'; -export interface SandboxLogDetailProps { - row: SandboxLogRow; +export interface TimestampDetailProps { + row: AlgorithmDataRow; } -export function SandboxLogDetail({ +export function TimestampDetail({ row: { state, orders, conversions, traderData, algorithmLogs, sandboxLogs }, -}: SandboxLogDetailProps): ReactNode { +}: TimestampDetailProps): ReactNode { const algorithm = useStore(state => state.algorithm)!; const profitLoss = algorithm.activityLogs diff --git a/src/pages/visualizer/SandboxLogsCard.tsx b/src/pages/visualizer/TimestampsCard.tsx similarity index 67% rename from src/pages/visualizer/SandboxLogsCard.tsx rename to src/pages/visualizer/TimestampsCard.tsx index 0bc7a4d..1c02cee 100644 --- a/src/pages/visualizer/SandboxLogsCard.tsx +++ b/src/pages/visualizer/TimestampsCard.tsx @@ -1,23 +1,23 @@ import { Slider, SliderProps, Text } from '@mantine/core'; import { useHotkeys } from '@mantine/hooks'; import { ReactNode, useState } from 'react'; -import { SandboxLogRow } from '../../models.ts'; +import { AlgorithmDataRow } from '../../models.ts'; import { useStore } from '../../store.ts'; import { formatNumber } from '../../utils/format.ts'; -import { SandboxLogDetail } from './SandboxLogDetail.tsx'; +import { TimestampDetail } from './TimestampDetail.tsx'; import { VisualizerCard } from './VisualizerCard.tsx'; -export function SandboxLogsCard(): ReactNode { +export function TimestampsCard(): ReactNode { const algorithm = useStore(state => state.algorithm)!; - const rowsByTimestamp: Record = {}; - for (const row of algorithm.sandboxLogs) { + const rowsByTimestamp: Record = {}; + for (const row of algorithm.data) { rowsByTimestamp[row.state.timestamp] = row; } - const timestampMin = algorithm.sandboxLogs[0].state.timestamp; - const timestampMax = algorithm.sandboxLogs[algorithm.sandboxLogs.length - 1].state.timestamp; - const timestampStep = algorithm.sandboxLogs[1].state.timestamp - algorithm.sandboxLogs[0].state.timestamp; + const timestampMin = algorithm.data[0].state.timestamp; + const timestampMax = algorithm.data[algorithm.data.length - 1].state.timestamp; + const timestampStep = algorithm.data[1].state.timestamp - algorithm.data[0].state.timestamp; const [timestamp, setTimestamp] = useState(timestampMin); @@ -35,7 +35,7 @@ export function SandboxLogsCard(): ReactNode { ]); return ( - + {rowsByTimestamp[timestamp] ? ( - + ) : ( No logs found for timestamp {formatNumber(timestamp)} )} diff --git a/src/pages/visualizer/VisualizerPage.tsx b/src/pages/visualizer/VisualizerPage.tsx index f22473a..2c3f5c5 100644 --- a/src/pages/visualizer/VisualizerPage.tsx +++ b/src/pages/visualizer/VisualizerPage.tsx @@ -7,7 +7,7 @@ import { AlgorithmSummaryCard } from './AlgorithmSummaryCard.tsx'; import { PositionChart } from './PositionChart.tsx'; import { PriceChart } from './PriceChart.tsx'; import { ProfitLossChart } from './ProfitLossChart.tsx'; -import { SandboxLogsCard } from './SandboxLogsCard.tsx'; +import { TimestampsCard } from './TimestampsCard.tsx'; import { VisualizerCard } from './VisualizerCard.tsx'; import { VolumeChart } from './VolumeChart.tsx'; @@ -27,7 +27,7 @@ export function VisualizerPage(): ReactNode { } const symbolColumns: ReactNode[] = []; - Object.keys(algorithm.sandboxLogs[0].state.listings) + Object.keys(algorithm.data[0].state.listings) .sort((a, b) => a.localeCompare(b)) .forEach((symbol, i) => { symbolColumns.push( @@ -61,7 +61,7 @@ export function VisualizerPage(): ReactNode { {symbolColumns} - + {algorithm.summary && ( diff --git a/src/utils/algorithm.ts b/src/utils/algorithm.ts index 24e3503..14daaf0 100644 --- a/src/utils/algorithm.ts +++ b/src/utils/algorithm.ts @@ -1,12 +1,13 @@ import { ActivityLogRow, Algorithm, + AlgorithmDataRow, AlgorithmSummary, + CompressedAlgorithmDataRow, CompressedListing, CompressedObservations, CompressedOrder, CompressedOrderDepth, - CompressedSandboxLogRow, CompressedTrade, CompressedTradingState, ConversionObservation, @@ -16,7 +17,6 @@ import { OrderDepth, Product, ProsperitySymbol, - SandboxLogRow, Trade, TradingState, } from '../models.ts'; @@ -172,7 +172,7 @@ function decompressOrders(compressed: CompressedOrder[]): Record