Togli da sole le aste concluse, ma trattieni quelle costate qualcosa
Con l'aggiunta automatica accesa le aste concluse si accumulano a centinaia e seppelliscono quelle vive, che e' il contrario di quello che serve guardando un cruscotto. Il pulsante manuale "rimuovi le aste concluse" c'era gia', ma toglieva tutto senza distinguere. La rimozione automatica e' accesa di serie e toglie solo le aste che non hanno piu' niente da dire. Restano invece, ciascuna con la sua opzione: - quelle su cui si e' puntato, perche' sono le uniche che vale la pena riguardare e i soldi erano veri; - quelle vinte, perche' c'e' da confermare l'acquisto su Bidoo e una vittoria sparita dall'elenco e' il modo piu' semplice di dimenticarsene; - quelle di cui non si e' vista la fine, perche' sono esattamente quelle da controllare. L'ordine dei controlli conta: prima le ragioni per trattenere, cosi' il motivo scritto nel registro e' il piu' importante e non l'ultimo incontrato. Una vinta su cui si e' anche puntato resta "vinta", che e' quella che richiede un'azione. Il motivo finisce nel registro anche quando l'asta resta: senza, un'asta che sparisce e una che non sparisce sarebbero entrambe inspiegabili. La rimozione avviene come ultimo passo, dopo che storico, dossier e statistiche del prodotto sono gia' scritti: a quel punto togliere l'asta dall'elenco non perde niente. Corretto anche un difetto introdotto ieri con la fascia oraria: la rigiocata sui dossier usava le impostazioni vere, fascia compresa, e la fascia guarda l'orologio di parete. Una rigiocata ripercorre aste gia' concluse e l'ora in cui la si lancia non c'entra nulla con l'ora in cui quelle aste correvano: lanciata di notte avrebbe rifiutato ogni puntata e riportato zero, che e' il tipo di risultato che sembra vero e non lo e'. Adesso la rigiocata lavora su una copia delle impostazioni con la fascia spenta, senza mutare quelle dell'utente. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -31,7 +31,37 @@ namespace AutoBidder.Engine.Backtest
|
||||
int LeadMs,
|
||||
AppSettings Settings,
|
||||
string Username = "",
|
||||
double BidCostEuro = 0.20);
|
||||
double BidCostEuro = 0.20)
|
||||
{
|
||||
/// <summary>
|
||||
/// Le impostazioni come le vede la rigiocata.
|
||||
///
|
||||
/// <para>Spegne la sospensione a fascia oraria, che guarda l'orologio di parete:
|
||||
/// una rigiocata ripercorre aste già concluse, e l'ora in cui viene lanciata non
|
||||
/// c'entra nulla con l'ora in cui quelle aste correvano. Lasciarla accesa
|
||||
/// renderebbe il risultato dipendente da quando si preme il pulsante — di notte
|
||||
/// il motore rifiuterebbe ogni puntata e la rigiocata direbbe zero, che è
|
||||
/// esattamente il tipo di risultato che sembra vero e non lo è.</para>
|
||||
///
|
||||
/// <para>Vale anche per la suite di test, che gira a qualunque ora.</para>
|
||||
/// </summary>
|
||||
public AppSettings EffectiveSettings { get; } = Clona(Settings);
|
||||
|
||||
private static AppSettings Clona(AppSettings origine)
|
||||
{
|
||||
var copia = origine ?? new AppSettings();
|
||||
|
||||
// Copia superficiale via serializzazione: le impostazioni sono un sacco di
|
||||
// proprietà semplici, e mutare quella dell'utente sarebbe un effetto
|
||||
// collaterale che nessuno si aspetta da una rigiocata.
|
||||
var json = System.Text.Json.JsonSerializer.Serialize(copia);
|
||||
var clone = System.Text.Json.JsonSerializer.Deserialize<AppSettings>(json)
|
||||
?? new AppSettings();
|
||||
|
||||
clone.QuietHoursEnabled = false;
|
||||
return clone;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Esito su una singola asta.</summary>
|
||||
public sealed class Result
|
||||
@@ -139,7 +169,7 @@ namespace AutoBidder.Engine.Backtest
|
||||
ShippingCost: null,
|
||||
MaxBids: auction.MaxClicks,
|
||||
MaxTotalSpendEuro: auction.MaxTotalSpendEuro,
|
||||
MinSavingsPercentage: options.Settings.MinSavingsPercentage,
|
||||
MinSavingsPercentage: options.EffectiveSettings.MinSavingsPercentage,
|
||||
StopAtBreakEven: auction.StopAtBreakEven));
|
||||
|
||||
if (!budget.CanBid)
|
||||
@@ -151,8 +181,8 @@ namespace AutoBidder.Engine.Backtest
|
||||
continue;
|
||||
}
|
||||
|
||||
strategy.UpdateHeatMetric(auction, options.Settings, options.Username);
|
||||
var decision = strategy.ShouldPlaceBid(auction, state, options.Settings, options.Username);
|
||||
strategy.UpdateHeatMetric(auction, options.EffectiveSettings, options.Username);
|
||||
var decision = strategy.ShouldPlaceBid(auction, state, options.EffectiveSettings, options.Username);
|
||||
|
||||
if (!decision.ShouldBid)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user