/// <summary> /// Cryptocurrency order book. /// Process order book data from one source per one target pair. /// </summary> /// <param name="targetPair">Select target pair</param> /// <param name="source">Provide order book data source</param> /// <param name="targetType">Select target precision (default: All - accepts every type of data)</param> public CryptoOrderBook(string targetPair, IOrderBookSource source, CryptoOrderBookType targetType = CryptoOrderBookType.All) { CryptoValidations.ValidateInput(targetPair, nameof(targetPair)); CryptoValidations.ValidateInput(source, nameof(source)); TargetPairOriginal = targetPair; TargetPair = CryptoPairsHelper.Clean(targetPair); _source = source; TargetType = targetType; if (targetType == CryptoOrderBookType.L1 || targetType == CryptoOrderBookType.L2) { // save memory, only one order at price level _priceLevelInitialCapacity = 1; } else if (targetType == CryptoOrderBookType.L3) { // better performance, could be multiple orders at price level _priceLevelInitialCapacity = 5; } Subscribe(); RestartAutoSnapshotReloading(); RestartValidityChecking(); }
private static void ConfigureOptimized(IOrderBookSource source, ICryptoOrderBook orderBook) { source.BufferEnabled = true; source.BufferInterval = TimeSpan.FromMilliseconds(0); orderBook.DebugEnabled = false; orderBook.DebugLogEnabled = false; orderBook.ValidityCheckEnabled = false; }
/// <summary> /// Cryptocurrency order book. /// Process order book data from one source per one target pair. /// </summary> /// <param name="targetPair">Select target pair</param> /// <param name="source">Provide level 2 source data</param> public CryptoOrderBookL2(string targetPair, IOrderBookSource source) { CryptoValidations.ValidateInput(targetPair, nameof(targetPair)); CryptoValidations.ValidateInput(source, nameof(source)); TargetPairOriginal = targetPair; TargetPair = CryptoPairsHelper.Clean(targetPair); _source = source; Subscribe(); RestartAutoSnapshotReloading(); RestartValidityChecking(); }