Phase 5: AccountState-Split (Copytrading-Limits -> Modul)

- Copytrading-Detail-Einstellungen (PerMarketLimit, MaxBuyPrice, PerMasterLimit,
  Zeit-Limits, PreRedeemLimit, ProfitTarget, MaxPriceDifference) aus dem Core-
  AccountState in das Modul-Modell CopyTradingAccountSettings verschoben.
- CopyTradingState.AccountSettings + GetAccountSettings(accountId) (Default-safe).
- Consumer umgestellt: CopyTradingEngine, TraderMonitorService, PolymarketWssClient,
  frm_main lesen die Limits jetzt aus den Account-Settings.
- Neues Modul-Repo ICopyTradingAccountSettingsRepository (Collection ct_account_settings),
  in CopyTradingModule registriert.
- StartupHydration: Settings laden + EINMALIGE Migration der Alt-Limits aus dem
  Roh-accounts-Dokument (keine konfigurierten Limits gehen verloren).
- Build 0 Fehler.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-07-03 10:32:52 +02:00
co-authored by Claude Opus 4.8
parent 37f9d0fae2
commit 095c4b64aa
11 changed files with 208 additions and 60 deletions
+8 -8
View File
@@ -737,34 +737,34 @@ namespace PolyTraderSharp
decimal SafeMaxUsd(decimal pct, decimal tot) => tot * (pct / 100m);
decimal SafeUtil(decimal curr, decimal maxUsd) => maxUsd > 0 ? (curr / maxUsd) * 100m : 0m;
decimal max6 = SafeMaxUsd(acc.perMaxTime6h, acc.TotalBalance);
decimal max6 = SafeMaxUsd(_copyState.GetAccountSettings(acc.AccountId).perMaxTime6h, acc.TotalBalance);
dgv_dashboard_detaillaufzeit.Rows.Add(
"< 6h",
$"{acc.perMaxTime6h:F2}%",
$"{_copyState.GetAccountSettings(acc.AccountId).perMaxTime6h:F2}%",
$"${max6:F2}",
$"{SafeUtil(under6, max6):F2}%",
$"${under6:F2}");
decimal max24 = SafeMaxUsd(acc.perMaxTime24h, acc.TotalBalance);
decimal max24 = SafeMaxUsd(_copyState.GetAccountSettings(acc.AccountId).perMaxTime24h, acc.TotalBalance);
dgv_dashboard_detaillaufzeit.Rows.Add(
"< 24h",
$"{acc.perMaxTime24h:F2}%",
$"{_copyState.GetAccountSettings(acc.AccountId).perMaxTime24h:F2}%",
$"${max24:F2}",
$"{SafeUtil(under24, max24):F2}%",
$"${under24:F2}");
decimal max72 = SafeMaxUsd(acc.perMaxTime72h, acc.TotalBalance);
decimal max72 = SafeMaxUsd(_copyState.GetAccountSettings(acc.AccountId).perMaxTime72h, acc.TotalBalance);
dgv_dashboard_detaillaufzeit.Rows.Add(
"< 72h",
$"{acc.perMaxTime72h:F2}%",
$"{_copyState.GetAccountSettings(acc.AccountId).perMaxTime72h:F2}%",
$"${max72:F2}",
$"{SafeUtil(under72, max72):F2}%",
$"${under72:F2}");
decimal maxOver72 = SafeMaxUsd(acc.perMaxTimeNone, acc.TotalBalance);
decimal maxOver72 = SafeMaxUsd(_copyState.GetAccountSettings(acc.AccountId).perMaxTimeNone, acc.TotalBalance);
dgv_dashboard_detaillaufzeit.Rows.Add(
"> 72h",
$"{acc.perMaxTimeNone:F2}%",
$"{_copyState.GetAccountSettings(acc.AccountId).perMaxTimeNone:F2}%",
$"${maxOver72:F2}",
$"{SafeUtil(over72, maxOver72):F2}%",
$"${over72:F2}");