From a885b2d39d935e091652caf67cdba3839c4982e1 Mon Sep 17 00:00:00 2001 From: Onur Cinar Date: Sat, 30 Dec 2023 21:53:52 -0800 Subject: [PATCH] Acceleration Bands is added. --- README.md | 2 +- volatility/README.md | 65 ++++++ volatility/acceleration_bands.go | 88 +++++++ volatility/acceleration_bands_test.go | 51 +++++ volatility/testdata/acceleration_bands.csv | 252 +++++++++++++++++++++ 5 files changed, 457 insertions(+), 1 deletion(-) create mode 100644 volatility/acceleration_bands.go create mode 100644 volatility/acceleration_bands_test.go create mode 100644 volatility/testdata/acceleration_bands.csv diff --git a/README.md b/README.md index 6393e55..31e411f 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ The following list of indicators are currently supported by this package: ### 🎢 Volatility Indicators -- Acceleration Bands +- [Acceleration Bands](volatility/README.md#type-accelerationbands) - Actual True Range (ATR) - [Bollinger Band Width](volatility/README.md#type-bollingerbandwidth) - [Bollinger Bands](volatility/README.md#type-bollingerbands) diff --git a/volatility/README.md b/volatility/README.md index 7bd01a2..398d4ec 100644 --- a/volatility/README.md +++ b/volatility/README.md @@ -25,6 +25,10 @@ The information provided on this project is strictly for informational purposes ## Index - [Constants](<#constants>) +- [type AccelerationBands](<#AccelerationBands>) + - [func NewAccelerationBands\[T helper.Number\]\(\) \*AccelerationBands\[T\]](<#NewAccelerationBands>) + - [func \(a \*AccelerationBands\[T\]\) Compute\(high, low, closing \<\-chan T\) \(\<\-chan T, \<\-chan T, \<\-chan T\)](<#AccelerationBands[T].Compute>) + - [func \(a \*AccelerationBands\[T\]\) IdlePeriod\(\) int](<#AccelerationBands[T].IdlePeriod>) - [type BollingerBandWidth](<#BollingerBandWidth>) - [func NewBollingerBandWidth\[T helper.Number\]\(\) \*BollingerBandWidth\[T\]](<#NewBollingerBandWidth>) - [func \(b \*BollingerBandWidth\[T\]\) Compute\(c \<\-chan T\) \<\-chan T](<#BollingerBandWidth[T].Compute>) @@ -42,6 +46,15 @@ The information provided on this project is strictly for informational purposes ## Constants + + +```go +const ( + // DefaultAccelerationBandsPeriod is the default period for the Acceleration Bands. + DefaultAccelerationBandsPeriod = 20 +) +``` + ```go @@ -51,6 +64,58 @@ const ( ) ``` + +## type [AccelerationBands]() + +AccelerationBands represents the configuration parameters for calculating the Acceleration Bands. + +``` +Upper Band = SMA(High * (1 + 4 * (High - Low) / (High + Low))) +Middle Band = SMA(Closing) +Lower Band = SMA(Low * (1 - 4 * (High - Low) / (High + Low))) +``` + +Example: + +``` +accelerationBands := NewAccelerationBands[float64]() +accelerationBands.Compute(values) +``` + +```go +type AccelerationBands[T helper.Number] struct { + // Time period. + Period int +} +``` + + +### func [NewAccelerationBands]() + +```go +func NewAccelerationBands[T helper.Number]() *AccelerationBands[T] +``` + +NewAccelerationBands function initializes a new Acceleration Bands instance with the default parameters. + + +### func \(\*AccelerationBands\[T\]\) [Compute]() + +```go +func (a *AccelerationBands[T]) Compute(high, low, closing <-chan T) (<-chan T, <-chan T, <-chan T) +``` + +Compute function takes a channel of numbers and computes the Acceleration Bands over the specified period. + + +### func \(\*AccelerationBands\[T\]\) [IdlePeriod]() + +```go +func (a *AccelerationBands[T]) IdlePeriod() int +``` + +IdlePeriod is the initial period that Acceleration Bands won't yield any results. + ## type [BollingerBandWidth]() diff --git a/volatility/acceleration_bands.go b/volatility/acceleration_bands.go new file mode 100644 index 0000000..2512b4d --- /dev/null +++ b/volatility/acceleration_bands.go @@ -0,0 +1,88 @@ +// Copyright (c) 2021-2023 Onur Cinar. +// The source code is provided under GNU AGPLv3 License. +// https://github.com/cinar/indicator + +package volatility + +import ( + "github.com/cinar/indicator/helper" + "github.com/cinar/indicator/trend" +) + +const ( + // DefaultAccelerationBandsPeriod is the default period for the Acceleration Bands. + DefaultAccelerationBandsPeriod = 20 +) + +// AccelerationBands represents the configuration parameters for calculating the Acceleration Bands. +// +// Upper Band = SMA(High * (1 + 4 * (High - Low) / (High + Low))) +// Middle Band = SMA(Closing) +// Lower Band = SMA(Low * (1 - 4 * (High - Low) / (High + Low))) +// +// Example: +// +// accelerationBands := NewAccelerationBands[float64]() +// accelerationBands.Compute(values) +type AccelerationBands[T helper.Number] struct { + // Time period. + Period int +} + +// NewAccelerationBands function initializes a new Acceleration Bands instance with the default parameters. +func NewAccelerationBands[T helper.Number]() *AccelerationBands[T] { + return &AccelerationBands[T]{ + Period: DefaultAccelerationBandsPeriod, + } +} + +// Compute function takes a channel of numbers and computes the Acceleration Bands over the specified period. +func (a *AccelerationBands[T]) Compute(high, low, closing <-chan T) (<-chan T, <-chan T, <-chan T) { + highs := helper.Duplicate(high, 3) + lows := helper.Duplicate(low, 3) + + ks := helper.Duplicate( + helper.Divide( + helper.Subtract(highs[0], lows[0]), + helper.Add(highs[1], lows[1]), + ), + 2, + ) + + sma := trend.NewSmaWithPeriod[T](a.Period) + + upper := sma.Compute( + helper.Multiply( + highs[2], + helper.IncrementBy( + helper.MultiplyBy( + ks[0], + 4, + ), + 1, + ), + ), + ) + + middle := sma.Compute(closing) + + lower := sma.Compute( + helper.Multiply( + lows[2], + helper.IncrementBy( + helper.MultiplyBy( + ks[1], + -4, + ), + 1, + ), + ), + ) + + return upper, middle, lower +} + +// IdlePeriod is the initial period that Acceleration Bands won't yield any results. +func (a *AccelerationBands[T]) IdlePeriod() int { + return a.Period - 1 +} diff --git a/volatility/acceleration_bands_test.go b/volatility/acceleration_bands_test.go new file mode 100644 index 0000000..1e78464 --- /dev/null +++ b/volatility/acceleration_bands_test.go @@ -0,0 +1,51 @@ +// Copyright (c) 2021-2023 Onur Cinar. +// The source code is provided under GNU AGPLv3 License. +// https://github.com/cinar/indicator + +package volatility_test + +import ( + "testing" + + "github.com/cinar/indicator/helper" + "github.com/cinar/indicator/volatility" +) + +func TestAccelerationBands(t *testing.T) { + type Data struct { + High float64 + Low float64 + Close float64 + Upper float64 + Middle float64 + Lower float64 + } + + input, err := helper.ReadFromCsvFile[Data]("testdata/acceleration_bands.csv", true) + if err != nil { + t.Fatal(err) + } + + inputs := helper.Duplicate(input, 6) + highs := helper.Map(inputs[0], func(d *Data) float64 { return d.High }) + lows := helper.Map(inputs[1], func(d *Data) float64 { return d.Low }) + closings := helper.Map(inputs[2], func(d *Data) float64 { return d.Close }) + upper := helper.Map(inputs[3], func(d *Data) float64 { return d.Upper }) + middle := helper.Map(inputs[4], func(d *Data) float64 { return d.Middle }) + lower := helper.Map(inputs[5], func(d *Data) float64 { return d.Lower }) + + ab := volatility.NewAccelerationBands[float64]() + actualUpper, actualMiddle, actualLower := ab.Compute(highs, lows, closings) + actualUpper = helper.RoundDigits(actualUpper, 2) + actualMiddle = helper.RoundDigits(actualMiddle, 2) + actualLower = helper.RoundDigits(actualLower, 2) + + upper = helper.Skip(upper, ab.IdlePeriod()) + middle = helper.Skip(middle, ab.IdlePeriod()) + lower = helper.Skip(lower, ab.IdlePeriod()) + + err = helper.CheckEquals(actualUpper, upper, actualMiddle, middle, actualLower, lower) + if err != nil { + t.Fatal(err) + } +} diff --git a/volatility/testdata/acceleration_bands.csv b/volatility/testdata/acceleration_bands.csv new file mode 100644 index 0000000..1f0171b --- /dev/null +++ b/volatility/testdata/acceleration_bands.csv @@ -0,0 +1,252 @@ +High,Low,Close,Upper,Middle,Lower +318.600006,308.700012,318.600006,0,0,0 +319.559998,313.299988,315.839996,0,0,0 +316.380005,312.75,316.149994,0,0,0 +315.660004,308.730011,310.570007,0,0,0 +310.290009,306.350006,307.779999,0,0,0 +309.380005,304.920013,305.820007,0,0,0 +307.48999,305.089996,305.98999,0,0,0 +308.339996,304.709991,306.390015,0,0,0 +311.910004,305.459991,311.450012,0,0,0 +318.910004,310.820007,312.329987,0,0,0 +316.359985,308.399994,309.290009,0,0,0 +306.959991,299.450012,301.910004,0,0,0 +302.470001,297.76001,300,0,0,0 +301.480011,297.149994,300.029999,0,0,0 +304.190002,297,302,0,0,0 +308.540009,304.160004,307.820007,0,0,0 +306.5,297.640015,302.690002,0,0,0 +306.570007,300.929993,306.48999,0,0,0 +308.579987,304.649994,305.549988,0,0,0 +307.459991,303.26001,303.429993,321.84,307.51,293.24 +309.380005,305.23999,309.059998,320.79,307.03,293.63 +309.040009,305.619995,308.899994,319.98,306.68,293.53 +312.390015,307.380005,309.910004,319.92,306.37,293.12 +316.890015,311.25,314.549988,319.85,306.57,293.37 +314.230011,310,312.899994,320.07,306.83,293.53 +320.160004,313.380005,318.690002,320.85,307.47,293.72 +320.5,314.75,315.529999,321.84,307.95,293.88 +316.799988,313.339996,316.350006,322.24,308.44,294.32 +320.570007,316.600006,320.369995,322.42,308.89,295.12 +321.320007,317.720001,318.929993,322.09,309.22,295.91 +318.420013,315.790009,317.640015,321.65,309.64,296.8 +318.519989,314.25,314.859985,321.9,310.28,297.86 +315.540009,307.75,308.299988,322.86,310.7,298.06 +307.23999,303.859985,305.230011,323.06,310.96,298.49 +310.01001,304.359985,309.869995,323.19,311.35,299.01 +312.730011,306.850006,310.420013,323.55,311.48,298.99 +312.829987,307.5,311.299988,323.51,311.91,299.83 +312.549988,307.709991,311.899994,323.72,312.18,300.25 +313.679993,309.579987,310.950012,324,312.45,300.48 +311.730011,308.339996,309.170013,324.13,312.74,300.81 +309.51001,306.809998,307.329987,323.99,312.65,301.03 +311.859985,305.790009,311.519989,324.4,312.79,300.78 +312.670013,306.380005,310.570007,324.54,312.82,300.61 +312.600006,308.299988,311.859985,324.19,312.68,300.59 +311.549988,305.920013,308.51001,324.2,312.46,300.25 +308.799988,305.600006,308.429993,323.27,311.95,300.21 +314.149994,306.630005,312.970001,323.13,311.82,299.63 +313.410004,308.01001,308.480011,323.16,311.43,299.17 +311.420013,306.98999,307.209991,322.75,310.77,298.65 +309.980011,305.279999,309.890015,322.29,310.32,297.92 +313.73999,309.619995,313.73999,322.21,310.13,297.46 +314.100006,309.040009,310.790009,322.07,309.92,297.12 +310.369995,308.279999,309.630005,321.23,309.99,297.71 +310.200012,306.869995,308.179993,321.37,310.14,297.87 +308.410004,305.480011,308.23999,321.02,310.05,298.19 +307.299988,300.5,302.720001,320.84,309.67,297.78 +305.269989,301.769989,303.160004,320.28,309.26,297.68 +305.559998,300.25,303.070007,319.98,308.82,297.26 +305.619995,300.01001,304.019989,319.73,308.47,296.63 +305.779999,302.01001,304.660004,319.47,308.25,296.28 +306.149994,303.410004,305.179993,319.3,308.14,296.1 +305.619995,302.079987,304.619995,318.73,307.8,296.17 +308.100006,301.450012,307.75,318.54,307.66,295.89 +312.660004,308.5,312.450012,318.53,307.69,295.91 +317.290009,312.429993,316.970001,318.74,308.11,296.31 +316.5,310.230011,311.119995,319.44,308.24,296.24 +312.679993,309.25,311.369995,318.95,308.16,296.77 +313.179993,303.940002,304.820007,319.33,307.98,296.19 +306.720001,301.920013,303.630005,319.13,307.8,295.9 +306.589996,300.76001,302.880005,319.08,307.45,295.57 +307.549988,301.679993,305.329987,318.95,307.03,295 +300.549988,294.899994,297.880005,318.33,306.38,294.23 +304.429993,295.359985,302.01001,318.74,306,292.9 +301.299988,292.420013,293.51001,318.86,305.27,291.64 +301.51001,295.059998,301.059998,318.88,304.91,290.77 +305.630005,302.25,303.850006,318.45,304.97,291.19 +307.049988,299.649994,299.730011,318.93,304.8,290.7 +302.079987,296.299988,298.369995,318.8,304.56,290.46 +299.5,293.390015,298.920013,318.55,304.31,290.08 +303.209991,298.970001,302.140015,318.47,304.18,289.88 +302.720001,300.589996,302.320007,318.24,304.04,289.8 +305.380005,303.359985,305.299988,318.07,304.07,290.02 +307.470001,302.579987,305.079987,317.86,303.94,290.25 +308.809998,304.98999,308.769989,317.63,303.75,290.1 +311.5,308.23999,310.309998,317.18,303.42,290.05 +311,307.070007,309.070007,316.67,303.32,290.12 +311.070007,307.850006,310.390015,316.57,303.27,290.07 +313.220001,309.049988,312.51001,316.05,303.65,290.83 +313.700012,310.329987,312.619995,316.26,304.1,291.39 +315.940002,311.769989,313.700012,316.55,304.64,292.1 +316.920013,313.720001,314.549988,316.75,305.1,292.97 +318.809998,313.26001,318.049988,317.65,306.11,293.89 +321.880005,318.119995,319.73999,317.98,307,295.55 +323.980011,319,323.790009,318.72,308.51,297.26 +325.720001,322.5,324.630005,319.6,309.69,298.95 +324.549988,322.76001,323.089996,320.39,310.65,300.13 +324.369995,321.320007,323.820007,320.81,311.86,301.64 +324.850006,321.609985,324.329987,321.69,313.16,303.16 +326.399994,324.299988,326.049988,322.63,314.51,305.1 +327.100006,324.109985,324.339996,323.7,315.62,306.48 +323.73999,319,320.529999,325.01,316.53,307.14 +326.910004,322.109985,326.230011,326.37,317.58,307.81 +328.809998,325.190002,328.549988,327.31,318.75,309.06 +331.839996,328.570007,330.170013,328.4,319.82,310.29 +330.25,322.76001,325.859985,329.77,320.6,310.6 +328.070007,323.059998,323.220001,330.73,321.31,311.3 +325.98999,317.410004,320,332.02,321.79,311.25 +325.160004,322.619995,323.880005,332.46,322.36,312.09 +330.690002,325.790009,326.140015,333.46,323.03,312.71 +326.880005,323.480011,324.869995,333.93,323.59,313.37 +326.160004,320.149994,322.98999,334.68,324.01,313.42 +322.959991,319.809998,322.640015,334.64,324.24,313.98 +324.23999,320.540009,322.48999,334.75,324.38,314.11 +323.829987,320.130005,323.529999,334.62,324.37,314.29 +324.690002,322.359985,323.75,334.47,324.32,314.37 +328.26001,324.820007,327.390015,334.83,324.54,314.31 +329.980011,325.850006,329.76001,335.22,324.84,314.43 +333.940002,329.119995,330.390015,335.83,325.14,314.65 +331.48999,328.350006,329.130005,336.19,325.29,314.75 +329.269989,322.970001,323.109985,336.63,325.23,314.37 +323,319.559998,320.200012,336.47,325.22,314.52 +320.559998,317.709991,319.019989,335.95,324.85,314.5 +322.630005,319.670013,320.600006,335.57,324.46,314.28 +322.470001,319,322.190002,335.13,324.06,313.79 +322.410004,319.390015,321.079987,334.28,323.82,314.06 +323.220001,319.529999,323.119995,333.9,323.81,314.01 +330.670013,324.420013,329.480011,333.9,324.29,314.59 +330.890015,327.570007,328.579987,334.26,324.52,314.76 +334.160004,328.679993,333.410004,334.5,324.89,314.85 +335.820007,331.429993,335.420013,335.04,325.41,315.15 +336.320007,334.100006,335.950012,335.17,326.06,316.22 +337.589996,334.920013,335.290009,335.85,326.69,317.02 +335.350006,332.220001,333.600006,336.35,327.25,317.66 +336.619995,332.200012,336.390015,337.06,327.89,318.19 +340.380005,334.089996,335.899994,338.25,328.5,318.39 +341.679993,335.540009,339.820007,339.19,329.12,318.66 +341.299988,337.660004,338.309998,339.71,329.55,319.3 +339.279999,336.619995,338.670013,339.76,329.96,319.89 +341.350006,336.369995,338.609985,340.44,330.44,320.11 +338.850006,335.660004,336.959991,340.6,331.13,321.05 +337.470001,334.190002,335.25,341.31,331.88,321.79 +335.829987,331.839996,334.119995,342.19,332.64,322.39 +336.730011,334.369995,335.339996,342.83,333.37,323.18 +336.399994,332.609985,334.149994,343.56,333.97,323.83 +337.01001,334.140015,336.910004,344.27,334.76,324.58 +342.5,338.399994,341,345.28,335.66,325.49 +342.079987,338.410004,342,345.59,336.28,326.44 +341.890015,338.700012,341.559998,346.12,336.93,327.01 +341.799988,338.910004,341.459991,346.24,337.34,327.78 +344.070007,340.390015,340.899994,346.58,337.61,328.29 +343.480011,339.869995,341.130005,347.08,337.87,328.44 +343.839996,340.929993,343.369995,347.42,338.27,328.72 +346.440002,344.309998,345.350006,347.87,338.86,329.43 +346.209991,343.450012,343.540009,348.18,339.22,330.15 +345,340.51001,341.089996,348.23,339.48,330.65 +345.720001,341.089996,344.25,348.28,339.7,331.08 +347.25,343.540009,345.339996,348.59,340.05,331.36 +345.380005,341.98999,342.429993,348.96,340.24,331.56 +346.790009,342.850006,346.609985,349.13,340.64,331.99 +347.619995,345.100006,345.76001,349.5,341.08,332.52 +351.190002,346.279999,349.630005,350.35,341.8,332.97 +349.660004,345.540009,347.579987,351.06,342.47,333.64 +351.089996,347.519989,349.799988,351.9,343.19,334.18 +351.269989,348.600006,349.309998,352.53,343.95,335.09 +351,348.320007,349.809998,353.21,344.6,335.82 +352.329987,350.209991,351.959991,353.5,345.14,336.6 +353.420013,351.25,352.26001,353.92,345.66,337.39 +352.890015,349.690002,351.190002,354.47,346.14,337.94 +354.470001,349.420013,353.809998,355.32,346.76,338.25 +355.109985,349.390015,349.98999,356.08,347.21,338.5 +364.630005,355.149994,362.579987,357.73,348.28,338.69 +364.25,358.850006,363.730011,359,349.3,339.34 +364.429993,356.059998,358.019989,360.54,349.93,339.31 +362.350006,355.920013,356.980011,361.72,350.61,339.57 +359.25,353.200012,358.350006,362.59,351.47,340.05 +358.950012,356.809998,358.480011,363,352.18,341.09 +357.920013,353.670013,354.5,363.58,352.64,341.54 +358.720001,353.380005,354.109985,364.45,353.22,341.92 +356.299988,351.880005,353.190002,364.97,353.55,342.32 +354.299988,351.25,352.559998,365.36,353.89,342.57 +354.179993,349.609985,352.089996,365.47,354.01,342.77 +353.5,349.660004,350.570007,365.64,354.16,343.01 +354.320007,351.540009,354.26001,365.72,354.39,343.29 +357.230011,354.130005,354.299988,366.06,354.64,343.52 +357.350006,352.920013,355.929993,366.56,354.94,343.58 +358.410004,354.529999,355.549988,367.04,355.12,343.62 +358.589996,354.01001,358.290009,367.54,355.42,343.52 +362.679993,358.600006,361.059998,368.12,355.92,343.88 +362.470001,359.25,360.200012,368.33,356.24,344.55 +363.390015,360.600006,362.459991,368.45,356.86,345.4 +366.470001,360,360.470001,368.23,356.76,345.94 +362.799988,359.26001,361.670013,367.97,356.65,346.14 +363.299988,360.869995,361.799988,367.31,356.84,346.97 +364.829987,361.769989,363.149994,367.1,357.15,347.59 +366.609985,364.51001,365.519989,367.06,357.51,348.55 +370.429993,365.470001,367.779999,367.92,357.97,348.7 +370.839996,365.970001,367.820007,368.63,358.64,349.25 +370.220001,368.26001,369.5,368.87,359.41,350.33 +370.200012,367.519989,367.859985,369.38,360.14,351.29 +371.329987,367.790009,370.429993,370.29,361.04,352.07 +373.339996,368.459991,370.480011,371.27,361.95,352.98 +371.339996,366.730011,366.820007,372.24,362.77,353.75 +367.200012,362.940002,363.279999,373.04,363.22,354.18 +363.420013,359.76001,360.160004,373.4,363.51,354.4 +361.890015,357.269989,361.709991,373.65,363.8,354.6 +360.790009,357.950012,359.420013,373.66,363.99,354.88 +360.519989,354.269989,357.779999,373.93,363.97,354.73 +359.470001,356.670013,357.059998,373.64,363.77,354.76 +357.5,348.549988,350.299988,373.97,363.27,353.66 +350,345.410004,348.079987,373.49,362.55,352.72 +348.23999,342.130005,343.040009,372.54,361.68,351.86 +344.01001,339.51001,343.690002,371.7,360.78,350.78 +345.940002,342.369995,345.059998,370.94,359.95,349.74 +348.76001,341.859985,346.339996,370.53,359.11,348.37 +345.899994,342.829987,345.450012,369.59,358.1,347.19 +349.51001,345.5,348.559998,368.45,357.14,346.28 +349.600006,344.920013,348.429993,367.37,356.17,345.25 +348.660004,343.019989,345.660004,366.66,354.98,343.62 +348.440002,343.880005,345.089996,365.77,353.84,342.26 +349.940002,345.829987,346.230011,364.75,352.63,341.1 +348.410004,344.149994,345.390015,363.44,351.38,339.95 +344.829987,339.959991,340.890015,362.15,350.08,338.58 +342.690002,338.450012,338.660004,360.92,348.85,337.36 +340,334.350006,335.859985,359.95,347.64,335.89 +338.880005,333.48999,336.839996,358.88,346.39,334.63 +339.850006,337.769989,338.630005,357.75,345.35,333.7 +339.619995,336.549988,336.899994,356.39,344.31,333.12 +338.320007,335.459991,336.160004,355.34,343.26,332.06 +336.190002,330.579987,331.709991,353.93,342.33,331.49 +338.359985,332.179993,337.410004,353.51,341.8,330.67 +341.48999,337.5,341.329987,352.96,341.71,330.65 +345.329987,340.579987,343.75,353.05,341.72,330.68 +349.390015,344.5,349.019989,353.35,341.92,330.65 +354.350006,349.790009,351.809998,353.4,342.19,331.28 +354.029999,344.059998,346.630005,354.5,342.25,330.66 +346.950012,344.299988,346.170013,354.24,342.13,330.74 +348,344.690002,346.299988,354.02,342.02,330.86 +350.109985,346.880005,348.179993,353.85,342.15,331.29 +351.200012,348.600006,350.559998,353.79,342.42,331.72 +350.649994,348.809998,350.01001,353.6,342.61,332.1 +355.950012,351.25,354.25,354.02,343.05,332.41 +357.309998,354.480011,356.790009,354.43,343.85,333.33 +360,357.230011,359.859985,355.15,344.91,334.42 +360.559998,358.070007,358.929993,355.86,346.06,335.92 +362.609985,358.179993,361.329987,356.95,347.29,337.25 +363.029999,360.25,361,358.18,348.4,338.3 +362.459991,360.049988,361.799988,359.25,349.65,339.54 +363.190002,361.23999,362.679993,360.41,350.98,340.92 +362.640015,359.579987,361.339996,361.47,352.46,342.62 +362.119995,359.209991,360.049988,362.33,353.59,344.3 +361.519989,358.299988,358.690002,363.25,354.46,345.41