public void Merge(PreCalculatedFeatures newPcs) { foreach (KeyValuePair <DateTime, Dictionary <string, double?> > bar in newPcs.Data) { if (!Data.ContainsKey(bar.Key)) { Data.Add(bar.Key, bar.Value); } else { Data[bar.Key] = bar.Value; } } }
public static void LoadExternalFeatureBinary(Asset asset, ExternalFeatureData externalFeature, MessageDelegate messageDelegate) { //Read the results into the bars from the binary file that python has written over PreCalculatedFeatures pcFeatures = new PreCalculatedFeatures(); //[ASSET] is used as a placeholder so insert the assetname here string filename = externalFeature.BinaryFilepath.Replace("[ASSET]", asset.Name); byte[] bytes = File.ReadAllBytes(filename); //Traverse the byte array to add in the values to the Data attribute of the corresponding bar int i = 0; while (i < bytes.Length) { //Read the required data from the byte array and increment the index long timestamp = BitConverter.ToInt64(bytes, i); i += 8; //convert from python to .net date DateTime dt = DateTime.FromBinary(timestamp / 100).AddYears(1969); //Add a new bar Dictionary <string, double?> barData = new Dictionary <string, double?>(); pcFeatures.Data.Add(dt, barData); foreach (string field in externalFeature.FieldNames) { double val = BitConverter.ToDouble(bytes, i); barData.Add(field, val); i += 8; } } //add this data to the asset (or overwrite if exists) if (!asset.Data.ContainsKey(externalFeature.Timeframe)) { asset.Data.Add(externalFeature.Timeframe, pcFeatures); } else { asset.Data[externalFeature.Timeframe] = pcFeatures; } }