JonjubNet.Clock 1.3.0

dotnet add package JonjubNet.Clock --version 1.3.0
                    
NuGet\Install-Package JonjubNet.Clock -Version 1.3.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="JonjubNet.Clock" Version="1.3.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="JonjubNet.Clock" Version="1.3.0" />
                    
Directory.Packages.props
<PackageReference Include="JonjubNet.Clock" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add JonjubNet.Clock --version 1.3.0
                    
#r "nuget: JonjubNet.Clock, 1.3.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package JonjubNet.Clock@1.3.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=JonjubNet.Clock&version=1.3.0
                    
Install as a Cake Addin
#tool nuget:?package=JonjubNet.Clock&version=1.3.0
                    
Install as a Cake Tool

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, un TimeProvider): 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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • 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.

Version Downloads Last Updated
1.3.0 88 11/7/2026
1.2.0 83 11/5/2026