コード例 #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;
                }
            }
        }