ComponentOne FinancialChart for WinForms
Analytics / Indicators / Average True Range
In This Topic
    Average True Range
    In This Topic

    Average True Range (ATR) is a technical indicator for measuring the volatility of an asset. It does not provide an indication of the price trend, but of the degree of the price volatility. It is typically based on 14 periods, and could be calculated intra daily, daily, weekly or monthly basis. Stocks having high volatility will have a higher ATR, while low volatility stocks will have a lower ATR.

    FinancialChart also enables you to fetch the calculated ATR values at run-time using GetValues() method. This can help in creating alerts in application or maintaining logs while working with dynamic data.

    The following code snippet creates an instance of the ATR class to use Average True Indicator. Also, the sample uses a class DataService.cs to get data for the financial chart.

    Public Class DataService
    
        Public Class DataService
            Private _companies As New List(Of Company)()
    
            Public Sub New()
                _companies.Add(New Company() With {
                .Symbol = "box",
                .Name = "Box Inc"
            })
                _companies.Add(New Company() With {
                .Symbol = "fb",
                .Name = "Facebook"
            })
            End Sub
    
            Public Function GetCompanies() As List(Of Company)
                Return _companies
            End Function
    
            Public Function GetSymbolData(symbol As String) As List(Of Quote)
                Dim path As String = String.Format("FinancialChartExplorer.Resources.{0}.json", symbol)
                Dim stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(path)
                Dim ser = New System.Runtime.Serialization.Json.DataContractJsonSerializer(GetType(Quote()))
                Dim data = DirectCast(ser.ReadObject(stream), Quote())
                Return data.ToList()
            End Function
    
            Shared _ds As DataService
            Public Shared Function GetService() As DataService
                If _ds Is Nothing Then
                    _ds = New DataService()
                End If
                Return _ds
            End Function
        End Class
    
        Public Class Quote
            Public Property [date]() As String
                Get
                    Return m_date
                End Get
                Set
                    m_date = Value
                End Set
            End Property
            Private m_date As String
            Public Property high() As Double
                Get
                    Return m_high
                End Get
                Set
                    m_high = Value
                End Set
            End Property
            Private m_high As Double
            Public Property low() As Double
                Get
                    Return m_low
                End Get
                Set
                    m_low = Value
                End Set
            End Property
            Private m_low As Double
            Public Property open() As Double
                Get
                    Return m_open
                End Get
                Set
                    m_open = Value
                End Set
            End Property
            Private m_open As Double
            Public Property close() As Double
                Get
                    Return m_close
                End Get
                Set
                    m_close = Value
                End Set
            End Property
            Private m_close As Double
            Public Property volume() As Double
                Get
                    Return m_volume
                End Get
                Set
                    m_volume = Value
                End Set
            End Property
            Private m_volume As Double
        End Class
    
        Public Class Company
            Public Property Symbol() As String
                Get
                    Return m_Symbol
                End Get
                Set
                    m_Symbol = Value
                End Set
            End Property
            Private m_Symbol As String
            Public Property Name() As String
                Get
                    Return m_Name
                End Get
                Set
                    m_Name = Value
                End Set
            End Property
            Private m_Name As String
        End Class
    
    End Class
    
    public class DataService
    {
        List<Company> _companies = new List<Company>();
    
        public DataService()
        {
            _companies.Add(new Company() { Symbol = "box", Name = "Box Inc" });
            _companies.Add(new Company() { Symbol = "fb", Name = "Facebook" });
        }
    
        public List<Company> GetCompanies()
        {
            return _companies;
        }
    
        public List<Quote> GetSymbolData(string symbol)
        {
            string path = string.Format("FinancialChartExplorer.Resources.{0}.json", symbol);
            var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(path);
            var ser = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(Quote[]));
            var data = (Quote[])ser.ReadObject(stream);
            return data.ToList();
        }
    
        static DataService _ds;
        public static DataService GetService()
        {
            if (_ds == null)
                _ds = new DataService();
            return _ds;
        }
    }
    
    public class Quote
    {
        public string date { get; set; }
        public double high { get; set; }
        public double low { get; set; }
        public double open { get; set; }
        public double close { get; set; }
        public double volume { get; set; }
    }
    
    public class Company
    {
        public string Symbol { get; set; }
        public string Name { get; set; }
    }
    
    Dim atr As New ATR() With
    {
        .Name = "ATR"
    }
    
    Dim dataService__1 = DataService.GetService()
    Dim data = dataService__1.GetSymbolData("box")
    
    FinancialChart1.BeginUpdate()
    FinancialChart1.BindingX = "date"
    FinancialChart1.Binding = "close"
    FinancialChart1.Series.Add(New FinancialSeries())
    FinancialChart1.ChartType = C1.Chart.Finance.FinancialChartType.Line
    FinancialChart1.DataSource = data
    FinancialChart1.Rendered += Function(s, a)
                                    financialChart2.AxisX.Min = FinancialChart1.AxisX.ActualMin
                                    financialChart2.AxisX.Max = FinancialChart1.AxisX.ActualMax
    
                                End Function
    FinancialChart1.EndUpdate()
    
    financialChart2.BeginUpdate()
    financialChart2.ChartType = C1.Chart.Finance.FinancialChartType.Line
    financialChart2.BindingX = "date"
    financialChart2.Binding = "high,low,close"
    financialChart2.Series.Add(atr)
    financialChart2.Legend.Position = C1.Chart.Position.Bottom
    financialChart2.DataSource = data
    financialChart2.EndUpdate()
    period.Value = atr.Period
    
    ATR atr = new ATR() { Name = "ATR" };
    
    var dataService = DataService.GetService();
    var data = dataService.GetSymbolData("box");
    
    financialChart1.BeginUpdate();
    financialChart1.BindingX = "date";
    financialChart1.Binding = "close";
    financialChart1.Series.Add(new FinancialSeries());
    financialChart1.ChartType = C1.Chart.Finance.FinancialChartType.Line;
    financialChart1.DataSource = data;
    financialChart1.Rendered += (s, a) =>
    {
        financialChart2.AxisX.Min = financialChart1.AxisX.ActualMin;
        financialChart2.AxisX.Max = financialChart1.AxisX.ActualMax;
    };
    financialChart1.EndUpdate();
    
    financialChart2.BeginUpdate();
    financialChart2.ChartType = C1.Chart.Finance.FinancialChartType.Line;
    financialChart2.BindingX = "date";
    financialChart2.Binding = "high,low,close";
    financialChart2.Series.Add(atr);
    financialChart2.Legend.Position = C1.Chart.Position.Bottom;
    financialChart2.DataSource = data;
    financialChart2.EndUpdate();
    period.Value = atr.Period;