public CandlesSubscribeRequest(string pair, BitfinexTimeFrame bitfinexTimeFrame) { BfxValidations.ValidateInput(pair, nameof(pair)); Key = $"trade:{TimeFrameToKeyCommand(bitfinexTimeFrame)}:{BitfinexSymbolUtils.FormatPairToTradingSymbol(pair)}"; }
/// <summary> /// Send message to the websocket channel. /// It inserts the message to the queue and actual sending is done on an other thread /// </summary> /// <param name="message">Message to be sent</param> public Task Send(string message) { BfxValidations.ValidateInput(message, nameof(message)); _messagesToSendQueue.Add(message); return(Task.CompletedTask); }
public BitfinexWebsocketClient(BitfinexWebsocketCommunicator communicator) { BfxValidations.ValidateInput(communicator, nameof(communicator)); _communicator = communicator; _channelIdToHandler[0] = Streams.HandleAccountInfo; _messageReceivedSubsciption = _communicator.MessageReceived.Subscribe(HandleMessage); }
public Task Send <T>(T request) { BfxValidations.ValidateInput(request, nameof(request)); var serialized = JsonConvert.SerializeObject(request, BitfinexJsonSerializer.Settings); return(_communicator.Send(serialized)); }
/// <summary> /// Create a new unique order identification /// </summary> public CidPair(long cid, DateTime cidDate) { BfxValidations.ValidateInput(cid, nameof(cid), 0); BfxValidations.ValidateInput(cidDate, nameof(cidDate)); Cid = cid; CidDate = cidDate; }
/// <summary> /// Cancel multiple order in selected groups /// </summary> public static CancelMultiOrderRequest CancelGroups(long[] gids) { BfxValidations.ValidateInputCollection(gids, nameof(gids)); return(new CancelMultiOrderRequest() { Gids = gids }); }
/// <summary> /// Cancel multiple order in selected group /// </summary> public static CancelMultiOrderRequest CancelGroup(long gid) { BfxValidations.ValidateInput(gid, nameof(gid), 0); return(new CancelMultiOrderRequest() { Gids = new[] { gid } }); }
/// <summary> /// Subscribe for L3 order book data (no grouping, every single order) /// </summary> /// <param name="pair">Target symbol/pair (BTCUSD, ETHBTC, etc.)</param> /// <param name="length">Number of orders returned by API ("1", "25", "100") [default="25"]</param> public RawBookSubscribeRequest( string pair, string length = null) { BfxValidations.ValidateInput(pair, nameof(pair)); Symbol = BitfinexSymbolUtils.FormatPairToSymbol(pair); Prec = "R0"; Len = string.IsNullOrWhiteSpace(length) ? "25" : length; }
public BitfinexWebsocketCommunicator(Uri url, Func <ClientWebSocket> clientFactory = null) { BfxValidations.ValidateInput(url, nameof(url)); _url = url; _clientFactory = clientFactory ?? (() => new ClientWebSocket() { Options = { KeepAliveInterval = new TimeSpan(0, 0, 5, 0) } }); }
public async Task Send(string message) { BfxValidations.ValidateInput(message, nameof(message)); Log.Verbose(L($"Sending: {message}")); var buffer = Encoding.UTF8.GetBytes(message); var messageSegment = new ArraySegment <byte>(buffer); var client = await GetClient(); await client.SendAsync(messageSegment, WebSocketMessageType.Text, true, _cancelation.Token); }
public BitfinexWebsocketCommunicator(Uri url, ClientWebSocket websocketClient = null) { BfxValidations.ValidateInput(url, nameof(url)); _url = url; _client = websocketClient; var minute = 1000 * 60; _lastChanceTimer = new Timer(async x => await LastChance(x), null, minute, minute); }
/// <inheritdoc /> public BitfinexWebsocketClient(IBitfinexCommunicator communicator) { BfxValidations.ValidateInput(communicator, nameof(communicator)); _communicator = communicator; _messageReceivedSubscription = _communicator.MessageReceived.Subscribe(HandleMessage); _configurationSubscription = Streams.ConfigurationSubject.Subscribe(HandleConfiguration); _authenticatedHandler = new BitfinexAuthenticatedHandler(Streams, _channelIdToHandler); _publicHandler = new BitfinexPublicHandler(Streams, _channelIdToHandler); }
public AuthenticationRequest(string apiKey, string apiSecret) { BfxValidations.ValidateInput(apiKey, nameof(apiKey)); BfxValidations.ValidateInput(apiSecret, nameof(apiSecret)); ApiKey = apiKey; AuthNonce = BitfinexAuthentication.CreateAuthNonce(); AuthPayload = BitfinexAuthentication.CreateAuthPayload(AuthNonce); AuthSig = BitfinexAuthentication.CreateSignature(AuthPayload, apiSecret); }
/// <summary> /// Subscribe for L2 order book data (grouped by price) /// </summary> /// <param name="pair">Target symbol/pair (BTCUSD, ETHBTC, etc.)</param> /// <param name="precision">Level of price aggregation (P0, P1, P2, P3). The default is P0</param> /// <param name="frequency">Frequency of updates (F0, F1). F0=realtime / F1=2sec. The default is F0.</param> /// <param name="length">Number of price points ("25", "100") [default="25"]</param> public BookSubscribeRequest( string pair, BitfinexPrecision precision = BitfinexPrecision.P0, BitfinexFrequency frequency = BitfinexFrequency.Realtime, string length = null) { BfxValidations.ValidateInput(pair, nameof(pair)); Symbol = BitfinexSymbolUtils.FormatPairToSymbol(pair); Prec = precision.GetStringValue(); Freq = frequency.GetStringValue(); Len = string.IsNullOrWhiteSpace(length) ? "25" : length; }
public BitfinexWebsocketCommunicator(Uri url, Func <ClientWebSocket> clientFactory = null) { BfxValidations.ValidateInput(url, nameof(url)); _url = url; _clientFactory = clientFactory ?? (() => new ClientWebSocket() { Options = { KeepAliveInterval = new TimeSpan(0, 0, 0, 10) } }); var minute = 1000 * 60; _lastChanceTimer = new Timer(async x => await LastChance(x), null, minute, minute); }
/// <summary> /// Simple constructor mostly for LIMIT and MARKET order, /// for other order types use parameter-less constructor and set properties by your own /// </summary> public NewOrderRequest(long gid, long cid, string symbol, OrderType type, double amount, double price) { BfxValidations.ValidateInput(cid, nameof(cid), 0); BfxValidations.ValidateInput((int)type, nameof(type), 0); BfxValidations.ValidateInput(price, nameof(price), 0); BfxValidations.ValidateInput(symbol, nameof(symbol)); Gid = gid; Cid = cid; Symbol = symbol; Type = type; Amount = amount; Price = price; }
/// <summary> /// Serializes request and sends message via websocket communicator. /// It logs and re-throws every exception. /// </summary> /// <param name="request">Request/message to be sent</param> public async Task Send <T>(T request) { try { BfxValidations.ValidateInput(request, nameof(request)); var serialized = JsonConvert.SerializeObject(request, BitfinexJsonSerializer.Settings); await _communicator.Send(serialized); } catch (Exception e) { Log.Error(e, L($"Exception while sending message '{request}'. Error: {e.Message}")); throw; } }
public Task Send <T>(T request, bool resubscribe = false) { BfxValidations.ValidateInput(request, nameof(request)); if (!resubscribe) { //Store subscriptions to re-establish if communication is lost and re-established if (request is SubscribeRequestBase) { _storedSubscriptions.Add(request as SubscribeRequestBase); } } var serialized = JsonConvert.SerializeObject(request, BitfinexJsonSerializer.Settings); return(this.SendInternal(serialized)); }
/// <summary> /// Authentication request /// </summary> /// <param name="apiKey">Your API key</param> /// <param name="apiSecret">Your API secret</param> /// <param name="deadManSwitchEnabled">Dead-Man-Switch flag (optional), when socket is closed, cancel all account orders</param> public AuthenticationRequest(string apiKey, string apiSecret, bool deadManSwitchEnabled) { BfxValidations.ValidateInput(apiKey, nameof(apiKey)); BfxValidations.ValidateInput(apiSecret, nameof(apiSecret)); ApiKey = apiKey; AuthNonce = BitfinexAuthentication.CreateAuthNonce(); AuthPayload = BitfinexAuthentication.CreateAuthPayload(AuthNonce); AuthSig = BitfinexAuthentication.CreateSignature(AuthPayload, apiSecret); if (deadManSwitchEnabled) { Dms = 4; } }
public Task Send(string message) { BfxValidations.ValidateInput(message, nameof(message)); Log.Debug(L($"Sending: {message}")); var buffer = Encoding.UTF8.GetBytes(message); var messageSegment = new ArraySegment <byte>(buffer); lock (_sendingTaskLock) { var client = GetClient(); if (client == null) { return(null); } try { if (_sendingTask != null && _sendingTask.Status != TaskStatus.RanToCompletion && _sendingTask.Status != TaskStatus.Canceled && _sendingTask.Status != TaskStatus.Faulted) { Log.Warning(L($"Waiting SendAsync completed.")); _sendingTask.Wait(); } _sendingTask = client.SendAsync(messageSegment, WebSocketMessageType.Text, true, _cancelation.Token); } catch (Exception e) { Log.Error(e, L($"Exception while SendAsync.")); #pragma warning disable 4014 Reconnect(); #pragma warning restore 4014 } } return(null); }
public TickerSubscribeRequest(string pair) { BfxValidations.ValidateInput(pair, nameof(pair)); Symbol = FormatPairToSymbol(pair); }
/// <summary> /// Subscribe to trades request /// </summary> /// <param name="pair">Target pair, for example 'BTC/USD', 'ETH/USD', ETHBTC, etc.</param> public TradesSubscribeRequest(string pair) { BfxValidations.ValidateInput(pair, nameof(pair)); Symbol = BitfinexSymbolUtils.FormatPairToTradingSymbol(pair); }
public FundingsSubscribeRequest(string symbol) { BfxValidations.ValidateInput(symbol, nameof(symbol)); Symbol = BitfinexSymbolUtils.FormatSymbolToFunding(symbol); }
/// <summary> /// Cancel order by combination of client id and order creation date /// </summary> public CancelOrderRequest(CidPair cidPair) { BfxValidations.ValidateInput(cidPair, nameof(cidPair)); CidPair = cidPair; }
/// <summary> /// Cancel order by unique Bitfinex order id /// </summary> /// <param name="id"></param> public CancelOrderRequest(long id) { BfxValidations.ValidateInput(id, nameof(id), 0); Id = id; }
/// <summary> /// Send message to the websocket channel. /// It doesn't use a sending queue, /// beware of issue while sending two messages in the exact same time /// on the full .NET Framework platform /// </summary> /// <param name="message">Message to be sent</param> public Task SendInstant(string message) { BfxValidations.ValidateInput(message, nameof(message)); return(SendInternal(message)); }
public FundingsSuscribeRequest(string symbol) { BfxValidations.ValidateInput(symbol, nameof(symbol)); Symbol = FormatSymbolFunding(symbol); }
/// <summary> /// Cancel multiple orders by unique Bitfinex order ids /// </summary> /// <param name="ids"></param> public CancelMultiOrderRequest(long[] ids) { BfxValidations.ValidateInputCollection(ids, nameof(ids)); Ids = ids; }
/// <summary> /// Cancel multiple orders by unique client order identifications /// </summary> /// <param name="cidPairs"></param> public CancelMultiOrderRequest(CidPair[] cidPairs) { BfxValidations.ValidateInputCollection(cidPairs, nameof(cidPairs)); CidPairs = cidPairs; }