示例#1
0
        private static double CalculateRsi(RestrictedQueue <PriceRsi> currentPairs)
        {
            var u = 0f;
            var d = 0f;

            for (var i = 1; i < currentPairs.MaxQueueLength; i++)
            {
                var deltaPrice = currentPairs.ElementAt(i).Price - currentPairs.ElementAt(i - 1).Price;
                if (deltaPrice < 0)
                {
                    d -= deltaPrice;
                }
                else
                {
                    u += deltaPrice;
                }
            }

            var rsi = (u == 0 && d == 0) ? 50 : 100 * u / (u + d);

            return(rsi);
        }
示例#2
0
        /// <summary>
        /// Проверяет, является ли средний элемент в "queue" локальным экстремумом
        /// </summary>
        private void CheckExtremum(RestrictedQueue <CandleData> queue)
        {
            bool isMax = true, isMin = true;

            // Проверяемая на экстремум свеча
            var checkingCandle = queue.ElementAt(ExtremumRange);

            for (var i = 0; i < queue.MaxQueueLength; i++)
            {
                if (i == ExtremumRange)
                {
                    continue;
                }
                var candle = queue.ElementAt(i);
                if (checkingCandle.close <= candle.close)
                {
                    isMax = false;
                }
                if (checkingCandle.close >= candle.close)
                {
                    isMin = false;
                }
                if (!isMax && !isMin)
                {
                    return;
                }
            }

            if (isMax)
            {
                extremumQueue.Add(new Cortege3 <float, bool, DateTime>(checkingCandle.close, true, checkingCandle.timeClose));
            }
            if (isMin)
            {
                extremumQueue.Add(new Cortege3 <float, bool, DateTime>(checkingCandle.close, false, checkingCandle.timeClose));
            }
        }
示例#3
0
        private static double CalculateRsi(RestrictedQueue<PriceRsi> currentPairs)
        {
            var u = 0f;
            var d = 0f;
            for (var i = 1; i < currentPairs.MaxQueueLength; i++)
            {
                var deltaPrice = currentPairs.ElementAt(i).Price - currentPairs.ElementAt(i - 1).Price;
                if (deltaPrice < 0)
                    d -= deltaPrice;
                else
                    u += deltaPrice;
            }

            var rsi = (u == 0 && d == 0) ? 50 : 100 * u / (u + d);
            return rsi;
        }
示例#4
0
        /// <summary>
        /// Проверяет, является ли средний элемент в "queue" локальным экстремумом
        /// </summary>
        private void CheckExtremum(RestrictedQueue<CandleData> queue)
        {
            bool isMax = true, isMin = true;

            // Проверяемая на экстремум свеча
            var checkingCandle = queue.ElementAt(ExtremumRange);

            for (var i = 0; i < queue.MaxQueueLength; i++)
            {
                if (i == ExtremumRange) continue;
                var candle = queue.ElementAt(i);
                if (checkingCandle.close <= candle.close) isMax = false;
                if (checkingCandle.close >= candle.close) isMin = false;
                if (!isMax && !isMin) return;
            }

            if (isMax) extremumQueue.Add(new Cortege3<float, bool, DateTime>(checkingCandle.close, true, checkingCandle.timeClose));
            if (isMin) extremumQueue.Add(new Cortege3<float, bool, DateTime>(checkingCandle.close, false, checkingCandle.timeClose));
        }