- Geschlossene Trades: Zeilenfaerbung nach PnL-% (TradeRowColoring, pur+getestet: <0 rot, 0-10% hellgruen, >10% gruen) via DataBindingComplete. Filter-Panel (Designer): Markt (Text), Master-Trader (Combo, dynamisch), Ergebnis (Alle/Gewinner/Verlierer), Von/Bis (optionale DateTimePicker mit Checkbox), Zuruecksetzen. Summary zeigt gefiltert/gesamt. - Neuer Tab 'Offene Trades' (OpenTradesView, designerfaehig): alle offenen Positionen aus dem Laufzeit-State mit Entry/Aktuell/Wert/Buchgewinn/-% und Status (offen/Exit laeuft), Zeilenfaerbung nach Buchgewinn-%, Summenzeile. In CopyTradingMainForm zwischen Master-Trader und Geschlossene eingehaengt. - Master-Trader-Grid: AutoSizeColumnsMode=Fill + FillWeights -> Spaltenbreiten teilen sich immer die Breite (Fix der 'verbuggten' Breiten); RowHeader war bereits aus. Tests: +8 (TradeRowColoring-Schwellen). Build 0 Fehler, 396 Tests gruen, --smoke-ui gruen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
30 lines
991 B
C#
30 lines
991 B
C#
using PolyTrader.Modules.CopyTrading.Logic;
|
|
using Xunit;
|
|
|
|
namespace PolyTrader.Tests
|
|
{
|
|
/// <summary>Sicherheitsnetz für die PnL-Zeilenfärbung (Slice 3): Schwellen -10/0/10.</summary>
|
|
public class TradeRowColoringTests
|
|
{
|
|
[Theory]
|
|
[InlineData(-0.01, "loss")]
|
|
[InlineData(-25.0, "loss")]
|
|
[InlineData(0.0, "small")] // Break-even = hellgrün (kein Verlust)
|
|
[InlineData(5.0, "small")]
|
|
[InlineData(10.0, "small")] // genau 10 % noch hellgrün
|
|
[InlineData(10.01, "big")]
|
|
[InlineData(80.0, "big")]
|
|
public void Color_matches_threshold(double pct, string expected)
|
|
{
|
|
var c = TradeRowColoring.ForPnlPercent((decimal)pct);
|
|
var want = expected switch
|
|
{
|
|
"loss" => TradeRowColoring.Loss,
|
|
"big" => TradeRowColoring.BigWin,
|
|
_ => TradeRowColoring.SmallWin
|
|
};
|
|
Assert.Equal(want, c);
|
|
}
|
|
}
|
|
}
|