重置项目

This commit is contained in:
2026-07-04 15:59:20 +08:00
parent 374e587f2d
commit 648a8b7f1c
224 changed files with 19700 additions and 9547 deletions
@@ -1,14 +1,12 @@
import { useMemo } from 'react'
import { useECharts } from './useECharts'
import type { StrategyBacktestResult } from '@/lib/api'
import { useChartTheme } from '@/lib/chartTheme'
interface Props {
result: StrategyBacktestResult
}
export function StrategyNavChart({ result }: Props) {
const chartTheme = useChartTheme()
const option = useMemo(() => {
if (!result.equity_curve.length) return null
@@ -30,7 +28,7 @@ export function StrategyNavChart({ result }: Props) {
animation: false,
axisPointer: {
link: [{ xAxisIndex: 'all' }],
label: { backgroundColor: chartTheme.tooltipBg, color: chartTheme.tooltipText },
label: { backgroundColor: '#334155' },
},
grid: [
{ left: 64, right: hasBenchmark ? 64 : 16, top: 14, bottom: '40%' },
@@ -41,14 +39,14 @@ export function StrategyNavChart({ result }: Props) {
type: 'category', data: dates, gridIndex: 0,
axisLabel: { show: false }, axisTick: { show: false },
axisPointer: { show: true, type: 'line' },
axisLine: { lineStyle: { color: chartTheme.axisLine } },
axisLine: { lineStyle: { color: '#334155' } },
},
{
type: 'category', data: dates, gridIndex: 1,
axisLabel: { color: chartTheme.text, fontSize: 10, interval: Math.floor(dates.length / 6) },
axisLabel: { color: '#64748b', fontSize: 10, interval: Math.floor(dates.length / 6) },
axisTick: { show: false },
axisPointer: { show: true, type: 'line' },
axisLine: { lineStyle: { color: chartTheme.axisLine } },
axisLine: { lineStyle: { color: '#334155' } },
},
],
yAxis: [
@@ -56,13 +54,13 @@ export function StrategyNavChart({ result }: Props) {
type: 'value', gridIndex: 0,
scale: true,
name: hasBenchmark ? '上证点位' : '策略资金',
nameTextStyle: { color: chartTheme.text, fontSize: 10, padding: [0, 0, 4, 0] },
nameTextStyle: { color: hasBenchmark ? 'rgba(148,163,184,0.55)' : '#64748b', fontSize: 10, padding: [0, 0, 4, 0] },
axisLabel: {
color: chartTheme.text,
color: hasBenchmark ? 'rgba(148,163,184,0.55)' : '#64748b',
fontSize: 10,
formatter: hasBenchmark ? ((v: number) => v.toFixed(0)) : axisMoneyFmt,
},
splitLine: { lineStyle: { color: chartTheme.splitLine } },
splitLine: { lineStyle: { color: '#1e293b' } },
axisLine: { show: false },
},
{
@@ -70,10 +68,10 @@ export function StrategyNavChart({ result }: Props) {
position: 'right',
scale: true,
name: hasBenchmark ? '策略资金' : '',
nameTextStyle: { color: chartTheme.text, fontSize: 10, padding: [0, 0, 4, 0] },
nameTextStyle: { color: '#64748b', fontSize: 10, padding: [0, 0, 4, 0] },
axisLabel: {
show: hasBenchmark,
color: chartTheme.text,
color: '#64748b',
fontSize: 10,
formatter: axisMoneyFmt,
},
@@ -85,10 +83,10 @@ export function StrategyNavChart({ result }: Props) {
position: 'right',
max: 0,
axisLabel: {
color: chartTheme.text, fontSize: 10,
color: '#64748b', fontSize: 10,
formatter: (v: number) => `${v.toFixed(1)}%`,
},
splitLine: { lineStyle: { color: chartTheme.splitLine } },
splitLine: { lineStyle: { color: '#1e293b' } },
axisLine: { show: false },
},
],
@@ -107,22 +105,22 @@ export function StrategyNavChart({ result }: Props) {
filterMode: 'filter',
height: 16,
bottom: 10,
borderColor: chartTheme.axisLine,
backgroundColor: chartTheme.dataZoomBg,
fillerColor: chartTheme.dataZoomFiller,
handleStyle: { color: chartTheme.dataZoomHandle, borderColor: chartTheme.axisLine },
textStyle: { color: chartTheme.text, fontSize: 10 },
borderColor: 'rgba(148,163,184,0.18)',
backgroundColor: 'rgba(15,23,42,0.55)',
fillerColor: 'rgba(59,130,246,0.18)',
handleStyle: { color: '#64748b', borderColor: '#94a3b8' },
textStyle: { color: '#64748b', fontSize: 10 },
brushSelect: false,
},
],
tooltip: {
trigger: 'axis',
backgroundColor: chartTheme.tooltipBg,
borderColor: chartTheme.tooltipBorder,
textStyle: { color: chartTheme.tooltipText, fontSize: 12 },
backgroundColor: 'rgba(15,23,42,0.95)',
borderColor: 'rgba(148,163,184,0.2)',
textStyle: { color: '#e2e8f0', fontSize: 12 },
formatter: (params: any) => {
const date = params[0]?.axisValue ?? ''
let html = `<div style="font-size:11px;color:${chartTheme.tooltipTitle};margin-bottom:4px">${date}</div>`
let html = `<div style="font-size:11px;color:#94a3b8;margin-bottom:4px">${date}</div>`
for (const p of params) {
if (p.value == null) continue
const isDrawdown = p.seriesName === '回撤'
@@ -184,7 +182,7 @@ export function StrategyNavChart({ result }: Props) {
} as any
}, [result.equity_curve, result.drawdown_curve, result.benchmark_curve, result.run_id])
const chartRef = useECharts(option, [result.run_id, chartTheme])
const chartRef = useECharts(option, [result.run_id])
return (
<div>