/// <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()); }
/// <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); }
public static SecurityId ToSecurityId(this OEC.API.Contract contract) { return(new SecurityId { SecurityCode = contract.Symbol, BoardCode = contract.Exchange.Name, }); }
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())); }
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())); }
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); }