//private long _nextvalidorderid;
        //private string _account;
        //public long NextValidOrderId { get { return _nextvalidorderid; } }
        //public string Account { get { return _account; } }

        public BrokerService(IConfigManager configmanager, IEventAggregator eventaggregator, ILoggerFacade logger, IGlobalIdService globalidservice, BlockingCollection<Tick> tickqueue, Basket basket)
        {
            this._configmanager = configmanager;
            this._eventAggregator = eventaggregator;
            this._tickqueue = tickqueue;
            this._basket = basket;
            this._logger = logger;
            this._globalidservice = globalidservice;

            // outgoing events
            _eventAggregator.GetEvent<SendOrderEvent>().Subscribe(SendOrder);
            _eventAggregator.GetEvent<CancelOrderEvent>().Subscribe(CancelOrder);
            _eventAggregator.GetEvent<SendHistDataRequestEvent>().Subscribe(ReqHistoricalData);
        }
 void _strategy_SendBasket(Basket b, int id)
 {
     SendDebug("Basket subscription not implemented yet. StrategyBase should use the basket from basket.xml");
 }
        //********************************* Outgoing Messages *************************************//
        #region Outgoing Messages
        public void RequestMarketData(Basket b)
        {
            string fullname;
            try
            {
                for (int i = 0; i < b.Count; i++)
                {
                    fullname = b[i];
                    if (fullname.Contains("FUT") || fullname.Contains("OPT") || fullname.Contains("FOP"))
                    {
                        Debug("Google Client only support STK and IDX at this time. " + fullname + " skipped.");
                        continue;
                    }
                    string[] fn = fullname.Split(' ');
                    if (!SecurityFullNameToGoogleSymbol.ContainsKey(fullname))
                    {
                        SecurityFullNameToGoogleSymbol.Add(fullname, fn[0]);
                        SecurityFullNameToLastPrice.Add(fullname, 0.0m);
                    }
                }
            }
            catch (Exception e)
            {
                Debug("Error in requesting market data from Google client");
                Debug(e.Message);
            }

            if (!isServerConnected)
            {
                tokensource = new CancellationTokenSource();
                cancellationtoken = tokensource.Token;

                var task = Task.Factory.StartNew(() => GetQuoteLoop(cancellationtoken), cancellationtoken, TaskCreationOptions.LongRunning, TaskScheduler.Default)
                    .ContinueWith(antecendent => { Debug("GOOG client stopped"); });
                isServerConnected = true;
            }
        }
Example #4
0
        //********************************* Outgoing Messages *************************************//
        #region Outgoing Messages
        /// <summary>
        /// Request market data for a basket of securities according to their FullNames
        /// </summary>
        /// <param name="b"></param>
        public void RequestMarketData(Basket b)
        {
            // Connection is verified in _ibSocket.reqMktData
            for (int i = 0; i < b.Count; i++)
            {
                Contract contract;
                contract = SecurityFullNameToContract(b[i]);

                bool exist = false;
                foreach (var t in _marketDataRequests)
                {
                    if (t.FullSymbol == b[i])
                        exist = true;
                }
                if (exist)
                    continue;
                else
                {
                    Tick tick = new Tick();
                    // tick symbol is security full name
                    tick.FullSymbol = b[i];
                    _marketDataRequests.Add(tick);
                    _ibSocket.reqMktData(_marketDataRequests.Count - 1, contract, null, false);
                }
            }
        }
        void _strategy_SendBasketEvent(Basket b, int id)
        {

        }
Example #6
0
 /// <summary>
 /// clone a basket
 /// </summary>
 /// <param name="copy"></param>
 public Basket(Basket copy)
 {
     foreach (string s in copy)
         Add(s);
     Name = copy.Name;
 }
Example #7
0
 public static void SerializeToXML(Basket b, string filename)
 {
     XmlSerializer serializer = new XmlSerializer(typeof(Basket));
     TextWriter writer = new StreamWriter(filename);
     serializer.Serialize(writer, b);
     writer.Close();
 }
Example #8
0
 public static Basket DeserializeFromString(string serialBasket)
 {
     Basket mb = new Basket();
     if ((serialBasket == null) || (serialBasket == "")) return mb;
     string[] r = serialBasket.Split(',');
     for (int i = 0; i < r.Length; i++)
     {
         if (r[i] == "") continue;
         mb.Add(r[i]);
     }
     return mb;
 }
Example #9
0
 public static string SerializeToString(Basket b)
 {
     List<string> s = new List<string>();
     for (int i = 0; i < b.Count; i++) s.Add(b[i]);
     return string.Join(",", s.ToArray());
 }
        private void RegisterViewsAndServices()
        {
            // 0. intialize tickqueue and basket
            _tickqueue = new BlockingCollection<Tick>(_configmanagerservice.TickQueueCapacity);
            _basket = Basket.DeserializeFromXML(Util.GetRootPath() + _configmanagerservice.SettingPath + "basket.xml");

            // 1. BrokerService, no need to register
            _brokerservice = new BrokerService(_configmanagerservice, _eventAggregator, _logger, _globalidservice, _tickqueue, _basket);

            // 2. Tick arichive service, no need to register
            _tickarchiveservice = new TickArchiver(Util.GetRootPath() + _configmanagerservice.TickPath + _configmanagerservice.DefaultBroker);
            
            // 3. QuuoteDispatcher Service, no need to register
            _quotedispatcherservice = new QuoteDispatcherService(_quoteupdateservice, _feedstrategyservice, _tickarchiveservice, _logger, _tickqueue);
        }