Example #1
0
        private static void LoadInfoFile(string infoPathName, Dictionary <DataSourceParam, string> infos)
        {
            string[] lines = File.ReadAllLines(infoPathName);
            foreach (string line in lines)
            {
                int idx = line.IndexOf('=');

                try
                {
                    DataSourceParam key = (DataSourceParam)
                                          Enum.Parse(typeof(DataSourceParam), line.Substring(0, idx), true);

                    string value = line.Substring(idx + 1);

                    infos[key] = value;
                }
                catch (Exception)
                {
                    throw new Exception(string.Format("error parsing data source info {0}: line '{1}", infoPathName, line));
                }
            }
        }
Example #2
0
            private void WriteCsv(string sourceName, IEnumerable <Bar> updateBars)
            {
                string updateFilePath = Path.Combine(Info[DataSourceParam.dataPath],
                                                     string.Format("{0:yyyy-MM-dd}-{1}.csv", updateBars.Select(b => b.Time).Max(), sourceName.ToLower()));

                DirectoryInfo d = new DirectoryInfo(Info[DataSourceParam.dataPath]);

                FileInfo[] files = d.GetFiles("*.*");
                if (files.Count() > 0 &&
                    files.Select(i => i.Name).OrderByDescending(n => n).FirstOrDefault().CompareTo(updateFilePath) > 0)
                {
                    // try filename at end of the alphabet
                    updateFilePath = Path.Combine(Info[DataSourceParam.dataPath],
                                                  string.Format("zzz-{0:yyyy-MM-dd}-{1}.csv", updateBars.Select(b => b.Time).Max(), sourceName.ToLower()));
                }


                if (Directory.Exists(Info[DataSourceParam.dataPath]) &&
                    !File.Exists(updateFilePath))
                {
                    using (StreamWriter writer = new StreamWriter(updateFilePath))
                    {
#if true
                        //--- find mapping
                        Dictionary <int, DataSourceParam> mapping = new Dictionary <int, DataSourceParam>();
                        for (int column = 1; column < 20; column++)
                        {
                            string map1 = string.Format("{{{0}}}", column);
                            string map2 = string.Format("{{{0}:", column);

                            DataSourceParam value = Info
                                                    .Where(i => i.Value.Contains(map1) || i.Value.Contains(map2))
                                                    .Select(i => i.Key)
                                                    .FirstOrDefault();

                            if (value != default(DataSourceParam))
                            {
                                mapping[column] = value;
                            }
                        }

                        //--- write header row
                        int highestColumn = mapping.Keys.Max(i => i);
                        for (int column = 1; column <= highestColumn; column++)
                        {
                            if (mapping.ContainsKey(column))
                            {
                                writer.Write("{0},", mapping[column]);
                            }
                            else
                            {
                                writer.Write(",");
                            }
                        }
                        writer.WriteLine();

                        //--- write bars
                        foreach (Bar bar in updateBars)
                        {
                            for (int column = 1; column <= highestColumn; column++)
                            {
                                if (mapping.ContainsKey(column))
                                {
                                    DataSourceParam prop  = mapping[column];
                                    object          value = null;
                                    switch (prop)
                                    {
                                    case DataSourceParam.date:
                                        value = bar.Time.Date;
                                        break;

                                    case DataSourceParam.time:
                                        value = bar.Time.TimeOfDay;
                                        break;

                                    case DataSourceParam.open:
                                        value = bar.Open;
                                        break;

                                    case DataSourceParam.high:
                                        value = bar.High;
                                        break;

                                    case DataSourceParam.low:
                                        value = bar.Low;
                                        break;

                                    case DataSourceParam.close:
                                        value = bar.Close;
                                        break;

                                    case DataSourceParam.volume:
                                        value = bar.Volume;
                                        break;

                                    case DataSourceParam.bid:
                                        value = bar.Bid;
                                        break;

                                    case DataSourceParam.ask:
                                        value = bar.Ask;
                                        break;

                                    case DataSourceParam.bidSize:
                                        value = bar.BidVolume;
                                        break;

                                    case DataSourceParam.askSize:
                                        value = bar.AskVolume;
                                        break;

                                    case DataSourceParam.optionExpiration:
                                        value = bar.OptionExpiry;
                                        break;

                                    case DataSourceParam.optionStrike:
                                        value = bar.OptionStrike;
                                        break;

                                    case DataSourceParam.optionRight:
                                        value = bar.OptionIsPut ? "P" : "C";
                                        break;
                                    }
                                    writer.Write(Info[prop], Enumerable.Range(1, 20).Select(i => value).ToArray());
                                }
                                writer.Write(",");
                            }
                            writer.WriteLine();
                        }
#else
                        writer.WriteLine("Date,Open,High,Low,Close,Volume");

                        foreach (Bar bar in updateBars)
                        {
                            writer.WriteLine("{0:MM/dd/yyyy},{1},{2},{3},{4},{5}",
                                             bar.Time, bar.Open, bar.High, bar.Low, bar.Close, bar.Volume);
                        }
#endif
                    }
                }
            }