Пользовательские индикаторы > ФИЛЬТР КАЛМАНА!
ФИЛЬТР КАЛМАНА!
Привет всем.
Кто-то пробовал его прикрутить в АД?
Фильтр Калмана — мощный математический инструмент, используемый в различных областях, включая финансы, инженерию и робототехнику. Это рекурсивный алгоритм, который оценивает состояние динамической системы на основе зашумленных измерений.
Кто-то пробовал его прикрутить в АД?
Фильтр Калмана — мощный математический инструмент, используемый в различных областях, включая финансы, инженерию и робототехнику. Это рекурсивный алгоритм, который оценивает состояние динамической системы на основе зашумленных измерений.
Последний раз редактировалось Den 25 ноя 2024, 18:36, всего редактировалось 3 раза.
Re: ФИЛЬТР КАЛМАНА!
пытаюсь прикрутить его к своему индикатору.
не хочет.
имя GetVariable отсутствует в текущем контексте в строках 29,30,31,32
не хочет.
имя GetVariable отсутствует в текущем контексте в строках 29,30,31,32
Код: Выделить всё
function Initialize() {
// Установка имени индикатора
IndicatorName = "индикатор";
// Добавление входного параметра типа свечи
AddInput("Input", Inputs.Candle);
// Установка индикатора в область графика цены
PriceStudy = true;
// Добавление серий для отображения на графике
AddSeries("H", DrawAs.Custom, Color.Coral);
AddSeries("L", DrawAs.Custom, Color.LightGreen);
AddSeries("D", DrawAs.Custom, Color.HotPink); // Добавление серии D для визуальных маркеров
// Добавление параметров и глобальных переменных
AddParameter("P2", 0.21, "", 1);
AddGlobalVariable("CurrentPosition", Types.Int, 0);
// Инициализация переменных фильтра Калмана через AddGlobalVariable
AddGlobalVariable("kalmanEstimate", Types.Double, 0.0);
AddGlobalVariable("kalmanErrorCovariance", Types.Double, 1.0);
AddGlobalVariable("processNoise", Types.Double, 0.01);
AddGlobalVariable("measurementNoise", Types.Double, 1.0);
}
function Evaluate() {
// Получение глобальных переменных фильтра Калмана
var kalmanEstimate = GetVariable("kalmanEstimate");
var kalmanErrorCovariance = GetVariable("kalmanErrorCovariance");
var processNoise = GetVariable("processNoise");
var measurementNoise = GetVariable("measurementNoise");
// Визуальный маркер для начала выполнения функции Evaluate
D[0] = Input.Close[0]; // Отобразим линию для каждого выполнения Evaluate
// Логика фильтра Калмана для сглаживания High
kalmanErrorCovariance += processNoise;
var kalmanGainHigh = kalmanErrorCovariance / (kalmanErrorCovariance + measurementNoise);
kalmanEstimate = kalmanEstimate + kalmanGainHigh * (Input.High[0] - kalmanEstimate);
kalmanErrorCovariance = (1 - kalmanGainHigh) * kalmanErrorCovariance;
var smoothedHigh = kalmanEstimate;
// Обновление глобальных переменных фильтра Калмана
SetVariable("kalmanEstimate", kalmanEstimate);
SetVariable("kalmanErrorCovariance", kalmanErrorCovariance);
// Визуальный маркер для сглаженного High
H[0] = smoothedHigh;
H.DrawVertical(Color.Blue, LineStyles.Dot, 1);
// Логика фильтра Калмана для сглаживания Low (повторно используем ту же переменную kalmanEstimate)
kalmanErrorCovariance += processNoise;
var kalmanGainLow = kalmanErrorCovariance / (kalmanErrorCovariance + measurementNoise);
kalmanEstimate = kalmanEstimate + kalmanGainLow * (Input.Low[0] - kalmanEstimate);
kalmanErrorCovariance = (1 - kalmanGainLow) * kalmanErrorCovariance;
var smoothedLow = kalmanEstimate;
// Обновление глобальных переменных фильтра Калмана
SetVariable("kalmanEstimate", kalmanEstimate);
SetVariable("kalmanErrorCovariance", kalmanErrorCovariance);
// Визуальный маркер для сглаженного Low
L[0] = smoothedLow;
L.DrawVertical(Color.Green, LineStyles.Dot, 1);
// Сравнение значений индикаторов для поиска экстремумов
if (MY.индикатор(Input, P2).GetValue("W", 0) == MY.индикатор(Input).GetValue("H", 0)) {
H[0] = smoothedHigh;
H.DrawVertical(Color.OrangeRed, LineStyles.Dot, 1);
// Визуальный маркер для экстремума High
D[0] = smoothedHigh;
}
if (MY.индикатор(Input, P2).GetValue("W", 0) == MY.индикатор(Input).GetValue("L", 0)) {
L[0] = smoothedLow;
L.DrawVertical(Color.Aqua, LineStyles.Dot, 1);
// Визуальный маркер для экстремума Low
D[0] = smoothedLow;
}
}
Последний раз редактировалось Den 25 ноя 2024, 18:37, всего редактировалось 2 раза.
Re: ФИЛЬТР КАЛМАНА!
надеюсь Евгений поможет
Последний раз редактировалось Den 25 ноя 2024, 20:09, всего редактировалось 2 раза.
Re: ФИЛЬТР КАЛМАНА!
Есть где-то документация используемой среды, чтобы понять, как правильно управлять сериями и использовать их внутри разных функций?
Кроме древнего файлаTerminal 4.0. Skripti poljzova, v1.29, 2021-04-21
Кроме древнего файлаTerminal 4.0. Skripti poljzova, v1.29, 2021-04-21
Последний раз редактировалось Den 25 ноя 2024, 20:09, всего редактировалось 1 раз.
-
- Сообщения: 229
- Зарегистрирован: 28 июн 2017, 13:56
- Благодарил (а): 4 раза
- Поблагодарили: 41 раз
Re: ФИЛЬТР КАЛМАНА!
В далеком 2005м году писал систему целеуказания, Калманом считали траекторию цели.
Анонсирую - щас такой пост забабахаю, обчитаетесь, уже готовлю, по индикаторам
Анонсирую - щас такой пост забабахаю, обчитаетесь, уже готовлю, по индикаторам
Re: ФИЛЬТР КАЛМАНА!
ensh писал(а):В далеком 2005м году писал систему целеуказания, Калманом считали траекторию цели.
Анонсирую - щас такой пост забабахаю, обчитаетесь, уже готовлю, по индикаторам
ЖДЁМ!
-
- Сообщения: 229
- Зарегистрирован: 28 июн 2017, 13:56
- Благодарил (а): 4 раза
- Поблагодарили: 41 раз
Re: ФИЛЬТР КАЛМАНА!
Разобрался.
Вызов метода AddGlobalVariable добавляет к классу соответствующее поле.
Чтобы его использовать нужно просто писать его в коде без всяких уловок
То есть, ненужное я закоментарил:
Рефлектором в папке %appdata%/local/Alfa-direct/Scripts/Indicators/Bin посмотрел код скомпилированого индикатора "калман.alfa" но эта обычная C# dll
Вызов метода AddGlobalVariable добавляет к классу соответствующее поле.
Чтобы его использовать нужно просто писать его в коде без всяких уловок
То есть, ненужное я закоментарил:
Код: Выделить всё
function Initialize() {
// Установка имени индикатора
IndicatorName = "калман";
// Добавление входного параметра типа свечи
AddInput("Input", Inputs.Candle);
// Установка индикатора в область графика цены
PriceStudy = true;
// Добавление серий для отображения на графике
AddSeries("H", DrawAs.Custom, Color.Coral);
AddSeries("L", DrawAs.Custom, Color.LightGreen);
AddSeries("D", DrawAs.Custom, Color.HotPink); // Добавление серии D для визуальных маркеров
// Добавление параметров и глобальных переменных
AddParameter("P2", 0.21, "", 1);
AddGlobalVariable("CurrentPosition", Types.Int, 0);
// Инициализация переменных фильтра Калмана через AddGlobalVariable
AddGlobalVariable("kalmanEstimate", Types.Double, 0.0);
AddGlobalVariable("kalmanErrorCovariance", Types.Double, 1.0);
AddGlobalVariable("processNoise", Types.Double, 0.01);
AddGlobalVariable("measurementNoise", Types.Double, 1.0);
}
function Evaluate() {
// Получение глобальных переменных фильтра Калмана
//var kalmanEstimate = GetVariable("kalmanEstimate");
//var kalmanErrorCovariance = GetVariable("kalmanErrorCovariance");
//var processNoise = GetVariable("processNoise");
//var measurementNoise = GetVariable("measurementNoise");
// Визуальный маркер для начала выполнения функции Evaluate
D[0] = Input.Close[0]; // Отобразим линию для каждого выполнения Evaluate
// Логика фильтра Калмана для сглаживания High
kalmanErrorCovariance += processNoise;
var kalmanGainHigh = kalmanErrorCovariance / (kalmanErrorCovariance + measurementNoise);
kalmanEstimate = kalmanEstimate + kalmanGainHigh * (Input.High[0] - kalmanEstimate);
kalmanErrorCovariance = (1 - kalmanGainHigh) * kalmanErrorCovariance;
var smoothedHigh = kalmanEstimate;
// Обновление глобальных переменных фильтра Калмана
//SetVariable(kalmanEstimate", kalmanEstimate);
//SetVariable("kalmanErrorCovariance", kalmanErrorCovariance);
// Визуальный маркер для сглаженного High
H[0] = smoothedHigh;
H.DrawVertical(Color.Blue, LineStyles.Dot, 1);
// Логика фильтра Калмана для сглаживания Low (повторно используем ту же переменную kalmanEstimate)
kalmanErrorCovariance += processNoise;
var kalmanGainLow = kalmanErrorCovariance / (kalmanErrorCovariance + measurementNoise);
kalmanEstimate = kalmanEstimate + kalmanGainLow * (Input.Low[0] - kalmanEstimate);
kalmanErrorCovariance = (1 - kalmanGainLow) * kalmanErrorCovariance;
var smoothedLow = kalmanEstimate;
// Обновление глобальных переменных фильтра Калмана
//SetVariable("kalmanEstimate", kalmanEstimate);
//SetVariable("kalmanErrorCovariance", kalmanErrorCovariance);
// Визуальный маркер для сглаженного Low
L[0] = smoothedLow;
L.DrawVertical(Color.Green, LineStyles.Dot, 1);
// Сравнение значений индикаторов для поиска экстремумов
if (MY.индикатор(Input, P2).GetValue("W", 0) == MY.индикатор(Input).GetValue("H", 0)) {
H[0] = smoothedHigh;
H.DrawVertical(Color.OrangeRed, LineStyles.Dot, 1);
// Визуальный маркер для экстремума High
D[0] = smoothedHigh;
}
if (MY.индикатор(Input, P2).GetValue("W", 0) == MY.индикатор(Input).GetValue("L", 0)) {
L[0] = smoothedLow;
L.DrawVertical(Color.Aqua, LineStyles.Dot, 1);
// Визуальный маркер для экстремума Low
D[0] = smoothedLow;
}
}
Рефлектором в папке %appdata%/local/Alfa-direct/Scripts/Indicators/Bin посмотрел код скомпилированого индикатора "калман.alfa" но эта обычная C# dll
Код: Выделить всё
// MY._user_indicator_3a040000300400003b0400003c040000300400003d040000
using System.Drawing;
using AD.Common.DataStructures;
using TA.Script;
public class _user_indicator_3a040000300400003b0400003c040000300400003d040000 : ScriptedIndicator, IScriptedIndicator
{
private AdsInput __input_Input = new AdsInput
{
Name = "Input",
Type = DataPointsEnum.DpOhlcv
};
private AdsFuncParameter __P2 = new AdsFuncParameter("P2", enumAllowedTypes.Double, AdsFuncParameter.ExtractDouble(0.21), 1.0);
private XSeries __H = new XSeries
{
Name = "H",
Style = DrawAs.Custom,
Color = Color.Coral,
Visible = true
};
private XSeries __L = new XSeries
{
Name = "L",
Style = DrawAs.Custom,
Color = Color.LightGreen,
Visible = true
};
private XSeries __D = new XSeries
{
Name = "D",
Style = DrawAs.Custom,
Color = Color.HotPink,
Visible = true
};
public override AdsInput Input
{
get
{
return __input_Input;
}
set
{
SetInput(__input_Input, value);
}
}
[ParameterProperty]
public AdsFuncParameter P2
{
get
{
return __P2;
}
set
{
SetParameter(__P2, value);
}
}
public XSeries H
{
get
{
return __H;
}
set
{
SetSeries(__H, value);
}
}
public XSeries L
{
get
{
return __L;
}
set
{
SetSeries(__L, value);
}
}
public XSeries D
{
get
{
return __D;
}
set
{
SetSeries(__D, value);
}
}
[GlobalVariable]
protected int CurrentPosition { get; set; }
[GlobalVariable]
protected double kalmanEstimate { get; set; }
[GlobalVariable]
protected double kalmanErrorCovariance { get; set; }
[GlobalVariable]
protected double processNoise { get; set; }
[GlobalVariable]
protected double measurementNoise { get; set; }
public override void Initialize()
{
base.IndicatorName = "калман";
AddInput("Input", Inputs.Candle);
base.PriceStudy = true;
AddSeries("H", DrawAs.Custom, Color.Coral);
AddSeries("L", DrawAs.Custom, Color.LightGreen);
AddSeries("D", DrawAs.Custom, Color.HotPink);
AddParameter("P2", 0.21, "", 1.0);
AddGlobalVariable("CurrentPosition", Types.Int, 0);
AddGlobalVariable("kalmanEstimate", Types.Double, 0.0);
AddGlobalVariable("kalmanErrorCovariance", Types.Double, 1.0);
AddGlobalVariable("processNoise", Types.Double, 0.01);
AddGlobalVariable("measurementNoise", Types.Double, 1.0);
}
public override void Evaluate()
{
D[0] = Input.Close[0];
kalmanErrorCovariance += processNoise;
double num = kalmanErrorCovariance / (kalmanErrorCovariance + measurementNoise);
kalmanEstimate += num * (Input.High[0] - kalmanEstimate);
kalmanErrorCovariance = (1.0 - num) * kalmanErrorCovariance;
double value = kalmanEstimate;
H[0] = value;
H.DrawVertical(Color.Blue, LineStyles.Dot, 1);
kalmanErrorCovariance += processNoise;
double num2 = kalmanErrorCovariance / (kalmanErrorCovariance + measurementNoise);
kalmanEstimate += num2 * (Input.Low[0] - kalmanEstimate);
kalmanErrorCovariance = (1.0 - num2) * kalmanErrorCovariance;
double value2 = kalmanEstimate;
L[0] = value2;
L.DrawVertical(Color.Green, LineStyles.Dot, 1);
if (CustomIndicator("индикатор", Input, P2).GetValue("W") == CustomIndicator("индикатор", Input).GetValue("H"))
{
H[0] = value;
H.DrawVertical(Color.OrangeRed, LineStyles.Dot, 1);
D[0] = value;
}
if (CustomIndicator("индикатор", Input, P2).GetValue("W") == CustomIndicator("индикатор", Input).GetValue("L"))
{
L[0] = value2;
L.DrawVertical(Color.Aqua, LineStyles.Dot, 1);
D[0] = value2;
}
}
protected override void ReinitGlobalVariables()
{
CurrentPosition = 0;
kalmanEstimate = 0.0;
kalmanErrorCovariance = 1.0;
processNoise = 0.01;
measurementNoise = 1.0;
}
public override bool CheckCompilerVersion(string version)
{
return string.Equals("{AC74EA46-E630-4E75-9B75-873E3ABF6D4B}", version);
}
public override bool CheckScriptHash(string hash)
{
return string.Equals("A4D7A7E6CBF8DF18941A87E0DFBFF570", hash);
}
}
-
- Сообщения: 229
- Зарегистрирован: 28 июн 2017, 13:56
- Благодарил (а): 4 раза
- Поблагодарили: 41 раз
Re: ФИЛЬТР КАЛМАНА!
Класс XSeries определяется так, из рефлектора сборки TA.dll:
Вот что с ним можно проделывать:
Вот что с ним можно проделывать:
Код: Выделить всё
// TA.Script.XSeries
using System;
using System.Collections.Generic;
using System.Drawing;
using AD.Common.DataStructures;
using TA.Script;
public class XSeries
{
public string Name;
public DrawAs Style;
public Color Color;
public LineStyles LineStyle;
public int LineWidth = 1;
public SortedList<long, double> Points;
public AxesKindList _PriceStudy;
private bool _NewArea = true;
private int _AxisSize = 100;
private ScriptedCode _Owner;
public double LastValue;
public const int DefaultAlpha = 50;
public const int DefaultAlphaFigure = 100;
public bool Visible { get; set; }
public bool PriceStudy => GetPriceStudy();
public bool ZeroBased { get; set; }
public bool NeedToCorrect { get; set; }
public bool NewArea
{
get
{
return _NewArea;
}
set
{
_NewArea = value;
}
}
public int AxisSize
{
get
{
return _AxisSize;
}
set
{
if (value >= 10 && value <= 100)
{
_AxisSize = value;
return;
}
throw new ArgumentOutOfRangeException("AxisSize", "Parameter should be in the range [10, 100]!");
}
}
public ScriptedCode Owner
{
get
{
return _Owner;
}
set
{
SetOwner(value);
}
}
public double this[int index]
{
get
{
return GetValue(index);
}
set
{
SetValue(index, value);
}
}
public double this[AdsFuncParameter index]
{
get
{
return GetValue((int)(double)index);
}
set
{
SetValue((int)(double)index, value);
}
}
private bool GetPriceStudy()
{
if (Owner is ScriptedIndicator)
{
if (_PriceStudy != 0)
{
return _PriceStudy == AxesKindList.Parent;
}
return (Owner as ScriptedIndicator).PriceStudy;
}
return _PriceStudy == AxesKindList.Parent;
}
private void SetOwner(ScriptedCode value)
{
_Owner = value;
}
public XSeries()
{
Init();
}
public void Init()
{
Points = new SortedList<long, double>();
}
public static implicit operator double(XSeries value)
{
return value[0];
}
public static implicit operator XSeries(double value)
{
return new XSeries
{
LastValue = value
};
}
public static implicit operator XSeries(AdsInputStream value)
{
return new XSeries
{
LastValue = value[0]
};
}
public static implicit operator XSeries(AdsFuncParameter value)
{
return new XSeries
{
LastValue = value
};
}
private void SetValue(int index, double value)
{
if (Owner.TryGetTime(index, out var time))
{
long key = DataPoint.SecondsFromDateTime(time);
if (Points.ContainsKey(key))
{
Points[key] = value;
}
else
{
Points.Add(key, value);
}
}
}
private double GetValue(int index)
{
double value = double.NaN;
if (Owner.TryGetTime(index, out var time))
{
long key = DataPoint.SecondsFromDateTime(time);
Points.TryGetValue(key, out value);
}
return value;
}
private double GetValueByTime(long time)
{
return Points[time];
}
private void SetValueByTime(long time, double value)
{
if (Points.ContainsKey(time))
{
Points[time] = value;
}
else
{
Points.Add(time, value);
}
}
public void Clear()
{
if (Points != null)
{
Points.Clear();
}
}
public string Prepare4Compiler()
{
return "XSeries __" + Name + " = new XSeries() {" + $" Name = \"{Name}\", Style = DrawAs.{Style.ToString()}, Color = Color.{Color.ToKnownColor().ToString()}, Visible = {Visible.ToString().ToLower()} " + "};\npublic XSeries " + Name + "\n{ get { return __" + Name + "; } set { " + $"SetSeries(__{Name}, value);" + "}}";
}
public void Hide()
{
Owner.CustomDrawPoint(this, DrawPointAs.Hidden);
}
public void DrawLine(Color color, LineStyles style, int width)
{
Owner.CustomDrawPoint(this, DrawPointAs.Line, color, style, width, true);
}
public void DrawLine()
{
DrawLine(Color.Empty, LineStyle, LineWidth);
}
public void DrawDash(Color color, LineStyles style, int width, int delta = 0)
{
Owner.CustomDrawPoint(this, DrawPointAs.HorizontalLine, color, style, width, delta, true);
}
public void DrawDash(int delta = 0)
{
DrawDash(Color.Empty, LineStyle, LineWidth, delta);
}
public void DrawVertical(XSeries series)
{
Owner.CustomDrawPoint(this, DrawPointAs.VerticalLine, Color.Empty, LineStyle, LineWidth, (series != null) ? series.Name : string.Empty, true);
}
public void DrawVertical(XSeries series, Color color, LineStyles style = LineStyles.Solid, int width = 1)
{
Owner.CustomDrawPoint(this, DrawPointAs.VerticalLine, color, style, width, (series != null) ? series.Name : string.Empty, true);
}
public void DrawVertical(Color color, LineStyles style, int width)
{
DrawVertical(null, color, style, width);
}
public void DrawVertical()
{
DrawVertical(Color.Empty, LineStyle, LineWidth);
}
public void DrawFigure(PointFigure figure, Color color, LineStyles style, int width, Color fill, int alpha = 100)
{
Owner.CustomDrawPoint(this, DrawPointAs.Point, figure, true, color, style, width, fill, alpha);
}
public void DrawCircle(Color color, LineStyles style, int width, Color fill, int alpha = 100)
{
DrawFigure(PointFigure.Circle, color, style, width, fill, alpha);
}
public void DrawCircle()
{
DrawCircle(Color.Empty, LineStyles.Solid, 1, Color.Empty);
}
public void DrawSquare(Color color, LineStyles style, int width, Color fill, int alpha = 100)
{
DrawFigure(PointFigure.Square, color, style, width, fill, alpha);
}
public void DrawSquare()
{
DrawSquare(Color.Empty, LineStyles.Solid, 1, Color.Empty);
}
public void DrawArrowUp(Color color, LineStyles style, int width, Color fill, int alpha = 100)
{
DrawFigure(PointFigure.Up, color, style, width, fill, alpha);
}
public void DrawArrowUp()
{
DrawArrowUp(Color.Empty, LineStyles.Solid, 1, Color.Empty);
}
public void DrawArrowDown(Color color, LineStyles style, int width, Color fill, int alpha = 100)
{
DrawFigure(PointFigure.Down, color, style, width, fill, alpha);
}
public void DrawArrowDown()
{
DrawArrowDown(Color.Empty, LineStyles.Solid, 1, Color.Empty);
}
public void DrawArrowLeft(Color color, LineStyles style, int width, Color fill, int alpha = 100)
{
DrawFigure(PointFigure.Left, color, style, width, fill, alpha);
}
public void DrawArrowLeft()
{
DrawArrowLeft(Color.Empty, LineStyles.Solid, 1, Color.Empty);
}
public void DrawArrowRight(Color color, LineStyles style, int width, Color fill, int alpha = 100)
{
DrawFigure(PointFigure.Right, color, style, width, fill, alpha);
}
public void DrawArrowRight()
{
DrawArrowRight(Color.Empty, LineStyles.Solid, 1, Color.Empty);
}
public void DrawHistogram(XSeries series, Color color, LineStyles style, int width, Color fill, int alpha = 50)
{
Owner.CustomDrawPoint(this, DrawPointAs.Histogram, color, style, width, true, fill, alpha, (series != null) ? series.Name : string.Empty);
}
public void DrawHistogram(Color color, LineStyles style, int width, Color fill, int alpha = 50)
{
Owner.CustomDrawPoint(this, DrawPointAs.Histogram, color, style, width, true, fill, alpha, string.Empty);
}
public void DrawHistogram(Color color, int alpha = 50)
{
DrawHistogram(null, color, LineStyles.Solid, 1, color, alpha);
}
public void DrawHistogram(Color color, Color fill, int alpha = 50)
{
DrawHistogram(null, color, LineStyles.Solid, 1, fill, alpha);
}
public void DrawHistogram(XSeries series, Color fill, int alpha = 50)
{
DrawHistogram(series, Color.Empty, LineStyles.Solid, 1, fill, alpha);
}
public void DrawHistogram(XSeries series)
{
DrawHistogram(series, Color.Empty, LineStyles.Solid, 1, Color.Empty);
}
public void DrawHistogram()
{
DrawHistogram(Color.Empty, LineStyles.Solid, 1, Color.Empty);
}
public void DrawArea(Color color, LineStyles style, int width, Color fill, int alpha = 50)
{
Owner.CustomDrawPoint(this, DrawPointAs.Area, color, style, width, true, fill, alpha);
}
public void DrawArea(Color fill, int alpha)
{
DrawArea(Color.Empty, LineStyle, LineWidth, fill, alpha);
}
public void DrawArea()
{
DrawArea(Color.Empty, 30);
}
public void DrawChannel(Color fill, int alpha)
{
DrawArea(Color.Empty, LineStyle, LineWidth, fill, alpha);
}
public void DrawChannel(XSeries series, Color fill, int alpha)
{
Owner.CustomDrawPoint(this, DrawPointAs.Area, Color.Empty, LineStyle, LineWidth, true, fill, alpha, (series != null) ? series.Name : string.Empty);
}
public void DrawChannel(XSeries series)
{
DrawChannel(series, Color.Empty, 30);
}
public void DrawSection(Color color, LineStyles style, int width, int delta)
{
Owner.CustomDrawPoint(this, DrawPointAs.TrendLine, color, style, width, delta, true);
}
public void DrawSection(int delta)
{
DrawSection(Color.Empty, LineStyle, LineWidth, delta);
}
public static int PercentToAlpha(int percent)
{
int num = percent * 255 / 100;
if (num < 0 || num > 255)
{
num = 120;
}
return num;
}
public static int AlphaToPercent(int alpha)
{
int num = alpha * 100 / 255;
if (num < 0 || num > 100)
{
num = 50;
}
return num;
}
}
Вернуться в «Пользовательские индикаторы»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей