From 9c684c124cf3c703af0454ddd42b11022f4355af Mon Sep 17 00:00:00 2001 From: Raphanus Lo Date: Mon, 15 Aug 2022 00:07:26 +0800 Subject: [PATCH] feature: add G-H filter and Kalman filter - implement G-H (alpha beta) filter and Kalman filter - compare the predict accurateness with other indicator --- pkg/indicator/ghfilter.go | 96 + pkg/indicator/ghfilter_callbacks.go | 15 + pkg/indicator/ghfilter_test.go | 6151 ++++++++++++++++++++++ pkg/indicator/kalmanfilter.go | 108 + pkg/indicator/kalmanfilter_callbacks.go | 15 + pkg/indicator/kalmanfilter_test.go | 6191 +++++++++++++++++++++++ 6 files changed, 12576 insertions(+) create mode 100644 pkg/indicator/ghfilter.go create mode 100644 pkg/indicator/ghfilter_callbacks.go create mode 100644 pkg/indicator/ghfilter_test.go create mode 100644 pkg/indicator/kalmanfilter.go create mode 100644 pkg/indicator/kalmanfilter_callbacks.go create mode 100644 pkg/indicator/kalmanfilter_test.go diff --git a/pkg/indicator/ghfilter.go b/pkg/indicator/ghfilter.go new file mode 100644 index 000000000..97db2fbd6 --- /dev/null +++ b/pkg/indicator/ghfilter.go @@ -0,0 +1,96 @@ +package indicator + +import ( + "github.com/c9s/bbgo/pkg/datatype/floats" + "github.com/c9s/bbgo/pkg/types" + "math" +) + +// Refer: https://jamesgoulding.com/Research_II/Ehlers/Ehlers%20(Optimal%20Tracking%20Filters).doc +// Ehler's Optimal Tracking Filter, an alpha-beta filter, also called g-h filter + +//go:generate callbackgen -type GHFilter +type GHFilter struct { + types.SeriesBase + types.IntervalWindow + a float64 // maneuverability uncertainty + b float64 // measurement uncertainty + lastMeasurement float64 + Values floats.Slice + + UpdateCallbacks []func(value float64) +} + +func (inc *GHFilter) Update(value float64) { + inc.update(value, math.Abs(value-inc.lastMeasurement)) +} + +func (inc *GHFilter) update(value, uncertainty float64) { + if len(inc.Values) == 0 { + inc.a = 0 + inc.b = uncertainty / 2 + inc.lastMeasurement = value + inc.Values.Push(value) + return + } + multiplier := 2.0 / float64(1+inc.Window) // EMA multiplier + inc.a = multiplier*(value-inc.lastMeasurement) + (1-multiplier)*inc.a + inc.b = multiplier*uncertainty/2 + (1-multiplier)*inc.b + lambda := inc.a / inc.b + lambda2 := lambda * lambda + alpha := (-lambda2 + math.Sqrt(lambda2*lambda2+16*lambda2)) / 8 + filtered := alpha*value + (1-alpha)*inc.Values.Last() + inc.Values.Push(filtered) + inc.lastMeasurement = value +} + +func (inc *GHFilter) Index(i int) float64 { + if inc.Values == nil { + return 0.0 + } + return inc.Values.Index(i) +} + +func (inc *GHFilter) Length() int { + if inc.Values == nil { + return 0 + } + return inc.Values.Length() +} + +func (inc *GHFilter) Last() float64 { + if inc.Values == nil { + return 0.0 + } + return inc.Values.Last() +} + +var _ types.SeriesExtend = &GHFilter{} + +func (inc *GHFilter) PushK(k types.KLine) { + inc.update(k.Close.Float64(), k.High.Float64()-k.Low.Float64()) +} + +func (inc *GHFilter) CalculateAndUpdate(allKLines []types.KLine) { + if inc.Values != nil { + k := allKLines[len(allKLines)-1] + inc.PushK(k) + inc.EmitUpdate(inc.Last()) + return + } + for _, k := range allKLines { + inc.PushK(k) + inc.EmitUpdate(inc.Last()) + } +} + +func (inc *GHFilter) handleKLineWindowUpdate(interval types.Interval, window types.KLineWindow) { + if inc.Interval != interval { + return + } + inc.CalculateAndUpdate(window) +} + +func (inc *GHFilter) Bind(updater KLineWindowUpdater) { + updater.OnKLineWindowUpdate(inc.handleKLineWindowUpdate) +} diff --git a/pkg/indicator/ghfilter_callbacks.go b/pkg/indicator/ghfilter_callbacks.go new file mode 100644 index 000000000..345355a4e --- /dev/null +++ b/pkg/indicator/ghfilter_callbacks.go @@ -0,0 +1,15 @@ +// Code generated by "callbackgen -type GHFilter"; DO NOT EDIT. + +package indicator + +import () + +func (inc *GHFilter) OnUpdate(cb func(value float64)) { + inc.UpdateCallbacks = append(inc.UpdateCallbacks, cb) +} + +func (inc *GHFilter) EmitUpdate(value float64) { + for _, cb := range inc.UpdateCallbacks { + cb(value) + } +} diff --git a/pkg/indicator/ghfilter_test.go b/pkg/indicator/ghfilter_test.go new file mode 100644 index 000000000..ac7439933 --- /dev/null +++ b/pkg/indicator/ghfilter_test.go @@ -0,0 +1,6151 @@ +package indicator + +import ( + "encoding/json" + "math" + "testing" + + "github.com/c9s/bbgo/pkg/types" +) + +// generated from Binance 2022/07/27 00:00 +// https://www.binance.com/api/v3/klines?symbol=ETHUSDT&interval=5m&endTime=1658851200000&limit=1000 +var testGHFilterDataEthusdt5m = []byte(`[ + { + "open": 1591.11, + "high": 1593.62, + "low": 1589.04, + "close": 1590.14 + }, + { + "open": 1590.14, + "high": 1596.51, + "low": 1590.13, + "close": 1592.06 + }, + { + "open": 1592.07, + "high": 1594.41, + "low": 1586.05, + "close": 1587.02 + }, + { + "open": 1587.02, + "high": 1588.38, + "low": 1583.86, + "close": 1585.33 + }, + { + "open": 1585.34, + "high": 1595.2, + "low": 1583.74, + "close": 1594.69 + }, + { + "open": 1594.69, + "high": 1594.75, + "low": 1589.89, + "close": 1591.36 + }, + { + "open": 1591.35, + "high": 1592.55, + "low": 1586.36, + "close": 1588.95 + }, + { + "open": 1588.95, + "high": 1589.75, + "low": 1588.39, + "close": 1589.38 + }, + { + "open": 1589.38, + "high": 1589.39, + "low": 1586.17, + "close": 1588.53 + }, + { + "open": 1588.52, + "high": 1588.62, + "low": 1581.95, + "close": 1583.4 + }, + { + "open": 1583.4, + "high": 1584.67, + "low": 1582.1, + "close": 1582.36 + }, + { + "open": 1582.35, + "high": 1584.29, + "low": 1577.82, + "close": 1578.14 + }, + { + "open": 1578.14, + "high": 1581.95, + "low": 1575.72, + "close": 1581.52 + }, + { + "open": 1581.52, + "high": 1584.86, + "low": 1578.51, + "close": 1580.88 + }, + { + "open": 1580.88, + "high": 1581.77, + "low": 1578.74, + "close": 1581.11 + }, + { + "open": 1581.1, + "high": 1582.72, + "low": 1579.07, + "close": 1579.4 + }, + { + "open": 1579.4, + "high": 1580.93, + "low": 1578, + "close": 1579.6 + }, + { + "open": 1579.59, + "high": 1583.81, + "low": 1579.59, + "close": 1582.7 + }, + { + "open": 1582.7, + "high": 1583, + "low": 1577.24, + "close": 1579.45 + }, + { + "open": 1579.46, + "high": 1581.59, + "low": 1577.44, + "close": 1579.59 + }, + { + "open": 1579.58, + "high": 1581.41, + "low": 1579.22, + "close": 1580.56 + }, + { + "open": 1580.57, + "high": 1586.23, + "low": 1579.86, + "close": 1584.23 + }, + { + "open": 1584.22, + "high": 1587.36, + "low": 1584.22, + "close": 1585.15 + }, + { + "open": 1585.15, + "high": 1585.15, + "low": 1579.83, + "close": 1583.75 + }, + { + "open": 1583.74, + "high": 1592.49, + "low": 1583.45, + "close": 1587.76 + }, + { + "open": 1587.76, + "high": 1590.7, + "low": 1585.62, + "close": 1587.5 + }, + { + "open": 1587.51, + "high": 1587.51, + "low": 1579.53, + "close": 1581.16 + }, + { + "open": 1581.15, + "high": 1585.71, + "low": 1581.15, + "close": 1582.47 + }, + { + "open": 1582.46, + "high": 1582.86, + "low": 1567.58, + "close": 1571.52 + }, + { + "open": 1571.53, + "high": 1577.8, + "low": 1571.03, + "close": 1575.16 + }, + { + "open": 1575.16, + "high": 1578.06, + "low": 1572.18, + "close": 1576.66 + }, + { + "open": 1576.66, + "high": 1578, + "low": 1574.62, + "close": 1577.21 + }, + { + "open": 1577.2, + "high": 1584.57, + "low": 1576.61, + "close": 1584.05 + }, + { + "open": 1584.06, + "high": 1585.61, + "low": 1580, + "close": 1582.08 + }, + { + "open": 1582.08, + "high": 1583.4, + "low": 1579.43, + "close": 1579.43 + }, + { + "open": 1579.43, + "high": 1579.98, + "low": 1574.53, + "close": 1575.06 + }, + { + "open": 1575.06, + "high": 1578.52, + "low": 1574.57, + "close": 1576.49 + }, + { + "open": 1576.5, + "high": 1577, + "low": 1572.5, + "close": 1573.26 + }, + { + "open": 1573.26, + "high": 1579.41, + "low": 1573.06, + "close": 1578.35 + }, + { + "open": 1578.35, + "high": 1585, + "low": 1577.16, + "close": 1584.32 + }, + { + "open": 1584.31, + "high": 1587.97, + "low": 1580.67, + "close": 1585.7 + }, + { + "open": 1585.7, + "high": 1588.35, + "low": 1584.37, + "close": 1585.95 + }, + { + "open": 1585.94, + "high": 1587.09, + "low": 1580.66, + "close": 1580.97 + }, + { + "open": 1580.97, + "high": 1583.38, + "low": 1577, + "close": 1581.64 + }, + { + "open": 1581.64, + "high": 1586.79, + "low": 1581.22, + "close": 1585.42 + }, + { + "open": 1585.42, + "high": 1585.42, + "low": 1581.67, + "close": 1582.37 + }, + { + "open": 1582.38, + "high": 1584.86, + "low": 1581.01, + "close": 1581.02 + }, + { + "open": 1581.03, + "high": 1582.05, + "low": 1578.99, + "close": 1579.46 + }, + { + "open": 1579.46, + "high": 1579.89, + "low": 1566.85, + "close": 1567.99 + }, + { + "open": 1567.99, + "high": 1567.99, + "low": 1553.2, + "close": 1554.87 + }, + { + "open": 1554.87, + "high": 1558, + "low": 1546.9, + "close": 1550.4 + }, + { + "open": 1550.4, + "high": 1554.98, + "low": 1546.27, + "close": 1549.67 + }, + { + "open": 1549.68, + "high": 1555, + "low": 1546.97, + "close": 1553.88 + }, + { + "open": 1553.89, + "high": 1557.86, + "low": 1553.6, + "close": 1557.85 + }, + { + "open": 1557.86, + "high": 1558.37, + "low": 1554.9, + "close": 1556.3 + }, + { + "open": 1556.31, + "high": 1557.4, + "low": 1552.81, + "close": 1557.18 + }, + { + "open": 1557.18, + "high": 1563.78, + "low": 1556.5, + "close": 1562.72 + }, + { + "open": 1562.72, + "high": 1564.11, + "low": 1558.76, + "close": 1560.64 + }, + { + "open": 1560.64, + "high": 1562.31, + "low": 1560.5, + "close": 1561.24 + }, + { + "open": 1561.25, + "high": 1565.69, + "low": 1561.23, + "close": 1564.79 + }, + { + "open": 1564.79, + "high": 1565.33, + "low": 1558.23, + "close": 1559.9 + }, + { + "open": 1559.89, + "high": 1561.77, + "low": 1555.87, + "close": 1560.79 + }, + { + "open": 1560.78, + "high": 1562.07, + "low": 1557.89, + "close": 1560.36 + }, + { + "open": 1560.36, + "high": 1561.2, + "low": 1556.13, + "close": 1558.26 + }, + { + "open": 1558.25, + "high": 1563.12, + "low": 1558.25, + "close": 1562.35 + }, + { + "open": 1562.36, + "high": 1564.02, + "low": 1561.76, + "close": 1563.32 + }, + { + "open": 1563.31, + "high": 1564.29, + "low": 1557.79, + "close": 1559.87 + }, + { + "open": 1559.86, + "high": 1562.71, + "low": 1558.77, + "close": 1559.8 + }, + { + "open": 1559.81, + "high": 1559.91, + "low": 1557.6, + "close": 1559.19 + }, + { + "open": 1559.2, + "high": 1559.95, + "low": 1554.3, + "close": 1557.16 + }, + { + "open": 1557.16, + "high": 1557.17, + "low": 1536.25, + "close": 1541.89 + }, + { + "open": 1541.89, + "high": 1544.39, + "low": 1538.55, + "close": 1539.33 + }, + { + "open": 1539.33, + "high": 1546.28, + "low": 1533.67, + "close": 1543.99 + }, + { + "open": 1543.99, + "high": 1544.5, + "low": 1538.21, + "close": 1539.17 + }, + { + "open": 1539.17, + "high": 1543.33, + "low": 1537.73, + "close": 1543 + }, + { + "open": 1543.2, + "high": 1544, + "low": 1535.81, + "close": 1541.12 + }, + { + "open": 1541.12, + "high": 1541.13, + "low": 1534.12, + "close": 1536.89 + }, + { + "open": 1536.9, + "high": 1539.09, + "low": 1528.25, + "close": 1531.02 + }, + { + "open": 1531.01, + "high": 1532.91, + "low": 1525.28, + "close": 1532.32 + }, + { + "open": 1532.33, + "high": 1537.58, + "low": 1532.32, + "close": 1535.07 + }, + { + "open": 1535.06, + "high": 1541.28, + "low": 1535.06, + "close": 1539.52 + }, + { + "open": 1539.53, + "high": 1539.85, + "low": 1533.37, + "close": 1536.22 + }, + { + "open": 1536.21, + "high": 1536.22, + "low": 1524.81, + "close": 1527.09 + }, + { + "open": 1527.1, + "high": 1529.2, + "low": 1520.62, + "close": 1525.04 + }, + { + "open": 1525.04, + "high": 1528.2, + "low": 1522.12, + "close": 1523.72 + }, + { + "open": 1523.71, + "high": 1525.54, + "low": 1519, + "close": 1522.82 + }, + { + "open": 1522.82, + "high": 1524.98, + "low": 1521, + "close": 1522.19 + }, + { + "open": 1522.19, + "high": 1524.27, + "low": 1512.68, + "close": 1513.27 + }, + { + "open": 1513.26, + "high": 1514.55, + "low": 1501.65, + "close": 1514.14 + }, + { + "open": 1514.14, + "high": 1524.43, + "low": 1513.03, + "close": 1520.08 + }, + { + "open": 1520.08, + "high": 1525.07, + "low": 1518.63, + "close": 1520.61 + }, + { + "open": 1520.61, + "high": 1525.68, + "low": 1517.43, + "close": 1524.86 + }, + { + "open": 1524.86, + "high": 1525.04, + "low": 1519.65, + "close": 1520.26 + }, + { + "open": 1520.27, + "high": 1521.19, + "low": 1517.91, + "close": 1518.46 + }, + { + "open": 1518.46, + "high": 1525.25, + "low": 1518.46, + "close": 1524.83 + }, + { + "open": 1524.84, + "high": 1526.94, + "low": 1521.69, + "close": 1521.9 + }, + { + "open": 1521.9, + "high": 1524.8, + "low": 1519.25, + "close": 1519.88 + }, + { + "open": 1519.88, + "high": 1520.5, + "low": 1517.33, + "close": 1518.76 + }, + { + "open": 1518.76, + "high": 1522.64, + "low": 1518.14, + "close": 1520.46 + }, + { + "open": 1520.46, + "high": 1522.96, + "low": 1518.63, + "close": 1522.52 + }, + { + "open": 1522.51, + "high": 1522.52, + "low": 1519.19, + "close": 1520.61 + }, + { + "open": 1520.61, + "high": 1526.26, + "low": 1519.52, + "close": 1526.1 + }, + { + "open": 1526.11, + "high": 1530.26, + "low": 1524.63, + "close": 1528.65 + }, + { + "open": 1528.65, + "high": 1529.64, + "low": 1521.24, + "close": 1523.18 + }, + { + "open": 1523.19, + "high": 1525.92, + "low": 1521.79, + "close": 1525.6 + }, + { + "open": 1525.61, + "high": 1525.79, + "low": 1522.78, + "close": 1525.31 + }, + { + "open": 1525.31, + "high": 1529.6, + "low": 1525.3, + "close": 1528.93 + }, + { + "open": 1528.93, + "high": 1530.33, + "low": 1527.02, + "close": 1527.61 + }, + { + "open": 1527.6, + "high": 1534, + "low": 1527.6, + "close": 1533.98 + }, + { + "open": 1533.98, + "high": 1537.3, + "low": 1532.24, + "close": 1536.49 + }, + { + "open": 1536.5, + "high": 1536.5, + "low": 1531.65, + "close": 1532.92 + }, + { + "open": 1532.92, + "high": 1532.92, + "low": 1529.1, + "close": 1529.58 + }, + { + "open": 1529.58, + "high": 1535.97, + "low": 1528.13, + "close": 1532.48 + }, + { + "open": 1532.49, + "high": 1533.45, + "low": 1530.29, + "close": 1531.01 + }, + { + "open": 1531.02, + "high": 1532.56, + "low": 1524.11, + "close": 1524.37 + }, + { + "open": 1524.36, + "high": 1534.58, + "low": 1524.28, + "close": 1529.52 + }, + { + "open": 1529.52, + "high": 1530.55, + "low": 1521.72, + "close": 1522.54 + }, + { + "open": 1522.55, + "high": 1526.64, + "low": 1522.45, + "close": 1526.49 + }, + { + "open": 1526.48, + "high": 1530.2, + "low": 1525.07, + "close": 1526.92 + }, + { + "open": 1526.92, + "high": 1527.65, + "low": 1525, + "close": 1526.44 + }, + { + "open": 1526.43, + "high": 1527.68, + "low": 1525.46, + "close": 1526.05 + }, + { + "open": 1526.05, + "high": 1526.27, + "low": 1516.23, + "close": 1516.52 + }, + { + "open": 1516.23, + "high": 1520.67, + "low": 1509.21, + "close": 1520.48 + }, + { + "open": 1520.48, + "high": 1530.83, + "low": 1519.77, + "close": 1529.59 + }, + { + "open": 1529.6, + "high": 1531.12, + "low": 1526.99, + "close": 1531.11 + }, + { + "open": 1531.12, + "high": 1533.79, + "low": 1529.25, + "close": 1531.72 + }, + { + "open": 1531.73, + "high": 1532.96, + "low": 1528.52, + "close": 1529.64 + }, + { + "open": 1529.64, + "high": 1530.49, + "low": 1523.16, + "close": 1524.37 + }, + { + "open": 1524.38, + "high": 1524.58, + "low": 1517.86, + "close": 1521.06 + }, + { + "open": 1521.07, + "high": 1530.49, + "low": 1515.75, + "close": 1526.14 + }, + { + "open": 1526.13, + "high": 1526.98, + "low": 1521.57, + "close": 1523.57 + }, + { + "open": 1523.56, + "high": 1523.68, + "low": 1520.39, + "close": 1521.17 + }, + { + "open": 1521.18, + "high": 1521.36, + "low": 1516.78, + "close": 1516.79 + }, + { + "open": 1516.79, + "high": 1521.81, + "low": 1516.48, + "close": 1520.2 + }, + { + "open": 1520.2, + "high": 1524.79, + "low": 1516.97, + "close": 1523.67 + }, + { + "open": 1523.67, + "high": 1527.82, + "low": 1522.79, + "close": 1525.77 + }, + { + "open": 1525.77, + "high": 1527.68, + "low": 1520.25, + "close": 1524.24 + }, + { + "open": 1524.23, + "high": 1530.88, + "low": 1523.28, + "close": 1529.87 + }, + { + "open": 1529.88, + "high": 1532.92, + "low": 1527.6, + "close": 1530.66 + }, + { + "open": 1530.65, + "high": 1531.32, + "low": 1528.31, + "close": 1530.85 + }, + { + "open": 1530.85, + "high": 1532.99, + "low": 1527.78, + "close": 1528.68 + }, + { + "open": 1528.69, + "high": 1529.92, + "low": 1527.13, + "close": 1527.14 + }, + { + "open": 1527.13, + "high": 1527.14, + "low": 1518.31, + "close": 1521.16 + }, + { + "open": 1521.16, + "high": 1530.26, + "low": 1521.15, + "close": 1526.67 + }, + { + "open": 1526.68, + "high": 1528.17, + "low": 1522.22, + "close": 1522.33 + }, + { + "open": 1522.33, + "high": 1526.23, + "low": 1521.09, + "close": 1523.59 + }, + { + "open": 1523.59, + "high": 1523.99, + "low": 1517.48, + "close": 1518.86 + }, + { + "open": 1518.85, + "high": 1523.43, + "low": 1513.25, + "close": 1521.57 + }, + { + "open": 1521.58, + "high": 1521.58, + "low": 1511.11, + "close": 1513.4 + }, + { + "open": 1513.4, + "high": 1515.26, + "low": 1507.7, + "close": 1508.31 + }, + { + "open": 1508.31, + "high": 1512.48, + "low": 1503.49, + "close": 1505.89 + }, + { + "open": 1505.88, + "high": 1509.76, + "low": 1494.63, + "close": 1500.13 + }, + { + "open": 1500.13, + "high": 1510.52, + "low": 1498.39, + "close": 1507.22 + }, + { + "open": 1507.21, + "high": 1508, + "low": 1495.51, + "close": 1501.06 + }, + { + "open": 1501.06, + "high": 1506.84, + "low": 1500.04, + "close": 1504.99 + }, + { + "open": 1505, + "high": 1507.4, + "low": 1497.16, + "close": 1498.46 + }, + { + "open": 1498.46, + "high": 1505.37, + "low": 1495, + "close": 1501.44 + }, + { + "open": 1501.36, + "high": 1504.4, + "low": 1500.27, + "close": 1500.55 + }, + { + "open": 1500.55, + "high": 1502.52, + "low": 1496.63, + "close": 1501.29 + }, + { + "open": 1501.29, + "high": 1501.88, + "low": 1496, + "close": 1496.37 + }, + { + "open": 1496.37, + "high": 1506.67, + "low": 1488, + "close": 1505.21 + }, + { + "open": 1505.21, + "high": 1508.6, + "low": 1502.24, + "close": 1508 + }, + { + "open": 1507.99, + "high": 1514.07, + "low": 1507.03, + "close": 1512.2 + }, + { + "open": 1512.2, + "high": 1513.73, + "low": 1510.89, + "close": 1512.64 + }, + { + "open": 1512.65, + "high": 1514.52, + "low": 1508.88, + "close": 1513.17 + }, + { + "open": 1513.17, + "high": 1513.95, + "low": 1511.68, + "close": 1511.94 + }, + { + "open": 1511.94, + "high": 1512.69, + "low": 1508, + "close": 1508.97 + }, + { + "open": 1508.97, + "high": 1511.92, + "low": 1508, + "close": 1511.71 + }, + { + "open": 1511.71, + "high": 1512.21, + "low": 1502.06, + "close": 1502.3 + }, + { + "open": 1502.29, + "high": 1505.5, + "low": 1499.75, + "close": 1503.8 + }, + { + "open": 1503.8, + "high": 1510.52, + "low": 1497.04, + "close": 1499.02 + }, + { + "open": 1499.03, + "high": 1500.56, + "low": 1497.35, + "close": 1499.88 + }, + { + "open": 1499.88, + "high": 1507.12, + "low": 1498.43, + "close": 1499 + }, + { + "open": 1498.99, + "high": 1501.4, + "low": 1489.93, + "close": 1493.7 + }, + { + "open": 1493.71, + "high": 1495.73, + "low": 1490.72, + "close": 1493.73 + }, + { + "open": 1493.72, + "high": 1495.82, + "low": 1492.44, + "close": 1493.23 + }, + { + "open": 1493.23, + "high": 1501.75, + "low": 1493.06, + "close": 1501.54 + }, + { + "open": 1501.54, + "high": 1506.81, + "low": 1500.45, + "close": 1506.61 + }, + { + "open": 1506.6, + "high": 1507.9, + "low": 1505.1, + "close": 1505.95 + }, + { + "open": 1505.95, + "high": 1509.42, + "low": 1505.69, + "close": 1508.9 + }, + { + "open": 1508.9, + "high": 1516.09, + "low": 1508.3, + "close": 1513.84 + }, + { + "open": 1513.83, + "high": 1516.35, + "low": 1510.74, + "close": 1512 + }, + { + "open": 1512, + "high": 1516.35, + "low": 1511.43, + "close": 1513.33 + }, + { + "open": 1513.25, + "high": 1518.68, + "low": 1511.56, + "close": 1517.19 + }, + { + "open": 1517.18, + "high": 1524.05, + "low": 1516.45, + "close": 1517.64 + }, + { + "open": 1517.64, + "high": 1519.51, + "low": 1514.37, + "close": 1518.03 + }, + { + "open": 1518.04, + "high": 1520.21, + "low": 1516.06, + "close": 1518.91 + }, + { + "open": 1518.91, + "high": 1519.8, + "low": 1516.06, + "close": 1518.1 + }, + { + "open": 1518.11, + "high": 1518.11, + "low": 1515.6, + "close": 1516.43 + }, + { + "open": 1516.43, + "high": 1521.28, + "low": 1515.79, + "close": 1519.82 + }, + { + "open": 1519.81, + "high": 1519.98, + "low": 1518.42, + "close": 1519.68 + }, + { + "open": 1519.69, + "high": 1521.68, + "low": 1518.67, + "close": 1520.28 + }, + { + "open": 1520.29, + "high": 1521.65, + "low": 1519.08, + "close": 1520.24 + }, + { + "open": 1520.25, + "high": 1527.76, + "low": 1520.24, + "close": 1526.28 + }, + { + "open": 1526.27, + "high": 1526.99, + "low": 1522.67, + "close": 1525.11 + }, + { + "open": 1525.1, + "high": 1529.05, + "low": 1523.62, + "close": 1525.51 + }, + { + "open": 1525.5, + "high": 1525.51, + "low": 1520.4, + "close": 1521.62 + }, + { + "open": 1521.62, + "high": 1525.97, + "low": 1521.59, + "close": 1523.41 + }, + { + "open": 1523.42, + "high": 1524.16, + "low": 1523, + "close": 1523.81 + }, + { + "open": 1523.8, + "high": 1523.99, + "low": 1522, + "close": 1523.43 + }, + { + "open": 1523.42, + "high": 1524.99, + "low": 1523.42, + "close": 1524.78 + }, + { + "open": 1524.79, + "high": 1525.35, + "low": 1523.06, + "close": 1523.24 + }, + { + "open": 1523.24, + "high": 1523.24, + "low": 1518.44, + "close": 1520.29 + }, + { + "open": 1520.28, + "high": 1521.95, + "low": 1518.01, + "close": 1521.07 + }, + { + "open": 1521.08, + "high": 1521.3, + "low": 1519.22, + "close": 1519.35 + }, + { + "open": 1519.35, + "high": 1519.63, + "low": 1516.3, + "close": 1517.68 + }, + { + "open": 1517.67, + "high": 1518.24, + "low": 1515.23, + "close": 1516.39 + }, + { + "open": 1516.39, + "high": 1520.22, + "low": 1515.31, + "close": 1519.56 + }, + { + "open": 1519.55, + "high": 1524.64, + "low": 1518, + "close": 1522.74 + }, + { + "open": 1522.74, + "high": 1523.93, + "low": 1520.21, + "close": 1520.29 + }, + { + "open": 1520.29, + "high": 1523.26, + "low": 1520.1, + "close": 1522.73 + }, + { + "open": 1522.74, + "high": 1541.63, + "low": 1522.73, + "close": 1539.67 + }, + { + "open": 1539.67, + "high": 1541.92, + "low": 1535.13, + "close": 1538.82 + }, + { + "open": 1538.82, + "high": 1547.2, + "low": 1538.27, + "close": 1545.55 + }, + { + "open": 1545.55, + "high": 1550, + "low": 1543.77, + "close": 1545.59 + }, + { + "open": 1545.6, + "high": 1546.69, + "low": 1539.57, + "close": 1539.68 + }, + { + "open": 1539.67, + "high": 1543.83, + "low": 1538.46, + "close": 1542.91 + }, + { + "open": 1542.91, + "high": 1545.89, + "low": 1542.34, + "close": 1543.44 + }, + { + "open": 1543.43, + "high": 1544.62, + "low": 1541.84, + "close": 1541.85 + }, + { + "open": 1541.85, + "high": 1554.35, + "low": 1539.93, + "close": 1545.74 + }, + { + "open": 1545.77, + "high": 1554.47, + "low": 1545, + "close": 1549.46 + }, + { + "open": 1549.46, + "high": 1552.24, + "low": 1549.45, + "close": 1551.24 + }, + { + "open": 1551.25, + "high": 1554.87, + "low": 1550.63, + "close": 1551.87 + }, + { + "open": 1551.86, + "high": 1553.53, + "low": 1545.58, + "close": 1546.72 + }, + { + "open": 1546.71, + "high": 1552.74, + "low": 1546.65, + "close": 1551.27 + }, + { + "open": 1551.26, + "high": 1555.26, + "low": 1549.71, + "close": 1551.45 + }, + { + "open": 1551.44, + "high": 1553.45, + "low": 1548.31, + "close": 1548.54 + }, + { + "open": 1548.54, + "high": 1549.16, + "low": 1546.57, + "close": 1547.39 + }, + { + "open": 1547.38, + "high": 1549.99, + "low": 1546.86, + "close": 1548.82 + }, + { + "open": 1548.82, + "high": 1554.04, + "low": 1544.92, + "close": 1552.11 + }, + { + "open": 1552.11, + "high": 1553.01, + "low": 1548.42, + "close": 1548.67 + }, + { + "open": 1548.66, + "high": 1577.24, + "low": 1548.66, + "close": 1568.11 + }, + { + "open": 1568.11, + "high": 1569.11, + "low": 1562, + "close": 1563.15 + }, + { + "open": 1563.16, + "high": 1572.49, + "low": 1562.7, + "close": 1566.75 + }, + { + "open": 1566.76, + "high": 1567.67, + "low": 1563.83, + "close": 1564.03 + }, + { + "open": 1564.03, + "high": 1566.14, + "low": 1561.79, + "close": 1563.28 + }, + { + "open": 1563.27, + "high": 1569.75, + "low": 1562.43, + "close": 1569.75 + }, + { + "open": 1569.75, + "high": 1571.84, + "low": 1566.17, + "close": 1569.27 + }, + { + "open": 1569.27, + "high": 1569.28, + "low": 1563.78, + "close": 1563.84 + }, + { + "open": 1563.84, + "high": 1565.98, + "low": 1563.84, + "close": 1564.01 + }, + { + "open": 1564.01, + "high": 1566, + "low": 1562.21, + "close": 1563.5 + }, + { + "open": 1563.51, + "high": 1566.46, + "low": 1562.51, + "close": 1564.33 + }, + { + "open": 1564.34, + "high": 1566.17, + "low": 1564.07, + "close": 1565.09 + }, + { + "open": 1565.09, + "high": 1570.37, + "low": 1565.09, + "close": 1567.3 + }, + { + "open": 1567.29, + "high": 1567.3, + "low": 1564.01, + "close": 1564.01 + }, + { + "open": 1564.01, + "high": 1564.08, + "low": 1560.55, + "close": 1560.71 + }, + { + "open": 1560.71, + "high": 1565.8, + "low": 1560.71, + "close": 1563.98 + }, + { + "open": 1563.97, + "high": 1566.38, + "low": 1563.86, + "close": 1564.27 + }, + { + "open": 1564.28, + "high": 1564.71, + "low": 1560.12, + "close": 1561.13 + }, + { + "open": 1561.13, + "high": 1561.66, + "low": 1551.32, + "close": 1556.13 + }, + { + "open": 1556.13, + "high": 1562.78, + "low": 1549.89, + "close": 1559.92 + }, + { + "open": 1559.92, + "high": 1559.97, + "low": 1545.67, + "close": 1552.36 + }, + { + "open": 1552.37, + "high": 1554.87, + "low": 1549.84, + "close": 1550.13 + }, + { + "open": 1550.12, + "high": 1555.85, + "low": 1549.76, + "close": 1553.41 + }, + { + "open": 1553.41, + "high": 1562.56, + "low": 1553.08, + "close": 1560.89 + }, + { + "open": 1560.9, + "high": 1561.67, + "low": 1556.7, + "close": 1557.88 + }, + { + "open": 1557.87, + "high": 1559.82, + "low": 1555.63, + "close": 1558.56 + }, + { + "open": 1558.56, + "high": 1558.91, + "low": 1555.59, + "close": 1557.08 + }, + { + "open": 1557.09, + "high": 1557.56, + "low": 1554.21, + "close": 1555.63 + }, + { + "open": 1555.62, + "high": 1556.44, + "low": 1553.5, + "close": 1556.34 + }, + { + "open": 1556.34, + "high": 1560.77, + "low": 1555.66, + "close": 1559.82 + }, + { + "open": 1559.83, + "high": 1567.93, + "low": 1559.82, + "close": 1561.87 + }, + { + "open": 1561.88, + "high": 1567.23, + "low": 1561.69, + "close": 1564.58 + }, + { + "open": 1564.58, + "high": 1565.55, + "low": 1561.26, + "close": 1561.58 + }, + { + "open": 1561.58, + "high": 1563.41, + "low": 1557.54, + "close": 1557.74 + }, + { + "open": 1557.73, + "high": 1559.22, + "low": 1556.8, + "close": 1557.69 + }, + { + "open": 1557.7, + "high": 1565.46, + "low": 1557.69, + "close": 1565.18 + }, + { + "open": 1565.18, + "high": 1566.39, + "low": 1563.34, + "close": 1564.35 + }, + { + "open": 1564.35, + "high": 1565.13, + "low": 1561.71, + "close": 1561.71 + }, + { + "open": 1561.72, + "high": 1561.85, + "low": 1557.41, + "close": 1558.38 + }, + { + "open": 1558.38, + "high": 1559.17, + "low": 1552.3, + "close": 1554.71 + }, + { + "open": 1554.7, + "high": 1555.89, + "low": 1552.21, + "close": 1553.36 + }, + { + "open": 1553.35, + "high": 1556.24, + "low": 1551.78, + "close": 1555.12 + }, + { + "open": 1555.12, + "high": 1557.49, + "low": 1553.78, + "close": 1554.54 + }, + { + "open": 1554.54, + "high": 1554.55, + "low": 1545.75, + "close": 1550.29 + }, + { + "open": 1550.29, + "high": 1554.52, + "low": 1549.21, + "close": 1552.37 + }, + { + "open": 1552.38, + "high": 1554.16, + "low": 1551.93, + "close": 1552.33 + }, + { + "open": 1552.33, + "high": 1553.41, + "low": 1551.41, + "close": 1551.65 + }, + { + "open": 1551.65, + "high": 1552.49, + "low": 1551, + "close": 1551.51 + }, + { + "open": 1551.51, + "high": 1556.79, + "low": 1550.86, + "close": 1553.86 + }, + { + "open": 1553.85, + "high": 1557.95, + "low": 1553.28, + "close": 1555.2 + }, + { + "open": 1555.19, + "high": 1555.45, + "low": 1546.9, + "close": 1553.41 + }, + { + "open": 1553.4, + "high": 1554.25, + "low": 1551.34, + "close": 1551.35 + }, + { + "open": 1551.35, + "high": 1553.57, + "low": 1551.1, + "close": 1551.67 + }, + { + "open": 1551.67, + "high": 1555.66, + "low": 1550.68, + "close": 1554.05 + }, + { + "open": 1554.09, + "high": 1560.4, + "low": 1554.09, + "close": 1559.55 + }, + { + "open": 1559.56, + "high": 1561.81, + "low": 1558.47, + "close": 1561.8 + }, + { + "open": 1561.81, + "high": 1561.81, + "low": 1558.59, + "close": 1559.39 + }, + { + "open": 1559.39, + "high": 1560.98, + "low": 1558.91, + "close": 1558.95 + }, + { + "open": 1558.96, + "high": 1563.63, + "low": 1557.85, + "close": 1558.69 + }, + { + "open": 1558.7, + "high": 1561.62, + "low": 1556.87, + "close": 1561.25 + }, + { + "open": 1561.25, + "high": 1572, + "low": 1560.1, + "close": 1564.23 + }, + { + "open": 1564.22, + "high": 1565.96, + "low": 1563.01, + "close": 1564.81 + }, + { + "open": 1564.81, + "high": 1579, + "low": 1563.25, + "close": 1577.63 + }, + { + "open": 1577.63, + "high": 1592.55, + "low": 1575.76, + "close": 1591.16 + }, + { + "open": 1591.17, + "high": 1603.78, + "low": 1590.69, + "close": 1594.31 + }, + { + "open": 1594.31, + "high": 1600.91, + "low": 1593.95, + "close": 1594.48 + }, + { + "open": 1594.47, + "high": 1599.53, + "low": 1589.52, + "close": 1590.67 + }, + { + "open": 1590.66, + "high": 1597.42, + "low": 1586.33, + "close": 1597.12 + }, + { + "open": 1597.12, + "high": 1608.5, + "low": 1596.08, + "close": 1607.22 + }, + { + "open": 1607.23, + "high": 1608.55, + "low": 1601.27, + "close": 1602.19 + }, + { + "open": 1602.19, + "high": 1604.2, + "low": 1599.23, + "close": 1601.92 + }, + { + "open": 1601.92, + "high": 1603.39, + "low": 1599.15, + "close": 1601.33 + }, + { + "open": 1601.33, + "high": 1604.92, + "low": 1600.37, + "close": 1604.71 + }, + { + "open": 1604.72, + "high": 1604.8, + "low": 1600.12, + "close": 1600.68 + }, + { + "open": 1600.69, + "high": 1605.89, + "low": 1600.23, + "close": 1604.66 + }, + { + "open": 1604.66, + "high": 1619.05, + "low": 1604.36, + "close": 1607.94 + }, + { + "open": 1607.95, + "high": 1613.84, + "low": 1605.04, + "close": 1612.56 + }, + { + "open": 1612.57, + "high": 1619.78, + "low": 1611.98, + "close": 1618.5 + }, + { + "open": 1618.49, + "high": 1619.35, + "low": 1612, + "close": 1614.67 + }, + { + "open": 1614.67, + "high": 1614.68, + "low": 1608.16, + "close": 1608.9 + }, + { + "open": 1608.89, + "high": 1612.96, + "low": 1608.89, + "close": 1610.35 + }, + { + "open": 1610.36, + "high": 1615.02, + "low": 1610.23, + "close": 1613.92 + }, + { + "open": 1613.91, + "high": 1614.82, + "low": 1611.6, + "close": 1612.52 + }, + { + "open": 1612.51, + "high": 1613.49, + "low": 1606.76, + "close": 1610.14 + }, + { + "open": 1610.14, + "high": 1615.15, + "low": 1608.17, + "close": 1613.23 + }, + { + "open": 1613.23, + "high": 1619.99, + "low": 1613.23, + "close": 1615.83 + }, + { + "open": 1615.84, + "high": 1617.05, + "low": 1610.28, + "close": 1610.39 + }, + { + "open": 1610.39, + "high": 1612.38, + "low": 1606.69, + "close": 1608.64 + }, + { + "open": 1608.64, + "high": 1611.02, + "low": 1608.16, + "close": 1610.05 + }, + { + "open": 1610.05, + "high": 1612, + "low": 1607.59, + "close": 1608.4 + }, + { + "open": 1608.39, + "high": 1609.76, + "low": 1603.32, + "close": 1603.65 + }, + { + "open": 1603.66, + "high": 1606.98, + "low": 1603.38, + "close": 1605.03 + }, + { + "open": 1605.03, + "high": 1611.78, + "low": 1605.03, + "close": 1610.29 + }, + { + "open": 1610.29, + "high": 1611.76, + "low": 1608.83, + "close": 1609.91 + }, + { + "open": 1609.9, + "high": 1609.93, + "low": 1604.31, + "close": 1605.01 + }, + { + "open": 1605.01, + "high": 1606.99, + "low": 1604.35, + "close": 1604.44 + }, + { + "open": 1604.44, + "high": 1607.45, + "low": 1599.66, + "close": 1601.09 + }, + { + "open": 1601.09, + "high": 1605, + "low": 1599.56, + "close": 1603.39 + }, + { + "open": 1603.39, + "high": 1604.36, + "low": 1601.89, + "close": 1604.17 + }, + { + "open": 1604.17, + "high": 1604.4, + "low": 1601.11, + "close": 1601.82 + }, + { + "open": 1601.82, + "high": 1602.58, + "low": 1597, + "close": 1598.54 + }, + { + "open": 1598.55, + "high": 1599.26, + "low": 1595, + "close": 1597.39 + }, + { + "open": 1597.4, + "high": 1599.58, + "low": 1595.34, + "close": 1595.5 + }, + { + "open": 1595.49, + "high": 1597.72, + "low": 1594, + "close": 1596.51 + }, + { + "open": 1596.5, + "high": 1608.06, + "low": 1596.03, + "close": 1605.83 + }, + { + "open": 1605.84, + "high": 1610.01, + "low": 1602.77, + "close": 1603.14 + }, + { + "open": 1603.13, + "high": 1605.96, + "low": 1602.02, + "close": 1605.76 + }, + { + "open": 1605.76, + "high": 1606.06, + "low": 1602.56, + "close": 1603.5 + }, + { + "open": 1603.5, + "high": 1608.17, + "low": 1603, + "close": 1606.46 + }, + { + "open": 1606.47, + "high": 1606.57, + "low": 1600.37, + "close": 1600.49 + }, + { + "open": 1600.49, + "high": 1603.15, + "low": 1599, + "close": 1602.38 + }, + { + "open": 1602.38, + "high": 1605.76, + "low": 1602.33, + "close": 1604.24 + }, + { + "open": 1604.24, + "high": 1613.6, + "low": 1603.63, + "close": 1608.86 + }, + { + "open": 1608.85, + "high": 1608.86, + "low": 1605.31, + "close": 1607.69 + }, + { + "open": 1607.69, + "high": 1611.81, + "low": 1606.26, + "close": 1606.85 + }, + { + "open": 1606.85, + "high": 1607.62, + "low": 1602.87, + "close": 1603.66 + }, + { + "open": 1603.67, + "high": 1603.9, + "low": 1600.29, + "close": 1602.19 + }, + { + "open": 1602.19, + "high": 1602.64, + "low": 1598.88, + "close": 1599.6 + }, + { + "open": 1599.6, + "high": 1602.21, + "low": 1599.59, + "close": 1601.28 + }, + { + "open": 1601.29, + "high": 1602.42, + "low": 1596.21, + "close": 1598 + }, + { + "open": 1598, + "high": 1600, + "low": 1597, + "close": 1599.99 + }, + { + "open": 1600, + "high": 1600.46, + "low": 1598.05, + "close": 1598.1 + }, + { + "open": 1598.11, + "high": 1600.46, + "low": 1597.24, + "close": 1598.62 + }, + { + "open": 1598.62, + "high": 1604.32, + "low": 1597.61, + "close": 1599.57 + }, + { + "open": 1599.58, + "high": 1603.67, + "low": 1599.05, + "close": 1602.84 + }, + { + "open": 1602.84, + "high": 1603.41, + "low": 1601.33, + "close": 1601.71 + }, + { + "open": 1601.72, + "high": 1604.38, + "low": 1600.84, + "close": 1601.06 + }, + { + "open": 1601.07, + "high": 1601.07, + "low": 1584.25, + "close": 1585.56 + }, + { + "open": 1585.57, + "high": 1590.35, + "low": 1583, + "close": 1583.3 + }, + { + "open": 1583.31, + "high": 1585.59, + "low": 1582, + "close": 1582.99 + }, + { + "open": 1582.99, + "high": 1587.47, + "low": 1580, + "close": 1585 + }, + { + "open": 1584.87, + "high": 1586.53, + "low": 1584.36, + "close": 1585.54 + }, + { + "open": 1585.53, + "high": 1592, + "low": 1583.94, + "close": 1590.4 + }, + { + "open": 1590.41, + "high": 1591.7, + "low": 1587.77, + "close": 1591.67 + }, + { + "open": 1591.67, + "high": 1627.93, + "low": 1591.67, + "close": 1619.34 + }, + { + "open": 1619.35, + "high": 1627.28, + "low": 1615.54, + "close": 1620.06 + }, + { + "open": 1620.07, + "high": 1627.91, + "low": 1616.57, + "close": 1618.04 + }, + { + "open": 1618.03, + "high": 1622.4, + "low": 1617.04, + "close": 1620.09 + }, + { + "open": 1620.09, + "high": 1628.86, + "low": 1615.37, + "close": 1615.63 + }, + { + "open": 1615.63, + "high": 1622.18, + "low": 1615.37, + "close": 1621.29 + }, + { + "open": 1621.3, + "high": 1622.8, + "low": 1620, + "close": 1620.51 + }, + { + "open": 1620.5, + "high": 1621.89, + "low": 1613.17, + "close": 1615.52 + }, + { + "open": 1615.53, + "high": 1617.4, + "low": 1614.06, + "close": 1615.32 + }, + { + "open": 1615.33, + "high": 1620.03, + "low": 1615.32, + "close": 1615.85 + }, + { + "open": 1615.84, + "high": 1619.22, + "low": 1603.38, + "close": 1606.41 + }, + { + "open": 1606.41, + "high": 1615.27, + "low": 1606.33, + "close": 1614.67 + }, + { + "open": 1614.68, + "high": 1618.39, + "low": 1614, + "close": 1617.37 + }, + { + "open": 1617.38, + "high": 1620.43, + "low": 1615.78, + "close": 1618.73 + }, + { + "open": 1618.72, + "high": 1618.73, + "low": 1610.77, + "close": 1611.04 + }, + { + "open": 1611.03, + "high": 1614.99, + "low": 1611.03, + "close": 1612.59 + }, + { + "open": 1612.59, + "high": 1613.22, + "low": 1605.77, + "close": 1606.25 + }, + { + "open": 1606.25, + "high": 1608.57, + "low": 1604.04, + "close": 1606.66 + }, + { + "open": 1606.66, + "high": 1609.22, + "low": 1594.74, + "close": 1596.49 + }, + { + "open": 1596.48, + "high": 1600.36, + "low": 1596.16, + "close": 1597.82 + }, + { + "open": 1597.82, + "high": 1598.27, + "low": 1586.09, + "close": 1587.01 + }, + { + "open": 1587.01, + "high": 1589.01, + "low": 1576.53, + "close": 1578.03 + }, + { + "open": 1578.03, + "high": 1583.88, + "low": 1575, + "close": 1579.57 + }, + { + "open": 1579.57, + "high": 1585.38, + "low": 1578.04, + "close": 1584.92 + }, + { + "open": 1584.92, + "high": 1585.58, + "low": 1579.7, + "close": 1584.64 + }, + { + "open": 1584.64, + "high": 1585.69, + "low": 1580.78, + "close": 1582.9 + }, + { + "open": 1582.91, + "high": 1582.91, + "low": 1576.04, + "close": 1578.85 + }, + { + "open": 1578.85, + "high": 1584.74, + "low": 1578.84, + "close": 1584.44 + }, + { + "open": 1584.43, + "high": 1584.94, + "low": 1575, + "close": 1579.18 + }, + { + "open": 1579.18, + "high": 1583.31, + "low": 1579.09, + "close": 1579.83 + }, + { + "open": 1579.83, + "high": 1582.08, + "low": 1573, + "close": 1577.81 + }, + { + "open": 1577.8, + "high": 1582.09, + "low": 1576.19, + "close": 1581.71 + }, + { + "open": 1581.71, + "high": 1582.97, + "low": 1579.21, + "close": 1579.75 + }, + { + "open": 1579.74, + "high": 1583.99, + "low": 1579.52, + "close": 1581.78 + }, + { + "open": 1581.79, + "high": 1583.99, + "low": 1580.27, + "close": 1580.67 + }, + { + "open": 1580.68, + "high": 1589.57, + "low": 1573.86, + "close": 1582.09 + }, + { + "open": 1582.09, + "high": 1586.32, + "low": 1578.54, + "close": 1581.81 + }, + { + "open": 1581.81, + "high": 1588.44, + "low": 1581.8, + "close": 1587.46 + }, + { + "open": 1587.46, + "high": 1618, + "low": 1587.45, + "close": 1611.24 + }, + { + "open": 1611.24, + "high": 1614.26, + "low": 1605.36, + "close": 1612.02 + }, + { + "open": 1612.02, + "high": 1616, + "low": 1608.85, + "close": 1610.58 + }, + { + "open": 1610.59, + "high": 1612.66, + "low": 1607.85, + "close": 1609.51 + }, + { + "open": 1609.51, + "high": 1611.59, + "low": 1607.13, + "close": 1610.04 + }, + { + "open": 1610.04, + "high": 1610.16, + "low": 1603.11, + "close": 1609.25 + }, + { + "open": 1609.25, + "high": 1617.77, + "low": 1605.15, + "close": 1611.78 + }, + { + "open": 1611.77, + "high": 1612.94, + "low": 1608.89, + "close": 1610.54 + }, + { + "open": 1610.53, + "high": 1610.79, + "low": 1607.76, + "close": 1609.46 + }, + { + "open": 1609.46, + "high": 1611.35, + "low": 1607.06, + "close": 1608.93 + }, + { + "open": 1608.92, + "high": 1621.42, + "low": 1608.92, + "close": 1615.58 + }, + { + "open": 1615.59, + "high": 1617.94, + "low": 1609.66, + "close": 1610.42 + }, + { + "open": 1610.41, + "high": 1613.09, + "low": 1607.94, + "close": 1610.04 + }, + { + "open": 1610.03, + "high": 1612.39, + "low": 1608.86, + "close": 1612.38 + }, + { + "open": 1612.39, + "high": 1612.39, + "low": 1606.68, + "close": 1607.45 + }, + { + "open": 1607.45, + "high": 1608.6, + "low": 1603.5, + "close": 1606.03 + }, + { + "open": 1606.03, + "high": 1608.42, + "low": 1605.16, + "close": 1606.46 + }, + { + "open": 1606.46, + "high": 1609.6, + "low": 1605.99, + "close": 1608.61 + }, + { + "open": 1608.61, + "high": 1611.82, + "low": 1608.6, + "close": 1609.35 + }, + { + "open": 1609.36, + "high": 1613.69, + "low": 1608.97, + "close": 1612.61 + }, + { + "open": 1612.61, + "high": 1615.38, + "low": 1600.05, + "close": 1605.29 + }, + { + "open": 1605.29, + "high": 1610.87, + "low": 1594.48, + "close": 1595.84 + }, + { + "open": 1595.85, + "high": 1600.32, + "low": 1593.78, + "close": 1595.82 + }, + { + "open": 1595.81, + "high": 1596.14, + "low": 1588.38, + "close": 1590.05 + }, + { + "open": 1590.05, + "high": 1595, + "low": 1587.23, + "close": 1590.98 + }, + { + "open": 1590.98, + "high": 1590.99, + "low": 1584.71, + "close": 1587.17 + }, + { + "open": 1587.16, + "high": 1591.85, + "low": 1583.51, + "close": 1590.73 + }, + { + "open": 1590.74, + "high": 1594.04, + "low": 1590, + "close": 1592.56 + }, + { + "open": 1592.55, + "high": 1596.8, + "low": 1591.81, + "close": 1593.82 + }, + { + "open": 1593.82, + "high": 1594.8, + "low": 1588.17, + "close": 1590.81 + }, + { + "open": 1590.81, + "high": 1593.02, + "low": 1590.45, + "close": 1592.96 + }, + { + "open": 1592.96, + "high": 1593.35, + "low": 1590, + "close": 1591.3 + }, + { + "open": 1591.31, + "high": 1594.96, + "low": 1590.04, + "close": 1593.73 + }, + { + "open": 1593.74, + "high": 1594.35, + "low": 1592.3, + "close": 1593.39 + }, + { + "open": 1593.4, + "high": 1607.22, + "low": 1593, + "close": 1602.44 + }, + { + "open": 1602.45, + "high": 1611.36, + "low": 1602.44, + "close": 1608.78 + }, + { + "open": 1608.79, + "high": 1613.99, + "low": 1608, + "close": 1610.29 + }, + { + "open": 1610.27, + "high": 1610.8, + "low": 1605.45, + "close": 1607.02 + }, + { + "open": 1607.01, + "high": 1607.17, + "low": 1591.77, + "close": 1594.46 + }, + { + "open": 1594.46, + "high": 1598.08, + "low": 1593.34, + "close": 1596.43 + }, + { + "open": 1596.43, + "high": 1606.97, + "low": 1596.42, + "close": 1606.51 + }, + { + "open": 1606.51, + "high": 1606.51, + "low": 1600, + "close": 1601.63 + }, + { + "open": 1601.63, + "high": 1604.92, + "low": 1600.43, + "close": 1603.69 + }, + { + "open": 1603.68, + "high": 1604.44, + "low": 1600.92, + "close": 1603.73 + }, + { + "open": 1603.73, + "high": 1604.5, + "low": 1596.63, + "close": 1599.85 + }, + { + "open": 1599.86, + "high": 1603.51, + "low": 1597.73, + "close": 1601.35 + }, + { + "open": 1601.35, + "high": 1603.01, + "low": 1598.18, + "close": 1599.56 + }, + { + "open": 1599.57, + "high": 1606, + "low": 1598.74, + "close": 1605.58 + }, + { + "open": 1605.57, + "high": 1605.59, + "low": 1600.41, + "close": 1600.46 + }, + { + "open": 1600.45, + "high": 1602.81, + "low": 1599.72, + "close": 1601.36 + }, + { + "open": 1601.36, + "high": 1602.24, + "low": 1595.8, + "close": 1596.99 + }, + { + "open": 1597, + "high": 1599, + "low": 1590.72, + "close": 1596.49 + }, + { + "open": 1596.49, + "high": 1597.31, + "low": 1593.48, + "close": 1593.61 + }, + { + "open": 1593.62, + "high": 1598.96, + "low": 1593, + "close": 1597.03 + }, + { + "open": 1597.02, + "high": 1598, + "low": 1594.17, + "close": 1596.97 + }, + { + "open": 1596.96, + "high": 1599.64, + "low": 1595.32, + "close": 1597.92 + }, + { + "open": 1597.91, + "high": 1600.45, + "low": 1597.28, + "close": 1597.64 + }, + { + "open": 1597.65, + "high": 1599.3, + "low": 1593.85, + "close": 1596.34 + }, + { + "open": 1596.34, + "high": 1607.62, + "low": 1595.76, + "close": 1603.49 + }, + { + "open": 1603.49, + "high": 1606.36, + "low": 1595, + "close": 1596.49 + }, + { + "open": 1596.48, + "high": 1604.91, + "low": 1596.1, + "close": 1604.91 + }, + { + "open": 1604.9, + "high": 1610, + "low": 1602.61, + "close": 1607.95 + }, + { + "open": 1607.94, + "high": 1614.95, + "low": 1607.59, + "close": 1613.14 + }, + { + "open": 1613.14, + "high": 1613.15, + "low": 1610.38, + "close": 1610.46 + }, + { + "open": 1610.46, + "high": 1611.95, + "low": 1607.42, + "close": 1607.63 + }, + { + "open": 1607.62, + "high": 1609.74, + "low": 1603.26, + "close": 1603.53 + }, + { + "open": 1603.53, + "high": 1604.18, + "low": 1599.56, + "close": 1600.77 + }, + { + "open": 1600.78, + "high": 1604.25, + "low": 1600.77, + "close": 1602.76 + }, + { + "open": 1602.75, + "high": 1604.05, + "low": 1601.46, + "close": 1601.89 + }, + { + "open": 1601.89, + "high": 1606.86, + "low": 1601.01, + "close": 1603.48 + }, + { + "open": 1603.49, + "high": 1605.52, + "low": 1600.24, + "close": 1600.55 + }, + { + "open": 1600.55, + "high": 1603.27, + "low": 1598.87, + "close": 1601.6 + }, + { + "open": 1601.6, + "high": 1605.65, + "low": 1600.97, + "close": 1605 + }, + { + "open": 1605, + "high": 1607.97, + "low": 1602.92, + "close": 1604.44 + }, + { + "open": 1604.44, + "high": 1606.44, + "low": 1602.58, + "close": 1605.59 + }, + { + "open": 1605.58, + "high": 1607.69, + "low": 1604.75, + "close": 1607.22 + }, + { + "open": 1607.23, + "high": 1620.12, + "low": 1607.17, + "close": 1618.72 + }, + { + "open": 1618.71, + "high": 1618.86, + "low": 1611.1, + "close": 1613.18 + }, + { + "open": 1613.19, + "high": 1613.72, + "low": 1610.16, + "close": 1612.13 + }, + { + "open": 1612.1, + "high": 1612.64, + "low": 1608.05, + "close": 1608.25 + }, + { + "open": 1608.25, + "high": 1617.11, + "low": 1608, + "close": 1614.17 + }, + { + "open": 1614.16, + "high": 1614.64, + "low": 1607.77, + "close": 1613.48 + }, + { + "open": 1613.48, + "high": 1625, + "low": 1612.54, + "close": 1618.6 + }, + { + "open": 1618.6, + "high": 1622.92, + "low": 1615.17, + "close": 1622.83 + }, + { + "open": 1622.84, + "high": 1626.94, + "low": 1620.14, + "close": 1621.06 + }, + { + "open": 1621.07, + "high": 1621.87, + "low": 1617.82, + "close": 1619.46 + }, + { + "open": 1619.45, + "high": 1634.2, + "low": 1618.5, + "close": 1627.23 + }, + { + "open": 1627.23, + "high": 1627.39, + "low": 1620.18, + "close": 1622.36 + }, + { + "open": 1622.36, + "high": 1626.93, + "low": 1616.66, + "close": 1620.82 + }, + { + "open": 1620.82, + "high": 1623.84, + "low": 1618.85, + "close": 1622.1 + }, + { + "open": 1622.1, + "high": 1622.15, + "low": 1618.52, + "close": 1620.43 + }, + { + "open": 1620.42, + "high": 1625, + "low": 1619.49, + "close": 1622 + }, + { + "open": 1622, + "high": 1625.99, + "low": 1615.31, + "close": 1617.81 + }, + { + "open": 1617.81, + "high": 1627, + "low": 1616.03, + "close": 1624.35 + }, + { + "open": 1624.36, + "high": 1629.49, + "low": 1624.35, + "close": 1626.81 + }, + { + "open": 1626.81, + "high": 1628.9, + "low": 1624.37, + "close": 1624.84 + }, + { + "open": 1624.85, + "high": 1628.28, + "low": 1622.99, + "close": 1623.1 + }, + { + "open": 1623.1, + "high": 1627.99, + "low": 1621.44, + "close": 1624.59 + }, + { + "open": 1624.6, + "high": 1626.35, + "low": 1622.57, + "close": 1623.59 + }, + { + "open": 1623.6, + "high": 1642.89, + "low": 1623.3, + "close": 1640.62 + }, + { + "open": 1640.63, + "high": 1661.98, + "low": 1634.91, + "close": 1660.48 + }, + { + "open": 1660.49, + "high": 1664.34, + "low": 1644.84, + "close": 1645.57 + }, + { + "open": 1645.58, + "high": 1646.67, + "low": 1595, + "close": 1608.22 + }, + { + "open": 1608.22, + "high": 1614.88, + "low": 1601.43, + "close": 1605.36 + }, + { + "open": 1605.36, + "high": 1609.8, + "low": 1591.92, + "close": 1592.38 + }, + { + "open": 1592.39, + "high": 1602.45, + "low": 1589.01, + "close": 1600 + }, + { + "open": 1600, + "high": 1607.26, + "low": 1599, + "close": 1606.64 + }, + { + "open": 1606.64, + "high": 1607.7, + "low": 1594.71, + "close": 1598.66 + }, + { + "open": 1598.66, + "high": 1604.57, + "low": 1595.3, + "close": 1602.48 + }, + { + "open": 1602.48, + "high": 1612.55, + "low": 1601.32, + "close": 1610.62 + }, + { + "open": 1610.63, + "high": 1615.92, + "low": 1608.01, + "close": 1610.8 + }, + { + "open": 1610.79, + "high": 1612.97, + "low": 1605.89, + "close": 1608.29 + }, + { + "open": 1608.3, + "high": 1609.65, + "low": 1605.11, + "close": 1605.12 + }, + { + "open": 1605.12, + "high": 1607.57, + "low": 1598.35, + "close": 1602.85 + }, + { + "open": 1602.85, + "high": 1602.86, + "low": 1598.44, + "close": 1599.51 + }, + { + "open": 1599.5, + "high": 1600.05, + "low": 1593.32, + "close": 1597.7 + }, + { + "open": 1597.7, + "high": 1603.62, + "low": 1596, + "close": 1598.76 + }, + { + "open": 1598.75, + "high": 1601.76, + "low": 1595.1, + "close": 1600.62 + }, + { + "open": 1600.53, + "high": 1604, + "low": 1596.81, + "close": 1602.64 + }, + { + "open": 1602.63, + "high": 1609.55, + "low": 1602, + "close": 1602.44 + }, + { + "open": 1602.45, + "high": 1603.9, + "low": 1592.51, + "close": 1593.89 + }, + { + "open": 1593.89, + "high": 1594.71, + "low": 1565.67, + "close": 1567.64 + }, + { + "open": 1567.63, + "high": 1570, + "low": 1560, + "close": 1561.39 + }, + { + "open": 1561.4, + "high": 1568.6, + "low": 1560, + "close": 1560.15 + }, + { + "open": 1560.14, + "high": 1567.72, + "low": 1558.34, + "close": 1562.48 + }, + { + "open": 1562.47, + "high": 1567.56, + "low": 1556.87, + "close": 1557.4 + }, + { + "open": 1557.39, + "high": 1562.84, + "low": 1555.8, + "close": 1559.22 + }, + { + "open": 1559.22, + "high": 1560.95, + "low": 1555.83, + "close": 1558.29 + }, + { + "open": 1558.3, + "high": 1558.71, + "low": 1552.58, + "close": 1557.29 + }, + { + "open": 1557.29, + "high": 1558.05, + "low": 1550.73, + "close": 1552.73 + }, + { + "open": 1552.73, + "high": 1556.73, + "low": 1551.93, + "close": 1555.62 + }, + { + "open": 1555.62, + "high": 1558.32, + "low": 1553.89, + "close": 1558.24 + }, + { + "open": 1558.23, + "high": 1560.73, + "low": 1555.85, + "close": 1556.41 + }, + { + "open": 1556.42, + "high": 1557.28, + "low": 1546.5, + "close": 1550.45 + }, + { + "open": 1550.44, + "high": 1553.2, + "low": 1548.64, + "close": 1551.76 + }, + { + "open": 1551.76, + "high": 1553.97, + "low": 1550.33, + "close": 1551.83 + }, + { + "open": 1551.83, + "high": 1551.84, + "low": 1536.1, + "close": 1545.23 + }, + { + "open": 1545.23, + "high": 1545.35, + "low": 1536.02, + "close": 1536.77 + }, + { + "open": 1536.78, + "high": 1545.98, + "low": 1535, + "close": 1545.85 + }, + { + "open": 1545.84, + "high": 1546.92, + "low": 1542.7, + "close": 1544.4 + }, + { + "open": 1544.41, + "high": 1544.41, + "low": 1539.46, + "close": 1542.9 + }, + { + "open": 1542.91, + "high": 1543.88, + "low": 1532.08, + "close": 1537.46 + }, + { + "open": 1537.46, + "high": 1539.81, + "low": 1528.5, + "close": 1539.6 + }, + { + "open": 1539.59, + "high": 1539.91, + "low": 1534.97, + "close": 1537.88 + }, + { + "open": 1537.89, + "high": 1538.41, + "low": 1519.26, + "close": 1529.17 + }, + { + "open": 1529.17, + "high": 1531.96, + "low": 1523.22, + "close": 1530.51 + }, + { + "open": 1530.51, + "high": 1530.53, + "low": 1516.53, + "close": 1516.54 + }, + { + "open": 1516.54, + "high": 1523, + "low": 1515.92, + "close": 1520.8 + }, + { + "open": 1520.8, + "high": 1523.87, + "low": 1519.23, + "close": 1520.13 + }, + { + "open": 1520.12, + "high": 1525.47, + "low": 1519.92, + "close": 1522.6 + }, + { + "open": 1522.59, + "high": 1523.37, + "low": 1518.67, + "close": 1520.02 + }, + { + "open": 1520.01, + "high": 1522.76, + "low": 1517.3, + "close": 1520.03 + }, + { + "open": 1520.03, + "high": 1522.47, + "low": 1514.84, + "close": 1522.2 + }, + { + "open": 1522.19, + "high": 1523.61, + "low": 1519.61, + "close": 1523.36 + }, + { + "open": 1523.36, + "high": 1523.74, + "low": 1520.13, + "close": 1523.27 + }, + { + "open": 1523.27, + "high": 1523.78, + "low": 1513.68, + "close": 1515.15 + }, + { + "open": 1515.14, + "high": 1516.51, + "low": 1508.06, + "close": 1512.14 + }, + { + "open": 1512.15, + "high": 1515.4, + "low": 1511.29, + "close": 1515.02 + }, + { + "open": 1515.02, + "high": 1516.74, + "low": 1512.8, + "close": 1515.19 + }, + { + "open": 1515.19, + "high": 1518.29, + "low": 1514.84, + "close": 1517.85 + }, + { + "open": 1517.85, + "high": 1518.5, + "low": 1509.02, + "close": 1511.14 + }, + { + "open": 1511.14, + "high": 1512.83, + "low": 1509.19, + "close": 1509.79 + }, + { + "open": 1509.78, + "high": 1510, + "low": 1502, + "close": 1504.63 + }, + { + "open": 1504.63, + "high": 1512, + "low": 1498.95, + "close": 1511.51 + }, + { + "open": 1511.51, + "high": 1512.42, + "low": 1506.71, + "close": 1506.71 + }, + { + "open": 1506.71, + "high": 1508.89, + "low": 1504.28, + "close": 1505.15 + }, + { + "open": 1505.15, + "high": 1509.41, + "low": 1499.45, + "close": 1509.01 + }, + { + "open": 1509.01, + "high": 1513.92, + "low": 1507.81, + "close": 1513.12 + }, + { + "open": 1513.12, + "high": 1517.5, + "low": 1512, + "close": 1515.83 + }, + { + "open": 1515.84, + "high": 1515.84, + "low": 1511.78, + "close": 1514.56 + }, + { + "open": 1514.56, + "high": 1514.59, + "low": 1509.96, + "close": 1512.45 + }, + { + "open": 1512.46, + "high": 1514, + "low": 1510.35, + "close": 1513.82 + }, + { + "open": 1513.82, + "high": 1516.09, + "low": 1510.83, + "close": 1513.39 + }, + { + "open": 1513.38, + "high": 1514.71, + "low": 1511.55, + "close": 1514.06 + }, + { + "open": 1514.07, + "high": 1518.42, + "low": 1514.06, + "close": 1517.45 + }, + { + "open": 1517.44, + "high": 1524.17, + "low": 1517.24, + "close": 1522.76 + }, + { + "open": 1522.76, + "high": 1522.77, + "low": 1516.74, + "close": 1519.27 + }, + { + "open": 1519.27, + "high": 1526.14, + "low": 1518.36, + "close": 1525.37 + }, + { + "open": 1525.36, + "high": 1526.16, + "low": 1523.05, + "close": 1524.78 + }, + { + "open": 1524.78, + "high": 1529.84, + "low": 1524.12, + "close": 1524.83 + }, + { + "open": 1524.83, + "high": 1527.97, + "low": 1523.69, + "close": 1525.07 + }, + { + "open": 1525.07, + "high": 1525.91, + "low": 1515.94, + "close": 1517.07 + }, + { + "open": 1517.08, + "high": 1521.93, + "low": 1514.76, + "close": 1519.75 + }, + { + "open": 1519.75, + "high": 1523.8, + "low": 1518.82, + "close": 1522.53 + }, + { + "open": 1522.52, + "high": 1527.71, + "low": 1521.24, + "close": 1527.26 + }, + { + "open": 1527.26, + "high": 1527.26, + "low": 1523.51, + "close": 1524.17 + }, + { + "open": 1524.18, + "high": 1526.33, + "low": 1522.5, + "close": 1526.02 + }, + { + "open": 1526.02, + "high": 1528.99, + "low": 1525.63, + "close": 1528.01 + }, + { + "open": 1528, + "high": 1528.98, + "low": 1524, + "close": 1527.85 + }, + { + "open": 1527.85, + "high": 1527.91, + "low": 1524.87, + "close": 1527.02 + }, + { + "open": 1527.01, + "high": 1527.77, + "low": 1525.08, + "close": 1527.53 + }, + { + "open": 1527.54, + "high": 1527.9, + "low": 1525.01, + "close": 1525.54 + }, + { + "open": 1525.54, + "high": 1526.36, + "low": 1517.7, + "close": 1521.32 + }, + { + "open": 1521.33, + "high": 1523.72, + "low": 1520.06, + "close": 1523.15 + }, + { + "open": 1523.16, + "high": 1526.22, + "low": 1521.86, + "close": 1523.7 + }, + { + "open": 1523.7, + "high": 1523.83, + "low": 1517.23, + "close": 1517.7 + }, + { + "open": 1517.69, + "high": 1519.99, + "low": 1514.45, + "close": 1515.5 + }, + { + "open": 1515.49, + "high": 1520.24, + "low": 1515.12, + "close": 1517.38 + }, + { + "open": 1517.38, + "high": 1519, + "low": 1516.54, + "close": 1517.4 + }, + { + "open": 1517.39, + "high": 1521.31, + "low": 1516.5, + "close": 1519.95 + }, + { + "open": 1519.96, + "high": 1521.47, + "low": 1514.7, + "close": 1519.12 + }, + { + "open": 1519.12, + "high": 1523.72, + "low": 1518.67, + "close": 1523.67 + }, + { + "open": 1523.66, + "high": 1528.82, + "low": 1522.18, + "close": 1528.71 + }, + { + "open": 1528.82, + "high": 1529.12, + "low": 1523.63, + "close": 1525.19 + }, + { + "open": 1525.2, + "high": 1525.2, + "low": 1518.09, + "close": 1523.17 + }, + { + "open": 1523.17, + "high": 1525.99, + "low": 1521.52, + "close": 1522.46 + }, + { + "open": 1522.47, + "high": 1522.9, + "low": 1519.17, + "close": 1521.6 + }, + { + "open": 1521.6, + "high": 1524.29, + "low": 1521.54, + "close": 1524.29 + }, + { + "open": 1524.29, + "high": 1526, + "low": 1523.3, + "close": 1524.49 + }, + { + "open": 1524.5, + "high": 1526, + "low": 1524.05, + "close": 1524.89 + }, + { + "open": 1524.88, + "high": 1526.85, + "low": 1524, + "close": 1524.81 + }, + { + "open": 1524.81, + "high": 1524.81, + "low": 1522.11, + "close": 1522.12 + }, + { + "open": 1522.12, + "high": 1525.61, + "low": 1521.27, + "close": 1521.65 + }, + { + "open": 1521.64, + "high": 1522.47, + "low": 1518.51, + "close": 1519.48 + }, + { + "open": 1519.48, + "high": 1519.48, + "low": 1516.15, + "close": 1517.9 + }, + { + "open": 1517.91, + "high": 1521.05, + "low": 1517.3, + "close": 1519.79 + }, + { + "open": 1519.79, + "high": 1519.8, + "low": 1510.7, + "close": 1513.91 + }, + { + "open": 1513.9, + "high": 1516.09, + "low": 1512.83, + "close": 1513.43 + }, + { + "open": 1513.43, + "high": 1518.21, + "low": 1513, + "close": 1516.58 + }, + { + "open": 1516.59, + "high": 1533.5, + "low": 1516.09, + "close": 1531.9 + }, + { + "open": 1531.89, + "high": 1537.27, + "low": 1530.14, + "close": 1534.55 + }, + { + "open": 1534.55, + "high": 1541.23, + "low": 1534.34, + "close": 1536.95 + }, + { + "open": 1536.96, + "high": 1542.82, + "low": 1536.28, + "close": 1539.96 + }, + { + "open": 1539.97, + "high": 1542.51, + "low": 1535.03, + "close": 1536.75 + }, + { + "open": 1536.76, + "high": 1542.68, + "low": 1533.45, + "close": 1541.74 + }, + { + "open": 1541.75, + "high": 1543.99, + "low": 1538.04, + "close": 1538.45 + }, + { + "open": 1538.44, + "high": 1539.6, + "low": 1536.86, + "close": 1537.48 + }, + { + "open": 1537.47, + "high": 1537.48, + "low": 1534.36, + "close": 1536.22 + }, + { + "open": 1536.22, + "high": 1537.19, + "low": 1534.16, + "close": 1536.47 + }, + { + "open": 1536.46, + "high": 1536.56, + "low": 1531.43, + "close": 1532.8 + }, + { + "open": 1532.81, + "high": 1536.41, + "low": 1532.68, + "close": 1536.21 + }, + { + "open": 1536.22, + "high": 1538.61, + "low": 1535.4, + "close": 1537.8 + }, + { + "open": 1537.8, + "high": 1538.88, + "low": 1535.72, + "close": 1535.99 + }, + { + "open": 1535.99, + "high": 1537.93, + "low": 1535.82, + "close": 1537.49 + }, + { + "open": 1537.48, + "high": 1537.49, + "low": 1532.8, + "close": 1533.82 + }, + { + "open": 1533.82, + "high": 1536.84, + "low": 1533.62, + "close": 1535.49 + }, + { + "open": 1535.49, + "high": 1535.76, + "low": 1534.01, + "close": 1535.42 + }, + { + "open": 1535.42, + "high": 1536, + "low": 1532.17, + "close": 1534.71 + }, + { + "open": 1534.72, + "high": 1538, + "low": 1534.71, + "close": 1537.86 + }, + { + "open": 1537.85, + "high": 1548.43, + "low": 1537.85, + "close": 1545.4 + }, + { + "open": 1545.39, + "high": 1546, + "low": 1542.09, + "close": 1544.54 + }, + { + "open": 1544.54, + "high": 1545.49, + "low": 1542.13, + "close": 1544.51 + }, + { + "open": 1544.51, + "high": 1545.82, + "low": 1543.21, + "close": 1545.81 + }, + { + "open": 1545.81, + "high": 1546.46, + "low": 1543.57, + "close": 1544.9 + }, + { + "open": 1544.9, + "high": 1548.69, + "low": 1540, + "close": 1547.55 + }, + { + "open": 1547.64, + "high": 1549.87, + "low": 1544.78, + "close": 1547.71 + }, + { + "open": 1547.7, + "high": 1549.65, + "low": 1546.11, + "close": 1547.1 + }, + { + "open": 1547.1, + "high": 1548.13, + "low": 1546.6, + "close": 1547.01 + }, + { + "open": 1547, + "high": 1548.88, + "low": 1542.95, + "close": 1548.88 + }, + { + "open": 1548.88, + "high": 1553.79, + "low": 1544.51, + "close": 1544.77 + }, + { + "open": 1544.77, + "high": 1546.59, + "low": 1543.06, + "close": 1543.48 + }, + { + "open": 1543.48, + "high": 1543.49, + "low": 1535.69, + "close": 1536.78 + }, + { + "open": 1536.78, + "high": 1542.5, + "low": 1535.31, + "close": 1541.57 + }, + { + "open": 1541.57, + "high": 1543.7, + "low": 1538.61, + "close": 1538.77 + }, + { + "open": 1538.77, + "high": 1541.47, + "low": 1537.85, + "close": 1538.86 + }, + { + "open": 1538.86, + "high": 1541.55, + "low": 1536.48, + "close": 1539.18 + }, + { + "open": 1539.19, + "high": 1541.52, + "low": 1538.97, + "close": 1539.38 + }, + { + "open": 1539.38, + "high": 1543, + "low": 1536.55, + "close": 1540.87 + }, + { + "open": 1540.86, + "high": 1543.23, + "low": 1539.09, + "close": 1539.58 + }, + { + "open": 1539.58, + "high": 1540.92, + "low": 1536.45, + "close": 1537.5 + }, + { + "open": 1537.49, + "high": 1538.34, + "low": 1533.5, + "close": 1534.83 + }, + { + "open": 1534.84, + "high": 1534.84, + "low": 1517.11, + "close": 1518.98 + }, + { + "open": 1518.98, + "high": 1525.5, + "low": 1518.64, + "close": 1523.83 + }, + { + "open": 1523.82, + "high": 1531.92, + "low": 1520.33, + "close": 1529.16 + }, + { + "open": 1529.16, + "high": 1531.5, + "low": 1524, + "close": 1530.11 + }, + { + "open": 1530.12, + "high": 1530.2, + "low": 1525.52, + "close": 1527.15 + }, + { + "open": 1527.15, + "high": 1530.94, + "low": 1526.55, + "close": 1530.8 + }, + { + "open": 1530.79, + "high": 1530.8, + "low": 1526.56, + "close": 1527.75 + }, + { + "open": 1527.75, + "high": 1530.84, + "low": 1526.98, + "close": 1527.33 + }, + { + "open": 1527.34, + "high": 1528.92, + "low": 1523.77, + "close": 1528.01 + }, + { + "open": 1528.01, + "high": 1531.35, + "low": 1527.46, + "close": 1530.32 + }, + { + "open": 1530.32, + "high": 1538.65, + "low": 1529.45, + "close": 1536.07 + }, + { + "open": 1536.08, + "high": 1536.51, + "low": 1533.75, + "close": 1535.46 + }, + { + "open": 1535.46, + "high": 1536.81, + "low": 1533.28, + "close": 1533.29 + }, + { + "open": 1533.28, + "high": 1533.97, + "low": 1522.46, + "close": 1523.87 + }, + { + "open": 1523.86, + "high": 1524.03, + "low": 1517.61, + "close": 1523.73 + }, + { + "open": 1523.72, + "high": 1537.06, + "low": 1523.21, + "close": 1532.35 + }, + { + "open": 1532.36, + "high": 1532.36, + "low": 1525.15, + "close": 1527.63 + }, + { + "open": 1527.63, + "high": 1531.98, + "low": 1521.21, + "close": 1522.82 + }, + { + "open": 1522.82, + "high": 1522.82, + "low": 1506.7, + "close": 1516.24 + }, + { + "open": 1516.24, + "high": 1527.52, + "low": 1514.14, + "close": 1523.97 + }, + { + "open": 1523.97, + "high": 1523.98, + "low": 1516.85, + "close": 1520.44 + }, + { + "open": 1520.45, + "high": 1525.98, + "low": 1517.98, + "close": 1521.25 + }, + { + "open": 1521.26, + "high": 1526.16, + "low": 1520, + "close": 1521.76 + }, + { + "open": 1521.77, + "high": 1525, + "low": 1518.05, + "close": 1518.17 + }, + { + "open": 1518.17, + "high": 1518.66, + "low": 1510.75, + "close": 1516.05 + }, + { + "open": 1516.05, + "high": 1518.01, + "low": 1509.24, + "close": 1509.65 + }, + { + "open": 1509.65, + "high": 1513.46, + "low": 1507.45, + "close": 1511.38 + }, + { + "open": 1511.37, + "high": 1517.77, + "low": 1510.69, + "close": 1513.23 + }, + { + "open": 1513.24, + "high": 1513.85, + "low": 1502.21, + "close": 1510.72 + }, + { + "open": 1510.72, + "high": 1516.44, + "low": 1508.36, + "close": 1512.4 + }, + { + "open": 1512.4, + "high": 1518.94, + "low": 1507.61, + "close": 1517.46 + }, + { + "open": 1517.45, + "high": 1523.41, + "low": 1515.15, + "close": 1522.78 + }, + { + "open": 1522.78, + "high": 1524, + "low": 1518.84, + "close": 1520.49 + }, + { + "open": 1520.49, + "high": 1523.13, + "low": 1519.01, + "close": 1521.68 + }, + { + "open": 1521.68, + "high": 1527.81, + "low": 1520.5, + "close": 1524.68 + }, + { + "open": 1524.68, + "high": 1532, + "low": 1523.05, + "close": 1527.05 + }, + { + "open": 1527.04, + "high": 1528.39, + "low": 1523, + "close": 1523.42 + }, + { + "open": 1523.41, + "high": 1523.64, + "low": 1514, + "close": 1514.71 + }, + { + "open": 1514.72, + "high": 1518, + "low": 1511.35, + "close": 1517.24 + }, + { + "open": 1517.23, + "high": 1518.75, + "low": 1514.48, + "close": 1515.82 + }, + { + "open": 1515.81, + "high": 1522.58, + "low": 1514.01, + "close": 1521.13 + }, + { + "open": 1521.13, + "high": 1530.48, + "low": 1521.11, + "close": 1527.23 + }, + { + "open": 1527.23, + "high": 1528.46, + "low": 1522.57, + "close": 1525.67 + }, + { + "open": 1525.67, + "high": 1528.64, + "low": 1525.67, + "close": 1528.35 + }, + { + "open": 1528.35, + "high": 1531.14, + "low": 1523.51, + "close": 1523.51 + }, + { + "open": 1523.51, + "high": 1528.76, + "low": 1523.48, + "close": 1527.56 + }, + { + "open": 1527.57, + "high": 1527.99, + "low": 1524.99, + "close": 1526.03 + }, + { + "open": 1526.02, + "high": 1534.93, + "low": 1524.67, + "close": 1532.6 + }, + { + "open": 1532.6, + "high": 1534.19, + "low": 1529.44, + "close": 1529.96 + }, + { + "open": 1529.96, + "high": 1531.24, + "low": 1524.14, + "close": 1525.3 + }, + { + "open": 1525.29, + "high": 1526.09, + "low": 1520.01, + "close": 1520.14 + }, + { + "open": 1520.15, + "high": 1520.51, + "low": 1517.04, + "close": 1519.66 + }, + { + "open": 1519.67, + "high": 1522.26, + "low": 1517.77, + "close": 1519.3 + }, + { + "open": 1519.31, + "high": 1523.43, + "low": 1518.31, + "close": 1520.11 + }, + { + "open": 1520.12, + "high": 1521.27, + "low": 1514.68, + "close": 1515.46 + }, + { + "open": 1515.46, + "high": 1523.5, + "low": 1515.46, + "close": 1523.21 + }, + { + "open": 1523.22, + "high": 1530.34, + "low": 1522.49, + "close": 1529.8 + }, + { + "open": 1529.8, + "high": 1530.43, + "low": 1526.66, + "close": 1527.1 + }, + { + "open": 1527.1, + "high": 1531.29, + "low": 1525.61, + "close": 1527.6 + }, + { + "open": 1527.61, + "high": 1530.92, + "low": 1527.6, + "close": 1530.26 + }, + { + "open": 1530.26, + "high": 1534.01, + "low": 1528.36, + "close": 1533 + }, + { + "open": 1532.93, + "high": 1534.94, + "low": 1529, + "close": 1529.91 + }, + { + "open": 1529.92, + "high": 1530.63, + "low": 1524.38, + "close": 1527.8 + }, + { + "open": 1527.8, + "high": 1529.94, + "low": 1524.87, + "close": 1526.36 + }, + { + "open": 1526.36, + "high": 1529.37, + "low": 1526.33, + "close": 1527.87 + }, + { + "open": 1527.87, + "high": 1529.29, + "low": 1526.79, + "close": 1527.17 + }, + { + "open": 1527.18, + "high": 1527.18, + "low": 1518.55, + "close": 1519.61 + }, + { + "open": 1519.6, + "high": 1521.47, + "low": 1517.39, + "close": 1520.78 + }, + { + "open": 1520.78, + "high": 1522.13, + "low": 1514.46, + "close": 1516.81 + }, + { + "open": 1516.8, + "high": 1517.6, + "low": 1512.82, + "close": 1513.66 + }, + { + "open": 1513.65, + "high": 1516.81, + "low": 1511.44, + "close": 1513.86 + }, + { + "open": 1513.86, + "high": 1515.47, + "low": 1507.11, + "close": 1509.29 + }, + { + "open": 1509.29, + "high": 1513.83, + "low": 1509.11, + "close": 1510.83 + }, + { + "open": 1510.83, + "high": 1518.12, + "low": 1510.83, + "close": 1515.33 + }, + { + "open": 1515.33, + "high": 1517.4, + "low": 1511.99, + "close": 1514.89 + }, + { + "open": 1514.88, + "high": 1518.67, + "low": 1513.78, + "close": 1516.93 + }, + { + "open": 1516.93, + "high": 1517.58, + "low": 1514.1, + "close": 1515.4 + }, + { + "open": 1515.4, + "high": 1518.96, + "low": 1514.65, + "close": 1518.43 + }, + { + "open": 1518.44, + "high": 1523.32, + "low": 1515.35, + "close": 1515.78 + }, + { + "open": 1515.78, + "high": 1521.43, + "low": 1515.46, + "close": 1519.21 + }, + { + "open": 1519.2, + "high": 1519.88, + "low": 1514.15, + "close": 1516.82 + }, + { + "open": 1516.82, + "high": 1517.28, + "low": 1510.85, + "close": 1513.86 + }, + { + "open": 1513.87, + "high": 1516.82, + "low": 1509.37, + "close": 1510.88 + }, + { + "open": 1510.88, + "high": 1512, + "low": 1505.9, + "close": 1505.93 + }, + { + "open": 1505.94, + "high": 1509.39, + "low": 1477.01, + "close": 1478.26 + }, + { + "open": 1478.26, + "high": 1484.64, + "low": 1474.16, + "close": 1482.69 + }, + { + "open": 1482.69, + "high": 1487.83, + "low": 1478.76, + "close": 1479.74 + }, + { + "open": 1479.74, + "high": 1481.79, + "low": 1470.8, + "close": 1474.95 + }, + { + "open": 1474.95, + "high": 1477.59, + "low": 1466.58, + "close": 1468.19 + }, + { + "open": 1468.2, + "high": 1474, + "low": 1455.17, + "close": 1466.85 + }, + { + "open": 1466.9, + "high": 1472.67, + "low": 1466.89, + "close": 1471.37 + }, + { + "open": 1471.37, + "high": 1478.04, + "low": 1467.14, + "close": 1470.07 + }, + { + "open": 1470.07, + "high": 1477.76, + "low": 1468.23, + "close": 1475.57 + }, + { + "open": 1475.56, + "high": 1491.72, + "low": 1474.88, + "close": 1488.58 + }, + { + "open": 1488.58, + "high": 1496.76, + "low": 1484.21, + "close": 1495 + }, + { + "open": 1495, + "high": 1523.99, + "low": 1492.01, + "close": 1514.98 + }, + { + "open": 1514.98, + "high": 1522.88, + "low": 1513.78, + "close": 1518.91 + }, + { + "open": 1518.91, + "high": 1522.64, + "low": 1517, + "close": 1520.67 + }, + { + "open": 1520.67, + "high": 1529.77, + "low": 1513.5, + "close": 1513.51 + }, + { + "open": 1513.51, + "high": 1520, + "low": 1513.28, + "close": 1517.2 + }, + { + "open": 1517.2, + "high": 1519.49, + "low": 1512.2, + "close": 1518.95 + }, + { + "open": 1518.95, + "high": 1519.49, + "low": 1513.26, + "close": 1515.54 + }, + { + "open": 1515.54, + "high": 1519.1, + "low": 1513.83, + "close": 1518.88 + }, + { + "open": 1518.89, + "high": 1538.51, + "low": 1518.88, + "close": 1531.01 + }, + { + "open": 1530.95, + "high": 1533.43, + "low": 1520.54, + "close": 1526.77 + }, + { + "open": 1526.77, + "high": 1530.58, + "low": 1524.92, + "close": 1527.44 + }, + { + "open": 1527.44, + "high": 1528.44, + "low": 1521.03, + "close": 1523.01 + }, + { + "open": 1523.01, + "high": 1524.56, + "low": 1517.95, + "close": 1521.65 + }, + { + "open": 1521.63, + "high": 1521.75, + "low": 1516.33, + "close": 1520.27 + }, + { + "open": 1520.28, + "high": 1523.83, + "low": 1518.53, + "close": 1523.21 + }, + { + "open": 1523.21, + "high": 1524, + "low": 1520.51, + "close": 1522.06 + }, + { + "open": 1522.05, + "high": 1524, + "low": 1519.38, + "close": 1520.38 + }, + { + "open": 1520.37, + "high": 1521.46, + "low": 1519.64, + "close": 1520.5 + }, + { + "open": 1520.5, + "high": 1525.95, + "low": 1520.49, + "close": 1523.01 + }, + { + "open": 1523, + "high": 1523.38, + "low": 1520.25, + "close": 1520.78 + }, + { + "open": 1520.77, + "high": 1521.39, + "low": 1512.85, + "close": 1517.63 + }, + { + "open": 1517.63, + "high": 1517.85, + "low": 1507.66, + "close": 1514.06 + }, + { + "open": 1514.05, + "high": 1517.93, + "low": 1514.01, + "close": 1516.79 + }, + { + "open": 1516.8, + "high": 1516.8, + "low": 1512.55, + "close": 1514.02 + }, + { + "open": 1514.02, + "high": 1514.89, + "low": 1508.97, + "close": 1510.44 + }, + { + "open": 1510.44, + "high": 1512.24, + "low": 1506.68, + "close": 1510.1 + }, + { + "open": 1510.09, + "high": 1511.6, + "low": 1494.65, + "close": 1495.68 + }, + { + "open": 1495.69, + "high": 1498.59, + "low": 1492.45, + "close": 1496.12 + }, + { + "open": 1496.13, + "high": 1496.13, + "low": 1482.16, + "close": 1487 + }, + { + "open": 1487, + "high": 1488.44, + "low": 1469, + "close": 1471.65 + }, + { + "open": 1471.65, + "high": 1476.97, + "low": 1467.08, + "close": 1469.98 + }, + { + "open": 1469.98, + "high": 1475.2, + "low": 1469.78, + "close": 1472.26 + }, + { + "open": 1472.25, + "high": 1487.99, + "low": 1472.25, + "close": 1485.05 + }, + { + "open": 1485.05, + "high": 1494.72, + "low": 1473.92, + "close": 1485.16 + }, + { + "open": 1485.16, + "high": 1485.17, + "low": 1478.93, + "close": 1482.48 + }, + { + "open": 1482.48, + "high": 1489, + "low": 1479.21, + "close": 1482.03 + }, + { + "open": 1482.03, + "high": 1484.28, + "low": 1475.43, + "close": 1481.37 + }, + { + "open": 1481.38, + "high": 1482.3, + "low": 1469.55, + "close": 1470.66 + }, + { + "open": 1470.66, + "high": 1479.85, + "low": 1469, + "close": 1477.53 + }, + { + "open": 1477.54, + "high": 1483.67, + "low": 1476.45, + "close": 1482.88 + }, + { + "open": 1482.89, + "high": 1487.37, + "low": 1478.08, + "close": 1483.37 + }, + { + "open": 1483.37, + "high": 1484.36, + "low": 1472.36, + "close": 1474.97 + }, + { + "open": 1474.97, + "high": 1478.78, + "low": 1474.69, + "close": 1477.75 + }, + { + "open": 1477.75, + "high": 1478.84, + "low": 1470, + "close": 1470.96 + }, + { + "open": 1470.95, + "high": 1472.38, + "low": 1464, + "close": 1470 + }, + { + "open": 1470, + "high": 1471.07, + "low": 1436.02, + "close": 1443.03 + }, + { + "open": 1443.04, + "high": 1451.98, + "low": 1435.58, + "close": 1447.55 + }, + { + "open": 1447.55, + "high": 1448.1, + "low": 1437.01, + "close": 1440.79 + }, + { + "open": 1440.79, + "high": 1450, + "low": 1432.99, + "close": 1443.3 + }, + { + "open": 1443.29, + "high": 1446.49, + "low": 1441.15, + "close": 1443.34 + }, + { + "open": 1443.34, + "high": 1446.58, + "low": 1437.11, + "close": 1438.52 + }, + { + "open": 1438.51, + "high": 1441.99, + "low": 1429.68, + "close": 1439.43 + }, + { + "open": 1439.43, + "high": 1440.82, + "low": 1427.1, + "close": 1433.08 + }, + { + "open": 1433.08, + "high": 1434.82, + "low": 1428.65, + "close": 1429.91 + }, + { + "open": 1429.91, + "high": 1433.24, + "low": 1427.02, + "close": 1430.25 + }, + { + "open": 1430.19, + "high": 1430.2, + "low": 1415.6, + "close": 1423.09 + }, + { + "open": 1423.09, + "high": 1432, + "low": 1421.92, + "close": 1427.53 + }, + { + "open": 1427.52, + "high": 1428.64, + "low": 1421.55, + "close": 1427.64 + }, + { + "open": 1427.64, + "high": 1430.1, + "low": 1415, + "close": 1415.98 + }, + { + "open": 1415.99, + "high": 1421.48, + "low": 1412.15, + "close": 1415.38 + }, + { + "open": 1415.38, + "high": 1424, + "low": 1412.45, + "close": 1423.02 + }, + { + "open": 1423.03, + "high": 1426.99, + "low": 1422, + "close": 1425.62 + }, + { + "open": 1425.61, + "high": 1427.39, + "low": 1421.18, + "close": 1421.98 + }, + { + "open": 1421.98, + "high": 1426.36, + "low": 1418.04, + "close": 1423.96 + }, + { + "open": 1423.97, + "high": 1424.1, + "low": 1418.49, + "close": 1418.49 + }, + { + "open": 1418.49, + "high": 1421.16, + "low": 1414.03, + "close": 1421.15 + }, + { + "open": 1421.16, + "high": 1421.16, + "low": 1415, + "close": 1417.04 + }, + { + "open": 1417.04, + "high": 1418.37, + "low": 1413.06, + "close": 1413.36 + }, + { + "open": 1413.37, + "high": 1423.37, + "low": 1413.21, + "close": 1422.91 + }, + { + "open": 1422.9, + "high": 1425.51, + "low": 1421.11, + "close": 1423.99 + }, + { + "open": 1423.98, + "high": 1425.09, + "low": 1422.73, + "close": 1423.61 + }, + { + "open": 1423.62, + "high": 1424.96, + "low": 1420, + "close": 1420.23 + }, + { + "open": 1420.23, + "high": 1421.87, + "low": 1419.01, + "close": 1421.02 + }, + { + "open": 1421.01, + "high": 1426.03, + "low": 1420.88, + "close": 1425.12 + }, + { + "open": 1425.11, + "high": 1425.68, + "low": 1421.85, + "close": 1423.23 + }, + { + "open": 1423.23, + "high": 1424.73, + "low": 1421.37, + "close": 1423.76 + }, + { + "open": 1423.75, + "high": 1424, + "low": 1418.3, + "close": 1420 + }, + { + "open": 1419.99, + "high": 1420.19, + "low": 1415.15, + "close": 1419.8 + }, + { + "open": 1419.79, + "high": 1421.88, + "low": 1418.08, + "close": 1420.88 + }, + { + "open": 1420.89, + "high": 1424.26, + "low": 1420.87, + "close": 1422.07 + }, + { + "open": 1422.06, + "high": 1423.13, + "low": 1420.59, + "close": 1422.39 + }, + { + "open": 1422.39, + "high": 1423.95, + "low": 1421.75, + "close": 1421.9 + }, + { + "open": 1421.9, + "high": 1423.15, + "low": 1419.15, + "close": 1423.14 + }, + { + "open": 1423.15, + "high": 1423.15, + "low": 1417.79, + "close": 1419.37 + }, + { + "open": 1419.38, + "high": 1419.57, + "low": 1416.26, + "close": 1417.29 + }, + { + "open": 1417.28, + "high": 1419.21, + "low": 1416.5, + "close": 1418.07 + }, + { + "open": 1418.06, + "high": 1418.07, + "low": 1400.46, + "close": 1415.32 + }, + { + "open": 1415.31, + "high": 1424.48, + "low": 1414.74, + "close": 1423.85 + }, + { + "open": 1423.86, + "high": 1424.14, + "low": 1419.33, + "close": 1421.39 + }, + { + "open": 1421.38, + "high": 1430.92, + "low": 1420.53, + "close": 1429.17 + }, + { + "open": 1429.17, + "high": 1438.16, + "low": 1428.17, + "close": 1436.56 + }, + { + "open": 1436.56, + "high": 1436.57, + "low": 1427.07, + "close": 1429.86 + }, + { + "open": 1429.86, + "high": 1429.87, + "low": 1422.71, + "close": 1425.41 + }, + { + "open": 1425.4, + "high": 1428.97, + "low": 1423.88, + "close": 1427.36 + }, + { + "open": 1427.36, + "high": 1432, + "low": 1426.91, + "close": 1431.33 + }, + { + "open": 1431.33, + "high": 1434.92, + "low": 1431.32, + "close": 1433.05 + }, + { + "open": 1433.04, + "high": 1435, + "low": 1431.4, + "close": 1434.81 + }, + { + "open": 1434.81, + "high": 1435.37, + "low": 1430.27, + "close": 1430.44 + }, + { + "open": 1430.45, + "high": 1433.4, + "low": 1430.1, + "close": 1432.26 + }, + { + "open": 1432.27, + "high": 1433.74, + "low": 1428.86, + "close": 1429.56 + }, + { + "open": 1429.56, + "high": 1434.14, + "low": 1428.46, + "close": 1432.89 + }, + { + "open": 1432.89, + "high": 1438.3, + "low": 1431.03, + "close": 1432.86 + }, + { + "open": 1432.87, + "high": 1433.99, + "low": 1431, + "close": 1433.84 + }, + { + "open": 1433.85, + "high": 1434.14, + "low": 1431.21, + "close": 1431.54 + }, + { + "open": 1431.53, + "high": 1433.37, + "low": 1430.3, + "close": 1431.32 + }, + { + "open": 1431.32, + "high": 1434, + "low": 1431.05, + "close": 1432.62 + }, + { + "open": 1432.62, + "high": 1433.24, + "low": 1425.55, + "close": 1426.28 + }, + { + "open": 1426.28, + "high": 1429.8, + "low": 1424.16, + "close": 1427.33 + }, + { + "open": 1427.33, + "high": 1427.88, + "low": 1424.32, + "close": 1426.04 + }, + { + "open": 1426.03, + "high": 1426.33, + "low": 1422.21, + "close": 1423.93 + }, + { + "open": 1423.93, + "high": 1425.44, + "low": 1422.55, + "close": 1423.89 + }, + { + "open": 1423.88, + "high": 1424.55, + "low": 1420.83, + "close": 1421.27 + }, + { + "open": 1421.26, + "high": 1423.64, + "low": 1420.6, + "close": 1422.77 + }, + { + "open": 1422.77, + "high": 1426.46, + "low": 1422.77, + "close": 1425.91 + }, + { + "open": 1425.92, + "high": 1426.42, + "low": 1422.2, + "close": 1422.72 + }, + { + "open": 1422.73, + "high": 1427.27, + "low": 1422.14, + "close": 1427.22 + }, + { + "open": 1427.22, + "high": 1430.2, + "low": 1425.67, + "close": 1428.24 + }, + { + "open": 1428.25, + "high": 1432.24, + "low": 1427.87, + "close": 1429.9 + }, + { + "open": 1429.89, + "high": 1430.99, + "low": 1428, + "close": 1428.42 + }, + { + "open": 1428.43, + "high": 1429.92, + "low": 1424.61, + "close": 1426.78 + }, + { + "open": 1426.79, + "high": 1427.3, + "low": 1424.19, + "close": 1424.26 + }, + { + "open": 1424.27, + "high": 1425.86, + "low": 1423.42, + "close": 1424.38 + }, + { + "open": 1424.37, + "high": 1424.47, + "low": 1420.8, + "close": 1421.27 + }, + { + "open": 1421.27, + "high": 1423.26, + "low": 1421.01, + "close": 1422.37 + }, + { + "open": 1422.37, + "high": 1426, + "low": 1421.84, + "close": 1424.07 + }, + { + "open": 1424.07, + "high": 1424.35, + "low": 1421.43, + "close": 1423.56 + }, + { + "open": 1423.55, + "high": 1423.71, + "low": 1416.58, + "close": 1417.41 + }, + { + "open": 1417.4, + "high": 1420.22, + "low": 1413.72, + "close": 1416.05 + }, + { + "open": 1416.06, + "high": 1417.5, + "low": 1414.67, + "close": 1416.57 + }, + { + "open": 1416.57, + "high": 1422.13, + "low": 1415.8, + "close": 1417.42 + }, + { + "open": 1417.42, + "high": 1417.88, + "low": 1415, + "close": 1416 + }, + { + "open": 1416.01, + "high": 1419.27, + "low": 1415.19, + "close": 1417.59 + }, + { + "open": 1417.59, + "high": 1418.69, + "low": 1415.76, + "close": 1416.86 + }, + { + "open": 1416.86, + "high": 1419.7, + "low": 1414.22, + "close": 1419.51 + }, + { + "open": 1419.5, + "high": 1421.79, + "low": 1417.87, + "close": 1420.19 + }, + { + "open": 1420.19, + "high": 1423.7, + "low": 1413.12, + "close": 1422.48 + }, + { + "open": 1422.49, + "high": 1423.28, + "low": 1421.01, + "close": 1422.19 + }, + { + "open": 1422.19, + "high": 1423.55, + "low": 1421.32, + "close": 1423.15 + }, + { + "open": 1423.15, + "high": 1423.67, + "low": 1421.4, + "close": 1421.76 + }, + { + "open": 1421.77, + "high": 1421.77, + "low": 1419.22, + "close": 1420.17 + }, + { + "open": 1420.18, + "high": 1421.76, + "low": 1416.74, + "close": 1417.99 + }, + { + "open": 1418, + "high": 1418.82, + "low": 1414.58, + "close": 1415.97 + }, + { + "open": 1415.97, + "high": 1417.49, + "low": 1409.57, + "close": 1412.33 + }, + { + "open": 1412.29, + "high": 1414.74, + "low": 1406.68, + "close": 1409.46 + }, + { + "open": 1409.46, + "high": 1410.48, + "low": 1406.23, + "close": 1406.35 + }, + { + "open": 1406.36, + "high": 1413.17, + "low": 1406.34, + "close": 1408.12 + }, + { + "open": 1408.12, + "high": 1411.39, + "low": 1406.3, + "close": 1406.63 + }, + { + "open": 1406.64, + "high": 1410.32, + "low": 1403.94, + "close": 1409.74 + }, + { + "open": 1409.74, + "high": 1411.89, + "low": 1407.7, + "close": 1411.32 + }, + { + "open": 1411.33, + "high": 1413.91, + "low": 1410.85, + "close": 1411.65 + }, + { + "open": 1411.64, + "high": 1414.31, + "low": 1410.68, + "close": 1413 + }, + { + "open": 1413, + "high": 1414.29, + "low": 1410.84, + "close": 1413.58 + }, + { + "open": 1413.59, + "high": 1418.54, + "low": 1413.56, + "close": 1417.54 + }, + { + "open": 1417.54, + "high": 1418.17, + "low": 1415.47, + "close": 1416.05 + }, + { + "open": 1416.05, + "high": 1416.25, + "low": 1413.66, + "close": 1414.45 + }, + { + "open": 1414.46, + "high": 1416.15, + "low": 1411.4, + "close": 1412.57 + }, + { + "open": 1412.57, + "high": 1414.98, + "low": 1411.25, + "close": 1414.75 + }, + { + "open": 1414.75, + "high": 1416, + "low": 1411, + "close": 1415.8 + }, + { + "open": 1415.79, + "high": 1417, + "low": 1413.48, + "close": 1414.55 + }, + { + "open": 1414.56, + "high": 1415.39, + "low": 1412.53, + "close": 1413.86 + }, + { + "open": 1413.86, + "high": 1417.88, + "low": 1413.13, + "close": 1417.18 + }, + { + "open": 1417.17, + "high": 1418.7, + "low": 1415.3, + "close": 1417.9 + }, + { + "open": 1417.89, + "high": 1421.6, + "low": 1417.51, + "close": 1420.29 + }, + { + "open": 1420.3, + "high": 1421.17, + "low": 1419, + "close": 1420.01 + }, + { + "open": 1420, + "high": 1422.16, + "low": 1419.5, + "close": 1421.11 + }, + { + "open": 1421.12, + "high": 1423.97, + "low": 1420.9, + "close": 1423.25 + }, + { + "open": 1423.26, + "high": 1423.26, + "low": 1420.76, + "close": 1420.82 + }, + { + "open": 1420.82, + "high": 1421.01, + "low": 1418.92, + "close": 1419.11 + }, + { + "open": 1419.11, + "high": 1421.25, + "low": 1419, + "close": 1421 + }, + { + "open": 1421.01, + "high": 1422.98, + "low": 1417.66, + "close": 1418.53 + }, + { + "open": 1418.52, + "high": 1419.44, + "low": 1415.01, + "close": 1415.47 + }, + { + "open": 1415.47, + "high": 1417.15, + "low": 1413.71, + "close": 1414.16 + }, + { + "open": 1414.15, + "high": 1416.22, + "low": 1413.37, + "close": 1414.09 + }, + { + "open": 1414.1, + "high": 1416.01, + "low": 1413, + "close": 1415.83 + }, + { + "open": 1415.84, + "high": 1418.37, + "low": 1413.65, + "close": 1414.5 + }, + { + "open": 1414.46, + "high": 1414.96, + "low": 1408.49, + "close": 1411.92 + }, + { + "open": 1411.92, + "high": 1412.58, + "low": 1409.72, + "close": 1412.57 + }, + { + "open": 1412.57, + "high": 1413.05, + "low": 1411.23, + "close": 1411.32 + }, + { + "open": 1411.32, + "high": 1412.81, + "low": 1408.13, + "close": 1409.79 + }, + { + "open": 1409.79, + "high": 1412.35, + "low": 1409.34, + "close": 1410.44 + }, + { + "open": 1410.43, + "high": 1412.92, + "low": 1408.61, + "close": 1412.09 + }, + { + "open": 1412.1, + "high": 1412.84, + "low": 1410.56, + "close": 1410.57 + }, + { + "open": 1410.56, + "high": 1411.32, + "low": 1409.19, + "close": 1409.59 + }, + { + "open": 1409.6, + "high": 1412.09, + "low": 1407.68, + "close": 1410.42 + }, + { + "open": 1410.43, + "high": 1414.86, + "low": 1409.94, + "close": 1414.1 + }, + { + "open": 1414.11, + "high": 1414.47, + "low": 1412.17, + "close": 1412.65 + }, + { + "open": 1412.66, + "high": 1413.85, + "low": 1411.93, + "close": 1413.43 + }, + { + "open": 1413.44, + "high": 1415.79, + "low": 1412.99, + "close": 1413.51 + }, + { + "open": 1413.52, + "high": 1414.6, + "low": 1410.26, + "close": 1410.34 + }, + { + "open": 1410.33, + "high": 1413.83, + "low": 1410.33, + "close": 1413.39 + }, + { + "open": 1413.38, + "high": 1414.82, + "low": 1406.46, + "close": 1407.52 + }, + { + "open": 1407.52, + "high": 1413.46, + "low": 1385.08, + "close": 1406.33 + }, + { + "open": 1406.33, + "high": 1406.42, + "low": 1396.54, + "close": 1403.7 + }, + { + "open": 1403.69, + "high": 1413.95, + "low": 1403.69, + "close": 1411.91 + }, + { + "open": 1411.92, + "high": 1420.39, + "low": 1411.91, + "close": 1414.33 + }, + { + "open": 1414.34, + "high": 1414.52, + "low": 1405.66, + "close": 1405.79 + }, + { + "open": 1405.8, + "high": 1409.11, + "low": 1399, + "close": 1399.24 + }, + { + "open": 1399.23, + "high": 1405.73, + "low": 1399.23, + "close": 1400.56 + }, + { + "open": 1400.55, + "high": 1402, + "low": 1396.96, + "close": 1400.96 + }, + { + "open": 1400.96, + "high": 1401.35, + "low": 1390.31, + "close": 1394.24 + }, + { + "open": 1394.24, + "high": 1395.43, + "low": 1387.54, + "close": 1389.76 + }, + { + "open": 1389.87, + "high": 1390.95, + "low": 1381.54, + "close": 1384.88 + }, + { + "open": 1384.87, + "high": 1388.96, + "low": 1383.78, + "close": 1388.13 + }, + { + "open": 1388.13, + "high": 1393.11, + "low": 1387.84, + "close": 1391.98 + }, + { + "open": 1391.99, + "high": 1393.4, + "low": 1387.03, + "close": 1391.28 + }, + { + "open": 1391.38, + "high": 1391.68, + "low": 1384.04, + "close": 1384.51 + }, + { + "open": 1384.52, + "high": 1387.12, + "low": 1369.29, + "close": 1377.99 + }, + { + "open": 1377.99, + "high": 1384.82, + "low": 1371, + "close": 1383.01 + }, + { + "open": 1383.01, + "high": 1388, + "low": 1381.75, + "close": 1383.05 + }, + { + "open": 1383.06, + "high": 1388.47, + "low": 1383.05, + "close": 1387.82 + }, + { + "open": 1387.82, + "high": 1390, + "low": 1382.78, + "close": 1388.01 + }, + { + "open": 1388, + "high": 1392.96, + "low": 1386.5, + "close": 1391.27 + }, + { + "open": 1391.2, + "high": 1392.61, + "low": 1387.5, + "close": 1389.07 + }, + { + "open": 1389.07, + "high": 1389.07, + "low": 1382.39, + "close": 1385.3 + }, + { + "open": 1385.3, + "high": 1392, + "low": 1384.63, + "close": 1387.41 + }, + { + "open": 1387.41, + "high": 1390.71, + "low": 1386.5, + "close": 1389.12 + }, + { + "open": 1389.11, + "high": 1392.6, + "low": 1382.5, + "close": 1391.93 + }, + { + "open": 1391.93, + "high": 1396.92, + "low": 1390.04, + "close": 1391.11 + }, + { + "open": 1391.11, + "high": 1394.3, + "low": 1383.57, + "close": 1385.3 + }, + { + "open": 1385.31, + "high": 1386.85, + "low": 1379.45, + "close": 1382.74 + }, + { + "open": 1382.74, + "high": 1384.96, + "low": 1379.24, + "close": 1382.24 + }, + { + "open": 1382.24, + "high": 1384.6, + "low": 1380.2, + "close": 1380.79 + }, + { + "open": 1380.78, + "high": 1382.77, + "low": 1376, + "close": 1381.3 + }, + { + "open": 1381.29, + "high": 1384.6, + "low": 1379.59, + "close": 1382.74 + }, + { + "open": 1382.75, + "high": 1385.95, + "low": 1381.72, + "close": 1384.68 + }, + { + "open": 1384.67, + "high": 1392.47, + "low": 1384.26, + "close": 1389.48 + }, + { + "open": 1389.49, + "high": 1392, + "low": 1388.82, + "close": 1390.13 + }, + { + "open": 1390.13, + "high": 1392.46, + "low": 1389.7, + "close": 1391.94 + }, + { + "open": 1391.94, + "high": 1393.95, + "low": 1388.32, + "close": 1388.68 + }, + { + "open": 1388.68, + "high": 1389.35, + "low": 1379.59, + "close": 1381.72 + }, + { + "open": 1381.71, + "high": 1384.78, + "low": 1379.64, + "close": 1384.68 + }, + { + "open": 1384.67, + "high": 1384.92, + "low": 1381.13, + "close": 1383.07 + }, + { + "open": 1383.07, + "high": 1383.24, + "low": 1375.5, + "close": 1375.74 + }, + { + "open": 1375.73, + "high": 1378.38, + "low": 1372.01, + "close": 1374.42 + }, + { + "open": 1374.42, + "high": 1377.99, + "low": 1366, + "close": 1377.51 + }, + { + "open": 1377.51, + "high": 1378.73, + "low": 1372.87, + "close": 1375.18 + }, + { + "open": 1375.18, + "high": 1378.38, + "low": 1371.96, + "close": 1376.76 + }, + { + "open": 1376.77, + "high": 1377.59, + "low": 1370.81, + "close": 1370.95 + }, + { + "open": 1370.95, + "high": 1374.62, + "low": 1363.87, + "close": 1367.88 + }, + { + "open": 1367.88, + "high": 1372, + "low": 1365.03, + "close": 1368.68 + }, + { + "open": 1368.67, + "high": 1373.02, + "low": 1367, + "close": 1370.9 + } +]`) + +func Test_GHFilter(t *testing.T) { + type args struct { + allKLines []types.KLine + window int + } + var klines []types.KLine + if err := json.Unmarshal(testGHFilterDataEthusdt5m, &klines); err != nil { + panic(err) + } + tests := []struct { + name string + args args + want float64 + }{ + { + name: "ETHUSDT G-H Filter 7", + args: args{ + allKLines: klines, + window: 7, + }, + want: 1373.71, + }, + { + name: "ETHUSDT G-H Filter 25", + args: args{ + allKLines: klines, + window: 25, + }, + want: 1376.21, + }, + { + name: "ETHUSDT G-H Filter 99", + args: args{ + allKLines: klines, + window: 99, + }, + want: 1378.96, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + filter := &GHFilter{IntervalWindow: types.IntervalWindow{Window: tt.args.window}} + for _, k := range klines { + filter.PushK(k) + } + got := filter.Last() + got = math.Trunc(got*100.0) / 100.0 + if got != tt.want { + t.Errorf("GHFilter.Last() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_GHFilterEstimationAccurate(t *testing.T) { + type args struct { + allKLines []types.KLine + priceF KLineValueMapper + window int + } + var klines []types.KLine + if err := json.Unmarshal(testGHFilterDataEthusdt5m, &klines); err != nil { + panic(err) + } + tests := []struct { + name string + args args + want float64 + }{ + { + name: "ETHUSDT G-H Filter square error 7", + args: args{ + allKLines: klines, + window: 7, + }, + }, + { + name: "ETHUSDT G-H Filter square error 25", + args: args{ + allKLines: klines, + window: 25, + }, + }, + { + name: "ETHUSDT G-H Filter square error 99", + args: args{ + allKLines: klines, + window: 99, + }, + }, + } + klineSquareError := func(base float64, k types.KLine) float64 { + openDiff := math.Abs(k.Open.Float64() - base) + highDiff := math.Abs(k.High.Float64() - base) + lowDiff := math.Abs(k.Low.Float64() - base) + closeDiff := math.Abs(k.Close.Float64() - base) + return openDiff*openDiff + highDiff*highDiff + lowDiff*lowDiff + closeDiff*closeDiff + } + closeSquareError := func(base float64, k types.KLine) float64 { + closeDiff := math.Abs(k.Close.Float64() - base) + return closeDiff * closeDiff + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + filter := &GHFilter{IntervalWindow: types.IntervalWindow{Window: tt.args.window}} + ewma := &EWMA{IntervalWindow: types.IntervalWindow{Window: tt.args.window}} + + var filterDiff2Sum, ewmaDiff2Sum float64 + var filterCloseDiff2Sum, ewmaCloseDiff2Sum float64 + for i, k := range klines { + // square error between last estimated state and current actual state + if i > 0 { + filterDiff2Sum += klineSquareError(filter.Last(), k) + ewmaDiff2Sum += klineSquareError(ewma.Last(), k) + filterCloseDiff2Sum += closeSquareError(filter.Last(), k) + ewmaCloseDiff2Sum += closeSquareError(ewma.Last(), k) + } + + // update estimations + filter.PushK(k) + ewma.PushK(k) + } + numEstimations := len(klines) - 1 + filterSquareErr := math.Sqrt(filterDiff2Sum / float64(numEstimations*4)) + ewmaSquareErr := math.Sqrt(ewmaDiff2Sum / float64(numEstimations*4)) + if filterSquareErr > ewmaSquareErr { + t.Errorf("filter K-Line square error %f > EWMA K-Line square error %v", filterSquareErr, ewmaSquareErr) + } + filterCloseSquareErr := math.Sqrt(filterCloseDiff2Sum / float64(numEstimations)) + ewmaCloseSquareErr := math.Sqrt(ewmaCloseDiff2Sum / float64(numEstimations)) + if filterCloseSquareErr > ewmaCloseSquareErr { + t.Errorf("filter close price square error %f > EWMA close price square error %v", filterCloseSquareErr, ewmaCloseSquareErr) + } + }) + } +} diff --git a/pkg/indicator/kalmanfilter.go b/pkg/indicator/kalmanfilter.go new file mode 100644 index 000000000..c49f22388 --- /dev/null +++ b/pkg/indicator/kalmanfilter.go @@ -0,0 +1,108 @@ +package indicator + +import ( + "github.com/c9s/bbgo/pkg/datatype/floats" + "github.com/c9s/bbgo/pkg/types" + "math" +) + +// Refer: https://www.kalmanfilter.net/kalman1d.html +// One-dimensional Kalman filter + +//go:generate callbackgen -type KalmanFilter +type KalmanFilter struct { + types.SeriesBase + types.IntervalWindow + AdditionalSmoothWindow uint + amp2 *types.Queue // measurement uncertainty + k float64 // Kalman gain + measurements *types.Queue + Values floats.Slice + + UpdateCallbacks []func(value float64) +} + +func (inc *KalmanFilter) Update(value float64) { + var measureMove = value + if inc.measurements != nil { + measureMove = value - inc.measurements.Last() + } + inc.update(value, math.Abs(measureMove)) +} + +func (inc *KalmanFilter) update(value, amp float64) { + if len(inc.Values) == 0 { + inc.amp2 = types.NewQueue(inc.Window) + inc.amp2.Update(amp * amp) + inc.measurements = types.NewQueue(inc.Window) + inc.measurements.Update(value) + inc.Values.Push(value) + return + } + + // measurement + inc.measurements.Update(value) + inc.amp2.Update(amp * amp) + q := math.Sqrt(types.Mean(inc.amp2)) * float64(1+inc.AdditionalSmoothWindow) + + // update + lastPredict := inc.Values.Last() + curState := value + (value - lastPredict) + estimated := lastPredict + inc.k*(curState-lastPredict) + + // predict + inc.Values.Push(estimated) + p := math.Abs(curState - estimated) + inc.k = p / (p + q) +} + +func (inc *KalmanFilter) Index(i int) float64 { + if inc.Values == nil { + return 0.0 + } + return inc.Values.Index(i) +} + +func (inc *KalmanFilter) Length() int { + if inc.Values == nil { + return 0 + } + return inc.Values.Length() +} + +func (inc *KalmanFilter) Last() float64 { + if inc.Values == nil { + return 0.0 + } + return inc.Values.Last() +} + +var _ types.SeriesExtend = &KalmanFilter{} + +func (inc *KalmanFilter) PushK(k types.KLine) { + inc.update(k.Close.Float64(), (k.High.Float64()-k.Low.Float64())/2) +} + +func (inc *KalmanFilter) CalculateAndUpdate(allKLines []types.KLine) { + if inc.Values != nil { + k := allKLines[len(allKLines)-1] + inc.PushK(k) + inc.EmitUpdate(inc.Last()) + return + } + for _, k := range allKLines { + inc.PushK(k) + inc.EmitUpdate(inc.Last()) + } +} + +func (inc *KalmanFilter) handleKLineWindowUpdate(interval types.Interval, window types.KLineWindow) { + if inc.Interval != interval { + return + } + inc.CalculateAndUpdate(window) +} + +func (inc *KalmanFilter) Bind(updater KLineWindowUpdater) { + updater.OnKLineWindowUpdate(inc.handleKLineWindowUpdate) +} diff --git a/pkg/indicator/kalmanfilter_callbacks.go b/pkg/indicator/kalmanfilter_callbacks.go new file mode 100644 index 000000000..3dff5fc49 --- /dev/null +++ b/pkg/indicator/kalmanfilter_callbacks.go @@ -0,0 +1,15 @@ +// Code generated by "callbackgen -type KalmanFilter"; DO NOT EDIT. + +package indicator + +import () + +func (inc *KalmanFilter) OnUpdate(cb func(value float64)) { + inc.UpdateCallbacks = append(inc.UpdateCallbacks, cb) +} + +func (inc *KalmanFilter) EmitUpdate(value float64) { + for _, cb := range inc.UpdateCallbacks { + cb(value) + } +} diff --git a/pkg/indicator/kalmanfilter_test.go b/pkg/indicator/kalmanfilter_test.go new file mode 100644 index 000000000..250656047 --- /dev/null +++ b/pkg/indicator/kalmanfilter_test.go @@ -0,0 +1,6191 @@ +package indicator + +import ( + "encoding/json" + "math" + "testing" + + "github.com/c9s/bbgo/pkg/types" +) + +// generated from Binance 2022/07/27 00:00 +// https://www.binance.com/api/v3/klines?symbol=ETHUSDT&interval=5m&endTime=1658851200000&limit=1000 +var testKalmanFilterDataEthusdt5m = []byte(`[ + { + "open": 1591.11, + "high": 1593.62, + "low": 1589.04, + "close": 1590.14 + }, + { + "open": 1590.14, + "high": 1596.51, + "low": 1590.13, + "close": 1592.06 + }, + { + "open": 1592.07, + "high": 1594.41, + "low": 1586.05, + "close": 1587.02 + }, + { + "open": 1587.02, + "high": 1588.38, + "low": 1583.86, + "close": 1585.33 + }, + { + "open": 1585.34, + "high": 1595.2, + "low": 1583.74, + "close": 1594.69 + }, + { + "open": 1594.69, + "high": 1594.75, + "low": 1589.89, + "close": 1591.36 + }, + { + "open": 1591.35, + "high": 1592.55, + "low": 1586.36, + "close": 1588.95 + }, + { + "open": 1588.95, + "high": 1589.75, + "low": 1588.39, + "close": 1589.38 + }, + { + "open": 1589.38, + "high": 1589.39, + "low": 1586.17, + "close": 1588.53 + }, + { + "open": 1588.52, + "high": 1588.62, + "low": 1581.95, + "close": 1583.4 + }, + { + "open": 1583.4, + "high": 1584.67, + "low": 1582.1, + "close": 1582.36 + }, + { + "open": 1582.35, + "high": 1584.29, + "low": 1577.82, + "close": 1578.14 + }, + { + "open": 1578.14, + "high": 1581.95, + "low": 1575.72, + "close": 1581.52 + }, + { + "open": 1581.52, + "high": 1584.86, + "low": 1578.51, + "close": 1580.88 + }, + { + "open": 1580.88, + "high": 1581.77, + "low": 1578.74, + "close": 1581.11 + }, + { + "open": 1581.1, + "high": 1582.72, + "low": 1579.07, + "close": 1579.4 + }, + { + "open": 1579.4, + "high": 1580.93, + "low": 1578, + "close": 1579.6 + }, + { + "open": 1579.59, + "high": 1583.81, + "low": 1579.59, + "close": 1582.7 + }, + { + "open": 1582.7, + "high": 1583, + "low": 1577.24, + "close": 1579.45 + }, + { + "open": 1579.46, + "high": 1581.59, + "low": 1577.44, + "close": 1579.59 + }, + { + "open": 1579.58, + "high": 1581.41, + "low": 1579.22, + "close": 1580.56 + }, + { + "open": 1580.57, + "high": 1586.23, + "low": 1579.86, + "close": 1584.23 + }, + { + "open": 1584.22, + "high": 1587.36, + "low": 1584.22, + "close": 1585.15 + }, + { + "open": 1585.15, + "high": 1585.15, + "low": 1579.83, + "close": 1583.75 + }, + { + "open": 1583.74, + "high": 1592.49, + "low": 1583.45, + "close": 1587.76 + }, + { + "open": 1587.76, + "high": 1590.7, + "low": 1585.62, + "close": 1587.5 + }, + { + "open": 1587.51, + "high": 1587.51, + "low": 1579.53, + "close": 1581.16 + }, + { + "open": 1581.15, + "high": 1585.71, + "low": 1581.15, + "close": 1582.47 + }, + { + "open": 1582.46, + "high": 1582.86, + "low": 1567.58, + "close": 1571.52 + }, + { + "open": 1571.53, + "high": 1577.8, + "low": 1571.03, + "close": 1575.16 + }, + { + "open": 1575.16, + "high": 1578.06, + "low": 1572.18, + "close": 1576.66 + }, + { + "open": 1576.66, + "high": 1578, + "low": 1574.62, + "close": 1577.21 + }, + { + "open": 1577.2, + "high": 1584.57, + "low": 1576.61, + "close": 1584.05 + }, + { + "open": 1584.06, + "high": 1585.61, + "low": 1580, + "close": 1582.08 + }, + { + "open": 1582.08, + "high": 1583.4, + "low": 1579.43, + "close": 1579.43 + }, + { + "open": 1579.43, + "high": 1579.98, + "low": 1574.53, + "close": 1575.06 + }, + { + "open": 1575.06, + "high": 1578.52, + "low": 1574.57, + "close": 1576.49 + }, + { + "open": 1576.5, + "high": 1577, + "low": 1572.5, + "close": 1573.26 + }, + { + "open": 1573.26, + "high": 1579.41, + "low": 1573.06, + "close": 1578.35 + }, + { + "open": 1578.35, + "high": 1585, + "low": 1577.16, + "close": 1584.32 + }, + { + "open": 1584.31, + "high": 1587.97, + "low": 1580.67, + "close": 1585.7 + }, + { + "open": 1585.7, + "high": 1588.35, + "low": 1584.37, + "close": 1585.95 + }, + { + "open": 1585.94, + "high": 1587.09, + "low": 1580.66, + "close": 1580.97 + }, + { + "open": 1580.97, + "high": 1583.38, + "low": 1577, + "close": 1581.64 + }, + { + "open": 1581.64, + "high": 1586.79, + "low": 1581.22, + "close": 1585.42 + }, + { + "open": 1585.42, + "high": 1585.42, + "low": 1581.67, + "close": 1582.37 + }, + { + "open": 1582.38, + "high": 1584.86, + "low": 1581.01, + "close": 1581.02 + }, + { + "open": 1581.03, + "high": 1582.05, + "low": 1578.99, + "close": 1579.46 + }, + { + "open": 1579.46, + "high": 1579.89, + "low": 1566.85, + "close": 1567.99 + }, + { + "open": 1567.99, + "high": 1567.99, + "low": 1553.2, + "close": 1554.87 + }, + { + "open": 1554.87, + "high": 1558, + "low": 1546.9, + "close": 1550.4 + }, + { + "open": 1550.4, + "high": 1554.98, + "low": 1546.27, + "close": 1549.67 + }, + { + "open": 1549.68, + "high": 1555, + "low": 1546.97, + "close": 1553.88 + }, + { + "open": 1553.89, + "high": 1557.86, + "low": 1553.6, + "close": 1557.85 + }, + { + "open": 1557.86, + "high": 1558.37, + "low": 1554.9, + "close": 1556.3 + }, + { + "open": 1556.31, + "high": 1557.4, + "low": 1552.81, + "close": 1557.18 + }, + { + "open": 1557.18, + "high": 1563.78, + "low": 1556.5, + "close": 1562.72 + }, + { + "open": 1562.72, + "high": 1564.11, + "low": 1558.76, + "close": 1560.64 + }, + { + "open": 1560.64, + "high": 1562.31, + "low": 1560.5, + "close": 1561.24 + }, + { + "open": 1561.25, + "high": 1565.69, + "low": 1561.23, + "close": 1564.79 + }, + { + "open": 1564.79, + "high": 1565.33, + "low": 1558.23, + "close": 1559.9 + }, + { + "open": 1559.89, + "high": 1561.77, + "low": 1555.87, + "close": 1560.79 + }, + { + "open": 1560.78, + "high": 1562.07, + "low": 1557.89, + "close": 1560.36 + }, + { + "open": 1560.36, + "high": 1561.2, + "low": 1556.13, + "close": 1558.26 + }, + { + "open": 1558.25, + "high": 1563.12, + "low": 1558.25, + "close": 1562.35 + }, + { + "open": 1562.36, + "high": 1564.02, + "low": 1561.76, + "close": 1563.32 + }, + { + "open": 1563.31, + "high": 1564.29, + "low": 1557.79, + "close": 1559.87 + }, + { + "open": 1559.86, + "high": 1562.71, + "low": 1558.77, + "close": 1559.8 + }, + { + "open": 1559.81, + "high": 1559.91, + "low": 1557.6, + "close": 1559.19 + }, + { + "open": 1559.2, + "high": 1559.95, + "low": 1554.3, + "close": 1557.16 + }, + { + "open": 1557.16, + "high": 1557.17, + "low": 1536.25, + "close": 1541.89 + }, + { + "open": 1541.89, + "high": 1544.39, + "low": 1538.55, + "close": 1539.33 + }, + { + "open": 1539.33, + "high": 1546.28, + "low": 1533.67, + "close": 1543.99 + }, + { + "open": 1543.99, + "high": 1544.5, + "low": 1538.21, + "close": 1539.17 + }, + { + "open": 1539.17, + "high": 1543.33, + "low": 1537.73, + "close": 1543 + }, + { + "open": 1543.2, + "high": 1544, + "low": 1535.81, + "close": 1541.12 + }, + { + "open": 1541.12, + "high": 1541.13, + "low": 1534.12, + "close": 1536.89 + }, + { + "open": 1536.9, + "high": 1539.09, + "low": 1528.25, + "close": 1531.02 + }, + { + "open": 1531.01, + "high": 1532.91, + "low": 1525.28, + "close": 1532.32 + }, + { + "open": 1532.33, + "high": 1537.58, + "low": 1532.32, + "close": 1535.07 + }, + { + "open": 1535.06, + "high": 1541.28, + "low": 1535.06, + "close": 1539.52 + }, + { + "open": 1539.53, + "high": 1539.85, + "low": 1533.37, + "close": 1536.22 + }, + { + "open": 1536.21, + "high": 1536.22, + "low": 1524.81, + "close": 1527.09 + }, + { + "open": 1527.1, + "high": 1529.2, + "low": 1520.62, + "close": 1525.04 + }, + { + "open": 1525.04, + "high": 1528.2, + "low": 1522.12, + "close": 1523.72 + }, + { + "open": 1523.71, + "high": 1525.54, + "low": 1519, + "close": 1522.82 + }, + { + "open": 1522.82, + "high": 1524.98, + "low": 1521, + "close": 1522.19 + }, + { + "open": 1522.19, + "high": 1524.27, + "low": 1512.68, + "close": 1513.27 + }, + { + "open": 1513.26, + "high": 1514.55, + "low": 1501.65, + "close": 1514.14 + }, + { + "open": 1514.14, + "high": 1524.43, + "low": 1513.03, + "close": 1520.08 + }, + { + "open": 1520.08, + "high": 1525.07, + "low": 1518.63, + "close": 1520.61 + }, + { + "open": 1520.61, + "high": 1525.68, + "low": 1517.43, + "close": 1524.86 + }, + { + "open": 1524.86, + "high": 1525.04, + "low": 1519.65, + "close": 1520.26 + }, + { + "open": 1520.27, + "high": 1521.19, + "low": 1517.91, + "close": 1518.46 + }, + { + "open": 1518.46, + "high": 1525.25, + "low": 1518.46, + "close": 1524.83 + }, + { + "open": 1524.84, + "high": 1526.94, + "low": 1521.69, + "close": 1521.9 + }, + { + "open": 1521.9, + "high": 1524.8, + "low": 1519.25, + "close": 1519.88 + }, + { + "open": 1519.88, + "high": 1520.5, + "low": 1517.33, + "close": 1518.76 + }, + { + "open": 1518.76, + "high": 1522.64, + "low": 1518.14, + "close": 1520.46 + }, + { + "open": 1520.46, + "high": 1522.96, + "low": 1518.63, + "close": 1522.52 + }, + { + "open": 1522.51, + "high": 1522.52, + "low": 1519.19, + "close": 1520.61 + }, + { + "open": 1520.61, + "high": 1526.26, + "low": 1519.52, + "close": 1526.1 + }, + { + "open": 1526.11, + "high": 1530.26, + "low": 1524.63, + "close": 1528.65 + }, + { + "open": 1528.65, + "high": 1529.64, + "low": 1521.24, + "close": 1523.18 + }, + { + "open": 1523.19, + "high": 1525.92, + "low": 1521.79, + "close": 1525.6 + }, + { + "open": 1525.61, + "high": 1525.79, + "low": 1522.78, + "close": 1525.31 + }, + { + "open": 1525.31, + "high": 1529.6, + "low": 1525.3, + "close": 1528.93 + }, + { + "open": 1528.93, + "high": 1530.33, + "low": 1527.02, + "close": 1527.61 + }, + { + "open": 1527.6, + "high": 1534, + "low": 1527.6, + "close": 1533.98 + }, + { + "open": 1533.98, + "high": 1537.3, + "low": 1532.24, + "close": 1536.49 + }, + { + "open": 1536.5, + "high": 1536.5, + "low": 1531.65, + "close": 1532.92 + }, + { + "open": 1532.92, + "high": 1532.92, + "low": 1529.1, + "close": 1529.58 + }, + { + "open": 1529.58, + "high": 1535.97, + "low": 1528.13, + "close": 1532.48 + }, + { + "open": 1532.49, + "high": 1533.45, + "low": 1530.29, + "close": 1531.01 + }, + { + "open": 1531.02, + "high": 1532.56, + "low": 1524.11, + "close": 1524.37 + }, + { + "open": 1524.36, + "high": 1534.58, + "low": 1524.28, + "close": 1529.52 + }, + { + "open": 1529.52, + "high": 1530.55, + "low": 1521.72, + "close": 1522.54 + }, + { + "open": 1522.55, + "high": 1526.64, + "low": 1522.45, + "close": 1526.49 + }, + { + "open": 1526.48, + "high": 1530.2, + "low": 1525.07, + "close": 1526.92 + }, + { + "open": 1526.92, + "high": 1527.65, + "low": 1525, + "close": 1526.44 + }, + { + "open": 1526.43, + "high": 1527.68, + "low": 1525.46, + "close": 1526.05 + }, + { + "open": 1526.05, + "high": 1526.27, + "low": 1516.23, + "close": 1516.52 + }, + { + "open": 1516.23, + "high": 1520.67, + "low": 1509.21, + "close": 1520.48 + }, + { + "open": 1520.48, + "high": 1530.83, + "low": 1519.77, + "close": 1529.59 + }, + { + "open": 1529.6, + "high": 1531.12, + "low": 1526.99, + "close": 1531.11 + }, + { + "open": 1531.12, + "high": 1533.79, + "low": 1529.25, + "close": 1531.72 + }, + { + "open": 1531.73, + "high": 1532.96, + "low": 1528.52, + "close": 1529.64 + }, + { + "open": 1529.64, + "high": 1530.49, + "low": 1523.16, + "close": 1524.37 + }, + { + "open": 1524.38, + "high": 1524.58, + "low": 1517.86, + "close": 1521.06 + }, + { + "open": 1521.07, + "high": 1530.49, + "low": 1515.75, + "close": 1526.14 + }, + { + "open": 1526.13, + "high": 1526.98, + "low": 1521.57, + "close": 1523.57 + }, + { + "open": 1523.56, + "high": 1523.68, + "low": 1520.39, + "close": 1521.17 + }, + { + "open": 1521.18, + "high": 1521.36, + "low": 1516.78, + "close": 1516.79 + }, + { + "open": 1516.79, + "high": 1521.81, + "low": 1516.48, + "close": 1520.2 + }, + { + "open": 1520.2, + "high": 1524.79, + "low": 1516.97, + "close": 1523.67 + }, + { + "open": 1523.67, + "high": 1527.82, + "low": 1522.79, + "close": 1525.77 + }, + { + "open": 1525.77, + "high": 1527.68, + "low": 1520.25, + "close": 1524.24 + }, + { + "open": 1524.23, + "high": 1530.88, + "low": 1523.28, + "close": 1529.87 + }, + { + "open": 1529.88, + "high": 1532.92, + "low": 1527.6, + "close": 1530.66 + }, + { + "open": 1530.65, + "high": 1531.32, + "low": 1528.31, + "close": 1530.85 + }, + { + "open": 1530.85, + "high": 1532.99, + "low": 1527.78, + "close": 1528.68 + }, + { + "open": 1528.69, + "high": 1529.92, + "low": 1527.13, + "close": 1527.14 + }, + { + "open": 1527.13, + "high": 1527.14, + "low": 1518.31, + "close": 1521.16 + }, + { + "open": 1521.16, + "high": 1530.26, + "low": 1521.15, + "close": 1526.67 + }, + { + "open": 1526.68, + "high": 1528.17, + "low": 1522.22, + "close": 1522.33 + }, + { + "open": 1522.33, + "high": 1526.23, + "low": 1521.09, + "close": 1523.59 + }, + { + "open": 1523.59, + "high": 1523.99, + "low": 1517.48, + "close": 1518.86 + }, + { + "open": 1518.85, + "high": 1523.43, + "low": 1513.25, + "close": 1521.57 + }, + { + "open": 1521.58, + "high": 1521.58, + "low": 1511.11, + "close": 1513.4 + }, + { + "open": 1513.4, + "high": 1515.26, + "low": 1507.7, + "close": 1508.31 + }, + { + "open": 1508.31, + "high": 1512.48, + "low": 1503.49, + "close": 1505.89 + }, + { + "open": 1505.88, + "high": 1509.76, + "low": 1494.63, + "close": 1500.13 + }, + { + "open": 1500.13, + "high": 1510.52, + "low": 1498.39, + "close": 1507.22 + }, + { + "open": 1507.21, + "high": 1508, + "low": 1495.51, + "close": 1501.06 + }, + { + "open": 1501.06, + "high": 1506.84, + "low": 1500.04, + "close": 1504.99 + }, + { + "open": 1505, + "high": 1507.4, + "low": 1497.16, + "close": 1498.46 + }, + { + "open": 1498.46, + "high": 1505.37, + "low": 1495, + "close": 1501.44 + }, + { + "open": 1501.36, + "high": 1504.4, + "low": 1500.27, + "close": 1500.55 + }, + { + "open": 1500.55, + "high": 1502.52, + "low": 1496.63, + "close": 1501.29 + }, + { + "open": 1501.29, + "high": 1501.88, + "low": 1496, + "close": 1496.37 + }, + { + "open": 1496.37, + "high": 1506.67, + "low": 1488, + "close": 1505.21 + }, + { + "open": 1505.21, + "high": 1508.6, + "low": 1502.24, + "close": 1508 + }, + { + "open": 1507.99, + "high": 1514.07, + "low": 1507.03, + "close": 1512.2 + }, + { + "open": 1512.2, + "high": 1513.73, + "low": 1510.89, + "close": 1512.64 + }, + { + "open": 1512.65, + "high": 1514.52, + "low": 1508.88, + "close": 1513.17 + }, + { + "open": 1513.17, + "high": 1513.95, + "low": 1511.68, + "close": 1511.94 + }, + { + "open": 1511.94, + "high": 1512.69, + "low": 1508, + "close": 1508.97 + }, + { + "open": 1508.97, + "high": 1511.92, + "low": 1508, + "close": 1511.71 + }, + { + "open": 1511.71, + "high": 1512.21, + "low": 1502.06, + "close": 1502.3 + }, + { + "open": 1502.29, + "high": 1505.5, + "low": 1499.75, + "close": 1503.8 + }, + { + "open": 1503.8, + "high": 1510.52, + "low": 1497.04, + "close": 1499.02 + }, + { + "open": 1499.03, + "high": 1500.56, + "low": 1497.35, + "close": 1499.88 + }, + { + "open": 1499.88, + "high": 1507.12, + "low": 1498.43, + "close": 1499 + }, + { + "open": 1498.99, + "high": 1501.4, + "low": 1489.93, + "close": 1493.7 + }, + { + "open": 1493.71, + "high": 1495.73, + "low": 1490.72, + "close": 1493.73 + }, + { + "open": 1493.72, + "high": 1495.82, + "low": 1492.44, + "close": 1493.23 + }, + { + "open": 1493.23, + "high": 1501.75, + "low": 1493.06, + "close": 1501.54 + }, + { + "open": 1501.54, + "high": 1506.81, + "low": 1500.45, + "close": 1506.61 + }, + { + "open": 1506.6, + "high": 1507.9, + "low": 1505.1, + "close": 1505.95 + }, + { + "open": 1505.95, + "high": 1509.42, + "low": 1505.69, + "close": 1508.9 + }, + { + "open": 1508.9, + "high": 1516.09, + "low": 1508.3, + "close": 1513.84 + }, + { + "open": 1513.83, + "high": 1516.35, + "low": 1510.74, + "close": 1512 + }, + { + "open": 1512, + "high": 1516.35, + "low": 1511.43, + "close": 1513.33 + }, + { + "open": 1513.25, + "high": 1518.68, + "low": 1511.56, + "close": 1517.19 + }, + { + "open": 1517.18, + "high": 1524.05, + "low": 1516.45, + "close": 1517.64 + }, + { + "open": 1517.64, + "high": 1519.51, + "low": 1514.37, + "close": 1518.03 + }, + { + "open": 1518.04, + "high": 1520.21, + "low": 1516.06, + "close": 1518.91 + }, + { + "open": 1518.91, + "high": 1519.8, + "low": 1516.06, + "close": 1518.1 + }, + { + "open": 1518.11, + "high": 1518.11, + "low": 1515.6, + "close": 1516.43 + }, + { + "open": 1516.43, + "high": 1521.28, + "low": 1515.79, + "close": 1519.82 + }, + { + "open": 1519.81, + "high": 1519.98, + "low": 1518.42, + "close": 1519.68 + }, + { + "open": 1519.69, + "high": 1521.68, + "low": 1518.67, + "close": 1520.28 + }, + { + "open": 1520.29, + "high": 1521.65, + "low": 1519.08, + "close": 1520.24 + }, + { + "open": 1520.25, + "high": 1527.76, + "low": 1520.24, + "close": 1526.28 + }, + { + "open": 1526.27, + "high": 1526.99, + "low": 1522.67, + "close": 1525.11 + }, + { + "open": 1525.1, + "high": 1529.05, + "low": 1523.62, + "close": 1525.51 + }, + { + "open": 1525.5, + "high": 1525.51, + "low": 1520.4, + "close": 1521.62 + }, + { + "open": 1521.62, + "high": 1525.97, + "low": 1521.59, + "close": 1523.41 + }, + { + "open": 1523.42, + "high": 1524.16, + "low": 1523, + "close": 1523.81 + }, + { + "open": 1523.8, + "high": 1523.99, + "low": 1522, + "close": 1523.43 + }, + { + "open": 1523.42, + "high": 1524.99, + "low": 1523.42, + "close": 1524.78 + }, + { + "open": 1524.79, + "high": 1525.35, + "low": 1523.06, + "close": 1523.24 + }, + { + "open": 1523.24, + "high": 1523.24, + "low": 1518.44, + "close": 1520.29 + }, + { + "open": 1520.28, + "high": 1521.95, + "low": 1518.01, + "close": 1521.07 + }, + { + "open": 1521.08, + "high": 1521.3, + "low": 1519.22, + "close": 1519.35 + }, + { + "open": 1519.35, + "high": 1519.63, + "low": 1516.3, + "close": 1517.68 + }, + { + "open": 1517.67, + "high": 1518.24, + "low": 1515.23, + "close": 1516.39 + }, + { + "open": 1516.39, + "high": 1520.22, + "low": 1515.31, + "close": 1519.56 + }, + { + "open": 1519.55, + "high": 1524.64, + "low": 1518, + "close": 1522.74 + }, + { + "open": 1522.74, + "high": 1523.93, + "low": 1520.21, + "close": 1520.29 + }, + { + "open": 1520.29, + "high": 1523.26, + "low": 1520.1, + "close": 1522.73 + }, + { + "open": 1522.74, + "high": 1541.63, + "low": 1522.73, + "close": 1539.67 + }, + { + "open": 1539.67, + "high": 1541.92, + "low": 1535.13, + "close": 1538.82 + }, + { + "open": 1538.82, + "high": 1547.2, + "low": 1538.27, + "close": 1545.55 + }, + { + "open": 1545.55, + "high": 1550, + "low": 1543.77, + "close": 1545.59 + }, + { + "open": 1545.6, + "high": 1546.69, + "low": 1539.57, + "close": 1539.68 + }, + { + "open": 1539.67, + "high": 1543.83, + "low": 1538.46, + "close": 1542.91 + }, + { + "open": 1542.91, + "high": 1545.89, + "low": 1542.34, + "close": 1543.44 + }, + { + "open": 1543.43, + "high": 1544.62, + "low": 1541.84, + "close": 1541.85 + }, + { + "open": 1541.85, + "high": 1554.35, + "low": 1539.93, + "close": 1545.74 + }, + { + "open": 1545.77, + "high": 1554.47, + "low": 1545, + "close": 1549.46 + }, + { + "open": 1549.46, + "high": 1552.24, + "low": 1549.45, + "close": 1551.24 + }, + { + "open": 1551.25, + "high": 1554.87, + "low": 1550.63, + "close": 1551.87 + }, + { + "open": 1551.86, + "high": 1553.53, + "low": 1545.58, + "close": 1546.72 + }, + { + "open": 1546.71, + "high": 1552.74, + "low": 1546.65, + "close": 1551.27 + }, + { + "open": 1551.26, + "high": 1555.26, + "low": 1549.71, + "close": 1551.45 + }, + { + "open": 1551.44, + "high": 1553.45, + "low": 1548.31, + "close": 1548.54 + }, + { + "open": 1548.54, + "high": 1549.16, + "low": 1546.57, + "close": 1547.39 + }, + { + "open": 1547.38, + "high": 1549.99, + "low": 1546.86, + "close": 1548.82 + }, + { + "open": 1548.82, + "high": 1554.04, + "low": 1544.92, + "close": 1552.11 + }, + { + "open": 1552.11, + "high": 1553.01, + "low": 1548.42, + "close": 1548.67 + }, + { + "open": 1548.66, + "high": 1577.24, + "low": 1548.66, + "close": 1568.11 + }, + { + "open": 1568.11, + "high": 1569.11, + "low": 1562, + "close": 1563.15 + }, + { + "open": 1563.16, + "high": 1572.49, + "low": 1562.7, + "close": 1566.75 + }, + { + "open": 1566.76, + "high": 1567.67, + "low": 1563.83, + "close": 1564.03 + }, + { + "open": 1564.03, + "high": 1566.14, + "low": 1561.79, + "close": 1563.28 + }, + { + "open": 1563.27, + "high": 1569.75, + "low": 1562.43, + "close": 1569.75 + }, + { + "open": 1569.75, + "high": 1571.84, + "low": 1566.17, + "close": 1569.27 + }, + { + "open": 1569.27, + "high": 1569.28, + "low": 1563.78, + "close": 1563.84 + }, + { + "open": 1563.84, + "high": 1565.98, + "low": 1563.84, + "close": 1564.01 + }, + { + "open": 1564.01, + "high": 1566, + "low": 1562.21, + "close": 1563.5 + }, + { + "open": 1563.51, + "high": 1566.46, + "low": 1562.51, + "close": 1564.33 + }, + { + "open": 1564.34, + "high": 1566.17, + "low": 1564.07, + "close": 1565.09 + }, + { + "open": 1565.09, + "high": 1570.37, + "low": 1565.09, + "close": 1567.3 + }, + { + "open": 1567.29, + "high": 1567.3, + "low": 1564.01, + "close": 1564.01 + }, + { + "open": 1564.01, + "high": 1564.08, + "low": 1560.55, + "close": 1560.71 + }, + { + "open": 1560.71, + "high": 1565.8, + "low": 1560.71, + "close": 1563.98 + }, + { + "open": 1563.97, + "high": 1566.38, + "low": 1563.86, + "close": 1564.27 + }, + { + "open": 1564.28, + "high": 1564.71, + "low": 1560.12, + "close": 1561.13 + }, + { + "open": 1561.13, + "high": 1561.66, + "low": 1551.32, + "close": 1556.13 + }, + { + "open": 1556.13, + "high": 1562.78, + "low": 1549.89, + "close": 1559.92 + }, + { + "open": 1559.92, + "high": 1559.97, + "low": 1545.67, + "close": 1552.36 + }, + { + "open": 1552.37, + "high": 1554.87, + "low": 1549.84, + "close": 1550.13 + }, + { + "open": 1550.12, + "high": 1555.85, + "low": 1549.76, + "close": 1553.41 + }, + { + "open": 1553.41, + "high": 1562.56, + "low": 1553.08, + "close": 1560.89 + }, + { + "open": 1560.9, + "high": 1561.67, + "low": 1556.7, + "close": 1557.88 + }, + { + "open": 1557.87, + "high": 1559.82, + "low": 1555.63, + "close": 1558.56 + }, + { + "open": 1558.56, + "high": 1558.91, + "low": 1555.59, + "close": 1557.08 + }, + { + "open": 1557.09, + "high": 1557.56, + "low": 1554.21, + "close": 1555.63 + }, + { + "open": 1555.62, + "high": 1556.44, + "low": 1553.5, + "close": 1556.34 + }, + { + "open": 1556.34, + "high": 1560.77, + "low": 1555.66, + "close": 1559.82 + }, + { + "open": 1559.83, + "high": 1567.93, + "low": 1559.82, + "close": 1561.87 + }, + { + "open": 1561.88, + "high": 1567.23, + "low": 1561.69, + "close": 1564.58 + }, + { + "open": 1564.58, + "high": 1565.55, + "low": 1561.26, + "close": 1561.58 + }, + { + "open": 1561.58, + "high": 1563.41, + "low": 1557.54, + "close": 1557.74 + }, + { + "open": 1557.73, + "high": 1559.22, + "low": 1556.8, + "close": 1557.69 + }, + { + "open": 1557.7, + "high": 1565.46, + "low": 1557.69, + "close": 1565.18 + }, + { + "open": 1565.18, + "high": 1566.39, + "low": 1563.34, + "close": 1564.35 + }, + { + "open": 1564.35, + "high": 1565.13, + "low": 1561.71, + "close": 1561.71 + }, + { + "open": 1561.72, + "high": 1561.85, + "low": 1557.41, + "close": 1558.38 + }, + { + "open": 1558.38, + "high": 1559.17, + "low": 1552.3, + "close": 1554.71 + }, + { + "open": 1554.7, + "high": 1555.89, + "low": 1552.21, + "close": 1553.36 + }, + { + "open": 1553.35, + "high": 1556.24, + "low": 1551.78, + "close": 1555.12 + }, + { + "open": 1555.12, + "high": 1557.49, + "low": 1553.78, + "close": 1554.54 + }, + { + "open": 1554.54, + "high": 1554.55, + "low": 1545.75, + "close": 1550.29 + }, + { + "open": 1550.29, + "high": 1554.52, + "low": 1549.21, + "close": 1552.37 + }, + { + "open": 1552.38, + "high": 1554.16, + "low": 1551.93, + "close": 1552.33 + }, + { + "open": 1552.33, + "high": 1553.41, + "low": 1551.41, + "close": 1551.65 + }, + { + "open": 1551.65, + "high": 1552.49, + "low": 1551, + "close": 1551.51 + }, + { + "open": 1551.51, + "high": 1556.79, + "low": 1550.86, + "close": 1553.86 + }, + { + "open": 1553.85, + "high": 1557.95, + "low": 1553.28, + "close": 1555.2 + }, + { + "open": 1555.19, + "high": 1555.45, + "low": 1546.9, + "close": 1553.41 + }, + { + "open": 1553.4, + "high": 1554.25, + "low": 1551.34, + "close": 1551.35 + }, + { + "open": 1551.35, + "high": 1553.57, + "low": 1551.1, + "close": 1551.67 + }, + { + "open": 1551.67, + "high": 1555.66, + "low": 1550.68, + "close": 1554.05 + }, + { + "open": 1554.09, + "high": 1560.4, + "low": 1554.09, + "close": 1559.55 + }, + { + "open": 1559.56, + "high": 1561.81, + "low": 1558.47, + "close": 1561.8 + }, + { + "open": 1561.81, + "high": 1561.81, + "low": 1558.59, + "close": 1559.39 + }, + { + "open": 1559.39, + "high": 1560.98, + "low": 1558.91, + "close": 1558.95 + }, + { + "open": 1558.96, + "high": 1563.63, + "low": 1557.85, + "close": 1558.69 + }, + { + "open": 1558.7, + "high": 1561.62, + "low": 1556.87, + "close": 1561.25 + }, + { + "open": 1561.25, + "high": 1572, + "low": 1560.1, + "close": 1564.23 + }, + { + "open": 1564.22, + "high": 1565.96, + "low": 1563.01, + "close": 1564.81 + }, + { + "open": 1564.81, + "high": 1579, + "low": 1563.25, + "close": 1577.63 + }, + { + "open": 1577.63, + "high": 1592.55, + "low": 1575.76, + "close": 1591.16 + }, + { + "open": 1591.17, + "high": 1603.78, + "low": 1590.69, + "close": 1594.31 + }, + { + "open": 1594.31, + "high": 1600.91, + "low": 1593.95, + "close": 1594.48 + }, + { + "open": 1594.47, + "high": 1599.53, + "low": 1589.52, + "close": 1590.67 + }, + { + "open": 1590.66, + "high": 1597.42, + "low": 1586.33, + "close": 1597.12 + }, + { + "open": 1597.12, + "high": 1608.5, + "low": 1596.08, + "close": 1607.22 + }, + { + "open": 1607.23, + "high": 1608.55, + "low": 1601.27, + "close": 1602.19 + }, + { + "open": 1602.19, + "high": 1604.2, + "low": 1599.23, + "close": 1601.92 + }, + { + "open": 1601.92, + "high": 1603.39, + "low": 1599.15, + "close": 1601.33 + }, + { + "open": 1601.33, + "high": 1604.92, + "low": 1600.37, + "close": 1604.71 + }, + { + "open": 1604.72, + "high": 1604.8, + "low": 1600.12, + "close": 1600.68 + }, + { + "open": 1600.69, + "high": 1605.89, + "low": 1600.23, + "close": 1604.66 + }, + { + "open": 1604.66, + "high": 1619.05, + "low": 1604.36, + "close": 1607.94 + }, + { + "open": 1607.95, + "high": 1613.84, + "low": 1605.04, + "close": 1612.56 + }, + { + "open": 1612.57, + "high": 1619.78, + "low": 1611.98, + "close": 1618.5 + }, + { + "open": 1618.49, + "high": 1619.35, + "low": 1612, + "close": 1614.67 + }, + { + "open": 1614.67, + "high": 1614.68, + "low": 1608.16, + "close": 1608.9 + }, + { + "open": 1608.89, + "high": 1612.96, + "low": 1608.89, + "close": 1610.35 + }, + { + "open": 1610.36, + "high": 1615.02, + "low": 1610.23, + "close": 1613.92 + }, + { + "open": 1613.91, + "high": 1614.82, + "low": 1611.6, + "close": 1612.52 + }, + { + "open": 1612.51, + "high": 1613.49, + "low": 1606.76, + "close": 1610.14 + }, + { + "open": 1610.14, + "high": 1615.15, + "low": 1608.17, + "close": 1613.23 + }, + { + "open": 1613.23, + "high": 1619.99, + "low": 1613.23, + "close": 1615.83 + }, + { + "open": 1615.84, + "high": 1617.05, + "low": 1610.28, + "close": 1610.39 + }, + { + "open": 1610.39, + "high": 1612.38, + "low": 1606.69, + "close": 1608.64 + }, + { + "open": 1608.64, + "high": 1611.02, + "low": 1608.16, + "close": 1610.05 + }, + { + "open": 1610.05, + "high": 1612, + "low": 1607.59, + "close": 1608.4 + }, + { + "open": 1608.39, + "high": 1609.76, + "low": 1603.32, + "close": 1603.65 + }, + { + "open": 1603.66, + "high": 1606.98, + "low": 1603.38, + "close": 1605.03 + }, + { + "open": 1605.03, + "high": 1611.78, + "low": 1605.03, + "close": 1610.29 + }, + { + "open": 1610.29, + "high": 1611.76, + "low": 1608.83, + "close": 1609.91 + }, + { + "open": 1609.9, + "high": 1609.93, + "low": 1604.31, + "close": 1605.01 + }, + { + "open": 1605.01, + "high": 1606.99, + "low": 1604.35, + "close": 1604.44 + }, + { + "open": 1604.44, + "high": 1607.45, + "low": 1599.66, + "close": 1601.09 + }, + { + "open": 1601.09, + "high": 1605, + "low": 1599.56, + "close": 1603.39 + }, + { + "open": 1603.39, + "high": 1604.36, + "low": 1601.89, + "close": 1604.17 + }, + { + "open": 1604.17, + "high": 1604.4, + "low": 1601.11, + "close": 1601.82 + }, + { + "open": 1601.82, + "high": 1602.58, + "low": 1597, + "close": 1598.54 + }, + { + "open": 1598.55, + "high": 1599.26, + "low": 1595, + "close": 1597.39 + }, + { + "open": 1597.4, + "high": 1599.58, + "low": 1595.34, + "close": 1595.5 + }, + { + "open": 1595.49, + "high": 1597.72, + "low": 1594, + "close": 1596.51 + }, + { + "open": 1596.5, + "high": 1608.06, + "low": 1596.03, + "close": 1605.83 + }, + { + "open": 1605.84, + "high": 1610.01, + "low": 1602.77, + "close": 1603.14 + }, + { + "open": 1603.13, + "high": 1605.96, + "low": 1602.02, + "close": 1605.76 + }, + { + "open": 1605.76, + "high": 1606.06, + "low": 1602.56, + "close": 1603.5 + }, + { + "open": 1603.5, + "high": 1608.17, + "low": 1603, + "close": 1606.46 + }, + { + "open": 1606.47, + "high": 1606.57, + "low": 1600.37, + "close": 1600.49 + }, + { + "open": 1600.49, + "high": 1603.15, + "low": 1599, + "close": 1602.38 + }, + { + "open": 1602.38, + "high": 1605.76, + "low": 1602.33, + "close": 1604.24 + }, + { + "open": 1604.24, + "high": 1613.6, + "low": 1603.63, + "close": 1608.86 + }, + { + "open": 1608.85, + "high": 1608.86, + "low": 1605.31, + "close": 1607.69 + }, + { + "open": 1607.69, + "high": 1611.81, + "low": 1606.26, + "close": 1606.85 + }, + { + "open": 1606.85, + "high": 1607.62, + "low": 1602.87, + "close": 1603.66 + }, + { + "open": 1603.67, + "high": 1603.9, + "low": 1600.29, + "close": 1602.19 + }, + { + "open": 1602.19, + "high": 1602.64, + "low": 1598.88, + "close": 1599.6 + }, + { + "open": 1599.6, + "high": 1602.21, + "low": 1599.59, + "close": 1601.28 + }, + { + "open": 1601.29, + "high": 1602.42, + "low": 1596.21, + "close": 1598 + }, + { + "open": 1598, + "high": 1600, + "low": 1597, + "close": 1599.99 + }, + { + "open": 1600, + "high": 1600.46, + "low": 1598.05, + "close": 1598.1 + }, + { + "open": 1598.11, + "high": 1600.46, + "low": 1597.24, + "close": 1598.62 + }, + { + "open": 1598.62, + "high": 1604.32, + "low": 1597.61, + "close": 1599.57 + }, + { + "open": 1599.58, + "high": 1603.67, + "low": 1599.05, + "close": 1602.84 + }, + { + "open": 1602.84, + "high": 1603.41, + "low": 1601.33, + "close": 1601.71 + }, + { + "open": 1601.72, + "high": 1604.38, + "low": 1600.84, + "close": 1601.06 + }, + { + "open": 1601.07, + "high": 1601.07, + "low": 1584.25, + "close": 1585.56 + }, + { + "open": 1585.57, + "high": 1590.35, + "low": 1583, + "close": 1583.3 + }, + { + "open": 1583.31, + "high": 1585.59, + "low": 1582, + "close": 1582.99 + }, + { + "open": 1582.99, + "high": 1587.47, + "low": 1580, + "close": 1585 + }, + { + "open": 1584.87, + "high": 1586.53, + "low": 1584.36, + "close": 1585.54 + }, + { + "open": 1585.53, + "high": 1592, + "low": 1583.94, + "close": 1590.4 + }, + { + "open": 1590.41, + "high": 1591.7, + "low": 1587.77, + "close": 1591.67 + }, + { + "open": 1591.67, + "high": 1627.93, + "low": 1591.67, + "close": 1619.34 + }, + { + "open": 1619.35, + "high": 1627.28, + "low": 1615.54, + "close": 1620.06 + }, + { + "open": 1620.07, + "high": 1627.91, + "low": 1616.57, + "close": 1618.04 + }, + { + "open": 1618.03, + "high": 1622.4, + "low": 1617.04, + "close": 1620.09 + }, + { + "open": 1620.09, + "high": 1628.86, + "low": 1615.37, + "close": 1615.63 + }, + { + "open": 1615.63, + "high": 1622.18, + "low": 1615.37, + "close": 1621.29 + }, + { + "open": 1621.3, + "high": 1622.8, + "low": 1620, + "close": 1620.51 + }, + { + "open": 1620.5, + "high": 1621.89, + "low": 1613.17, + "close": 1615.52 + }, + { + "open": 1615.53, + "high": 1617.4, + "low": 1614.06, + "close": 1615.32 + }, + { + "open": 1615.33, + "high": 1620.03, + "low": 1615.32, + "close": 1615.85 + }, + { + "open": 1615.84, + "high": 1619.22, + "low": 1603.38, + "close": 1606.41 + }, + { + "open": 1606.41, + "high": 1615.27, + "low": 1606.33, + "close": 1614.67 + }, + { + "open": 1614.68, + "high": 1618.39, + "low": 1614, + "close": 1617.37 + }, + { + "open": 1617.38, + "high": 1620.43, + "low": 1615.78, + "close": 1618.73 + }, + { + "open": 1618.72, + "high": 1618.73, + "low": 1610.77, + "close": 1611.04 + }, + { + "open": 1611.03, + "high": 1614.99, + "low": 1611.03, + "close": 1612.59 + }, + { + "open": 1612.59, + "high": 1613.22, + "low": 1605.77, + "close": 1606.25 + }, + { + "open": 1606.25, + "high": 1608.57, + "low": 1604.04, + "close": 1606.66 + }, + { + "open": 1606.66, + "high": 1609.22, + "low": 1594.74, + "close": 1596.49 + }, + { + "open": 1596.48, + "high": 1600.36, + "low": 1596.16, + "close": 1597.82 + }, + { + "open": 1597.82, + "high": 1598.27, + "low": 1586.09, + "close": 1587.01 + }, + { + "open": 1587.01, + "high": 1589.01, + "low": 1576.53, + "close": 1578.03 + }, + { + "open": 1578.03, + "high": 1583.88, + "low": 1575, + "close": 1579.57 + }, + { + "open": 1579.57, + "high": 1585.38, + "low": 1578.04, + "close": 1584.92 + }, + { + "open": 1584.92, + "high": 1585.58, + "low": 1579.7, + "close": 1584.64 + }, + { + "open": 1584.64, + "high": 1585.69, + "low": 1580.78, + "close": 1582.9 + }, + { + "open": 1582.91, + "high": 1582.91, + "low": 1576.04, + "close": 1578.85 + }, + { + "open": 1578.85, + "high": 1584.74, + "low": 1578.84, + "close": 1584.44 + }, + { + "open": 1584.43, + "high": 1584.94, + "low": 1575, + "close": 1579.18 + }, + { + "open": 1579.18, + "high": 1583.31, + "low": 1579.09, + "close": 1579.83 + }, + { + "open": 1579.83, + "high": 1582.08, + "low": 1573, + "close": 1577.81 + }, + { + "open": 1577.8, + "high": 1582.09, + "low": 1576.19, + "close": 1581.71 + }, + { + "open": 1581.71, + "high": 1582.97, + "low": 1579.21, + "close": 1579.75 + }, + { + "open": 1579.74, + "high": 1583.99, + "low": 1579.52, + "close": 1581.78 + }, + { + "open": 1581.79, + "high": 1583.99, + "low": 1580.27, + "close": 1580.67 + }, + { + "open": 1580.68, + "high": 1589.57, + "low": 1573.86, + "close": 1582.09 + }, + { + "open": 1582.09, + "high": 1586.32, + "low": 1578.54, + "close": 1581.81 + }, + { + "open": 1581.81, + "high": 1588.44, + "low": 1581.8, + "close": 1587.46 + }, + { + "open": 1587.46, + "high": 1618, + "low": 1587.45, + "close": 1611.24 + }, + { + "open": 1611.24, + "high": 1614.26, + "low": 1605.36, + "close": 1612.02 + }, + { + "open": 1612.02, + "high": 1616, + "low": 1608.85, + "close": 1610.58 + }, + { + "open": 1610.59, + "high": 1612.66, + "low": 1607.85, + "close": 1609.51 + }, + { + "open": 1609.51, + "high": 1611.59, + "low": 1607.13, + "close": 1610.04 + }, + { + "open": 1610.04, + "high": 1610.16, + "low": 1603.11, + "close": 1609.25 + }, + { + "open": 1609.25, + "high": 1617.77, + "low": 1605.15, + "close": 1611.78 + }, + { + "open": 1611.77, + "high": 1612.94, + "low": 1608.89, + "close": 1610.54 + }, + { + "open": 1610.53, + "high": 1610.79, + "low": 1607.76, + "close": 1609.46 + }, + { + "open": 1609.46, + "high": 1611.35, + "low": 1607.06, + "close": 1608.93 + }, + { + "open": 1608.92, + "high": 1621.42, + "low": 1608.92, + "close": 1615.58 + }, + { + "open": 1615.59, + "high": 1617.94, + "low": 1609.66, + "close": 1610.42 + }, + { + "open": 1610.41, + "high": 1613.09, + "low": 1607.94, + "close": 1610.04 + }, + { + "open": 1610.03, + "high": 1612.39, + "low": 1608.86, + "close": 1612.38 + }, + { + "open": 1612.39, + "high": 1612.39, + "low": 1606.68, + "close": 1607.45 + }, + { + "open": 1607.45, + "high": 1608.6, + "low": 1603.5, + "close": 1606.03 + }, + { + "open": 1606.03, + "high": 1608.42, + "low": 1605.16, + "close": 1606.46 + }, + { + "open": 1606.46, + "high": 1609.6, + "low": 1605.99, + "close": 1608.61 + }, + { + "open": 1608.61, + "high": 1611.82, + "low": 1608.6, + "close": 1609.35 + }, + { + "open": 1609.36, + "high": 1613.69, + "low": 1608.97, + "close": 1612.61 + }, + { + "open": 1612.61, + "high": 1615.38, + "low": 1600.05, + "close": 1605.29 + }, + { + "open": 1605.29, + "high": 1610.87, + "low": 1594.48, + "close": 1595.84 + }, + { + "open": 1595.85, + "high": 1600.32, + "low": 1593.78, + "close": 1595.82 + }, + { + "open": 1595.81, + "high": 1596.14, + "low": 1588.38, + "close": 1590.05 + }, + { + "open": 1590.05, + "high": 1595, + "low": 1587.23, + "close": 1590.98 + }, + { + "open": 1590.98, + "high": 1590.99, + "low": 1584.71, + "close": 1587.17 + }, + { + "open": 1587.16, + "high": 1591.85, + "low": 1583.51, + "close": 1590.73 + }, + { + "open": 1590.74, + "high": 1594.04, + "low": 1590, + "close": 1592.56 + }, + { + "open": 1592.55, + "high": 1596.8, + "low": 1591.81, + "close": 1593.82 + }, + { + "open": 1593.82, + "high": 1594.8, + "low": 1588.17, + "close": 1590.81 + }, + { + "open": 1590.81, + "high": 1593.02, + "low": 1590.45, + "close": 1592.96 + }, + { + "open": 1592.96, + "high": 1593.35, + "low": 1590, + "close": 1591.3 + }, + { + "open": 1591.31, + "high": 1594.96, + "low": 1590.04, + "close": 1593.73 + }, + { + "open": 1593.74, + "high": 1594.35, + "low": 1592.3, + "close": 1593.39 + }, + { + "open": 1593.4, + "high": 1607.22, + "low": 1593, + "close": 1602.44 + }, + { + "open": 1602.45, + "high": 1611.36, + "low": 1602.44, + "close": 1608.78 + }, + { + "open": 1608.79, + "high": 1613.99, + "low": 1608, + "close": 1610.29 + }, + { + "open": 1610.27, + "high": 1610.8, + "low": 1605.45, + "close": 1607.02 + }, + { + "open": 1607.01, + "high": 1607.17, + "low": 1591.77, + "close": 1594.46 + }, + { + "open": 1594.46, + "high": 1598.08, + "low": 1593.34, + "close": 1596.43 + }, + { + "open": 1596.43, + "high": 1606.97, + "low": 1596.42, + "close": 1606.51 + }, + { + "open": 1606.51, + "high": 1606.51, + "low": 1600, + "close": 1601.63 + }, + { + "open": 1601.63, + "high": 1604.92, + "low": 1600.43, + "close": 1603.69 + }, + { + "open": 1603.68, + "high": 1604.44, + "low": 1600.92, + "close": 1603.73 + }, + { + "open": 1603.73, + "high": 1604.5, + "low": 1596.63, + "close": 1599.85 + }, + { + "open": 1599.86, + "high": 1603.51, + "low": 1597.73, + "close": 1601.35 + }, + { + "open": 1601.35, + "high": 1603.01, + "low": 1598.18, + "close": 1599.56 + }, + { + "open": 1599.57, + "high": 1606, + "low": 1598.74, + "close": 1605.58 + }, + { + "open": 1605.57, + "high": 1605.59, + "low": 1600.41, + "close": 1600.46 + }, + { + "open": 1600.45, + "high": 1602.81, + "low": 1599.72, + "close": 1601.36 + }, + { + "open": 1601.36, + "high": 1602.24, + "low": 1595.8, + "close": 1596.99 + }, + { + "open": 1597, + "high": 1599, + "low": 1590.72, + "close": 1596.49 + }, + { + "open": 1596.49, + "high": 1597.31, + "low": 1593.48, + "close": 1593.61 + }, + { + "open": 1593.62, + "high": 1598.96, + "low": 1593, + "close": 1597.03 + }, + { + "open": 1597.02, + "high": 1598, + "low": 1594.17, + "close": 1596.97 + }, + { + "open": 1596.96, + "high": 1599.64, + "low": 1595.32, + "close": 1597.92 + }, + { + "open": 1597.91, + "high": 1600.45, + "low": 1597.28, + "close": 1597.64 + }, + { + "open": 1597.65, + "high": 1599.3, + "low": 1593.85, + "close": 1596.34 + }, + { + "open": 1596.34, + "high": 1607.62, + "low": 1595.76, + "close": 1603.49 + }, + { + "open": 1603.49, + "high": 1606.36, + "low": 1595, + "close": 1596.49 + }, + { + "open": 1596.48, + "high": 1604.91, + "low": 1596.1, + "close": 1604.91 + }, + { + "open": 1604.9, + "high": 1610, + "low": 1602.61, + "close": 1607.95 + }, + { + "open": 1607.94, + "high": 1614.95, + "low": 1607.59, + "close": 1613.14 + }, + { + "open": 1613.14, + "high": 1613.15, + "low": 1610.38, + "close": 1610.46 + }, + { + "open": 1610.46, + "high": 1611.95, + "low": 1607.42, + "close": 1607.63 + }, + { + "open": 1607.62, + "high": 1609.74, + "low": 1603.26, + "close": 1603.53 + }, + { + "open": 1603.53, + "high": 1604.18, + "low": 1599.56, + "close": 1600.77 + }, + { + "open": 1600.78, + "high": 1604.25, + "low": 1600.77, + "close": 1602.76 + }, + { + "open": 1602.75, + "high": 1604.05, + "low": 1601.46, + "close": 1601.89 + }, + { + "open": 1601.89, + "high": 1606.86, + "low": 1601.01, + "close": 1603.48 + }, + { + "open": 1603.49, + "high": 1605.52, + "low": 1600.24, + "close": 1600.55 + }, + { + "open": 1600.55, + "high": 1603.27, + "low": 1598.87, + "close": 1601.6 + }, + { + "open": 1601.6, + "high": 1605.65, + "low": 1600.97, + "close": 1605 + }, + { + "open": 1605, + "high": 1607.97, + "low": 1602.92, + "close": 1604.44 + }, + { + "open": 1604.44, + "high": 1606.44, + "low": 1602.58, + "close": 1605.59 + }, + { + "open": 1605.58, + "high": 1607.69, + "low": 1604.75, + "close": 1607.22 + }, + { + "open": 1607.23, + "high": 1620.12, + "low": 1607.17, + "close": 1618.72 + }, + { + "open": 1618.71, + "high": 1618.86, + "low": 1611.1, + "close": 1613.18 + }, + { + "open": 1613.19, + "high": 1613.72, + "low": 1610.16, + "close": 1612.13 + }, + { + "open": 1612.1, + "high": 1612.64, + "low": 1608.05, + "close": 1608.25 + }, + { + "open": 1608.25, + "high": 1617.11, + "low": 1608, + "close": 1614.17 + }, + { + "open": 1614.16, + "high": 1614.64, + "low": 1607.77, + "close": 1613.48 + }, + { + "open": 1613.48, + "high": 1625, + "low": 1612.54, + "close": 1618.6 + }, + { + "open": 1618.6, + "high": 1622.92, + "low": 1615.17, + "close": 1622.83 + }, + { + "open": 1622.84, + "high": 1626.94, + "low": 1620.14, + "close": 1621.06 + }, + { + "open": 1621.07, + "high": 1621.87, + "low": 1617.82, + "close": 1619.46 + }, + { + "open": 1619.45, + "high": 1634.2, + "low": 1618.5, + "close": 1627.23 + }, + { + "open": 1627.23, + "high": 1627.39, + "low": 1620.18, + "close": 1622.36 + }, + { + "open": 1622.36, + "high": 1626.93, + "low": 1616.66, + "close": 1620.82 + }, + { + "open": 1620.82, + "high": 1623.84, + "low": 1618.85, + "close": 1622.1 + }, + { + "open": 1622.1, + "high": 1622.15, + "low": 1618.52, + "close": 1620.43 + }, + { + "open": 1620.42, + "high": 1625, + "low": 1619.49, + "close": 1622 + }, + { + "open": 1622, + "high": 1625.99, + "low": 1615.31, + "close": 1617.81 + }, + { + "open": 1617.81, + "high": 1627, + "low": 1616.03, + "close": 1624.35 + }, + { + "open": 1624.36, + "high": 1629.49, + "low": 1624.35, + "close": 1626.81 + }, + { + "open": 1626.81, + "high": 1628.9, + "low": 1624.37, + "close": 1624.84 + }, + { + "open": 1624.85, + "high": 1628.28, + "low": 1622.99, + "close": 1623.1 + }, + { + "open": 1623.1, + "high": 1627.99, + "low": 1621.44, + "close": 1624.59 + }, + { + "open": 1624.6, + "high": 1626.35, + "low": 1622.57, + "close": 1623.59 + }, + { + "open": 1623.6, + "high": 1642.89, + "low": 1623.3, + "close": 1640.62 + }, + { + "open": 1640.63, + "high": 1661.98, + "low": 1634.91, + "close": 1660.48 + }, + { + "open": 1660.49, + "high": 1664.34, + "low": 1644.84, + "close": 1645.57 + }, + { + "open": 1645.58, + "high": 1646.67, + "low": 1595, + "close": 1608.22 + }, + { + "open": 1608.22, + "high": 1614.88, + "low": 1601.43, + "close": 1605.36 + }, + { + "open": 1605.36, + "high": 1609.8, + "low": 1591.92, + "close": 1592.38 + }, + { + "open": 1592.39, + "high": 1602.45, + "low": 1589.01, + "close": 1600 + }, + { + "open": 1600, + "high": 1607.26, + "low": 1599, + "close": 1606.64 + }, + { + "open": 1606.64, + "high": 1607.7, + "low": 1594.71, + "close": 1598.66 + }, + { + "open": 1598.66, + "high": 1604.57, + "low": 1595.3, + "close": 1602.48 + }, + { + "open": 1602.48, + "high": 1612.55, + "low": 1601.32, + "close": 1610.62 + }, + { + "open": 1610.63, + "high": 1615.92, + "low": 1608.01, + "close": 1610.8 + }, + { + "open": 1610.79, + "high": 1612.97, + "low": 1605.89, + "close": 1608.29 + }, + { + "open": 1608.3, + "high": 1609.65, + "low": 1605.11, + "close": 1605.12 + }, + { + "open": 1605.12, + "high": 1607.57, + "low": 1598.35, + "close": 1602.85 + }, + { + "open": 1602.85, + "high": 1602.86, + "low": 1598.44, + "close": 1599.51 + }, + { + "open": 1599.5, + "high": 1600.05, + "low": 1593.32, + "close": 1597.7 + }, + { + "open": 1597.7, + "high": 1603.62, + "low": 1596, + "close": 1598.76 + }, + { + "open": 1598.75, + "high": 1601.76, + "low": 1595.1, + "close": 1600.62 + }, + { + "open": 1600.53, + "high": 1604, + "low": 1596.81, + "close": 1602.64 + }, + { + "open": 1602.63, + "high": 1609.55, + "low": 1602, + "close": 1602.44 + }, + { + "open": 1602.45, + "high": 1603.9, + "low": 1592.51, + "close": 1593.89 + }, + { + "open": 1593.89, + "high": 1594.71, + "low": 1565.67, + "close": 1567.64 + }, + { + "open": 1567.63, + "high": 1570, + "low": 1560, + "close": 1561.39 + }, + { + "open": 1561.4, + "high": 1568.6, + "low": 1560, + "close": 1560.15 + }, + { + "open": 1560.14, + "high": 1567.72, + "low": 1558.34, + "close": 1562.48 + }, + { + "open": 1562.47, + "high": 1567.56, + "low": 1556.87, + "close": 1557.4 + }, + { + "open": 1557.39, + "high": 1562.84, + "low": 1555.8, + "close": 1559.22 + }, + { + "open": 1559.22, + "high": 1560.95, + "low": 1555.83, + "close": 1558.29 + }, + { + "open": 1558.3, + "high": 1558.71, + "low": 1552.58, + "close": 1557.29 + }, + { + "open": 1557.29, + "high": 1558.05, + "low": 1550.73, + "close": 1552.73 + }, + { + "open": 1552.73, + "high": 1556.73, + "low": 1551.93, + "close": 1555.62 + }, + { + "open": 1555.62, + "high": 1558.32, + "low": 1553.89, + "close": 1558.24 + }, + { + "open": 1558.23, + "high": 1560.73, + "low": 1555.85, + "close": 1556.41 + }, + { + "open": 1556.42, + "high": 1557.28, + "low": 1546.5, + "close": 1550.45 + }, + { + "open": 1550.44, + "high": 1553.2, + "low": 1548.64, + "close": 1551.76 + }, + { + "open": 1551.76, + "high": 1553.97, + "low": 1550.33, + "close": 1551.83 + }, + { + "open": 1551.83, + "high": 1551.84, + "low": 1536.1, + "close": 1545.23 + }, + { + "open": 1545.23, + "high": 1545.35, + "low": 1536.02, + "close": 1536.77 + }, + { + "open": 1536.78, + "high": 1545.98, + "low": 1535, + "close": 1545.85 + }, + { + "open": 1545.84, + "high": 1546.92, + "low": 1542.7, + "close": 1544.4 + }, + { + "open": 1544.41, + "high": 1544.41, + "low": 1539.46, + "close": 1542.9 + }, + { + "open": 1542.91, + "high": 1543.88, + "low": 1532.08, + "close": 1537.46 + }, + { + "open": 1537.46, + "high": 1539.81, + "low": 1528.5, + "close": 1539.6 + }, + { + "open": 1539.59, + "high": 1539.91, + "low": 1534.97, + "close": 1537.88 + }, + { + "open": 1537.89, + "high": 1538.41, + "low": 1519.26, + "close": 1529.17 + }, + { + "open": 1529.17, + "high": 1531.96, + "low": 1523.22, + "close": 1530.51 + }, + { + "open": 1530.51, + "high": 1530.53, + "low": 1516.53, + "close": 1516.54 + }, + { + "open": 1516.54, + "high": 1523, + "low": 1515.92, + "close": 1520.8 + }, + { + "open": 1520.8, + "high": 1523.87, + "low": 1519.23, + "close": 1520.13 + }, + { + "open": 1520.12, + "high": 1525.47, + "low": 1519.92, + "close": 1522.6 + }, + { + "open": 1522.59, + "high": 1523.37, + "low": 1518.67, + "close": 1520.02 + }, + { + "open": 1520.01, + "high": 1522.76, + "low": 1517.3, + "close": 1520.03 + }, + { + "open": 1520.03, + "high": 1522.47, + "low": 1514.84, + "close": 1522.2 + }, + { + "open": 1522.19, + "high": 1523.61, + "low": 1519.61, + "close": 1523.36 + }, + { + "open": 1523.36, + "high": 1523.74, + "low": 1520.13, + "close": 1523.27 + }, + { + "open": 1523.27, + "high": 1523.78, + "low": 1513.68, + "close": 1515.15 + }, + { + "open": 1515.14, + "high": 1516.51, + "low": 1508.06, + "close": 1512.14 + }, + { + "open": 1512.15, + "high": 1515.4, + "low": 1511.29, + "close": 1515.02 + }, + { + "open": 1515.02, + "high": 1516.74, + "low": 1512.8, + "close": 1515.19 + }, + { + "open": 1515.19, + "high": 1518.29, + "low": 1514.84, + "close": 1517.85 + }, + { + "open": 1517.85, + "high": 1518.5, + "low": 1509.02, + "close": 1511.14 + }, + { + "open": 1511.14, + "high": 1512.83, + "low": 1509.19, + "close": 1509.79 + }, + { + "open": 1509.78, + "high": 1510, + "low": 1502, + "close": 1504.63 + }, + { + "open": 1504.63, + "high": 1512, + "low": 1498.95, + "close": 1511.51 + }, + { + "open": 1511.51, + "high": 1512.42, + "low": 1506.71, + "close": 1506.71 + }, + { + "open": 1506.71, + "high": 1508.89, + "low": 1504.28, + "close": 1505.15 + }, + { + "open": 1505.15, + "high": 1509.41, + "low": 1499.45, + "close": 1509.01 + }, + { + "open": 1509.01, + "high": 1513.92, + "low": 1507.81, + "close": 1513.12 + }, + { + "open": 1513.12, + "high": 1517.5, + "low": 1512, + "close": 1515.83 + }, + { + "open": 1515.84, + "high": 1515.84, + "low": 1511.78, + "close": 1514.56 + }, + { + "open": 1514.56, + "high": 1514.59, + "low": 1509.96, + "close": 1512.45 + }, + { + "open": 1512.46, + "high": 1514, + "low": 1510.35, + "close": 1513.82 + }, + { + "open": 1513.82, + "high": 1516.09, + "low": 1510.83, + "close": 1513.39 + }, + { + "open": 1513.38, + "high": 1514.71, + "low": 1511.55, + "close": 1514.06 + }, + { + "open": 1514.07, + "high": 1518.42, + "low": 1514.06, + "close": 1517.45 + }, + { + "open": 1517.44, + "high": 1524.17, + "low": 1517.24, + "close": 1522.76 + }, + { + "open": 1522.76, + "high": 1522.77, + "low": 1516.74, + "close": 1519.27 + }, + { + "open": 1519.27, + "high": 1526.14, + "low": 1518.36, + "close": 1525.37 + }, + { + "open": 1525.36, + "high": 1526.16, + "low": 1523.05, + "close": 1524.78 + }, + { + "open": 1524.78, + "high": 1529.84, + "low": 1524.12, + "close": 1524.83 + }, + { + "open": 1524.83, + "high": 1527.97, + "low": 1523.69, + "close": 1525.07 + }, + { + "open": 1525.07, + "high": 1525.91, + "low": 1515.94, + "close": 1517.07 + }, + { + "open": 1517.08, + "high": 1521.93, + "low": 1514.76, + "close": 1519.75 + }, + { + "open": 1519.75, + "high": 1523.8, + "low": 1518.82, + "close": 1522.53 + }, + { + "open": 1522.52, + "high": 1527.71, + "low": 1521.24, + "close": 1527.26 + }, + { + "open": 1527.26, + "high": 1527.26, + "low": 1523.51, + "close": 1524.17 + }, + { + "open": 1524.18, + "high": 1526.33, + "low": 1522.5, + "close": 1526.02 + }, + { + "open": 1526.02, + "high": 1528.99, + "low": 1525.63, + "close": 1528.01 + }, + { + "open": 1528, + "high": 1528.98, + "low": 1524, + "close": 1527.85 + }, + { + "open": 1527.85, + "high": 1527.91, + "low": 1524.87, + "close": 1527.02 + }, + { + "open": 1527.01, + "high": 1527.77, + "low": 1525.08, + "close": 1527.53 + }, + { + "open": 1527.54, + "high": 1527.9, + "low": 1525.01, + "close": 1525.54 + }, + { + "open": 1525.54, + "high": 1526.36, + "low": 1517.7, + "close": 1521.32 + }, + { + "open": 1521.33, + "high": 1523.72, + "low": 1520.06, + "close": 1523.15 + }, + { + "open": 1523.16, + "high": 1526.22, + "low": 1521.86, + "close": 1523.7 + }, + { + "open": 1523.7, + "high": 1523.83, + "low": 1517.23, + "close": 1517.7 + }, + { + "open": 1517.69, + "high": 1519.99, + "low": 1514.45, + "close": 1515.5 + }, + { + "open": 1515.49, + "high": 1520.24, + "low": 1515.12, + "close": 1517.38 + }, + { + "open": 1517.38, + "high": 1519, + "low": 1516.54, + "close": 1517.4 + }, + { + "open": 1517.39, + "high": 1521.31, + "low": 1516.5, + "close": 1519.95 + }, + { + "open": 1519.96, + "high": 1521.47, + "low": 1514.7, + "close": 1519.12 + }, + { + "open": 1519.12, + "high": 1523.72, + "low": 1518.67, + "close": 1523.67 + }, + { + "open": 1523.66, + "high": 1528.82, + "low": 1522.18, + "close": 1528.71 + }, + { + "open": 1528.82, + "high": 1529.12, + "low": 1523.63, + "close": 1525.19 + }, + { + "open": 1525.2, + "high": 1525.2, + "low": 1518.09, + "close": 1523.17 + }, + { + "open": 1523.17, + "high": 1525.99, + "low": 1521.52, + "close": 1522.46 + }, + { + "open": 1522.47, + "high": 1522.9, + "low": 1519.17, + "close": 1521.6 + }, + { + "open": 1521.6, + "high": 1524.29, + "low": 1521.54, + "close": 1524.29 + }, + { + "open": 1524.29, + "high": 1526, + "low": 1523.3, + "close": 1524.49 + }, + { + "open": 1524.5, + "high": 1526, + "low": 1524.05, + "close": 1524.89 + }, + { + "open": 1524.88, + "high": 1526.85, + "low": 1524, + "close": 1524.81 + }, + { + "open": 1524.81, + "high": 1524.81, + "low": 1522.11, + "close": 1522.12 + }, + { + "open": 1522.12, + "high": 1525.61, + "low": 1521.27, + "close": 1521.65 + }, + { + "open": 1521.64, + "high": 1522.47, + "low": 1518.51, + "close": 1519.48 + }, + { + "open": 1519.48, + "high": 1519.48, + "low": 1516.15, + "close": 1517.9 + }, + { + "open": 1517.91, + "high": 1521.05, + "low": 1517.3, + "close": 1519.79 + }, + { + "open": 1519.79, + "high": 1519.8, + "low": 1510.7, + "close": 1513.91 + }, + { + "open": 1513.9, + "high": 1516.09, + "low": 1512.83, + "close": 1513.43 + }, + { + "open": 1513.43, + "high": 1518.21, + "low": 1513, + "close": 1516.58 + }, + { + "open": 1516.59, + "high": 1533.5, + "low": 1516.09, + "close": 1531.9 + }, + { + "open": 1531.89, + "high": 1537.27, + "low": 1530.14, + "close": 1534.55 + }, + { + "open": 1534.55, + "high": 1541.23, + "low": 1534.34, + "close": 1536.95 + }, + { + "open": 1536.96, + "high": 1542.82, + "low": 1536.28, + "close": 1539.96 + }, + { + "open": 1539.97, + "high": 1542.51, + "low": 1535.03, + "close": 1536.75 + }, + { + "open": 1536.76, + "high": 1542.68, + "low": 1533.45, + "close": 1541.74 + }, + { + "open": 1541.75, + "high": 1543.99, + "low": 1538.04, + "close": 1538.45 + }, + { + "open": 1538.44, + "high": 1539.6, + "low": 1536.86, + "close": 1537.48 + }, + { + "open": 1537.47, + "high": 1537.48, + "low": 1534.36, + "close": 1536.22 + }, + { + "open": 1536.22, + "high": 1537.19, + "low": 1534.16, + "close": 1536.47 + }, + { + "open": 1536.46, + "high": 1536.56, + "low": 1531.43, + "close": 1532.8 + }, + { + "open": 1532.81, + "high": 1536.41, + "low": 1532.68, + "close": 1536.21 + }, + { + "open": 1536.22, + "high": 1538.61, + "low": 1535.4, + "close": 1537.8 + }, + { + "open": 1537.8, + "high": 1538.88, + "low": 1535.72, + "close": 1535.99 + }, + { + "open": 1535.99, + "high": 1537.93, + "low": 1535.82, + "close": 1537.49 + }, + { + "open": 1537.48, + "high": 1537.49, + "low": 1532.8, + "close": 1533.82 + }, + { + "open": 1533.82, + "high": 1536.84, + "low": 1533.62, + "close": 1535.49 + }, + { + "open": 1535.49, + "high": 1535.76, + "low": 1534.01, + "close": 1535.42 + }, + { + "open": 1535.42, + "high": 1536, + "low": 1532.17, + "close": 1534.71 + }, + { + "open": 1534.72, + "high": 1538, + "low": 1534.71, + "close": 1537.86 + }, + { + "open": 1537.85, + "high": 1548.43, + "low": 1537.85, + "close": 1545.4 + }, + { + "open": 1545.39, + "high": 1546, + "low": 1542.09, + "close": 1544.54 + }, + { + "open": 1544.54, + "high": 1545.49, + "low": 1542.13, + "close": 1544.51 + }, + { + "open": 1544.51, + "high": 1545.82, + "low": 1543.21, + "close": 1545.81 + }, + { + "open": 1545.81, + "high": 1546.46, + "low": 1543.57, + "close": 1544.9 + }, + { + "open": 1544.9, + "high": 1548.69, + "low": 1540, + "close": 1547.55 + }, + { + "open": 1547.64, + "high": 1549.87, + "low": 1544.78, + "close": 1547.71 + }, + { + "open": 1547.7, + "high": 1549.65, + "low": 1546.11, + "close": 1547.1 + }, + { + "open": 1547.1, + "high": 1548.13, + "low": 1546.6, + "close": 1547.01 + }, + { + "open": 1547, + "high": 1548.88, + "low": 1542.95, + "close": 1548.88 + }, + { + "open": 1548.88, + "high": 1553.79, + "low": 1544.51, + "close": 1544.77 + }, + { + "open": 1544.77, + "high": 1546.59, + "low": 1543.06, + "close": 1543.48 + }, + { + "open": 1543.48, + "high": 1543.49, + "low": 1535.69, + "close": 1536.78 + }, + { + "open": 1536.78, + "high": 1542.5, + "low": 1535.31, + "close": 1541.57 + }, + { + "open": 1541.57, + "high": 1543.7, + "low": 1538.61, + "close": 1538.77 + }, + { + "open": 1538.77, + "high": 1541.47, + "low": 1537.85, + "close": 1538.86 + }, + { + "open": 1538.86, + "high": 1541.55, + "low": 1536.48, + "close": 1539.18 + }, + { + "open": 1539.19, + "high": 1541.52, + "low": 1538.97, + "close": 1539.38 + }, + { + "open": 1539.38, + "high": 1543, + "low": 1536.55, + "close": 1540.87 + }, + { + "open": 1540.86, + "high": 1543.23, + "low": 1539.09, + "close": 1539.58 + }, + { + "open": 1539.58, + "high": 1540.92, + "low": 1536.45, + "close": 1537.5 + }, + { + "open": 1537.49, + "high": 1538.34, + "low": 1533.5, + "close": 1534.83 + }, + { + "open": 1534.84, + "high": 1534.84, + "low": 1517.11, + "close": 1518.98 + }, + { + "open": 1518.98, + "high": 1525.5, + "low": 1518.64, + "close": 1523.83 + }, + { + "open": 1523.82, + "high": 1531.92, + "low": 1520.33, + "close": 1529.16 + }, + { + "open": 1529.16, + "high": 1531.5, + "low": 1524, + "close": 1530.11 + }, + { + "open": 1530.12, + "high": 1530.2, + "low": 1525.52, + "close": 1527.15 + }, + { + "open": 1527.15, + "high": 1530.94, + "low": 1526.55, + "close": 1530.8 + }, + { + "open": 1530.79, + "high": 1530.8, + "low": 1526.56, + "close": 1527.75 + }, + { + "open": 1527.75, + "high": 1530.84, + "low": 1526.98, + "close": 1527.33 + }, + { + "open": 1527.34, + "high": 1528.92, + "low": 1523.77, + "close": 1528.01 + }, + { + "open": 1528.01, + "high": 1531.35, + "low": 1527.46, + "close": 1530.32 + }, + { + "open": 1530.32, + "high": 1538.65, + "low": 1529.45, + "close": 1536.07 + }, + { + "open": 1536.08, + "high": 1536.51, + "low": 1533.75, + "close": 1535.46 + }, + { + "open": 1535.46, + "high": 1536.81, + "low": 1533.28, + "close": 1533.29 + }, + { + "open": 1533.28, + "high": 1533.97, + "low": 1522.46, + "close": 1523.87 + }, + { + "open": 1523.86, + "high": 1524.03, + "low": 1517.61, + "close": 1523.73 + }, + { + "open": 1523.72, + "high": 1537.06, + "low": 1523.21, + "close": 1532.35 + }, + { + "open": 1532.36, + "high": 1532.36, + "low": 1525.15, + "close": 1527.63 + }, + { + "open": 1527.63, + "high": 1531.98, + "low": 1521.21, + "close": 1522.82 + }, + { + "open": 1522.82, + "high": 1522.82, + "low": 1506.7, + "close": 1516.24 + }, + { + "open": 1516.24, + "high": 1527.52, + "low": 1514.14, + "close": 1523.97 + }, + { + "open": 1523.97, + "high": 1523.98, + "low": 1516.85, + "close": 1520.44 + }, + { + "open": 1520.45, + "high": 1525.98, + "low": 1517.98, + "close": 1521.25 + }, + { + "open": 1521.26, + "high": 1526.16, + "low": 1520, + "close": 1521.76 + }, + { + "open": 1521.77, + "high": 1525, + "low": 1518.05, + "close": 1518.17 + }, + { + "open": 1518.17, + "high": 1518.66, + "low": 1510.75, + "close": 1516.05 + }, + { + "open": 1516.05, + "high": 1518.01, + "low": 1509.24, + "close": 1509.65 + }, + { + "open": 1509.65, + "high": 1513.46, + "low": 1507.45, + "close": 1511.38 + }, + { + "open": 1511.37, + "high": 1517.77, + "low": 1510.69, + "close": 1513.23 + }, + { + "open": 1513.24, + "high": 1513.85, + "low": 1502.21, + "close": 1510.72 + }, + { + "open": 1510.72, + "high": 1516.44, + "low": 1508.36, + "close": 1512.4 + }, + { + "open": 1512.4, + "high": 1518.94, + "low": 1507.61, + "close": 1517.46 + }, + { + "open": 1517.45, + "high": 1523.41, + "low": 1515.15, + "close": 1522.78 + }, + { + "open": 1522.78, + "high": 1524, + "low": 1518.84, + "close": 1520.49 + }, + { + "open": 1520.49, + "high": 1523.13, + "low": 1519.01, + "close": 1521.68 + }, + { + "open": 1521.68, + "high": 1527.81, + "low": 1520.5, + "close": 1524.68 + }, + { + "open": 1524.68, + "high": 1532, + "low": 1523.05, + "close": 1527.05 + }, + { + "open": 1527.04, + "high": 1528.39, + "low": 1523, + "close": 1523.42 + }, + { + "open": 1523.41, + "high": 1523.64, + "low": 1514, + "close": 1514.71 + }, + { + "open": 1514.72, + "high": 1518, + "low": 1511.35, + "close": 1517.24 + }, + { + "open": 1517.23, + "high": 1518.75, + "low": 1514.48, + "close": 1515.82 + }, + { + "open": 1515.81, + "high": 1522.58, + "low": 1514.01, + "close": 1521.13 + }, + { + "open": 1521.13, + "high": 1530.48, + "low": 1521.11, + "close": 1527.23 + }, + { + "open": 1527.23, + "high": 1528.46, + "low": 1522.57, + "close": 1525.67 + }, + { + "open": 1525.67, + "high": 1528.64, + "low": 1525.67, + "close": 1528.35 + }, + { + "open": 1528.35, + "high": 1531.14, + "low": 1523.51, + "close": 1523.51 + }, + { + "open": 1523.51, + "high": 1528.76, + "low": 1523.48, + "close": 1527.56 + }, + { + "open": 1527.57, + "high": 1527.99, + "low": 1524.99, + "close": 1526.03 + }, + { + "open": 1526.02, + "high": 1534.93, + "low": 1524.67, + "close": 1532.6 + }, + { + "open": 1532.6, + "high": 1534.19, + "low": 1529.44, + "close": 1529.96 + }, + { + "open": 1529.96, + "high": 1531.24, + "low": 1524.14, + "close": 1525.3 + }, + { + "open": 1525.29, + "high": 1526.09, + "low": 1520.01, + "close": 1520.14 + }, + { + "open": 1520.15, + "high": 1520.51, + "low": 1517.04, + "close": 1519.66 + }, + { + "open": 1519.67, + "high": 1522.26, + "low": 1517.77, + "close": 1519.3 + }, + { + "open": 1519.31, + "high": 1523.43, + "low": 1518.31, + "close": 1520.11 + }, + { + "open": 1520.12, + "high": 1521.27, + "low": 1514.68, + "close": 1515.46 + }, + { + "open": 1515.46, + "high": 1523.5, + "low": 1515.46, + "close": 1523.21 + }, + { + "open": 1523.22, + "high": 1530.34, + "low": 1522.49, + "close": 1529.8 + }, + { + "open": 1529.8, + "high": 1530.43, + "low": 1526.66, + "close": 1527.1 + }, + { + "open": 1527.1, + "high": 1531.29, + "low": 1525.61, + "close": 1527.6 + }, + { + "open": 1527.61, + "high": 1530.92, + "low": 1527.6, + "close": 1530.26 + }, + { + "open": 1530.26, + "high": 1534.01, + "low": 1528.36, + "close": 1533 + }, + { + "open": 1532.93, + "high": 1534.94, + "low": 1529, + "close": 1529.91 + }, + { + "open": 1529.92, + "high": 1530.63, + "low": 1524.38, + "close": 1527.8 + }, + { + "open": 1527.8, + "high": 1529.94, + "low": 1524.87, + "close": 1526.36 + }, + { + "open": 1526.36, + "high": 1529.37, + "low": 1526.33, + "close": 1527.87 + }, + { + "open": 1527.87, + "high": 1529.29, + "low": 1526.79, + "close": 1527.17 + }, + { + "open": 1527.18, + "high": 1527.18, + "low": 1518.55, + "close": 1519.61 + }, + { + "open": 1519.6, + "high": 1521.47, + "low": 1517.39, + "close": 1520.78 + }, + { + "open": 1520.78, + "high": 1522.13, + "low": 1514.46, + "close": 1516.81 + }, + { + "open": 1516.8, + "high": 1517.6, + "low": 1512.82, + "close": 1513.66 + }, + { + "open": 1513.65, + "high": 1516.81, + "low": 1511.44, + "close": 1513.86 + }, + { + "open": 1513.86, + "high": 1515.47, + "low": 1507.11, + "close": 1509.29 + }, + { + "open": 1509.29, + "high": 1513.83, + "low": 1509.11, + "close": 1510.83 + }, + { + "open": 1510.83, + "high": 1518.12, + "low": 1510.83, + "close": 1515.33 + }, + { + "open": 1515.33, + "high": 1517.4, + "low": 1511.99, + "close": 1514.89 + }, + { + "open": 1514.88, + "high": 1518.67, + "low": 1513.78, + "close": 1516.93 + }, + { + "open": 1516.93, + "high": 1517.58, + "low": 1514.1, + "close": 1515.4 + }, + { + "open": 1515.4, + "high": 1518.96, + "low": 1514.65, + "close": 1518.43 + }, + { + "open": 1518.44, + "high": 1523.32, + "low": 1515.35, + "close": 1515.78 + }, + { + "open": 1515.78, + "high": 1521.43, + "low": 1515.46, + "close": 1519.21 + }, + { + "open": 1519.2, + "high": 1519.88, + "low": 1514.15, + "close": 1516.82 + }, + { + "open": 1516.82, + "high": 1517.28, + "low": 1510.85, + "close": 1513.86 + }, + { + "open": 1513.87, + "high": 1516.82, + "low": 1509.37, + "close": 1510.88 + }, + { + "open": 1510.88, + "high": 1512, + "low": 1505.9, + "close": 1505.93 + }, + { + "open": 1505.94, + "high": 1509.39, + "low": 1477.01, + "close": 1478.26 + }, + { + "open": 1478.26, + "high": 1484.64, + "low": 1474.16, + "close": 1482.69 + }, + { + "open": 1482.69, + "high": 1487.83, + "low": 1478.76, + "close": 1479.74 + }, + { + "open": 1479.74, + "high": 1481.79, + "low": 1470.8, + "close": 1474.95 + }, + { + "open": 1474.95, + "high": 1477.59, + "low": 1466.58, + "close": 1468.19 + }, + { + "open": 1468.2, + "high": 1474, + "low": 1455.17, + "close": 1466.85 + }, + { + "open": 1466.9, + "high": 1472.67, + "low": 1466.89, + "close": 1471.37 + }, + { + "open": 1471.37, + "high": 1478.04, + "low": 1467.14, + "close": 1470.07 + }, + { + "open": 1470.07, + "high": 1477.76, + "low": 1468.23, + "close": 1475.57 + }, + { + "open": 1475.56, + "high": 1491.72, + "low": 1474.88, + "close": 1488.58 + }, + { + "open": 1488.58, + "high": 1496.76, + "low": 1484.21, + "close": 1495 + }, + { + "open": 1495, + "high": 1523.99, + "low": 1492.01, + "close": 1514.98 + }, + { + "open": 1514.98, + "high": 1522.88, + "low": 1513.78, + "close": 1518.91 + }, + { + "open": 1518.91, + "high": 1522.64, + "low": 1517, + "close": 1520.67 + }, + { + "open": 1520.67, + "high": 1529.77, + "low": 1513.5, + "close": 1513.51 + }, + { + "open": 1513.51, + "high": 1520, + "low": 1513.28, + "close": 1517.2 + }, + { + "open": 1517.2, + "high": 1519.49, + "low": 1512.2, + "close": 1518.95 + }, + { + "open": 1518.95, + "high": 1519.49, + "low": 1513.26, + "close": 1515.54 + }, + { + "open": 1515.54, + "high": 1519.1, + "low": 1513.83, + "close": 1518.88 + }, + { + "open": 1518.89, + "high": 1538.51, + "low": 1518.88, + "close": 1531.01 + }, + { + "open": 1530.95, + "high": 1533.43, + "low": 1520.54, + "close": 1526.77 + }, + { + "open": 1526.77, + "high": 1530.58, + "low": 1524.92, + "close": 1527.44 + }, + { + "open": 1527.44, + "high": 1528.44, + "low": 1521.03, + "close": 1523.01 + }, + { + "open": 1523.01, + "high": 1524.56, + "low": 1517.95, + "close": 1521.65 + }, + { + "open": 1521.63, + "high": 1521.75, + "low": 1516.33, + "close": 1520.27 + }, + { + "open": 1520.28, + "high": 1523.83, + "low": 1518.53, + "close": 1523.21 + }, + { + "open": 1523.21, + "high": 1524, + "low": 1520.51, + "close": 1522.06 + }, + { + "open": 1522.05, + "high": 1524, + "low": 1519.38, + "close": 1520.38 + }, + { + "open": 1520.37, + "high": 1521.46, + "low": 1519.64, + "close": 1520.5 + }, + { + "open": 1520.5, + "high": 1525.95, + "low": 1520.49, + "close": 1523.01 + }, + { + "open": 1523, + "high": 1523.38, + "low": 1520.25, + "close": 1520.78 + }, + { + "open": 1520.77, + "high": 1521.39, + "low": 1512.85, + "close": 1517.63 + }, + { + "open": 1517.63, + "high": 1517.85, + "low": 1507.66, + "close": 1514.06 + }, + { + "open": 1514.05, + "high": 1517.93, + "low": 1514.01, + "close": 1516.79 + }, + { + "open": 1516.8, + "high": 1516.8, + "low": 1512.55, + "close": 1514.02 + }, + { + "open": 1514.02, + "high": 1514.89, + "low": 1508.97, + "close": 1510.44 + }, + { + "open": 1510.44, + "high": 1512.24, + "low": 1506.68, + "close": 1510.1 + }, + { + "open": 1510.09, + "high": 1511.6, + "low": 1494.65, + "close": 1495.68 + }, + { + "open": 1495.69, + "high": 1498.59, + "low": 1492.45, + "close": 1496.12 + }, + { + "open": 1496.13, + "high": 1496.13, + "low": 1482.16, + "close": 1487 + }, + { + "open": 1487, + "high": 1488.44, + "low": 1469, + "close": 1471.65 + }, + { + "open": 1471.65, + "high": 1476.97, + "low": 1467.08, + "close": 1469.98 + }, + { + "open": 1469.98, + "high": 1475.2, + "low": 1469.78, + "close": 1472.26 + }, + { + "open": 1472.25, + "high": 1487.99, + "low": 1472.25, + "close": 1485.05 + }, + { + "open": 1485.05, + "high": 1494.72, + "low": 1473.92, + "close": 1485.16 + }, + { + "open": 1485.16, + "high": 1485.17, + "low": 1478.93, + "close": 1482.48 + }, + { + "open": 1482.48, + "high": 1489, + "low": 1479.21, + "close": 1482.03 + }, + { + "open": 1482.03, + "high": 1484.28, + "low": 1475.43, + "close": 1481.37 + }, + { + "open": 1481.38, + "high": 1482.3, + "low": 1469.55, + "close": 1470.66 + }, + { + "open": 1470.66, + "high": 1479.85, + "low": 1469, + "close": 1477.53 + }, + { + "open": 1477.54, + "high": 1483.67, + "low": 1476.45, + "close": 1482.88 + }, + { + "open": 1482.89, + "high": 1487.37, + "low": 1478.08, + "close": 1483.37 + }, + { + "open": 1483.37, + "high": 1484.36, + "low": 1472.36, + "close": 1474.97 + }, + { + "open": 1474.97, + "high": 1478.78, + "low": 1474.69, + "close": 1477.75 + }, + { + "open": 1477.75, + "high": 1478.84, + "low": 1470, + "close": 1470.96 + }, + { + "open": 1470.95, + "high": 1472.38, + "low": 1464, + "close": 1470 + }, + { + "open": 1470, + "high": 1471.07, + "low": 1436.02, + "close": 1443.03 + }, + { + "open": 1443.04, + "high": 1451.98, + "low": 1435.58, + "close": 1447.55 + }, + { + "open": 1447.55, + "high": 1448.1, + "low": 1437.01, + "close": 1440.79 + }, + { + "open": 1440.79, + "high": 1450, + "low": 1432.99, + "close": 1443.3 + }, + { + "open": 1443.29, + "high": 1446.49, + "low": 1441.15, + "close": 1443.34 + }, + { + "open": 1443.34, + "high": 1446.58, + "low": 1437.11, + "close": 1438.52 + }, + { + "open": 1438.51, + "high": 1441.99, + "low": 1429.68, + "close": 1439.43 + }, + { + "open": 1439.43, + "high": 1440.82, + "low": 1427.1, + "close": 1433.08 + }, + { + "open": 1433.08, + "high": 1434.82, + "low": 1428.65, + "close": 1429.91 + }, + { + "open": 1429.91, + "high": 1433.24, + "low": 1427.02, + "close": 1430.25 + }, + { + "open": 1430.19, + "high": 1430.2, + "low": 1415.6, + "close": 1423.09 + }, + { + "open": 1423.09, + "high": 1432, + "low": 1421.92, + "close": 1427.53 + }, + { + "open": 1427.52, + "high": 1428.64, + "low": 1421.55, + "close": 1427.64 + }, + { + "open": 1427.64, + "high": 1430.1, + "low": 1415, + "close": 1415.98 + }, + { + "open": 1415.99, + "high": 1421.48, + "low": 1412.15, + "close": 1415.38 + }, + { + "open": 1415.38, + "high": 1424, + "low": 1412.45, + "close": 1423.02 + }, + { + "open": 1423.03, + "high": 1426.99, + "low": 1422, + "close": 1425.62 + }, + { + "open": 1425.61, + "high": 1427.39, + "low": 1421.18, + "close": 1421.98 + }, + { + "open": 1421.98, + "high": 1426.36, + "low": 1418.04, + "close": 1423.96 + }, + { + "open": 1423.97, + "high": 1424.1, + "low": 1418.49, + "close": 1418.49 + }, + { + "open": 1418.49, + "high": 1421.16, + "low": 1414.03, + "close": 1421.15 + }, + { + "open": 1421.16, + "high": 1421.16, + "low": 1415, + "close": 1417.04 + }, + { + "open": 1417.04, + "high": 1418.37, + "low": 1413.06, + "close": 1413.36 + }, + { + "open": 1413.37, + "high": 1423.37, + "low": 1413.21, + "close": 1422.91 + }, + { + "open": 1422.9, + "high": 1425.51, + "low": 1421.11, + "close": 1423.99 + }, + { + "open": 1423.98, + "high": 1425.09, + "low": 1422.73, + "close": 1423.61 + }, + { + "open": 1423.62, + "high": 1424.96, + "low": 1420, + "close": 1420.23 + }, + { + "open": 1420.23, + "high": 1421.87, + "low": 1419.01, + "close": 1421.02 + }, + { + "open": 1421.01, + "high": 1426.03, + "low": 1420.88, + "close": 1425.12 + }, + { + "open": 1425.11, + "high": 1425.68, + "low": 1421.85, + "close": 1423.23 + }, + { + "open": 1423.23, + "high": 1424.73, + "low": 1421.37, + "close": 1423.76 + }, + { + "open": 1423.75, + "high": 1424, + "low": 1418.3, + "close": 1420 + }, + { + "open": 1419.99, + "high": 1420.19, + "low": 1415.15, + "close": 1419.8 + }, + { + "open": 1419.79, + "high": 1421.88, + "low": 1418.08, + "close": 1420.88 + }, + { + "open": 1420.89, + "high": 1424.26, + "low": 1420.87, + "close": 1422.07 + }, + { + "open": 1422.06, + "high": 1423.13, + "low": 1420.59, + "close": 1422.39 + }, + { + "open": 1422.39, + "high": 1423.95, + "low": 1421.75, + "close": 1421.9 + }, + { + "open": 1421.9, + "high": 1423.15, + "low": 1419.15, + "close": 1423.14 + }, + { + "open": 1423.15, + "high": 1423.15, + "low": 1417.79, + "close": 1419.37 + }, + { + "open": 1419.38, + "high": 1419.57, + "low": 1416.26, + "close": 1417.29 + }, + { + "open": 1417.28, + "high": 1419.21, + "low": 1416.5, + "close": 1418.07 + }, + { + "open": 1418.06, + "high": 1418.07, + "low": 1400.46, + "close": 1415.32 + }, + { + "open": 1415.31, + "high": 1424.48, + "low": 1414.74, + "close": 1423.85 + }, + { + "open": 1423.86, + "high": 1424.14, + "low": 1419.33, + "close": 1421.39 + }, + { + "open": 1421.38, + "high": 1430.92, + "low": 1420.53, + "close": 1429.17 + }, + { + "open": 1429.17, + "high": 1438.16, + "low": 1428.17, + "close": 1436.56 + }, + { + "open": 1436.56, + "high": 1436.57, + "low": 1427.07, + "close": 1429.86 + }, + { + "open": 1429.86, + "high": 1429.87, + "low": 1422.71, + "close": 1425.41 + }, + { + "open": 1425.4, + "high": 1428.97, + "low": 1423.88, + "close": 1427.36 + }, + { + "open": 1427.36, + "high": 1432, + "low": 1426.91, + "close": 1431.33 + }, + { + "open": 1431.33, + "high": 1434.92, + "low": 1431.32, + "close": 1433.05 + }, + { + "open": 1433.04, + "high": 1435, + "low": 1431.4, + "close": 1434.81 + }, + { + "open": 1434.81, + "high": 1435.37, + "low": 1430.27, + "close": 1430.44 + }, + { + "open": 1430.45, + "high": 1433.4, + "low": 1430.1, + "close": 1432.26 + }, + { + "open": 1432.27, + "high": 1433.74, + "low": 1428.86, + "close": 1429.56 + }, + { + "open": 1429.56, + "high": 1434.14, + "low": 1428.46, + "close": 1432.89 + }, + { + "open": 1432.89, + "high": 1438.3, + "low": 1431.03, + "close": 1432.86 + }, + { + "open": 1432.87, + "high": 1433.99, + "low": 1431, + "close": 1433.84 + }, + { + "open": 1433.85, + "high": 1434.14, + "low": 1431.21, + "close": 1431.54 + }, + { + "open": 1431.53, + "high": 1433.37, + "low": 1430.3, + "close": 1431.32 + }, + { + "open": 1431.32, + "high": 1434, + "low": 1431.05, + "close": 1432.62 + }, + { + "open": 1432.62, + "high": 1433.24, + "low": 1425.55, + "close": 1426.28 + }, + { + "open": 1426.28, + "high": 1429.8, + "low": 1424.16, + "close": 1427.33 + }, + { + "open": 1427.33, + "high": 1427.88, + "low": 1424.32, + "close": 1426.04 + }, + { + "open": 1426.03, + "high": 1426.33, + "low": 1422.21, + "close": 1423.93 + }, + { + "open": 1423.93, + "high": 1425.44, + "low": 1422.55, + "close": 1423.89 + }, + { + "open": 1423.88, + "high": 1424.55, + "low": 1420.83, + "close": 1421.27 + }, + { + "open": 1421.26, + "high": 1423.64, + "low": 1420.6, + "close": 1422.77 + }, + { + "open": 1422.77, + "high": 1426.46, + "low": 1422.77, + "close": 1425.91 + }, + { + "open": 1425.92, + "high": 1426.42, + "low": 1422.2, + "close": 1422.72 + }, + { + "open": 1422.73, + "high": 1427.27, + "low": 1422.14, + "close": 1427.22 + }, + { + "open": 1427.22, + "high": 1430.2, + "low": 1425.67, + "close": 1428.24 + }, + { + "open": 1428.25, + "high": 1432.24, + "low": 1427.87, + "close": 1429.9 + }, + { + "open": 1429.89, + "high": 1430.99, + "low": 1428, + "close": 1428.42 + }, + { + "open": 1428.43, + "high": 1429.92, + "low": 1424.61, + "close": 1426.78 + }, + { + "open": 1426.79, + "high": 1427.3, + "low": 1424.19, + "close": 1424.26 + }, + { + "open": 1424.27, + "high": 1425.86, + "low": 1423.42, + "close": 1424.38 + }, + { + "open": 1424.37, + "high": 1424.47, + "low": 1420.8, + "close": 1421.27 + }, + { + "open": 1421.27, + "high": 1423.26, + "low": 1421.01, + "close": 1422.37 + }, + { + "open": 1422.37, + "high": 1426, + "low": 1421.84, + "close": 1424.07 + }, + { + "open": 1424.07, + "high": 1424.35, + "low": 1421.43, + "close": 1423.56 + }, + { + "open": 1423.55, + "high": 1423.71, + "low": 1416.58, + "close": 1417.41 + }, + { + "open": 1417.4, + "high": 1420.22, + "low": 1413.72, + "close": 1416.05 + }, + { + "open": 1416.06, + "high": 1417.5, + "low": 1414.67, + "close": 1416.57 + }, + { + "open": 1416.57, + "high": 1422.13, + "low": 1415.8, + "close": 1417.42 + }, + { + "open": 1417.42, + "high": 1417.88, + "low": 1415, + "close": 1416 + }, + { + "open": 1416.01, + "high": 1419.27, + "low": 1415.19, + "close": 1417.59 + }, + { + "open": 1417.59, + "high": 1418.69, + "low": 1415.76, + "close": 1416.86 + }, + { + "open": 1416.86, + "high": 1419.7, + "low": 1414.22, + "close": 1419.51 + }, + { + "open": 1419.5, + "high": 1421.79, + "low": 1417.87, + "close": 1420.19 + }, + { + "open": 1420.19, + "high": 1423.7, + "low": 1413.12, + "close": 1422.48 + }, + { + "open": 1422.49, + "high": 1423.28, + "low": 1421.01, + "close": 1422.19 + }, + { + "open": 1422.19, + "high": 1423.55, + "low": 1421.32, + "close": 1423.15 + }, + { + "open": 1423.15, + "high": 1423.67, + "low": 1421.4, + "close": 1421.76 + }, + { + "open": 1421.77, + "high": 1421.77, + "low": 1419.22, + "close": 1420.17 + }, + { + "open": 1420.18, + "high": 1421.76, + "low": 1416.74, + "close": 1417.99 + }, + { + "open": 1418, + "high": 1418.82, + "low": 1414.58, + "close": 1415.97 + }, + { + "open": 1415.97, + "high": 1417.49, + "low": 1409.57, + "close": 1412.33 + }, + { + "open": 1412.29, + "high": 1414.74, + "low": 1406.68, + "close": 1409.46 + }, + { + "open": 1409.46, + "high": 1410.48, + "low": 1406.23, + "close": 1406.35 + }, + { + "open": 1406.36, + "high": 1413.17, + "low": 1406.34, + "close": 1408.12 + }, + { + "open": 1408.12, + "high": 1411.39, + "low": 1406.3, + "close": 1406.63 + }, + { + "open": 1406.64, + "high": 1410.32, + "low": 1403.94, + "close": 1409.74 + }, + { + "open": 1409.74, + "high": 1411.89, + "low": 1407.7, + "close": 1411.32 + }, + { + "open": 1411.33, + "high": 1413.91, + "low": 1410.85, + "close": 1411.65 + }, + { + "open": 1411.64, + "high": 1414.31, + "low": 1410.68, + "close": 1413 + }, + { + "open": 1413, + "high": 1414.29, + "low": 1410.84, + "close": 1413.58 + }, + { + "open": 1413.59, + "high": 1418.54, + "low": 1413.56, + "close": 1417.54 + }, + { + "open": 1417.54, + "high": 1418.17, + "low": 1415.47, + "close": 1416.05 + }, + { + "open": 1416.05, + "high": 1416.25, + "low": 1413.66, + "close": 1414.45 + }, + { + "open": 1414.46, + "high": 1416.15, + "low": 1411.4, + "close": 1412.57 + }, + { + "open": 1412.57, + "high": 1414.98, + "low": 1411.25, + "close": 1414.75 + }, + { + "open": 1414.75, + "high": 1416, + "low": 1411, + "close": 1415.8 + }, + { + "open": 1415.79, + "high": 1417, + "low": 1413.48, + "close": 1414.55 + }, + { + "open": 1414.56, + "high": 1415.39, + "low": 1412.53, + "close": 1413.86 + }, + { + "open": 1413.86, + "high": 1417.88, + "low": 1413.13, + "close": 1417.18 + }, + { + "open": 1417.17, + "high": 1418.7, + "low": 1415.3, + "close": 1417.9 + }, + { + "open": 1417.89, + "high": 1421.6, + "low": 1417.51, + "close": 1420.29 + }, + { + "open": 1420.3, + "high": 1421.17, + "low": 1419, + "close": 1420.01 + }, + { + "open": 1420, + "high": 1422.16, + "low": 1419.5, + "close": 1421.11 + }, + { + "open": 1421.12, + "high": 1423.97, + "low": 1420.9, + "close": 1423.25 + }, + { + "open": 1423.26, + "high": 1423.26, + "low": 1420.76, + "close": 1420.82 + }, + { + "open": 1420.82, + "high": 1421.01, + "low": 1418.92, + "close": 1419.11 + }, + { + "open": 1419.11, + "high": 1421.25, + "low": 1419, + "close": 1421 + }, + { + "open": 1421.01, + "high": 1422.98, + "low": 1417.66, + "close": 1418.53 + }, + { + "open": 1418.52, + "high": 1419.44, + "low": 1415.01, + "close": 1415.47 + }, + { + "open": 1415.47, + "high": 1417.15, + "low": 1413.71, + "close": 1414.16 + }, + { + "open": 1414.15, + "high": 1416.22, + "low": 1413.37, + "close": 1414.09 + }, + { + "open": 1414.1, + "high": 1416.01, + "low": 1413, + "close": 1415.83 + }, + { + "open": 1415.84, + "high": 1418.37, + "low": 1413.65, + "close": 1414.5 + }, + { + "open": 1414.46, + "high": 1414.96, + "low": 1408.49, + "close": 1411.92 + }, + { + "open": 1411.92, + "high": 1412.58, + "low": 1409.72, + "close": 1412.57 + }, + { + "open": 1412.57, + "high": 1413.05, + "low": 1411.23, + "close": 1411.32 + }, + { + "open": 1411.32, + "high": 1412.81, + "low": 1408.13, + "close": 1409.79 + }, + { + "open": 1409.79, + "high": 1412.35, + "low": 1409.34, + "close": 1410.44 + }, + { + "open": 1410.43, + "high": 1412.92, + "low": 1408.61, + "close": 1412.09 + }, + { + "open": 1412.1, + "high": 1412.84, + "low": 1410.56, + "close": 1410.57 + }, + { + "open": 1410.56, + "high": 1411.32, + "low": 1409.19, + "close": 1409.59 + }, + { + "open": 1409.6, + "high": 1412.09, + "low": 1407.68, + "close": 1410.42 + }, + { + "open": 1410.43, + "high": 1414.86, + "low": 1409.94, + "close": 1414.1 + }, + { + "open": 1414.11, + "high": 1414.47, + "low": 1412.17, + "close": 1412.65 + }, + { + "open": 1412.66, + "high": 1413.85, + "low": 1411.93, + "close": 1413.43 + }, + { + "open": 1413.44, + "high": 1415.79, + "low": 1412.99, + "close": 1413.51 + }, + { + "open": 1413.52, + "high": 1414.6, + "low": 1410.26, + "close": 1410.34 + }, + { + "open": 1410.33, + "high": 1413.83, + "low": 1410.33, + "close": 1413.39 + }, + { + "open": 1413.38, + "high": 1414.82, + "low": 1406.46, + "close": 1407.52 + }, + { + "open": 1407.52, + "high": 1413.46, + "low": 1385.08, + "close": 1406.33 + }, + { + "open": 1406.33, + "high": 1406.42, + "low": 1396.54, + "close": 1403.7 + }, + { + "open": 1403.69, + "high": 1413.95, + "low": 1403.69, + "close": 1411.91 + }, + { + "open": 1411.92, + "high": 1420.39, + "low": 1411.91, + "close": 1414.33 + }, + { + "open": 1414.34, + "high": 1414.52, + "low": 1405.66, + "close": 1405.79 + }, + { + "open": 1405.8, + "high": 1409.11, + "low": 1399, + "close": 1399.24 + }, + { + "open": 1399.23, + "high": 1405.73, + "low": 1399.23, + "close": 1400.56 + }, + { + "open": 1400.55, + "high": 1402, + "low": 1396.96, + "close": 1400.96 + }, + { + "open": 1400.96, + "high": 1401.35, + "low": 1390.31, + "close": 1394.24 + }, + { + "open": 1394.24, + "high": 1395.43, + "low": 1387.54, + "close": 1389.76 + }, + { + "open": 1389.87, + "high": 1390.95, + "low": 1381.54, + "close": 1384.88 + }, + { + "open": 1384.87, + "high": 1388.96, + "low": 1383.78, + "close": 1388.13 + }, + { + "open": 1388.13, + "high": 1393.11, + "low": 1387.84, + "close": 1391.98 + }, + { + "open": 1391.99, + "high": 1393.4, + "low": 1387.03, + "close": 1391.28 + }, + { + "open": 1391.38, + "high": 1391.68, + "low": 1384.04, + "close": 1384.51 + }, + { + "open": 1384.52, + "high": 1387.12, + "low": 1369.29, + "close": 1377.99 + }, + { + "open": 1377.99, + "high": 1384.82, + "low": 1371, + "close": 1383.01 + }, + { + "open": 1383.01, + "high": 1388, + "low": 1381.75, + "close": 1383.05 + }, + { + "open": 1383.06, + "high": 1388.47, + "low": 1383.05, + "close": 1387.82 + }, + { + "open": 1387.82, + "high": 1390, + "low": 1382.78, + "close": 1388.01 + }, + { + "open": 1388, + "high": 1392.96, + "low": 1386.5, + "close": 1391.27 + }, + { + "open": 1391.2, + "high": 1392.61, + "low": 1387.5, + "close": 1389.07 + }, + { + "open": 1389.07, + "high": 1389.07, + "low": 1382.39, + "close": 1385.3 + }, + { + "open": 1385.3, + "high": 1392, + "low": 1384.63, + "close": 1387.41 + }, + { + "open": 1387.41, + "high": 1390.71, + "low": 1386.5, + "close": 1389.12 + }, + { + "open": 1389.11, + "high": 1392.6, + "low": 1382.5, + "close": 1391.93 + }, + { + "open": 1391.93, + "high": 1396.92, + "low": 1390.04, + "close": 1391.11 + }, + { + "open": 1391.11, + "high": 1394.3, + "low": 1383.57, + "close": 1385.3 + }, + { + "open": 1385.31, + "high": 1386.85, + "low": 1379.45, + "close": 1382.74 + }, + { + "open": 1382.74, + "high": 1384.96, + "low": 1379.24, + "close": 1382.24 + }, + { + "open": 1382.24, + "high": 1384.6, + "low": 1380.2, + "close": 1380.79 + }, + { + "open": 1380.78, + "high": 1382.77, + "low": 1376, + "close": 1381.3 + }, + { + "open": 1381.29, + "high": 1384.6, + "low": 1379.59, + "close": 1382.74 + }, + { + "open": 1382.75, + "high": 1385.95, + "low": 1381.72, + "close": 1384.68 + }, + { + "open": 1384.67, + "high": 1392.47, + "low": 1384.26, + "close": 1389.48 + }, + { + "open": 1389.49, + "high": 1392, + "low": 1388.82, + "close": 1390.13 + }, + { + "open": 1390.13, + "high": 1392.46, + "low": 1389.7, + "close": 1391.94 + }, + { + "open": 1391.94, + "high": 1393.95, + "low": 1388.32, + "close": 1388.68 + }, + { + "open": 1388.68, + "high": 1389.35, + "low": 1379.59, + "close": 1381.72 + }, + { + "open": 1381.71, + "high": 1384.78, + "low": 1379.64, + "close": 1384.68 + }, + { + "open": 1384.67, + "high": 1384.92, + "low": 1381.13, + "close": 1383.07 + }, + { + "open": 1383.07, + "high": 1383.24, + "low": 1375.5, + "close": 1375.74 + }, + { + "open": 1375.73, + "high": 1378.38, + "low": 1372.01, + "close": 1374.42 + }, + { + "open": 1374.42, + "high": 1377.99, + "low": 1366, + "close": 1377.51 + }, + { + "open": 1377.51, + "high": 1378.73, + "low": 1372.87, + "close": 1375.18 + }, + { + "open": 1375.18, + "high": 1378.38, + "low": 1371.96, + "close": 1376.76 + }, + { + "open": 1376.77, + "high": 1377.59, + "low": 1370.81, + "close": 1370.95 + }, + { + "open": 1370.95, + "high": 1374.62, + "low": 1363.87, + "close": 1367.88 + }, + { + "open": 1367.88, + "high": 1372, + "low": 1365.03, + "close": 1368.68 + }, + { + "open": 1368.67, + "high": 1373.02, + "low": 1367, + "close": 1370.9 + } +]`) + +func Test_KalmanFilter(t *testing.T) { + type args struct { + allKLines []types.KLine + window int + additionalSmoothWindow uint + } + var klines []types.KLine + if err := json.Unmarshal(testKalmanFilterDataEthusdt5m, &klines); err != nil { + panic(err) + } + tests := []struct { + name string + args args + want float64 + }{ + { + name: "ETHUSDT Kalman Filter 7", + args: args{ + allKLines: klines, + window: 7, + additionalSmoothWindow: 3, + }, + want: 1369.24, + }, + { + name: "ETHUSDT Kalman Filter 25", + args: args{ + allKLines: klines, + window: 25, + additionalSmoothWindow: 0, + }, + want: 1369.84, + }, + { + name: "ETHUSDT Kalman Filter 99", + args: args{ + allKLines: klines, + window: 99, + additionalSmoothWindow: 0, + }, + want: 1369.95, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + filter := &KalmanFilter{ + IntervalWindow: types.IntervalWindow{Window: tt.args.window}, + AdditionalSmoothWindow: tt.args.additionalSmoothWindow, + } + for _, k := range klines { + filter.PushK(k) + } + got := filter.Last() + got = math.Trunc(got*100.0) / 100.0 + if got != tt.want { + t.Errorf("KalmanFilter.Last() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_KalmanFilterEstimationAccurate(t *testing.T) { + type args struct { + allKLines []types.KLine + partialInfo bool + window int + } + var klines []types.KLine + if err := json.Unmarshal(testKalmanFilterDataEthusdt5m, &klines); err != nil { + panic(err) + } + tests := []struct { + name string + args args + want float64 + }{ + { + name: "ETHUSDT Kalman Filter full K-line square error 7", + args: args{ + allKLines: klines, + partialInfo: false, + window: 7, + }, + }, + { + name: "ETHUSDT Kalman Filter full K-line square error 25", + args: args{ + allKLines: klines, + partialInfo: false, + window: 25, + }, + }, + { + name: "ETHUSDT Kalman Filter full K-line square error 99", + args: args{ + allKLines: klines, + partialInfo: false, + window: 99, + }, + }, + { + name: "ETHUSDT Kalman Filter partial K-line square error 7", + args: args{ + allKLines: klines, + partialInfo: true, + window: 7, + }, + }, + { + name: "ETHUSDT Kalman Filter partial K-line square error 25", + args: args{ + allKLines: klines, + partialInfo: true, + window: 25, + }, + }, + { + name: "ETHUSDT Kalman Filter partial K-line square error 99", + args: args{ + allKLines: klines, + partialInfo: true, + window: 99, + }, + }, + } + klineSquareError := func(base float64, k types.KLine) float64 { + openDiff := math.Abs(k.Open.Float64() - base) + highDiff := math.Abs(k.High.Float64() - base) + lowDiff := math.Abs(k.Low.Float64() - base) + closeDiff := math.Abs(k.Close.Float64() - base) + return openDiff*openDiff + highDiff*highDiff + lowDiff*lowDiff + closeDiff*closeDiff + } + closeSquareError := func(base float64, k types.KLine) float64 { + closeDiff := math.Abs(k.Close.Float64() - base) + return closeDiff * closeDiff + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + filter := &KalmanFilter{IntervalWindow: types.IntervalWindow{Window: tt.args.window}} + ewma := &EWMA{IntervalWindow: types.IntervalWindow{Window: tt.args.window}} + + var filterDiff2Sum, ewmaDiff2Sum float64 + var filterCloseDiff2Sum, ewmaCloseDiff2Sum float64 + var numEstimations = 0 + for _, k := range klines { + // square error between last estimated state and current actual state + if ewma.Length() > 0 { + filterDiff2Sum += klineSquareError(filter.Last(), k) + ewmaDiff2Sum += klineSquareError(ewma.Last(), k) + filterCloseDiff2Sum += closeSquareError(filter.Last(), k) + ewmaCloseDiff2Sum += closeSquareError(ewma.Last(), k) + numEstimations++ + } + + // update estimations + if tt.args.partialInfo { + filter.Update(k.Close.Float64()) + ewma.Update(k.Close.Float64()) + } else { + filter.PushK(k) + ewma.PushK(k) + } + } + filterSquareErr := math.Sqrt(filterDiff2Sum / float64(numEstimations*4)) + ewmaSquareErr := math.Sqrt(ewmaDiff2Sum / float64(numEstimations*4)) + if filterSquareErr > ewmaSquareErr { + t.Errorf("filter K-Line square error %f > EWMA K-Line square error %v", filterSquareErr, ewmaSquareErr) + } + filterCloseSquareErr := math.Sqrt(filterCloseDiff2Sum / float64(numEstimations)) + ewmaCloseSquareErr := math.Sqrt(ewmaCloseDiff2Sum / float64(numEstimations)) + if filterCloseSquareErr > ewmaCloseSquareErr { + t.Errorf("filter close price square error %f > EWMA close price square error %v", filterCloseSquareErr, ewmaCloseSquareErr) + } + }) + } +}