ECSSH1 (RawLegacyMarketDepth)
Please comment
1. Why are there so many different messages on ECSSH1?
2. What is "Start date"?
3. Why is "Start date" the same as "Expiration Date"? 03/14/2011
4. Why is there no date for "Start dat" on the first line?
5. Why "Change date 03/18/2011" but "Expiration Date 03/14/2011"?
6. What is ECSSH1 ^ 1?
code:
using System;
using System.Linq;
using System.Diagnostics;
using System.IO;
using ThomsonReuters.Dss.Api.StandardExtractions;
using ThomsonReuters.Dss.Api;
using ThomsonReuters.Dss.Api.Content;
using ThomsonReuters.Dss.Api.Extractions;
using ThomsonReuters.Dss.Api.Extractions.ExtractionRequests;
using ThomsonReuters.Dss.Api.Extractions.ReportExtractions;
using ThomsonReuters.Dss.Api.Extractions.ReportTemplates;
using ThomsonReuters.Dss.Api.Extractions.Schedules;
using ThomsonReuters.Dss.Api.Extractions.SubjectLists;
using ThomsonReuters.Dss.Api.Search;
using ThomsonReuters.Dss.Core.RestApi;
using System.Text;
using ICSharpCode.SharpZipLib.GZip;
namespace RefinitivHistoryTesting
{
class Program
{
static void Main(string[] args)
{
//-----------------------------------------------------------------
//Connect and authenticate to the DSS server:
//-----------------------------------------------------------------
Uri dssUri = new Uri("https://hosted.datascopeapi.reuters.com/RestApi/v1/");
string dssUserName = "***";
string dssUserPassword = "****";
var out_dir = @.\Storage\;
var SearchContext = new SearchContext(dssUri, dssUserName, dssUserPassword);
var ExtractionsContext = new ExtractionsContext(dssUri, dssUserName, dssUserPassword);
ExtractionsContext.Options.AutomaticDecompression = false;
try
{
ExtractionsContext.DefaultRequestHeaders.Add("x-direct-download", "true");
}
catch (Exception)
{ }
var availableMbPFields = ExtractionsContext.GetValidContentFieldTypes(ReportTemplateTypes.TickHistoryRaw);
var availableTnSFields = ExtractionsContext.GetValidContentFieldTypes(ReportTemplateTypes.TickHistoryTimeAndSales);
var dateRange = DateTimeRange.Create(
new DateTimeOffset(2008, 01, 01, 0, 0, 0, TimeSpan.Zero),
new DateTimeOffset(2020, 12, 22, 0, 0, 0, TimeSpan.Zero));
var request = new HistoricalChainResolutionRequest
{
ChainRics = new[] { "0#ECSSH1" },//{ "0#ESH1"},//{ "0#ECSSH1" },//{ "0#1URO:" },
Range = dateRange
};
var chain_results = SearchContext.HistoricalChainResolution(request);
foreach (var chain in chain_results)
{
Console.WriteLine("Chain Identifier: {0} {1}, Constituents: {2}", chain.IdentifierType, chain.Identifier, chain.Constituents.Count());
foreach (var constituent in chain.Constituents)
{
var searchResults = SearchContext.HistoricalSearch(
HistoricalSearchRequest.Create(
constituent.Identifier, constituent.IdentifierType, dateRange, HistoricalResultsBy.Ric, null));
//foreach (var result in from pos in searchResults where pos.DomainCode == "8" select pos)
//foreach (var result in searchResults)
var result = searchResults.FirstOrDefault(pos => pos.Identifier.Contains("ECSSH1"));//("ESH1m"));//("ECSSH1"));
if (result != null)
{
var extractionDatesResult = ExtractionsContext.Extract(
new HistoricalReferenceExtractionRequest
{
ContentFieldNames = new DssCollection<string>()
{
"RIC", "Start date", "Change Date", "Expiration Date"
},
Condition = new HistoricalReferenceCondition
{
StartDate = result.FirstDate,
EndDate = result.LastDate
},
IdentifierList = new InstrumentIdentifierList
{
InstrumentIdentifiers = new[]
{
InstrumentIdentifier.Create(result.IdentifierType, result.Identifier)
},
ValidationOptions = new InstrumentValidationOptions
{
AllowHistoricalInstruments = true
},
UseUserPreferencesForValidationOptions = false
}
});
dynamic srcLastDate = null;
foreach (var content in extractionDatesResult)
foreach (var prop in content.DynamicProperties)
{
Console.WriteLine("{0}\t {1},\r", prop.Key, prop.Value);
if (srcLastDate == null && prop.Key == "Expiration Date" && prop.Value != null) srcLastDate = prop.Value;
}
dynamic lastDate = srcLastDate != null ? new DateTimeOffset(srcLastDate) : new DateTimeOffset(DateTime.UtcNow); //result.LastDate;
dynamic startDate = result.FirstDate;//lastDate.AddMonths(-1);//new DateTimeOffset(2020, 12, 22, 0, 0, 0, TimeSpan.Zero); //lastDate.AddMonths(-4);//result.FirstDate;
Console.WriteLine("{0},\t {1},\t {2},\t {3},\t {4}", result.Identifier, result.IdentifierType, startDate, lastDate, result.DomainCode);
var extractionResult = ExtractionsContext.ExtractRaw(
new TickHistoryMarketDepthExtractionRequest
{
Condition = new TickHistoryMarketDepthCondition
{
ReportDateRangeType = ReportDateRangeType.Range,
QueryStartDate = startDate, //new DateTimeOffset(2016, 07, 25, 20, 0, 0, TimeSpan.Zero),
QueryEndDate = lastDate, //new DateTimeOffset(2016, 08, 02, 19, 59, 59, TimeSpan.Zero),
ExtractBy = TickHistoryExtractByMode.Ric,
MessageTimeStampIn = TickHistoryTimeOptions.GmtUtc,
SortBy = TickHistorySort.SingleByRic,
View = TickHistoryMarketDepthViewOptions.LegacyLevel2,
DisplaySourceRIC = true
},
IdentifierList = new InstrumentIdentifierList
{
InstrumentIdentifiers = new[]
{
InstrumentIdentifier.Create(result.IdentifierType, result.Identifier)
},
ValidationOptions = new InstrumentValidationOptions
{
AllowHistoricalInstruments = true
}
},
});
string line;
var fileName = out_dir + "_" + result.Identifier + "_" + startDate.DateTime.ToString("dd.MM.yyyy") + "_" + lastDate.DateTime.ToString("dd.MM.yyyy") + "_RawLegacyMarketDepth.csv";
var sw = new StreamWriter(fileName, false);
var streamResponse = ExtractionsContext.GetReadStream(extractionResult);
using (GZipInputStream gzip = new GZipInputStream(streamResponse.Stream))
{
using (StreamReader reader = new StreamReader(gzip, Encoding.UTF8))
{
while ((line = reader.ReadLine()) != null)
{
sw.WriteLine(line);
}
}
}
sw.Close();
}
}
}
try
{
ExtractionsContext.DefaultRequestHeaders.Remove("x-direct-download");
}
catch (Exception)
{ }
Console.WriteLine("Press Enter to exit");
Console.ReadLine();
}
}
}