/// <summary> /// прогрузить с самого начала /// </summary> private void ProcessAll(List <Candle> candles) { if (candles == null) { return; } ValuesUp = new List <decimal>(); ValuesDown = new List <decimal>(); _t1 = new List <decimal>(); _t2 = new List <decimal>(); _tM1 = new MovingAverage(false); _tM1.Lenght = P2; _tM1.TypeCalculationAverage = TypeCalculationAverage; _tM2 = new MovingAverage(false); _tM2.Lenght = P2; _tM2.TypeCalculationAverage = TypeCalculationAverage; _k = new List <decimal>(); _kM = new MovingAverage(false); _kM.Lenght = P3; _kM.TypeCalculationAverage = TypeCalculationAverage; for (int i = 0; i < candles.Count; i++) { _t1.Add(GetT1(candles, i)); _t2.Add(GetT2(candles, i)); _tM1.Process(_t1); _tM2.Process(_t2); _k.Add(GetK(i)); _kM.Process(_k); ValuesUp.Add(Math.Round(_k[_k.Count - 1], 2)); ValuesDown.Add(Math.Round(_kM.Values[_kM.Values.Count - 1], 2)); } }
/// <summary> /// рассчитать индикатор /// </summary> /// <param name="candles">свечи</param> public void Process(List <Candle> candles) { _myCandles = candles; if (_trixMa1 == null || _trixMa2 == null) { _vtrixMa1 = new List <decimal>(); _vtrixMa2 = new List <decimal>(); _vtrixMa3 = new List <decimal>(); _trixMa1 = new MovingAverage(false); _trixMa1.Lenght = Period; _trixMa1.TypePointsToSearch = TypePoint; _trixMa1.TypeCalculationAverage = TypeCalculationAverage; _trixMa2 = new MovingAverage(false); _trixMa2.Lenght = Period; _trixMa2.TypePointsToSearch = TypePoint; _trixMa2.TypeCalculationAverage = TypeCalculationAverage; _trixMa3 = new MovingAverage(false); _trixMa3.Lenght = Period; _trixMa3.TypePointsToSearch = TypePoint; _trixMa3.TypeCalculationAverage = TypeCalculationAverage; } if (Values != null && Values.Count + 1 == candles.Count) { ProcessOne(candles); } else if (Values != null && Values.Count == candles.Count) { ProcessLast(candles); } else { ProcessAll(candles); } }
/// <summary> /// take lower value /// взять значение нижнее /// </summary> /// <param name="candles">candles/свечи</param> /// <param name="index">index/индекс</param> /// <returns>alligator bottom line/нижняя линия аллигатора по индексу</returns> private decimal GetValueDown(List <Candle> candles, int index) { if (index == 0) { _maDown = new MovingAverage(false) { TypeCalculationAverage = TypeCalculationAverage, Lenght = LenghtDown, TypePointsToSearch = PriceTypePoints.Median }; } _maDown.Process(candles); if (_maDown.Values.Count - 1 <= ShiftDown) { return(0); } return(_maDown.Values[_maDown.Values.Count - 1 - ShiftDown]); }
/// <summary> /// прогрузить с самого начала /// </summary> private void ProcessAll(List <Candle> candles) { if (candles == null) { return; } Values = new List <decimal>(); _fi = new List <decimal>(); _movingAverage = new MovingAverage(false); _movingAverage.Lenght = Period; _movingAverage.TypePointsToSearch = TypePoint; _movingAverage.TypeCalculationAverage = TypeCalculationAverage; for (int i = 0; i < candles.Count; i++) { _fi.Add(GetRange(candles, i)); _movingAverage.Process(_fi); Values.Add(GetValue(candles, i)); } }
/// <summary> /// конструктор без параметров. Индикатор не будет сохраняться /// используется ТОЛЬКО для создания составных индикаторов /// не используйте его из слоя создания роботов! /// </summary> /// <param name="canDelete">можно ли пользователю удалить индикатор с графика вручную</param> public MacdLine(bool canDelete) { Name = Guid.NewGuid().ToString(); TypeIndicator = IndicatorOneCandleChartType.Line; ColorUp = Color.DodgerBlue; ColorDown = Color.DarkRed; PaintOn = true; _maShort = new MovingAverage(false) { Lenght = 12, TypeCalculationAverage = MovingAverageTypeCalculation.Exponential }; _maLong = new MovingAverage(false) { Lenght = 26, TypeCalculationAverage = MovingAverageTypeCalculation.Exponential }; _maSignal = new MovingAverage(false) { Lenght = 9, TypeCalculationAverage = MovingAverageTypeCalculation.Simple }; CanDelete = canDelete; }
/// <summary> /// прогрузить с самого начала /// </summary> private void ProcessAll(List <Candle> candles) { if (candles == null) { return; } Values = new List <decimal>(); _vtrixMa1 = new List <decimal>(); _vtrixMa2 = new List <decimal>(); _vtrixMa3 = new List <decimal>(); _trixMa1 = new MovingAverage(false); _trixMa1.Lenght = Period; _trixMa1.TypePointsToSearch = TypePoint; _trixMa1.TypeCalculationAverage = TypeCalculationAverage; _trixMa2 = new MovingAverage(false); _trixMa2.Lenght = Period; _trixMa2.TypePointsToSearch = TypePoint; _trixMa2.TypeCalculationAverage = TypeCalculationAverage; _trixMa3 = new MovingAverage(false); _trixMa3.Lenght = Period; _trixMa3.TypePointsToSearch = TypePoint; _trixMa3.TypeCalculationAverage = TypeCalculationAverage; _trixMa1.Process(candles); for (int i = 0; i < candles.Count; i++) { _vtrixMa1.Add(GetMa(i)); _trixMa2.Process(_vtrixMa1); _vtrixMa2.Add(GetMa2(i)); _trixMa3.Process(_vtrixMa2); _vtrixMa3.Add(GetMa3(i)); Values.Add(GetValue(i)); } }
/// <summary> /// reload indicator /// перезагрузить индикатор /// </summary> public void Reload() { if (_myCandles == null) { return; } _longSma = new MovingAverage(false) { Lenght = LenghtLong, TypeCalculationAverage = TypeCalculationAverage, TypePointsToSearch = PriceTypePoints.Median }; _shortSma = new MovingAverage(false) { Lenght = LenghtShort, TypeCalculationAverage = TypeCalculationAverage, TypePointsToSearch = PriceTypePoints.Median }; Values = null; ProcessAll(_myCandles); if (NeadToReloadEvent != null) { NeadToReloadEvent(this); } }
/// <summary> /// конструктор с уникальным именем. Индикатор будет сохраняться /// </summary> /// <param name="uniqName">уникальное имя</param> /// <param name="canDelete">можно ли пользователю удалить индикатор с графика вручную</param> public Envelops(string uniqName, bool canDelete) { Name = uniqName; TypeIndicator = IndicatorOneCandleChartType.Line; ColorUp = Color.DodgerBlue; ColorDown = Color.DarkRed; PaintOn = true; Deviation = 2; if (!File.Exists(@"Engine\" + Name + @".txt")) {// если у нас первая загрузка _maSignal = new MovingAverage(uniqName + "maSignal", false) { Lenght = 9, TypeCalculationAverage = MovingAverageTypeCalculation.Simple }; } else { _maSignal = new MovingAverage(uniqName + "maSignal", false); } CanDelete = canDelete; Load(); }
/// <summary> /// прогрузить с самого начала /// </summary> private void ProcessAll(List <Candle> candles) { if (candles == null) { return; } Values = new List <decimal>(); _ao = new AwesomeOscillator(false); _ao.LenghtLong = LenghtLong; _ao.LenghtShort = LenghtShort; _ao.Process(candles); _movingAverage = new MovingAverage(false); _movingAverage.Lenght = LenghtShort; _movingAverage.Process(_ao.Values); for (int i = 0; i < candles.Count; i++) { Values.Add(GetValue(i)); } }
/// <summary> /// to upload from the beginning /// прогрузить с самого начала /// </summary> private void ProcessAll(List <Candle> candles) { if (candles == null) { return; } Values = new List <decimal>(); _range = new List <decimal>(); _movingCandle = new MovingAverage(false); _movingCandle.Lenght = LenghtMa; _movingCandle.Process(candles); _movingAverage = new MovingAverage(false); _movingAverage.Lenght = LenghtAverage; for (int i = 0; i < candles.Count; i++) { _range.Add(GetRange(candles, _movingCandle.Values, i)); _movingAverage.Process(_range); Values.Add(GetValue(candles, i)); } }
/// <summary> /// прогрузить с самого начала /// </summary> private void ProcessAll(List <Candle> candles) { if (candles == null) { return; } Values = new List <decimal>(); if (_shortSma == null) { _longSma = new MovingAverage(false) { Lenght = LenghtLong, TypeCalculationAverage = TypeCalculationAverage, TypePointsToSearch = PriceTypePoints.Median }; _shortSma = new MovingAverage(false) { Lenght = LenghtShort, TypeCalculationAverage = TypeCalculationAverage, TypePointsToSearch = PriceTypePoints.Median }; } else { if (_shortSma.Values != null) { _shortSma.Values.Clear(); _longSma.Values.Clear(); } } List <Candle> newCandles = new List <Candle>(); for (int i = 0; i < candles.Count; i++) { newCandles.Add(candles[i]); Values.Add(GetValueSimple(newCandles, newCandles.Count - 1)); } }
/// <summary> /// конструктор с уникальным именем. Индикатор будет сохраняться /// </summary> /// <param name="uniqName">уникальное имя</param> /// <param name="canDelete">можно ли пользователю удалить индикатор с графика вручную</param> public MacdLine(string uniqName, bool canDelete) { Name = uniqName; TypeIndicator = IndicatorOneCandleChartType.Line; ColorUp = Color.DodgerBlue; ColorDown = Color.DarkRed; PaintOn = true; if (!File.Exists(@"Engine\" + Name + @".txt")) {// если у нас первая загрузка _maShort = new MovingAverage(uniqName + "ma1", false) { Lenght = 12, TypeCalculationAverage = MovingAverageTypeCalculation.Exponential }; _maLong = new MovingAverage(uniqName + "ma2", false) { Lenght = 26, TypeCalculationAverage = MovingAverageTypeCalculation.Exponential }; _maSignal = new MovingAverage(uniqName + "maSignal", false) { Lenght = 9, TypeCalculationAverage = MovingAverageTypeCalculation.Simple }; _maShort.Save(); _maLong.Save(); _maSignal.Save(); } else { _maShort = new MovingAverage(uniqName + "ma1", false); _maLong = new MovingAverage(uniqName + "ma2", false); _maSignal = new MovingAverage(uniqName + "maSignal", false); } CanDelete = canDelete; Load(); }
/// <summary> /// constructor without parameters.Indicator will not saved/конструктор без параметров. Индикатор не будет сохраняться /// used ONLY to create composite indicators/используется ТОЛЬКО для создания составных индикаторов /// Don't use it from robot creation layer/не используйте его из слоя создания роботов! /// </summary> /// <param name="canDelete">whether user can remove indicator from chart manually/можно ли пользователю удалить индикатор с графика вручную</param> public MovingChanel(bool canDelete) { Name = Guid.NewGuid().ToString(); TypeIndicator = IndicatorChartPaintType.Line; ColorUp = Color.DodgerBlue; ColorDown = Color.DarkRed; PaintOn = true; Deviation = 100; MaLenth = 9; MovingShadowBody = new MovingAverage(false) { Lenght = 9, TypeCalculationAverage = MovingAverageTypeCalculation.Simple, TypePointsToSearch = PriceTypePoints.ShadowBody }; MovingUp = new MovingAverage(false) { Lenght = 9, TypeCalculationAverage = MovingAverageTypeCalculation.Simple, TypePointsToSearch = PriceTypePoints.High }; MovingDown = new MovingAverage(false) { Lenght = 9, TypeCalculationAverage = MovingAverageTypeCalculation.Simple, TypePointsToSearch = PriceTypePoints.Low }; CanDelete = canDelete; }
/// <summary> /// конструктор с уникальным именем. Индикатор будет сохраняться /// </summary> /// <param name="uniqName">уникальное имя</param> /// <param name="movingShort">короткий мувинг</param> /// <param name="movingLong">длинный мувинг</param> /// <param name="movingSignal">сигнальный мувинг</param> /// <param name="canDelete">можно ли пользователю удалить индикатор с графика вручную</param> public MacdHistogram(string uniqName, MovingAverage movingShort, MovingAverage movingLong, MovingAverage movingSignal, bool canDelete) { Name = uniqName; TypeIndicator = IndicatorOneCandleChartType.Column; ColorUp = Color.DodgerBlue; ColorDown = Color.DarkRed; PaintOn = true; _maShort = movingShort; _maLong = movingLong; _maSignal = movingSignal; _maShort.Name = uniqName + "ma1"; _maLong.Name = uniqName + "ma12"; _maSignal.Name = uniqName + "maSignal"; CanDelete = canDelete; Load(); }