Lean
$LEAN_TAG$
CompositeTimeProvider.cs
1
/*
2
* QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals.
3
* Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation.
4
*
5
* Licensed under the Apache License, Version 2.0 (the "License");
6
* you may not use this file except in compliance with the License.
7
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
8
*
9
* Unless required by applicable law or agreed to in writing, software
10
* distributed under the License is distributed on an "AS IS" BASIS,
11
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
* See the License for the specific language governing permissions and
13
* limitations under the License.
14
*/
15
16
using
System;
17
using
System.Linq;
18
using
System.Collections.Generic;
19
20
namespace
QuantConnect.Lean.Engine.DataFeeds
21
{
22
/// <summary>
23
/// The composite time provider will source it's current time using the smallest time from the given providers
24
/// </summary>
25
public
class
CompositeTimeProvider
:
ITimeProvider
26
{
27
private
readonly
ITimeProvider
[] _timeProviders;
28
29
/// <summary>
30
/// Creates a new instance
31
/// </summary>
32
/// <param name="timeProviders">The time providers to use. Will default to the real time provider if empty</param>
33
public
CompositeTimeProvider
(IEnumerable<ITimeProvider> timeProviders)
34
{
35
_timeProviders = timeProviders.DefaultIfEmpty(
RealTimeProvider
.
Instance
).ToArray();
36
}
37
38
/// <summary>
39
/// Gets the current time in UTC
40
/// </summary>
41
/// <returns>The current time in UTC</returns>
42
public
DateTime
GetUtcNow
()
43
{
44
var result = DateTime.MaxValue;
45
for
(var i = 0; i < _timeProviders.Length; i++)
46
{
47
var utcNow = _timeProviders[i].GetUtcNow();
48
49
if
(utcNow < result)
50
{
51
// we return the smallest
52
result = utcNow;
53
}
54
}
55
return
result;
56
}
57
}
58
}
Engine
DataFeeds
CompositeTimeProvider.cs
Generated by
1.8.17