//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; } }
//********************************* 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) { }
/// <summary> /// clone a basket /// </summary> /// <param name="copy"></param> public Basket(Basket copy) { foreach (string s in copy) Add(s); Name = copy.Name; }
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(); }
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; }
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); }