示例#1
0
        /// <summary>
        /// Add a new supported granularity to an existing instrument
        /// </summary>
        /// <param name="instrumentName">Name of the instrument to add the granularity to</param>
        /// <param name="granularity">Granularity to add</param>
        /// <returns>The whole instrument with the new granularity added</returns>
        public Contracts.Instrument AddGranularity(Contracts.InstrumentName instrumentName, Contracts.InstrumentGranularityCreation granularity)
        {
            // Check if instrument is in the DB
            var instrumentInDb = GetInstumentFromDbByName(instrumentName);

            if (instrumentInDb == null)
            {
                throw new ProblemDetailsException(HttpStatusCode.NotFound, $"Instrument '{instrumentName}' not found.");
            }

            // Check if granularity is in DB
            var granularityInDb = GetGranularityFromDbByName(instrumentName, granularity.Granularity);

            if (granularityInDb != null)
            {
                // If yes just return the whole instrument object
                return(_mapper.Map <Database.Instrument, Contracts.Instrument>(instrumentInDb));
            }

            // If not then create it in the DB
            var granularityToAdd = _mapper.Map <Contracts.InstrumentGranularityCreation, Database.InstrumentGranularity>(granularity);

            granularityToAdd.State = Database.GranularityState.New; // With the state of new
            instrumentInDb.Granularities.Add(granularityToAdd);
            _dbContext.Update(instrumentInDb);
            _dbContext.SaveChanges();

            // Return the entity saved in the DB
            return(_mapper.Map <Database.Instrument, Contracts.Instrument>(instrumentInDb));
        }
示例#2
0
 private async Task PostCandlesToTheEngine(Contracts.InstrumentName instrument, Contracts.Granularity granularity, IEnumerable <Contracts.Candle> candles)
 {
     var client = _httpClientFactory.CreateClient(_configuration["forex-miner-thor:Name"]);
     await _retryPolicy.ExecuteAsync(async() =>
     {
         await client.PostAsync($"instruments/{instrument}/granularities/{granularity}", CreateHttpContent(candles));
     });
 }
示例#3
0
        /// <summary>
        /// Get the candles in monthly packages
        /// </summary>
        /// <returns>Candles in a month</returns>
        private async Task <ICollection <Contracts.Candle> > GetCandlesBetween(Contracts.InstrumentName instrument, Contracts.Granularity granularity, DateTime utcFrom, DateTime utcTo)
        {
            // Authenticate to OANDA with the master account
            var oandaConnection = _oandaApiConnectionFactory.CreateConnection(OandaConnectionType.FxPractice, _configuration["Oanda-MasterToken"]);

            // Get candles
            var oandaInstrument  = _mapper.Map <InstrumentName>(instrument);
            var oandaGranularity = _mapper.Map <CandlestickGranularity>(granularity);
            var candles          = await oandaConnection.GetInstrument(oandaInstrument).GetCandlesByTimeAsync(oandaGranularity, utcFrom, utcTo);

            return(_mapper.Map <ICollection <Contracts.Candle> >(candles));
        }
示例#4
0
 /// <summary>
 /// Get granularity from DB
 /// </summary>
 /// <param name="instrumentName">Name of the instrument</param>
 /// <param name="granularityName">Granularity</param>
 /// <returns>Granularity</returns>
 private Database.InstrumentGranularity GetGranularityFromDbByName(Contracts.InstrumentName instrumentName, Contracts.Granularity granularityName)
 {
     return(_dbContext.Instruments.Include(instrument => instrument.Granularities)
            .SingleOrDefault(instrument => instrument.Name == instrumentName)?.Granularities
            .SingleOrDefault(granularity => granularity.Granularity == granularityName));
 }
示例#5
0
 /// <summary>
 /// Get an instrument from the DB by it's name
 /// </summary>
 /// <param name="name">Name of the instrument</param>
 /// <returns>Instrument in DB</returns>
 private Database.Instrument GetInstumentFromDbByName(Contracts.InstrumentName name)
 {
     return(_dbContext.Instruments.SingleOrDefault(instrument => instrument.Name == name));
 }