feat: add entry_ts and exit_ts columns to trade history tables (paper-v53 & paper-v53fast)
This commit is contained in:
parent
ccb53cb3a8
commit
83494dc66c
@ -280,11 +280,13 @@ function TradeHistory() {
|
|||||||
<tr className="text-slate-500">
|
<tr className="text-slate-500">
|
||||||
<th className="px-2 py-1.5 text-left font-medium">币种</th>
|
<th className="px-2 py-1.5 text-left font-medium">币种</th>
|
||||||
<th className="px-2 py-1.5 text-left font-medium">方向</th>
|
<th className="px-2 py-1.5 text-left font-medium">方向</th>
|
||||||
<th className="px-2 py-1.5 text-right font-medium">入场</th>
|
<th className="px-2 py-1.5 text-right font-medium">入场价</th>
|
||||||
<th className="px-2 py-1.5 text-right font-medium">出场</th>
|
<th className="px-2 py-1.5 text-right font-medium">出场价</th>
|
||||||
<th className="px-2 py-1.5 text-right font-medium">PnL(R)</th>
|
<th className="px-2 py-1.5 text-right font-medium">PnL(R)</th>
|
||||||
<th className="px-2 py-1.5 text-center font-medium">状态</th>
|
<th className="px-2 py-1.5 text-center font-medium">状态</th>
|
||||||
<th className="px-2 py-1.5 text-right font-medium">分数</th>
|
<th className="px-2 py-1.5 text-right font-medium">分数</th>
|
||||||
|
<th className="px-2 py-1.5 text-right font-medium">入场时间</th>
|
||||||
|
<th className="px-2 py-1.5 text-right font-medium">出场时间</th>
|
||||||
<th className="px-2 py-1.5 text-right font-medium">持仓</th>
|
<th className="px-2 py-1.5 text-right font-medium">持仓</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@ -293,6 +295,7 @@ function TradeHistory() {
|
|||||||
const holdMin = t.exit_ts&&t.entry_ts?Math.round((t.exit_ts-t.entry_ts)/60000):0;
|
const holdMin = t.exit_ts&&t.entry_ts?Math.round((t.exit_ts-t.entry_ts)/60000):0;
|
||||||
const fc = parseFactors(t.score_factors);
|
const fc = parseFactors(t.score_factors);
|
||||||
const track = fc?.track||(t.symbol==="BTCUSDT"?"BTC":"ALT");
|
const track = fc?.track||(t.symbol==="BTCUSDT"?"BTC":"ALT");
|
||||||
|
const fmtTime = (ms: number) => ms ? new Date(ms).toLocaleString("zh-CN", {hour12:false, month:"2-digit", day:"2-digit", hour:"2-digit", minute:"2-digit"} as any) : "-";
|
||||||
return (
|
return (
|
||||||
<tr key={t.id} className="hover:bg-slate-50">
|
<tr key={t.id} className="hover:bg-slate-50">
|
||||||
<td className="px-2 py-1.5 font-mono">{t.symbol?.replace("USDT","")}<span className={`ml-1 text-[9px] px-1 rounded ${track==="BTC"?"bg-amber-100 text-amber-700":"bg-purple-100 text-purple-700"}`}>{track}</span></td>
|
<td className="px-2 py-1.5 font-mono">{t.symbol?.replace("USDT","")}<span className={`ml-1 text-[9px] px-1 rounded ${track==="BTC"?"bg-amber-100 text-amber-700":"bg-purple-100 text-purple-700"}`}>{track}</span></td>
|
||||||
@ -302,6 +305,8 @@ function TradeHistory() {
|
|||||||
<td className={`px-2 py-1.5 text-right font-mono font-bold ${t.pnl_r>0?"text-emerald-600":t.pnl_r<0?"text-red-500":"text-slate-500"}`}>{t.pnl_r>0?"+":""}{t.pnl_r?.toFixed(2)}</td>
|
<td className={`px-2 py-1.5 text-right font-mono font-bold ${t.pnl_r>0?"text-emerald-600":t.pnl_r<0?"text-red-500":"text-slate-500"}`}>{t.pnl_r>0?"+":""}{t.pnl_r?.toFixed(2)}</td>
|
||||||
<td className="px-2 py-1.5 text-center"><span className={`px-1 py-0.5 rounded text-[9px] ${t.status==="tp"?"bg-emerald-100 text-emerald-700":t.status==="sl"?"bg-red-100 text-red-700":t.status==="sl_be"?"bg-amber-100 text-amber-700":t.status==="signal_flip"?"bg-purple-100 text-purple-700":"bg-slate-100 text-slate-600"}`}>{t.status==="tp"?"止盈":t.status==="sl"?"止损":t.status==="sl_be"?"保本":t.status==="timeout"?"超时":t.status==="signal_flip"?"翻转":t.status}</span></td>
|
<td className="px-2 py-1.5 text-center"><span className={`px-1 py-0.5 rounded text-[9px] ${t.status==="tp"?"bg-emerald-100 text-emerald-700":t.status==="sl"?"bg-red-100 text-red-700":t.status==="sl_be"?"bg-amber-100 text-amber-700":t.status==="signal_flip"?"bg-purple-100 text-purple-700":"bg-slate-100 text-slate-600"}`}>{t.status==="tp"?"止盈":t.status==="sl"?"止损":t.status==="sl_be"?"保本":t.status==="timeout"?"超时":t.status==="signal_flip"?"翻转":t.status}</span></td>
|
||||||
<td className="px-2 py-1.5 text-right font-mono">{t.score}</td>
|
<td className="px-2 py-1.5 text-right font-mono">{t.score}</td>
|
||||||
|
<td className="px-2 py-1.5 text-right text-slate-400 whitespace-nowrap">{fmtTime(t.entry_ts)}</td>
|
||||||
|
<td className="px-2 py-1.5 text-right text-slate-400 whitespace-nowrap">{fmtTime(t.exit_ts)}</td>
|
||||||
<td className="px-2 py-1.5 text-right text-slate-400">{holdMin}m</td>
|
<td className="px-2 py-1.5 text-right text-slate-400">{holdMin}m</td>
|
||||||
</tr>
|
</tr>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -280,11 +280,13 @@ function TradeHistory() {
|
|||||||
<tr className="text-slate-500">
|
<tr className="text-slate-500">
|
||||||
<th className="px-2 py-1.5 text-left font-medium">币种</th>
|
<th className="px-2 py-1.5 text-left font-medium">币种</th>
|
||||||
<th className="px-2 py-1.5 text-left font-medium">方向</th>
|
<th className="px-2 py-1.5 text-left font-medium">方向</th>
|
||||||
<th className="px-2 py-1.5 text-right font-medium">入场</th>
|
<th className="px-2 py-1.5 text-right font-medium">入场价</th>
|
||||||
<th className="px-2 py-1.5 text-right font-medium">出场</th>
|
<th className="px-2 py-1.5 text-right font-medium">出场价</th>
|
||||||
<th className="px-2 py-1.5 text-right font-medium">PnL(R)</th>
|
<th className="px-2 py-1.5 text-right font-medium">PnL(R)</th>
|
||||||
<th className="px-2 py-1.5 text-center font-medium">状态</th>
|
<th className="px-2 py-1.5 text-center font-medium">状态</th>
|
||||||
<th className="px-2 py-1.5 text-right font-medium">分数</th>
|
<th className="px-2 py-1.5 text-right font-medium">分数</th>
|
||||||
|
<th className="px-2 py-1.5 text-right font-medium">入场时间</th>
|
||||||
|
<th className="px-2 py-1.5 text-right font-medium">出场时间</th>
|
||||||
<th className="px-2 py-1.5 text-right font-medium">持仓</th>
|
<th className="px-2 py-1.5 text-right font-medium">持仓</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@ -293,6 +295,7 @@ function TradeHistory() {
|
|||||||
const holdMin = t.exit_ts&&t.entry_ts?Math.round((t.exit_ts-t.entry_ts)/60000):0;
|
const holdMin = t.exit_ts&&t.entry_ts?Math.round((t.exit_ts-t.entry_ts)/60000):0;
|
||||||
const fc = parseFactors(t.score_factors);
|
const fc = parseFactors(t.score_factors);
|
||||||
const track = fc?.track||(t.symbol==="BTCUSDT"?"BTC":"ALT");
|
const track = fc?.track||(t.symbol==="BTCUSDT"?"BTC":"ALT");
|
||||||
|
const fmtTime = (ms: number) => ms ? new Date(ms).toLocaleString("zh-CN", {hour12:false, month:"2-digit", day:"2-digit", hour:"2-digit", minute:"2-digit"} as any) : "-";
|
||||||
return (
|
return (
|
||||||
<tr key={t.id} className="hover:bg-slate-50">
|
<tr key={t.id} className="hover:bg-slate-50">
|
||||||
<td className="px-2 py-1.5 font-mono">{t.symbol?.replace("USDT","")}<span className={`ml-1 text-[9px] px-1 rounded ${track==="BTC"?"bg-amber-100 text-amber-700":"bg-purple-100 text-purple-700"}`}>{track}</span></td>
|
<td className="px-2 py-1.5 font-mono">{t.symbol?.replace("USDT","")}<span className={`ml-1 text-[9px] px-1 rounded ${track==="BTC"?"bg-amber-100 text-amber-700":"bg-purple-100 text-purple-700"}`}>{track}</span></td>
|
||||||
@ -302,6 +305,8 @@ function TradeHistory() {
|
|||||||
<td className={`px-2 py-1.5 text-right font-mono font-bold ${t.pnl_r>0?"text-emerald-600":t.pnl_r<0?"text-red-500":"text-slate-500"}`}>{t.pnl_r>0?"+":""}{t.pnl_r?.toFixed(2)}</td>
|
<td className={`px-2 py-1.5 text-right font-mono font-bold ${t.pnl_r>0?"text-emerald-600":t.pnl_r<0?"text-red-500":"text-slate-500"}`}>{t.pnl_r>0?"+":""}{t.pnl_r?.toFixed(2)}</td>
|
||||||
<td className="px-2 py-1.5 text-center"><span className={`px-1 py-0.5 rounded text-[9px] ${t.status==="tp"?"bg-emerald-100 text-emerald-700":t.status==="sl"?"bg-red-100 text-red-700":t.status==="sl_be"?"bg-amber-100 text-amber-700":t.status==="signal_flip"?"bg-purple-100 text-purple-700":"bg-slate-100 text-slate-600"}`}>{t.status==="tp"?"止盈":t.status==="sl"?"止损":t.status==="sl_be"?"保本":t.status==="timeout"?"超时":t.status==="signal_flip"?"翻转":t.status}</span></td>
|
<td className="px-2 py-1.5 text-center"><span className={`px-1 py-0.5 rounded text-[9px] ${t.status==="tp"?"bg-emerald-100 text-emerald-700":t.status==="sl"?"bg-red-100 text-red-700":t.status==="sl_be"?"bg-amber-100 text-amber-700":t.status==="signal_flip"?"bg-purple-100 text-purple-700":"bg-slate-100 text-slate-600"}`}>{t.status==="tp"?"止盈":t.status==="sl"?"止损":t.status==="sl_be"?"保本":t.status==="timeout"?"超时":t.status==="signal_flip"?"翻转":t.status}</span></td>
|
||||||
<td className="px-2 py-1.5 text-right font-mono">{t.score}</td>
|
<td className="px-2 py-1.5 text-right font-mono">{t.score}</td>
|
||||||
|
<td className="px-2 py-1.5 text-right text-slate-400 whitespace-nowrap">{fmtTime(t.entry_ts)}</td>
|
||||||
|
<td className="px-2 py-1.5 text-right text-slate-400 whitespace-nowrap">{fmtTime(t.exit_ts)}</td>
|
||||||
<td className="px-2 py-1.5 text-right text-slate-400">{holdMin}m</td>
|
<td className="px-2 py-1.5 text-right text-slate-400">{holdMin}m</td>
|
||||||
</tr>
|
</tr>
|
||||||
);
|
);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user