示例#1
0
        public List<ForexDto> PrepareData(int splitPeriodSeconds)
        {
            var forexRecords = _forexCsvRepository.CsvLinesNormalized;
            var firstRecord = forexRecords[0];
            var options = ForexHelper.InitializeForexTrackData(firstRecord);
            int index = 0;
            var forexSplitData = new List<ForexDto>();
            var currentDto = new ForexDto
            {
                FileName = index.ToString(),
                ForexData = new List<ForexTreeData>()
            };
            DateTime differenceTime = DateTime.ParseExact(firstRecord.Date, "yyyyMMdd HH:mm:ss.fff", System.Globalization.CultureInfo.InvariantCulture);

            for (var i = 0; i < forexRecords.Count; i++)
            {
                var record = forexRecords[i];
                var dateTime = DateTime.ParseExact(record.Date, "yyyyMMdd HH:mm:ss.fff", System.Globalization.CultureInfo.InvariantCulture).Subtract(differenceTime);
                var seconds = (int)dateTime.TotalSeconds;
                if (seconds >= splitPeriodSeconds)
                {
                    if (i < forexRecords.Count)
                    {
                        differenceTime = DateTime.ParseExact(forexRecords[i + 1].Date, "yyyyMMdd HH:mm:ss.fff", System.Globalization.CultureInfo.InvariantCulture);
                    }
                    options = ForexHelper.InitializeForexTrackData(record, options);
                    forexSplitData.Add(currentDto);
                    ForexHelper.SetCorrectMarketActions(currentDto);
                    index++;
                    currentDto = new ForexDto
                    {
                        FileName = index.ToString(),
                        ForexData = new List<ForexTreeData>()
                    };
                }

                var treeRecord = ForexHelper.BuildForexTreeRecord(record, options);

                currentDto.ForexData.Add(treeRecord);
                options.CurrentRecord++;
            }

            if (forexSplitData.Contains(currentDto))
            {
                return forexSplitData;
            }

            forexSplitData.Add(currentDto);
            ForexHelper.SetCorrectMarketActions(currentDto);

            return forexSplitData;
        }
示例#2
0
 public static void SetCorrectMarketActions(ForexDto currentDto)
 {
     const int ticks = 30;
     var forexData = currentDto.ForexData;
     for (var i = 0; i < forexData.Count; i++)
     {
         var record = forexData[i];
         if (record.Action != default(MarketAction))
         {
             continue;
         }
         var baseBid = record.Bid;
         var maxDifference = 0.0;
         var maxIndex = -1;
         for (var j = 1; j < ticks; j++)
         {
             var index = i + j;
             if (index >= forexData.Count)
             {
                 continue;
             }
             var observableRecord = forexData[index];
             var ask = observableRecord.Ask;
             var difference = baseBid - ask;
             if (observableRecord.Action == default(MarketAction) && difference > maxDifference)
             {
                 maxDifference = difference;
                 maxIndex = index;
             }
         }
         if (maxIndex > -1)
         {
             record.Action = MarketAction.Buy;
             forexData[maxIndex].Action = MarketAction.Sell;
         }
         else
         {
             record.Action = MarketAction.Hold;
         }
     }
 }