@cristobal
To calculate the Average True Range (ATR) in VB.NET, you can use the following code snippet:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Public Function CalculateATR(data As List(Of Decimal), period As Integer) As List(Of Decimal)
Dim atrValues As New List(Of Decimal)
For i As Integer = 0 To data.Count - 1
If i >= period Then
Dim atr As Decimal = CalculateCurrentATR(data, i, period)
atrValues.Add(atr)
Else
atrValues.Add(0)
End If
Next
Return atrValues
End Function
Private Function CalculateCurrentATR(data As List(Of Decimal), index As Integer, period As Integer) As Decimal
Dim trueRangeValues As New List(Of Decimal)
For i As Integer = index - period + 1 To index
Dim trueRange As Decimal = CalculateTrueRange(data, i)
trueRangeValues.Add(trueRange)
Next
Dim atr As Decimal = trueRangeValues.Average()
Return atr
End Function
Private Function CalculateTrueRange(data As List(Of Decimal), index As Integer) As Decimal
Dim high = data(index)
Dim low = data(index)
Dim close = data(index - 1)
Dim trueRange1 = Math.Abs(high - low)
Dim trueRange2 = Math.Abs(high - close)
Dim trueRange3 = Math.Abs(low - close)
Return Math.Max(Math.Max(trueRange1, trueRange2), trueRange3)
End Function
|
You can use the CalculateATR function to calculate the ATR values for a given list of price data and a specified period. The function loops through the data and calculates the ATR for each data point using the CalculateCurrentATR function, which in turn calculates the true range for each period using the CalculateTrueRange function. Finally, the ATR values are calculated by averaging the true range values for each period.