public virtual Entry GetEntry(string market, string symbol, SecurityType securityType, DateTimeZone overrideTimeZone = null) { Entry entry; var key = new SecurityDatabaseKey(market, symbol, securityType); if (!_entries.TryGetValue(key, out entry)) { if (!_entries.TryGetValue(new SecurityDatabaseKey(market, null, securityType), out entry)) { if (securityType == SecurityType.Base) { if (overrideTimeZone == null) { overrideTimeZone = TimeZones.Utc; Log.Error("MarketHoursDatabase.GetExchangeHours(): Custom data no time zone specified, default to UTC. " + key); } return(new Entry(overrideTimeZone, SecurityExchangeHours.AlwaysOpen(overrideTimeZone))); } Log.Error(string.Format("MarketHoursDatabase.GetExchangeHours(): Unable to locate exchange hours for {0}." + "Available keys: {1}", key, string.Join(", ", _entries.Keys))); throw new ArgumentException("Unable to locate exchange hours for " + key); } if (overrideTimeZone != null && !entry.ExchangeHours.TimeZone.Equals(overrideTimeZone)) { return(new Entry(overrideTimeZone, new SecurityExchangeHours(overrideTimeZone, entry.ExchangeHours.Holidays, entry.ExchangeHours.MarketHours))); } } return(entry); }
/// <summary> /// Creates a new instance of <see cref="SymbolProperties"/> from the specified csv line /// </summary> /// <param name="line">The csv line to be parsed</param> /// <param name="key">The key used to uniquely identify this security</param> /// <returns>A new <see cref="SymbolProperties"/> for the specified csv line</returns> private static SymbolProperties FromCsvLine(string line, out SecurityDatabaseKey key) { var csv = line.Split(','); key = new SecurityDatabaseKey( market: csv[0], symbol: csv[1], securityType: (SecurityType)Enum.Parse(typeof(SecurityType), csv[2], true)); return(new SymbolProperties( description: csv[3], quoteCurrency: csv[4], contractMultiplier: csv[5].ToDecimal(), pipSize: csv[6].ToDecimal())); }
/// <summary> /// Gets the symbol properties for the specified market/symbol/security-type /// </summary> /// <param name="market">The market the exchange resides in, i.e, 'usa', 'fxcm', ect...</param> /// <param name="symbol">The particular symbol being traded</param> /// <param name="securityType">The security type of the symbol</param> /// <param name="defaultQuoteCurrency">Specifies the quote currency to be used when returning a default instance of an entry is not found in the database</param> /// <returns>The symbol properties matching the specified market/symbol/security-type or null if not found</returns> public SymbolProperties GetSymbolProperties(string market, string symbol, SecurityType securityType, string defaultQuoteCurrency) { SymbolProperties symbolProperties; var key = new SecurityDatabaseKey(market, symbol, securityType); if (!_entries.TryGetValue(key, out symbolProperties)) { // now check with null symbol key if (!_entries.TryGetValue(new SecurityDatabaseKey(market, null, securityType), out symbolProperties)) { // no properties found, return object with default property values return(SymbolProperties.GetDefault(defaultQuoteCurrency)); } } return(symbolProperties); }