/// <summary> /// Sets the job we're subscribing for /// </summary> /// <param name="job">Job we're subscribing for</param> public void SetJob(LiveNodePacket job) { var wssUrl = job.BrokerageData["gdax-url"]; var restApi = job.BrokerageData["gdax-rest-api"]; var restClient = new RestClient(restApi); var webSocketClient = new WebSocketClientWrapper(); var passPhrase = job.BrokerageData["gdax-passphrase"]; var apiKey = job.BrokerageData["gdax-api-key"]; var apiSecret = job.BrokerageData["gdax-api-secret"]; var priceProvider = new ApiPriceProvider(job.UserId, job.UserToken); var aggregator = Composer.Instance.GetExportedValueByTypeName <IDataAggregator>( Config.Get("data-aggregator", "QuantConnect.Lean.Engine.DataFeeds.AggregationManager"), forceTypeNameOnExisting: false); Initialize( wssUrl: wssUrl, websocket: webSocketClient, restClient: restClient, apiKey: apiKey, apiSecret: apiSecret, passPhrase: passPhrase, algorithm: null, priceProvider: priceProvider, aggregator: aggregator, job: job ); if (!IsConnected) { Connect(); } }
public async Task Start() { if (_started) { throw new Exception("already_started"); } await Task.Run(() => WebSocketClientWrapper.ConnectAsync( $"wss://{_options.Url}:{_options.Port}", CancellationToken.None, (context) => { _socketWrapper = context; context.OnOpen += OnOpen; context.OnClose += _options.OnClose; context.OnError += _options.OnError; context.OnReceive += OnReceived; _options.OnConnected?.Invoke(); }, true, false, 3, _options.InternalWebSocketOptions )); }
protected override IBrokerage CreateBrokerage(IOrderProvider orderProvider, ISecurityProvider securityProvider) { var restClient = new RestClient("https://api.pro.coinbase.com"); var webSocketClient = new WebSocketClientWrapper(); var securities = new SecurityManager(new TimeKeeper(DateTime.UtcNow, TimeZones.NewYork)) { { Symbol, CreateSecurity(Symbol) } }; var transactions = new SecurityTransactionManager(null, securities); transactions.SetOrderProcessor(new FakeOrderProcessor()); var algorithm = new Mock <IAlgorithm>(); algorithm.Setup(a => a.Transactions).Returns(transactions); algorithm.Setup(a => a.BrokerageModel).Returns(new GDAXBrokerageModel()); algorithm.Setup(a => a.Portfolio).Returns(new SecurityPortfolioManager(securities, transactions)); algorithm.Setup(a => a.Securities).Returns(securities); var priceProvider = new Mock <IPriceProvider>(); priceProvider.Setup(a => a.GetLastPrice(It.IsAny <Symbol>())).Returns(1.234m); var aggregator = new AggregationManager(); return(new GDAXBrokerage(Config.Get("gdax-url", "wss://ws-feed.pro.coinbase.com"), webSocketClient, restClient, Config.Get("gdax-api-key"), Config.Get("gdax-api-secret"), Config.Get("gdax-passphrase"), algorithm.Object, priceProvider.Object, aggregator)); }
public void GetsHistory(Symbol symbol, Resolution resolution, TickType tickType, TimeSpan period, bool shouldBeEmpty) { var restClient = new RestClient("https://api.pro.coinbase.com"); var webSocketClient = new WebSocketClientWrapper(); var aggregator = new AggregationManager(); var brokerage = new GDAXBrokerage( Config.Get("gdax-url", "wss://ws-feed.pro.coinbase.com"), webSocketClient, restClient, Config.Get("gdax-api-key"), Config.Get("gdax-api-secret"), Config.Get("gdax-passphrase"), null, null, aggregator, null); var historyProvider = new BrokerageHistoryProvider(); historyProvider.SetBrokerage(brokerage); historyProvider.Initialize(new HistoryProviderInitializeParameters(null, null, null, null, null, null, null, false, new DataPermissionManager())); var now = DateTime.UtcNow; var requests = new[] { new HistoryRequest(now.Add(-period), now, typeof(TradeBar), symbol, resolution, SecurityExchangeHours.AlwaysOpen(TimeZones.Utc), DateTimeZone.Utc, resolution, false, false, DataNormalizationMode.Adjusted, tickType) }; var history = historyProvider.GetHistory(requests, TimeZones.Utc).ToList(); foreach (var slice in history) { var bar = slice.Bars[symbol]; Log.Trace($"{bar.Time}: {bar.Symbol} - O={bar.Open}, H={bar.High}, L={bar.Low}, C={bar.Close}, V={bar.Volume}"); } if (shouldBeEmpty) { Assert.IsTrue(history.Count == 0); } else { Assert.IsTrue(history.Count > 0); } Log.Trace("Data points retrieved: " + historyProvider.DataPointCount); }
private static GDAXBrokerage GetBrokerage() { var wssUrl = Config.Get("gdax-url", "wss://ws-feed.pro.coinbase.com"); var webSocketClient = new WebSocketClientWrapper(); var restClient = new RestClient("https://api.pro.coinbase.com"); var apiKey = Config.Get("gdax-api-key"); var apiSecret = Config.Get("gdax-api-secret"); var passPhrase = Config.Get("gdax-passphrase"); var algorithm = new QCAlgorithm(); var userId = Config.GetInt("job-user-id"); var userToken = Config.Get("api-access-token"); var priceProvider = new ApiPriceProvider(userId, userToken); return(new GDAXBrokerage(wssUrl, webSocketClient, restClient, apiKey, apiSecret, passPhrase, algorithm, priceProvider)); }
protected override IBrokerage CreateBrokerage(IOrderProvider orderProvider, ISecurityProvider securityProvider) { var restClient = new RestClient("https://api.pro.coinbase.com"); var webSocketClient = new WebSocketClientWrapper(); var algorithm = new Mock <IAlgorithm>(); algorithm.Setup(a => a.BrokerageModel).Returns(new GDAXBrokerageModel(AccountType.Cash)); var priceProvider = new ApiPriceProvider(Config.GetInt("job-user-id"), Config.Get("api-access-token")); return(new GDAXBrokerage(Config.Get("gdax-url", "wss://ws-feed.pro.coinbase.com"), webSocketClient, restClient, Config.Get("gdax-api-key"), Config.Get("gdax-api-secret"), Config.Get("gdax-passphrase"), algorithm.Object, priceProvider)); }
private static TestGDAXDataQueueHandler GetDataQueueHandler() { var wssUrl = Config.Get("gdax-url", "wss://ws-feed.pro.coinbase.com"); var webSocketClient = new WebSocketClientWrapper(); var restClient = new RestClient("https://api.pro.coinbase.com"); var apiKey = Config.Get("gdax-api-key"); var apiSecret = Config.Get("gdax-api-secret"); var passPhrase = Config.Get("gdax-passphrase"); var algorithm = new QCAlgorithm(); var userId = Config.GetInt("job-user-id"); var userToken = Config.Get("api-access-token"); var priceProvider = new ApiPriceProvider(userId, userToken); var aggregator = new AggregationManager(); return(new TestGDAXDataQueueHandler(wssUrl, webSocketClient, restClient, apiKey, apiSecret, passPhrase, algorithm, priceProvider, aggregator, null)); }
/// <summary> /// Create the Brokerage instance /// </summary> /// <param name="job"></param> /// <param name="algorithm"></param> /// <returns></returns> public override IBrokerage CreateBrokerage(Packets.LiveNodePacket job, IAlgorithm algorithm) { var required = new[] { "gdax-url", "gdax-api-secret", "gdax-api-key", "gdax-passphrase" }; foreach (var item in required) { if (string.IsNullOrEmpty(job.BrokerageData[item])) { throw new Exception($"GDAXBrokerageFactory.CreateBrokerage: Missing {item} in config.json"); } } var restApi = BrokerageData["gdax-rest-api"]; if (job.BrokerageData.ContainsKey("gdax-rest-api")) { restApi = job.BrokerageData["gdax-rest-api"]; } var restClient = new RestClient(restApi); var webSocketClient = new WebSocketClientWrapper(); var priceProvider = new ApiPriceProvider(job.UserId, job.UserToken); var aggregator = Composer.Instance.GetExportedValueByTypeName <IDataAggregator>(Config.Get("data-aggregator", "QuantConnect.Lean.Engine.DataFeeds.AggregationManager"), forceTypeNameOnExisting: false); IBrokerage brokerage; if (job.DataQueueHandler.Contains("GDAXDataQueueHandler")) { var dataQueueHandler = new GDAXDataQueueHandler(job.BrokerageData["gdax-url"], webSocketClient, restClient, job.BrokerageData["gdax-api-key"], job.BrokerageData["gdax-api-secret"], job.BrokerageData["gdax-passphrase"], algorithm, priceProvider, aggregator, job); Composer.Instance.AddPart <IDataQueueHandler>(dataQueueHandler); brokerage = dataQueueHandler; } else { brokerage = new GDAXBrokerage(job.BrokerageData["gdax-url"], webSocketClient, restClient, job.BrokerageData["gdax-api-key"], job.BrokerageData["gdax-api-secret"], job.BrokerageData["gdax-passphrase"], algorithm, priceProvider, aggregator, job); } return(brokerage); }
/// <summary> /// Creates new instance of <see cref="SockClient"/> object. /// </summary> /// <param name="keyId">Application key identifier.</param> /// <param name="secretKey">Application secret key.</param> /// <param name="alpacaRestApi">Alpaca REST API endpoint URL.</param> public SockClient( string keyId, string secretKey, Uri alpacaRestApi) { if (keyId == null) { throw new ArgumentException(nameof(keyId)); } if (secretKey == null) { throw new ArgumentException(nameof(secretKey)); } _keyId = keyId; _secretKey = secretKey; alpacaRestApi = alpacaRestApi ?? new Uri("https://api.alpaca.markets"); var uriBuilder = new UriBuilder(alpacaRestApi) { Scheme = alpacaRestApi.Scheme == "http" ? "ws" : "wss" }; uriBuilder.Path += "stream"; _webSocket = new WebSocketClientWrapper(); _webSocket.Initialize(uriBuilder.Uri.ToString()); _webSocket.Open += HandleOpened; _webSocket.Closed += HandleClosed; _webSocket.Message += HandleDataReceived; _webSocket.Error += (sender, args) => { OnError?.Invoke(args.Exception); }; }
/// <summary> /// Create the Brokerage instance /// </summary> /// <param name="job"></param> /// <param name="algorithm"></param> /// <returns></returns> public override IBrokerage CreateBrokerage(Packets.LiveNodePacket job, IAlgorithm algorithm) { var required = new[] { "gdax-url", "gdax-api-secret", "gdax-api-key", "gdax-passphrase" }; foreach (var item in required) { if (string.IsNullOrEmpty(job.BrokerageData[item])) { throw new Exception($"GDAXBrokerageFactory.CreateBrokerage: Missing {item} in config.json"); } } var restClient = new RestClient("https://api.pro.coinbase.com"); var webSocketClient = new WebSocketClientWrapper(); var priceProvider = new ApiPriceProvider(job.UserId, job.UserToken); IBrokerage brokerage; if (job.DataQueueHandler.EndsWith("GDAXDataQueueHandler")) { var dataQueueHandler = new GDAXDataQueueHandler(job.BrokerageData["gdax-url"], webSocketClient, restClient, job.BrokerageData["gdax-api-key"], job.BrokerageData["gdax-api-secret"], job.BrokerageData["gdax-passphrase"], algorithm, priceProvider); Composer.Instance.AddPart <IDataQueueHandler>(dataQueueHandler); brokerage = dataQueueHandler; } else { brokerage = new GDAXBrokerage(job.BrokerageData["gdax-url"], webSocketClient, restClient, job.BrokerageData["gdax-api-key"], job.BrokerageData["gdax-api-secret"], job.BrokerageData["gdax-passphrase"], algorithm, priceProvider); } return(brokerage); }