How To Calculate Average True Range (ATR) using Perl?

Member

by norberto , in category: Technical Analysis , 10 months ago

How To Calculate Average True Range (ATR) using Perl?

Facebook Twitter LinkedIn Whatsapp

2 answers

Member

by caitlyn , 9 months ago

@norberto 

To calculate the Average True Range (ATR) using Perl, you can use the following formula:

  1. First, calculate the True Range for each period. True Range is the maximum of the following three values: High of the current period - Low of the current period Absolute value of High of the current period - Close of the previous period Absolute value of Low of the current period - Close of the previous period
  2. Next, calculate the ATR for the desired number of periods by taking the average of the True Range values over those periods.


Here is an example of a Perl code that calculates the ATR for a given set of price data:

 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
use strict;
use warnings;

my @highs = (50, 55, 60, 58, 65);
my @lows = (45, 48, 55, 54, 60);
my @closes = (48, 53, 58, 56, 62);
my $periods = 4;

my @tr_values;
my $atr = 0;

for (my $i = 1; $i < scalar(@highs); $i++) {
    my $tr = max($highs[$i] - $lows[$i], abs($highs[$i] - $closes[$i - 1]), abs($lows[$i] - $closes[$i - 1]));
    push @tr_values, $tr;
}

for (my $i = 0; $i < $periods-1; $i++) {
    $atr += $tr_values[$i];
}

$atr /= $periods;

print "Average True Range: $atr
";

sub max {
    my $max = shift;
    foreach my $value (@_) {
        $max = $value if $value > $max;
    }
    return $max;
}


In this code, the @highs, @lows, and @closes arrays represent the high, low, and close prices for each period. The $periods variable represents the number of periods for which you want to calculate the ATR.


The code calculates the True Range for each period, then calculates the ATR by taking the average of the True Range values over the specified number of periods. Finally, it prints the calculated ATR value.

Member

by brennan , 7 months ago

@norberto 

Here's a step-by-step explanation of the Perl code for calculating the Average True Range (ATR):

  1. Import the necessary Perl modules strict and warnings for code reliability and debugging:
1
2
use strict;
use warnings;


  1. Define the high, low, and close price arrays and the number of periods for calculating the ATR:
1
2
3
4
my @highs = (50, 55, 60, 58, 65);
my @lows = (45, 48, 55, 54, 60);
my @closes = (48, 53, 58, 56, 62);
my $periods = 4;


  1. Initialize an empty array @tr_values to store True Range values and a variable $atr to hold the Average True Range:
1
2
my @tr_values;
my $atr = 0;


  1. Calculate the True Range values for each period and store them in the @tr_values array:
1
2
3
4
for (my $i = 1; $i < scalar(@highs); $i++) {
    my $tr = max($highs[$i] - $lows[$i], abs($highs[$i] - $closes[$i - 1]), abs($lows[$i] - $closes[$i - 1]));
    push @tr_values, $tr;
}


  1. Calculate the Average True Range by averaging the True Range values over the specified number of periods:
1
2
3
4
5
for (my $i = 0; $i < $periods-1; $i++) {
    $atr += $tr_values[$i];
}

$atr /= $periods;


  1. Print the calculated ATR value:
1
2
print "Average True Range: $atr
";


  1. Define a subroutine max to find the maximum value a**** a list of values:
1
2
3
4
5
6
7
sub max {
    my $max = shift;
    foreach my $value (@_) {
        $max = $value if $value > $max;
    }
    return $max;
}


This code snippet provides a basic implementation to calculate the Average True Range using Perl. You can modify the input price data, the number of periods, and customize the output format as needed for your specific requirements.