Esempio n. 1
0
        private static bool IsTransformationValid(PeriodOption inputPeriod, PeriodOption outputPeriod)
        {
            var inputInstance  = inputPeriod.CreateInstance();
            var outputInstance = outputPeriod.CreateInstance();

            if (inputInstance is IIntradayPeriod input)
            {
                return(!(outputInstance is IIntradayPeriod output) || (input.NumberOfSecond < output.NumberOfSecond));
            }

            var input2 = inputInstance as IInterdayPeriod;

            if (outputInstance is IIntradayPeriod output2)
            {
                return(false);
            }

            var output3 = outputInstance as IInterdayPeriod;

            if (input2.OrderOfTransformation >= output3.OrderOfTransformation)
            {
                return(false);
            }

            return(true);
        }
Esempio n. 2
0
        public static Equity Transform(this Equity sourceEquity, PeriodOption targetPeriod)
        {
            if (sourceEquity.Period == targetPeriod)
            {
                return(sourceEquity);
            }

            if (!IsTransformationValid(sourceEquity.Period, targetPeriod))
            {
                throw new InvalidTransformationException(sourceEquity.Period, targetPeriod);
            }

            var candles        = new List <Candle>();
            var periodInstance = targetPeriod.CreateInstance();

            DateTime startTime = sourceEquity.First().DateTime;

            while (startTime <= sourceEquity.Last().DateTime)
            {
                var nextStartTime = periodInstance.NextTimestamp(startTime);
                if (periodInstance.IsTimestamp(startTime))
                {
                    var candle = ComputeCandle(sourceEquity, startTime, nextStartTime);
                    if (candle != null)
                    {
                        candles.Add(candle);
                    }
                }
                startTime = nextStartTime;
            }

            return(new Equity(sourceEquity.Name, candles, targetPeriod));
        }