import React, { Fragment, useEffect, useMemo, useState } from 'react' import { CategoryScale, Chart, LinearScale, PointElement, LineElement, Title, Tooltip, Legend, } from 'chart.js' import { ChartData } from 'chart.js' import { Line } from 'react-chartjs-2' import { bids } from './sample-bids' import { Entry, makeEntries } from './entries' // Auto import doesn't work for some reason... Chart.register( CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend ) function toTable(entries: Entry[]) { return entries.map((entry, i) => { return ( {i + 1} {toRowStart(entry)} {toRowEnd(entry)} ) }) } function toRowStart(entry: Entry) { if (entry.yesBid && entry.noBid) { return (
SEED
{entry.yesBid} / {entry.noBid}
) } else if (entry.yesBid) { return (
YES
{entry.yesBid}
) } else if (entry.noBid) { return (
NO
{entry.noBid}
) } } function toRowEnd(entry: Entry) { if (!entry.yesBid && !entry.noBid) { return ( N/A N/A N/A N/A ) } else if (entry.yesBid && entry.noBid) { return ( N/A {entry.prob.toFixed(2)} N/A N/A ) } else if (entry.yesBid) { return ( {entry.yesWeight.toFixed(2)} {entry.prob.toFixed(2)} {entry.yesPayout.toFixed(2)} {(entry.yesReturn * 100).toFixed(2)}% ) } else { return ( {entry.noWeight.toFixed(2)} {entry.prob.toFixed(2)} {entry.noPayout.toFixed(2)} {(entry.noReturn * 100).toFixed(2)}% ) } } // Show a hello world React page export default function Simulator() { const [steps, setSteps] = useState(10) const entries = makeEntries(bids.slice(0, steps)) const probs = useMemo(() => entries.map((entry) => entry.prob), [entries]) const [chartData, setChartData] = useState({ datasets: [] } as ChartData) useEffect(() => { setChartData({ labels: Array.from({ length: steps }, (_, i) => i + 1), datasets: [ { label: 'Implied probability', data: probs, borderColor: 'rgb(75, 192, 192)', }, ], }) }, [steps]) return (
{/* Left column */}

Dynamic Parimutuel Market Simulator

{/* Range slider that sets the current step */} setSteps(parseInt(e.target.value))} />
{toTable(entries)}
Order # Type Bid Weight Prob Max Payout Return
{/* Right column */}

Probability of
YES

) }