Files
IBKRTrader/Core/Trading/NullBrokerClient.cs
T
Richard 2ad4b55db1 @
Phase 3: Trading-Kern (Risk, Execution, Portfolio) mit sicherem Broker-Default

- Core/Trading/TradingModels: Signal, Order(Request/Result), RiskContext/Decision,
  Account, Position, Quote, ExecutionResult, Enums (Side/OrderType/Mode)
- IBrokerClient + NullBrokerClient (sicherer Default, handelt NIE bis IBKR-Adapter verifiziert)
- RiskService (+IRiskService): Sizing nach MaxTrade%, Modul-Limit, Slippage; Buy/Sell
- PortfolioService (+IPortfolioService): core_position + core_trade_history + core_budget
- ExecutionService (+IExecutionService): Signal -> Kurs -> Konto -> Risiko -> Order -> Buchung
- TradingSettings in AppSettings (Paper/Live, TradingEnabled, Risikoparameter)
- CoreMigrations: core_position; DI-Registrierung der Trading-Services
- Tests: RiskService (11) + ExecutionService (6, NSubstitute) -> 38/38 gruen

Offen (bewusst gekapselt): echter IbkrBrokerClient gegen Client-Portal-Gateway (manuell verifizieren).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@
2026-07-27 11:33:59 +02:00

30 lines
1.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using IBKRTrader.Core.Logging;
namespace IBKRTrader.Core.Trading;
/// <summary>
/// Sicherer Standard-Broker: handelt NIEMALS.
/// Wird registriert, bis der echte IBKR-Adapter angebunden und gegen den
/// Paper-Gateway verifiziert ist. So kann keine Order versehentlich rausgehen.
/// </summary>
public sealed class NullBrokerClient : IBrokerClient
{
private readonly LoggingService _logger;
public NullBrokerClient(LoggingService logger) => _logger = logger;
public Task<Quote?> GetQuoteAsync(string symbol, CancellationToken ct = default)
=> Task.FromResult<Quote?>(null);
public Task<AccountState> GetAccountStateAsync(CancellationToken ct = default)
=> Task.FromResult(new AccountState(0m, 0m));
public Task<OrderResult> PlaceOrderAsync(OrderRequest request, CancellationToken ct = default)
{
_logger.Warn("Core",
$"NullBrokerClient: Order NICHT ausgeführt ({request.Side} {request.Quantity}x {request.Symbol}) " +
" echter IBKR-Broker noch nicht angebunden.");
return Task.FromResult(OrderResult.Fail("Broker nicht angebunden (NullBrokerClient)."));
}
}