feat: market event
This commit is contained in:
@@ -1000,6 +1000,38 @@ function EventDetail({
|
||||
{outputNodes.length > 0 && (
|
||||
<div>
|
||||
<div className="text-[10px] text-slate-600 uppercase tracking-wide mb-1">Prédictions</div>
|
||||
{(() => {
|
||||
const nodeScores = outputNodes
|
||||
.map(n => {
|
||||
const pred = anResult.preds[n.id]
|
||||
const act = anResult.actuals[n.instrument || n.id] ?? anResult.actuals[n.id]
|
||||
if (pred == null || act == null) return null
|
||||
if (pred === 0 && act === 0) return 100
|
||||
if (pred === 0) return 40
|
||||
const sameDir = pred * act > 0
|
||||
if (!sameDir) return 0
|
||||
const ratio = Math.min(Math.abs(act), Math.abs(pred)) / Math.max(Math.abs(act), Math.abs(pred))
|
||||
return Math.round(50 + ratio * 50)
|
||||
})
|
||||
.filter((s): s is number => s != null)
|
||||
const graphScore = nodeScores.length > 0
|
||||
? Math.round(nodeScores.reduce((a, b) => a + b, 0) / nodeScores.length)
|
||||
: null
|
||||
if (graphScore == null) return null
|
||||
const barCls = graphScore >= 70 ? 'bg-emerald-500' : graphScore >= 40 ? 'bg-amber-500' : 'bg-red-500'
|
||||
const txtCls = graphScore >= 70 ? 'text-emerald-400' : graphScore >= 40 ? 'text-amber-400' : 'text-red-400'
|
||||
return (
|
||||
<div className="mb-2 pb-2 border-b border-slate-800/60">
|
||||
<div className="flex items-center justify-between text-[9px] text-slate-600 mb-0.5">
|
||||
<span>Précision</span>
|
||||
<span className={txtCls}>{graphScore}%</span>
|
||||
</div>
|
||||
<div className="h-1 bg-slate-800 rounded-full overflow-hidden">
|
||||
<div className={clsx('h-full rounded-full', barCls)} style={{ width: `${graphScore}%` }} />
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
})()}
|
||||
{outputNodes.map(n => {
|
||||
const pred = anResult.preds[n.id]
|
||||
const actual = anResult.actuals[n.instrument || n.id] ?? anResult.actuals[n.id]
|
||||
|
||||
Reference in New Issue
Block a user