/// <summary> /// returns true if more data to process, false otherwise /// </summary> /// <returns></returns> public bool NextDataPoint() { //Check if we have header of file if (!_haveheader) { ReadHeader(); } try { // get line type byte linetype = ReadByte(); // prepare a datapoiny DataPoint d; // get the tick switch (linetype) { case DataConst.EndData: return(false); case DataConst.StartData: return(true); case DataConst.FileVersion: return(true); case DataConst.DatapointStart: { //Get data point data List <byte> data = new List <byte>(); bool ended = false; while (!ended) { var lastbyte = ReadByte(); if (lastbyte == DataConst.DatapointEnd) { ended = true; } else { data.Add(lastbyte); } } //Convert data d = DataPointImpl.Deserialize(data.ToArray(), true); } ; break; default: { // weird data, try to keep reading ReadByte(); // but don't send this data, just get next record return(true); } } // send any data we have if (d != null) { GotData?.Invoke(this, d); } // count it Count++; // assume there is more return(true); } catch (EndOfStreamException) { return(false); } catch (ObjectDisposedException) { return(false); } catch (Exception exc) { _log.Error(exc, $"Unexpected error while reading file in datareader: {exc.Message}"); return(false); } }
/// <summary> /// Initialize new internal live data feed /// </summary> public void Initialize(MessageInstance initialmessage) { //Set data _endpoint = Config.TryGetEnvVariable("hist.endpoint", Config.GlobalConfig.HistEndpoint); _startDateTime = DateTime.Parse(Config.TryGetEnvVariable("hist.start", Config.GlobalConfig.HistStart)); _endDateTime = DateTime.Parse(Config.TryGetEnvVariable("hist.end", Config.GlobalConfig.HistEnd)); //Set conversion method Conversion = (data) => new[] { DataPointImpl.Deserialize(data as byte[], true) }; //Set socket _histRequestSocket = new RequestSocket(_endpoint); _histRequestSocket.ReceiveReady += OnReceive; _histRequestSocket.Options.ReceiveHighWatermark = 1000; //Set poller _timeoutTimer = new NetMQTimer(_timeoutTimerSpan); _timeoutTimer.Elapsed += OnTimeoutTimer; _timeoutTimer.Enable = false; _poller = new NetMQPoller(); _poller.Add(_histRequestSocket); //Set allowed tickers _allowedTickers = Config.SecurityConfig.Select(x => x.Ticker).ToArray(); //Set source string brokertype = (initialmessage is LiveTradingMessage liveTradingMessage) ? liveTradingMessage.BrokerType : (initialmessage is SimulationMessage backtestmessage) ? backtestmessage.BrokerType : ""; switch ((BrokerType)Enum.Parse(typeof(BrokerType), brokertype)) { case BrokerType.Robinhood: _source = "IEX"; break; case BrokerType.Bittrex: _source = "Bittrex"; break; case BrokerType.HitBtc: _source = "HitBtc"; break; case BrokerType.Cobinhood: _source = "CobinHood"; break; case BrokerType.FreeTrade: _source = "IEX"; break; case BrokerType.Unknown: throw new Exception($"Data source is unknown, cannot retrieve data from an unknown data source"); default: throw new ArgumentOutOfRangeException($"{brokertype} is unknown, cannot derive data source from an unknown broker type"); } }
/// <summary> /// Initializes this instance. /// </summary> public void Initialize(MessageInstance initialmessage) { //Set data _endpoint = Config.TryGetEnvVariable("datafeedendpoint", Config.GlobalConfig.DataFeedEndpoint); //Set conversion method Conversion = data => new[] { DataPointImpl.Deserialize(data as byte[], true) };; //Set socket _subscriberSocket = new SubscriberSocket(_endpoint); _subscriberSocket.ReceiveReady += OnReceive; _subscriberSocket.Options.ReceiveHighWatermark = 1000; _subscriberSocket.Subscribe(Topic.HeartBeatMessage); _subscriberSocket.Subscribe(Topic.WelcomeMessage); //Set poller _timeoutTimer = new NetMQTimer(_timeoutTimerSpan); _timeoutTimer.Elapsed += OnTimeoutTimer; _timeoutTimer.Enable = false; _poller = new NetMQPoller(); _poller.Add(_subscriberSocket); //Set allowed tickers _allowedTickers = Config.SecurityConfig.Select(x => x.Ticker).ToArray(); //Set allowed currency conversion tickers //TODO: set allowed currency conversion tickers (all combinations possible) //Set source string brokertype = (initialmessage is LiveTradingMessage liveTradingMessage) ? liveTradingMessage.BrokerType : (initialmessage is SimulationMessage backtestmessage) ? backtestmessage.BrokerType : ""; switch ((BrokerType)Enum.Parse(typeof(BrokerType), brokertype)) { case BrokerType.Robinhood: _source = "IEX"; break; case BrokerType.Bittrex: _source = "Bittrex"; break; case BrokerType.HitBtc: _source = "HitBtc"; break; case BrokerType.Cobinhood: _source = "CobinHood"; break; case BrokerType.FreeTrade: _source = "IEX"; break; case BrokerType.Unknown: throw new Exception($"Data source is unknown, cannot retrieve data from an unknown data source"); default: throw new ArgumentOutOfRangeException($"{brokertype} is unknown, cannot derive data source from an unknown broker type"); } }