/// <summary> /// сохранить настройки в файл /// </summary> public void Save() { try { if (string.IsNullOrWhiteSpace(Name)) { return; } using (StreamWriter writer = new StreamWriter(@"Engine\" + Name + @".txt", false)) { TypeCalculationAverage = MovingAverageTypeCalculation.Simple; writer.WriteLine(P1); writer.WriteLine(P2); writer.WriteLine(P3); writer.WriteLine(TypeCalculationAverage); writer.WriteLine(); writer.WriteLine(ColorUp.ToArgb()); writer.WriteLine(ColorDown.ToArgb()); writer.WriteLine(PaintOn); writer.Close(); } } catch (Exception) { // отправить в лог } }
/// <summary> /// конструктор без параметров. Индикатор не будет сохраняться /// </summary> /// <param name="canDelete">можно ли пользователю удалить индикатор с графика вручную</param> public Trix(bool canDelete) { TypeIndicator = IndicatorOneCandleChartType.Line; TypePoint = PriceTypePoints.Close; TypeCalculationAverage = MovingAverageTypeCalculation.Exponential; Period = 9; ColorBase = Color.DodgerBlue; PaintOn = true; CanDelete = canDelete; }
/// <summary> /// конструктор без параметров. Индикатор не будет сохраняться /// </summary> /// <param name="canDelete">можно ли пользователю удалить индикатор с графика вручную</param> public StochasticOscillator(bool canDelete) { TypeIndicator = IndicatorOneCandleChartType.Line; TypeCalculationAverage = MovingAverageTypeCalculation.Simple; P1 = 5; P2 = 3; P3 = 3; ColorUp = Color.DodgerBlue; ColorDown = Color.DarkRed; PaintOn = true; CanDelete = canDelete; }
/// <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 Trix(bool canDelete) { Name = Guid.NewGuid().ToString(); TypeIndicator = IndicatorChartPaintType.Line; TypePoint = PriceTypePoints.Close; TypeCalculationAverage = MovingAverageTypeCalculation.Exponential; Period = 9; ColorBase = Color.DodgerBlue; PaintOn = true; CanDelete = canDelete; }
/// <summary> /// constructor with parameters. Indicator will be saved /// конструктор с параметрами. Индикатор будет сохраняться /// </summary> /// <param name="uniqName">unique name/уникальное имя</param> /// <param name="canDelete">whether user can remove indicator from chart manually/можно ли пользователю удалить индикатор с графика вручную</param> public Trix(string uniqName, bool canDelete) { Name = uniqName; TypeIndicator = IndicatorChartPaintType.Line; TypePoint = PriceTypePoints.Close; TypeCalculationAverage = MovingAverageTypeCalculation.Exponential; Period = 9; ColorBase = Color.DodgerBlue; PaintOn = true; 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 StochasticOscillator(bool canDelete) { Name = Guid.NewGuid().ToString(); TypeIndicator = IndicatorChartPaintType.Line; TypeCalculationAverage = MovingAverageTypeCalculation.Simple; P1 = 5; P2 = 3; P3 = 3; ColorUp = Color.DodgerBlue; ColorDown = Color.DarkRed; PaintOn = true; CanDelete = canDelete; }
/// <summary> /// overload last value /// прогрузить только последнюю свечку /// </summary> private void ProcessOne(List <decimal> values) { if (values == null) { return; } if (Values == null) { Values = new List <decimal>(); } if (TypeCalculationAverage == MovingAverageTypeCalculation.VolumeWeighted) { // ...it's not gonna weigh volume of arrays. Put another attribute // по объёму взвесить массив данных не выйдет. Ставим другой признак TypeCalculationAverage = MovingAverageTypeCalculation.Simple; } if (TypeCalculationAverage == MovingAverageTypeCalculation.Simple) { Values.Add(GetValueSimple(values, values.Count - 1)); } if (TypeCalculationAverage == MovingAverageTypeCalculation.Exponential) { Values.Add(GetValueExponential(values, values.Count - 1)); } if (TypeCalculationAverage == MovingAverageTypeCalculation.Weighted) { Values.Add(GetValueWeighted(values, values.Count - 1)); } if (TypeCalculationAverage == MovingAverageTypeCalculation.Radchenko) { Values.Add(GetValueRadchenko(Values, values, values.Count - 1)); } if (TypeCalculationAverage == MovingAverageTypeCalculation.Adaptive) { Values.Add(GetValueKaufmanAdaptive(values, values.Count - 1)); } }