17 using System.Collections.Generic;
18 using System.Globalization;
80 private static DateTime _lastApiCall = DateTime.MinValue;
81 private static TimeSpan _msSinceLastCall = TimeSpan.MaxValue;
83 private readonly
string _baseUrl =
@"https://api.intrinio.com/historical_data.csv?";
88 private bool _backtestingFirstTimeCallOrLiveMode =
true;
103 _dataTransformation = dataTransformation;
109 InvalidOperationException(
"Please set a valid Intrinio user and password using the 'IntrinioEconomicData.SetUserAndPassword' static method. " +
110 "For local backtesting, the user and password can be set in the 'parameters' fields from the 'config.json' file.");
135 if (_backtestingFirstTimeCallOrLiveMode)
141 _backtestingFirstTimeCallOrLiveMode =
false || isLiveMode;
142 subscription = GetIntrinioSubscription(config, isLiveMode);
165 var obs = line.Split(
',');
166 var time = DateTime.MinValue;
167 if (!DateTime.TryParseExact(obs[0],
"yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None,
168 out time))
return null;
169 var value = obs[1].ToDecimal();
182 switch (dataTransformation)
191 item =
"c_annual_roc";
194 item =
"cc_annual_roc";
206 item =
"percent_change";
209 item =
"yr_percent_change";
218 var order = isLiveMode ?
"desc" :
"asc";
219 var item = GetStringForDataTransformation(_dataTransformation);
220 var url = $
"{_baseUrl}identifier={config.Symbol.Value}&item={item}&sort_order={order}";
221 var byteKey = Encoding.ASCII.GetBytes($
"{IntrinioConfig.User}:{IntrinioConfig.Password}");
222 var authorizationHeaders =
new List<KeyValuePair<string, string>>
224 new KeyValuePair<string, string>(
"Authorization",
225 $
"Basic ({Convert.ToBase64String(byteKey)})")
229 authorizationHeaders);