Example #1
0
        /// <summary>
        /// To get the trading time by the instrument.
        /// </summary>
        /// <param name="contract">The OEC contract.</param>
        /// <returns>The list of time ranges of day (UTC), during which the instrument is traded.</returns>
        public static Range <TimeSpan>[] GetWorkingTimesUtc(this OEC.API.Contract contract)
        {
            // sometimes OEC returns timespans for working time > 24 hours (some internal oec date conversion problem)
            // all OEC StartTimes and StopTimes are in local timezone

            // convert back to UTC
            var offset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now);
            var cstart = new TimeSpan(contract.StartTime.Hours + 24, contract.StartTime.Minutes, contract.StartTime.Seconds) -
                         offset;
            var cstop = new TimeSpan(contract.StopTime.Hours + 24, contract.StopTime.Minutes, contract.StopTime.Seconds) - offset;

            cstart = new TimeSpan(cstart.Hours, cstart.Minutes, cstart.Seconds);
            cstop  = new TimeSpan(cstop.Hours, cstop.Minutes, cstop.Seconds);

            if (cstart == cstop)
            {
                return(new Range <TimeSpan> [0]);
            }

            if (cstart < cstop)
            {
                return(new[] { new Range <TimeSpan>(cstart, cstop) });
            }

            var times    = new List <Range <TimeSpan> >();
            var daybegin = new TimeSpan(0);

            if (cstop > daybegin)
            {
                times.Add(new Range <TimeSpan>(daybegin, cstop));
            }
            times.Add(new Range <TimeSpan>(cstart, new TimeSpan(24, 0, 0)));

            return(times.ToArray());
        }
Example #2
0
        /// <summary>
        /// To get <see cref="SecurityStates"/> for the instrument according to the <paramref name="contract" /> contract.
        /// </summary>
        /// <param name="contract">The OEC contract.</param>
        /// <returns>The instrument condition <see cref="SecurityStates"/>.</returns>
        public static SecurityStates GetSecurityState(this OEC.API.Contract contract)
        {
            var times = contract.GetWorkingTimesUtc();
            var now   = DateTime.UtcNow.TimeOfDay;

            return(times.IsEmpty() || times.Any(range => range.Contains(now)) ? SecurityStates.Trading : SecurityStates.Stoped);
        }
Example #3
0
 public static SecurityId ToSecurityId(this OEC.API.Contract contract)
 {
     return(new SecurityId
     {
         SecurityCode = contract.Symbol,
         BoardCode = contract.Exchange.Name,
     });
 }
Example #4
0
        public static decimal?Cast(this OEC.API.Contract contract, double value)
        {
            var d = value.ToDecimal();

            if (d == null)
            {
                return(null);
            }

            var priceStep = (decimal)contract.TickSize;

            return(MathHelper.Round(d.Value, priceStep, priceStep.GetCachedDecimals()));
        }
Example #5
0
        public static decimal Cast(this OEC.API.Contract contract, double value)
        {
            var d = value.SafeCast();

            if (d == 0)
            {
                return(0);
            }

            var priceStep = (decimal)contract.TickSize;

            return(MathHelper.Round((decimal)value, priceStep, priceStep.GetCachedDecimals()));
        }
Example #6
0
        public static SecurityTypes GetSecurityType(this OEC.API.Contract contract)
        {
            if (contract == null)
            {
                throw new ArgumentNullException(nameof(contract));
            }

            if (contract.IsCompound)
            {
                return(SecurityTypes.Index);
            }

            if (contract.IsContinuous)
            {
                return(SecurityTypes.Future);
            }

            if (contract.IsEquityAsset)
            {
                return(SecurityTypes.Stock);
            }

            if (contract.IsForex)
            {
                return(SecurityTypes.Currency);
            }

            if (contract.IsFuture)
            {
                return(SecurityTypes.Future);
            }

            if (contract.IsOption)
            {
                return(SecurityTypes.Option);
            }

            return(SecurityTypes.Stock);
        }