algorembrant's picture
Upload 31 files
d8bad25 verified
import { XCircle } from 'lucide-react';
export default function PositionPanel({ positions }) {
if (!positions || positions.length === 0) {
return (
<div className="pos-table-empty">
No open positions
</div>
);
}
return (
<div className="pos-table">
<div className="pos-header">
<div>Ticket</div>
<div>Type</div>
<div>Vol</div>
<div>Open</div>
<div>Current</div>
<div style={{ textAlign: 'right' }}>P&L</div>
<div style={{ textAlign: 'right' }}>Action</div>
</div>
{positions.map(pos => {
const isProfit = pos.profit >= 0;
return (
<div key={pos.ticket} className="pos-row">
<div className="pos-cell color-muted">#{pos.ticket}</div>
<div className={`pos-cell font-bold ${pos.type === 'buy' ? 'color-green' : 'color-red'}`}>
{pos.type.toUpperCase()}
</div>
<div className="pos-cell color-secondary">{pos.volume}</div>
<div className="pos-cell">{pos.price_open.toFixed(2)}</div>
<div className="pos-cell color-secondary">{pos.price_current.toFixed(2)}</div>
<div className={`pos-cell-right font-bold ${isProfit ? 'color-green' : 'color-red'}`}>
{pos.profit > 0 ? '+' : ''}{pos.profit.toFixed(2)}
</div>
<div className="pos-close-btn">
<button
title="Close Position"
onClick={() => {
fetch('http://localhost:8000/api/trade', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ action: 'close', ticket: pos.ticket })
});
}}
>
<XCircle size={14} />
</button>
</div>
</div>
);
})}
</div>
);
}