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); }
/// <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)); } }
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; }
/// <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)); }