Phase 4.1: Maker-Einstieg (dormant, per-Master-Flag)

- Ist TrackedTrader.MakerEntry gesetzt, wird der BUY OHNE Preisaufschlag als
  ruhendes GTC-Limit am Master-Preis platziert (statt teurem Taker-Fill via GTD),
  spart Fees/Spread bei langsamen Mastern. Nutzt die getestete
  CopyTradingRisk.CalculateBuyOrderPrice (0 % Aufschlag). Default aus -> dormant.
  (Ohne Orderbuch ist der Master-Preis die Naeherung fuer den Bid; echte
  Bid-Platzierung + Nichtfill-Eskalation folgen mit dem Market-Channel/Zielland.)

207 Tests gruen. Build/Smoke gruen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-07-07 19:14:50 +02:00
co-authored by Claude Opus 4.8
parent 54ed1a414e
commit 429a05f885
@@ -371,9 +371,14 @@ namespace PolyTraderSharp.Services
return;
}
// Limit-Preis (HF-fest / prozentual, gedeckelt) CopyTradingRisk, unit-getestet
orderPrice = CopyTradingRisk.CalculateBuyOrderPrice(
signal.Price, trader != null && trader.Category == "HF", settings.MaxPriceDifference, settings.MaxBuyPrice);
// Limit-Preis (HF-fest / prozentual, gedeckelt) CopyTradingRisk, unit-getestet.
// Phase 4.1: Maker-Einstieg platziert OHNE Aufschlag (ruhendes GTC-Limit am
// Master-Preis statt teurem Taker-Fill über dem Ask) spart Fees/Spread bei
// langsamen Mastern. (Ohne Orderbuch ist der Master-Preis die Näherung für den Bid.)
bool makerEntry = trader != null && trader.MakerEntry;
orderPrice = makerEntry
? CopyTradingRisk.CalculateBuyOrderPrice(signal.Price, false, 0m, settings.MaxBuyPrice)
: CopyTradingRisk.CalculateBuyOrderPrice(signal.Price, trader != null && trader.Category == "HF", settings.MaxPriceDifference, settings.MaxBuyPrice);
var exact = PolymarketClobClient.CalculateExactOrderAmounts(maxAmountToBuy, orderPrice, orderPrice, "BUY");
if (exact.shares <= 0 || exact.usdc > account.AvailableBalance)
@@ -527,7 +532,9 @@ namespace PolyTraderSharp.Services
$" Account: {account.Name}\n" +
$" Limit: ${orderPrice:F3} (Target: {signal.Price:F3})");
var result = await _clob.PlaceOrderAsync(account, signal.TokenId, signal.Side, exactUsdc, orderPrice, "GTD", _state.DebugOrderPayloadLog, isNegRisk);
// Maker-Einstieg (Phase 4.1) ruht als GTC-Limit; sonst GTD (Taker-nah).
string buyOrderType = (trader != null && trader.MakerEntry) ? "GTC" : "GTD";
var result = await _clob.PlaceOrderAsync(account, signal.TokenId, signal.Side, exactUsdc, orderPrice, buyOrderType, _state.DebugOrderPayloadLog, isNegRisk);
if (result == "OK")
{