JonjubNet.Clock
1.3.0
dotnet add package JonjubNet.Clock --version 1.3.0
NuGet\Install-Package JonjubNet.Clock -Version 1.3.0
<PackageReference Include="JonjubNet.Clock" Version="1.3.0" />
<PackageVersion Include="JonjubNet.Clock" Version="1.3.0" />
<PackageReference Include="JonjubNet.Clock" />
paket add JonjubNet.Clock --version 1.3.0
#r "nuget: JonjubNet.Clock, 1.3.0"
#:package JonjubNet.Clock@1.3.0
#addin nuget:?package=JonjubNet.Clock&version=1.3.0
#tool nuget:?package=JonjubNet.Clock&version=1.3.0
JonjubNet.Clock
Reloj por plataforma para .NET 10: sincroniza el contador monotónico del proceso con la hora del servidor de cada plataforma (Binance, Hyperliquid…) y calcula, sin red, sin base de datos y sin leer la hora de la máquina:
la hora estimada de la plataforma en cualquier instante del contador, con su incertidumbre (± ns) y su salud (sin sincronizar, vigente, vencida, incierta);
offset y deriva a partir de muestras de la hora del servidor (petición con su ida y vuelta: incertidumbre RTT/2 + resolución/2), descartando atípicas (mediana y MAD), con mínimos cuadrados ponderados y una pasada de Huber; los saltos reales del reloj del servidor se confirman con varias muestras concordantes;
la conversión entre la hora de dos plataformas (para una referencia común) y la comparación de marcas de hora con incertidumbre (si pueden ser del mismo instante y qué orden se puede asegurar);
los cierres de vela en hora de la plataforma y el contador en que una vela ya cerró (estimado o conservador);
las horas de las velas como las entrega la plataforma (
CandleTime): la vela siguiente (incluido el mes de calendario), si dos velas son seguidas, el hueco entre ellas, hasta cuándo vale una vela, si la siguiente se atrasó y los intervalos en ns.cuándo tomar la siguiente muestra (
PlatformClock.NextSampleCounter): antes de que la hora deje de estar vigente, seguido mientras no se conoce la deriva y más espaciado cuando ya se conoce;el reloj de cada plataforma del proceso (
PlatformClocks) y la hora del proceso (PlatformTimeProvider, unTimeProvider): la hora de plataforma vigente o, si ninguna lo está, la incierta; la de la máquina solo sin ninguna sincronizada.
Las muestras las toma el conector de cada plataforma y las reglas (ClockPolicy) llegan de la configuración.
var clocks = new PlatformClocks(); // una vez por proceso
TimeProvider time = new PlatformTimeProvider(clocks); // la hora que usa todo el proceso
clocks.Synchronize("BINANCE", policy, sample);
var next = clocks.NextSampleCounter("BINANCE", PlatformClocks.CounterNs()); // cuándo pedir la siguiente
var clock = PlatformClock.Start(policy); // una vez por conexión
var sample = new ClockSample(sendNs, receiveNs, serverTimeNs, 1_000_000); // /api/v3/time de Binance: resolución de 1 ms
PlatformClock.Synchronize(clock, sample);
var now = PlatformClock.Estimate(clock, counterNs); // hora de Binance ± incertidumbre
var close = CandleClock.NextClose(now.PlatformTimeNs, 3_600_000_000_000); // próximo cierre de 1h
var deadline = PlatformClock.DeadlineCounter(clock, close, conservative: true);
counterNs es el contador del proceso en nanosegundos: ClockCounter.ToNanoseconds(Stopwatch.GetTimestamp(), Stopwatch.Frequency).
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.