Alles, was den Handel absichert - Limits, Deckung, Kapitalpool, Reservierungen, Abgleich, Sperren - war bisher ausschliesslich durch Unit-Tests mit gemockten Gegenstellen belegt. Im Betrieb gab es fast keine Trades. Ein Fehler in der Buchungskette faellt so erst auf, wenn eine echte Strategie scharf geht. Das Modul eroeffnet kleine Positionen, haelt sie eine gewuerfelte Zeit von Minuten bis Tagen und schliesst sie selbst. Es soll keine Rendite erzeugen, sondern Last; die Auswahl ist zufaellig und ausdruecklich nicht renditegetrieben. Planung und Sicherungen sind reine Rechnung mit einer von aussen gereichten Zufallsquelle - genau deshalb ist ein Modul, das absichtlich wuerfelt, ueberhaupt pruefbar. 14 Tests. Die Sicherung, die nicht verhandelbar ist: Der Worker prueft bei JEDEM Lauf, ob der Handelsmodus eindeutig Paper ist, und wirft sonst. Nicht nur beim Start - Einstellungen werden kopiert, wenn eine Instanz umzieht. Geprueft wird gegen den Rohwert UND den geparsten Modus: TradingSettings.ParsedMode faellt bei einem unbekannten Wert auf Paper zurueck, und darauf darf sich diese Pruefung nicht verlassen. Dazu Tagesbudget (in Betriebszeitzone, nicht UTC), Obergrenze offener Positionen, Grenze je Trade und ein Not-Aus, der das Eroeffnen stoppt und offene Positionen weiter betreut. Schliessen hat Vorrang vor Eroeffnen: Sonst koennte eine erreichte Obergrenze verhindern, dass faellige Positionen je geschlossen werden - die Sperre bliebe fuer immer. Beim Bauen hat der Architekturtest aus #474 seinen ersten echten Fang gemacht: Das Modul griff nach IBrokerClient, um Kurse zu holen. Das verstoesst gegen Regel 4. Statt den Test aufzuweichen ist eine lesende Kursquelle entstanden (IQuoteSource) - wer einen Kurs braucht, soll dafuer nicht den Zugang bekommen, mit dem sich Orders platzieren lassen. Auf dem Testserver nachgewiesen: Das Modul laeuft im Takt, plant, wird bei fehlendem Kurs sauber abgelehnt und meldet das - und mit Trading.Mode=Live verweigert es den Dienst, waehrend unabhaengig davon auch der Broker-Adapter den Paper-Port gegen den Live-Modus sperrt. Zwei Schichten, die nichts voneinander wissen. 438 Tests gruen. Arbeit an #468. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
45 lines
2.1 KiB
XML
45 lines
2.1 KiB
XML
<Project Sdk="Microsoft.NET.Sdk">
|
|
|
|
<PropertyGroup>
|
|
<!-- Plattformneutral: die Tests decken Core und Module ab, die beide keinen UI-Code mehr
|
|
tragen. Die UI-Konstruktionsprüfung liegt jetzt beim Smoke-UI-Lauf der Shell. -->
|
|
<TargetFramework>net10.0</TargetFramework>
|
|
<ImplicitUsings>enable</ImplicitUsings>
|
|
<Nullable>enable</Nullable>
|
|
<IsPackable>false</IsPackable>
|
|
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
|
|
</PropertyGroup>
|
|
|
|
<ItemGroup>
|
|
<PackageReference Include="coverlet.collector" Version="6.0.4" />
|
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
|
<PackageReference Include="xunit" Version="2.9.3" />
|
|
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.4" />
|
|
<PackageReference Include="NSubstitute" Version="5.3.0" />
|
|
<PackageReference Include="FluentAssertions" Version="7.0.0" />
|
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.4" />
|
|
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.11" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<ProjectReference Include="..\..\src\IBKRTrader.Core\IBKRTrader.Core.csproj" />
|
|
<ProjectReference Include="..\..\src\IBKRTrader.Modules.CongressTrading\IBKRTrader.Modules.CongressTrading.csproj" />
|
|
<ProjectReference Include="..\..\src\IBKRTrader.Modules.OptionsWheel\IBKRTrader.Modules.OptionsWheel.csproj" />
|
|
<ProjectReference Include="..\..\src\IBKRTrader.Modules.Accounting\IBKRTrader.Modules.Accounting.csproj" />
|
|
<ProjectReference Include="..\..\src\IBKRTrader.Modules.Supervisor\IBKRTrader.Modules.Supervisor.csproj" />
|
|
<ProjectReference Include="..\..\src\IBKRTrader.Modules.DebugTrading\IBKRTrader.Modules.DebugTrading.csproj" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<!-- Test-Fixture: gespeicherte capitoltrades.com-Seite (kein Netzzugriff im Test) -->
|
|
<Content Include="..\..\ct_raw.html" Link="Fixtures\ct_raw.html">
|
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
</Content>
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<Using Include="Xunit" />
|
|
</ItemGroup>
|
|
|
|
</Project>
|