How To Calculate Parabolic SAR (Stop and Reverse) in Scala?

Member

by samara , in category: Third Party Scripts , 8 months ago

How To Calculate Parabolic SAR (Stop and Reverse) in Scala?

Facebook Twitter LinkedIn Telegram Whatsapp

1 answer

Member

by orpha , 8 months ago

@samara 

To calculate Parabolic SAR (Stop and Reverse) in Scala, you can follow the steps below:

  1. Define the initial values for the acceleration factor (AF), the maximum AF, and the starting SAR value. These are typically set to 0.02, 0.20, and the highest high or lowest low of the data set, respectively.
  2. Iterate through each data point in the dataset and calculate the SAR value for that point. The SAR value is calculated using the following formula: SARn = SARn-1 + AFn * (EP - SARn-1) where: SARn is the SAR value for the current point SARn-1 is the SAR value for the previous point AFn is the acceleration factor for the current point EP is the extreme price for the current point (either the highest high or lowest low)
  3. Update the acceleration factor (AF) for the current point using the following logic: If the current trend is up and the extreme price for the current point is higher than the previous extreme price, increase the acceleration factor by 0.02, up to a maximum of 0.20. If the current trend is down and the extreme price for the current point is lower than the previous extreme price, increase the acceleration factor by 0.02, up to a maximum of 0.20. Otherwise, keep the acceleration factor the same.
  4. Keep track of the current trend (up or down) based on whether the SAR value is above or below the price data.
  5. Repeat steps 2-4 for each data point in the dataset to calculate the SAR values for all points.


Here is a sample Scala code snippet to calculate Parabolic SAR (Stop and Reverse) for a given dataset:

 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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
def calculateParabolicSAR(data: List[Double]): List[Double] = {
  var sarValues = List.empty[Double]
  var af = 0.02
  var maxAF = 0.20
  var sar = data.head
  var ep = data.head
  var trend = "up"

  for (i <- 1 until data.length) {
    val prevSAR = sar
    val currentData = data(i)
    
    if (trend == "up") {
      if (currentData > ep) {
        ep = currentData
        af = math.min(af + 0.02, maxAF)
      }
    } else {
      if (currentData < ep) {
        ep = currentData
        af = math.min(af + 0.02, maxAF)
      }
    }
    
    val newSAR = prevSAR + af * (ep - prevSAR)
    
    if (trend == "up") {
      if (currentData < newSAR) {
        trend = "down"
        ep = currentData
        af = 0.02
        newSAR = ep
      }
    } else {
      if (currentData > newSAR) {
        trend = "up"
        ep = currentData
        af = 0.02
        newSAR = ep
      }
    }
    
    sarValues = sarValues :+ newSAR
    sar = newSAR
  }
  
  sarValues
}

// Example usage
val data = List(10.0, 15.0, 20.0, 18.0, 22.0, 25.0)
val calculatedSAR = calculateParabolicSAR(data)
println(calculatedSAR)


This code snippet defines a function calculateParabolicSAR that takes a list of price data points as input and returns a list of Parabolic SAR values for each data point. The function iterates through the data points, calculates the SAR values, updates the acceleration factor and trend, and returns the SAR values for all data points. You can customize this code based on your specific requirements and data format.