xiao.qiang hai 7 meses
pai
achega
7368103912
Modificáronse 4 ficheiros con 3481 adicións e 39 borrados
  1. 22 39
      package-lock.json
  2. 1 0
      public/javascripts/local.js
  3. 136 0
      public/javascripts/test01.js
  4. 3322 0
      public/javascripts/test02.js

+ 22 - 39
package-lock.json

@@ -20,11 +20,14 @@
         "google-protobuf": "^3.21.4",
         "http-errors": "~1.6.3",
         "http-proxy-agent": "^7.0.2",
+        "https-proxy-agent": "^7.0.6",
         "morgan": "~1.9.1",
         "pako": "^2.1.0",
         "protobufjs": "^7.4.0",
         "selenium-webdriver": "^4.26.0",
-        "stylus": "0.54.5"
+        "socks-proxy-agent": "^8.0.5",
+        "stylus": "0.54.5",
+        "ws": "^8.18.1"
       },
       "devDependencies": {
         "@jest/globals": "^29.7.0",
@@ -1197,37 +1200,14 @@
       }
     },
     "node_modules/agent-base": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-7.1.1.tgz",
-      "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
-      "dependencies": {
-        "debug": "^4.3.4"
-      },
+      "version": "7.1.3",
+      "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-7.1.3.tgz",
+      "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
+      "license": "MIT",
       "engines": {
         "node": ">= 14"
       }
     },
-    "node_modules/agent-base/node_modules/debug": {
-      "version": "4.3.7",
-      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.7.tgz",
-      "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
-      "dependencies": {
-        "ms": "^2.1.3"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/agent-base/node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
-    },
     "node_modules/amdefine": {
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/amdefine/-/amdefine-1.0.1.tgz",
@@ -3109,11 +3089,12 @@
       "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
     },
     "node_modules/https-proxy-agent": {
-      "version": "7.0.5",
-      "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
-      "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
+      "version": "7.0.6",
+      "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+      "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
+      "license": "MIT",
       "dependencies": {
-        "agent-base": "^7.0.2",
+        "agent-base": "^7.1.2",
         "debug": "4"
       },
       "engines": {
@@ -5610,11 +5591,12 @@
       }
     },
     "node_modules/socks-proxy-agent": {
-      "version": "8.0.4",
-      "resolved": "https://registry.npmmirror.com/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz",
-      "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==",
+      "version": "8.0.5",
+      "resolved": "https://registry.npmmirror.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz",
+      "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==",
+      "license": "MIT",
       "dependencies": {
-        "agent-base": "^7.1.1",
+        "agent-base": "^7.1.2",
         "debug": "^4.3.4",
         "socks": "^2.8.3"
       },
@@ -6146,9 +6128,10 @@
       }
     },
     "node_modules/ws": {
-      "version": "8.18.0",
-      "resolved": "https://registry.npmmirror.com/ws/-/ws-8.18.0.tgz",
-      "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
+      "version": "8.18.1",
+      "resolved": "https://registry.npmmirror.com/ws/-/ws-8.18.1.tgz",
+      "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==",
+      "license": "MIT",
       "engines": {
         "node": ">=10.0.0"
       },

+ 1 - 0
public/javascripts/local.js

@@ -921,6 +921,7 @@ let fun = {
 
 let a = fun.calc(pkDatas, fun)
 
+
 // console.info('==>', JSON.stringify(a))
 let idx = []
 let ema3 = a.filter(item => item.ema3).map(function(item, index) {

+ 136 - 0
public/javascripts/test01.js

@@ -0,0 +1,136 @@
+// arguments={
+//     "0": {
+//         "type": "Spot",
+//         "action": "Kline",
+//         "value": [
+//             {
+//                 "BeginTime": 1741859520,
+//                 "ClosePrice": 83351.9,
+//                 "LastPrice": "83351.9",
+//                 "HighestPrice": 83430.7,
+//                 "InstrumentID": "BTC/USDT",
+//                 "LowestPrice": 83351.9,
+//                 "OpenPrice": 83430.7,
+//                 "PeriodID": "1m",
+//                 "Volume": 5.41126194,
+//                 "isFirst": true
+//             },
+//             {
+//                 "BeginTime": 1741859580,
+//                 "ClosePrice": 83325,
+//                 "LastPrice": "83325.0",
+//                 "HighestPrice": 83389.9,
+//                 "InstrumentID": "BTC/USDT",
+//                 "LowestPrice": 83324.9,
+//                 "OpenPrice": 83351.9,
+//                 "PeriodID": "1m",
+//                 "Volume": 4.86852206,
+//                 "isFirst": true
+//             }
+// }
+
+let date = new Date(Date.now())
+console.info(date.toISOString(), date.toLocaleString('en-US', {
+    timeZone: 'Asia/Shanghai',
+    hour12: false,
+}).substring(11, 16)) // 转换为 HH:MM 格式
+// ================================================
+let _fun = {
+    name: 'EMA', // 指标名称
+    shortName: 'EMA', // 指标简称
+    series: 'price', // 指标应用于哪个数据系列(这里是价格)
+    calcParams: [6, 12, 20], // 计算参数,即 EMA 的周期
+    precision: 2, // 数值精度,保留两位小数
+    shouldOhlc: true, // 是否需要 OHLC 数据(Open, High, Low, Close)
+    figures: [ // 图形配置
+        {
+            key: 'ema1',
+            title: 'EMA6: ',
+            type: 'line',
+        }, // EMA6 线
+        {
+            key: 'ema2',
+            title: 'EMA12: ',
+            type: 'line',
+        }, // EMA12 线
+        {
+            key: 'ema3',
+            title: 'EMA20: ',
+            type: 'line',
+        },  // EMA20 线
+    ],
+    regenerateFigures: function(params) { // 动态生成图形配置
+        return params.map(function(param) {
+            return {
+                key: 'ema' + param,
+                title: 'EMA' + param + ': ',
+                type: 'line',
+            }
+        })
+    },
+    calc: function(data, indicator) { // 计算 EMA 值
+        const params = indicator.calcParams // 获取计算参数
+        const figures = indicator.figures // 获取图形配置
+        let sum = 0 // 总和
+        const emaValues = [] // EMA 值数组
+
+        return data.map(function(item, index) {
+            const result = {} // 存储计算结果
+            const close = item.C // 收盘价
+            sum += close // 累加收盘价
+
+            params.forEach(function(param, paramIndex) {
+                if (param - 1 > index) {
+                    return // 数据不足,无法计算
+                }
+
+                if (index > param - 1) {
+                    // 计算 EMA
+                    emaValues[paramIndex] = (2 * close + (param - 1) * emaValues[paramIndex]) / (param + 1)
+                } else {
+                    // 计算初始 EMA
+                    emaValues[paramIndex] = sum / param
+                }
+
+                result[figures[paramIndex].key] = emaValues[paramIndex] // 存储 EMA 值
+            })
+
+            return result // 返回计算结果
+        })
+    },
+}
+
+_pm = postMessage
+_cp = []
+_times = []
+postMessage = function() {
+    let kl = arguments[0]
+
+    if (kl.action === 'Kline') {
+        let map = kl.value.map((v) => {
+            let ti = new Date(v.BeginTime * 1000).toLocaleString('en-US', {
+                timeZone: 'Asia/Shanghai',
+                hour12: false,
+            }).substring(11, 16)
+            _times.push(ti)
+            return {
+                C: v.ClosePrice,
+                T: ti,
+            }
+        })
+        console.info('====================')
+        _cp = [..._cp, ...map]
+        console.info('ClosePrice', _cp)
+        console.info('BeginTime', _times)
+        let ema = _fun.calc(_cp, _fun)
+        let ema3 = ema.filter(item => item.ema3).map(function(item, index) {
+            return item.ema3
+        })
+        console.info('ema3', ema3)
+        console.info('最小值:', Math.min.apply(null, ema3))
+        console.info('最大值:', Math.max.apply(null, ema3))
+    }
+
+    return _pm.apply(null, arguments)
+}
+

+ 3322 - 0
public/javascripts/test02.js

@@ -0,0 +1,3322 @@
+let data = [
+    {
+        'close': 83382.6,
+        'high': 83445.6,
+        'low': 83328,
+        'open': 83445.6,
+        'timestamp': 1741840440000,
+        'volume': 22.19331536,
+    },
+    {
+        'close': 83389.9,
+        'high': 83434.3,
+        'low': 83370.1,
+        'open': 83382.6,
+        'timestamp': 1741840500000,
+        'volume': 4.42274072,
+    },
+    {
+        'close': 83390.4,
+        'high': 83400,
+        'low': 83372,
+        'open': 83389.9,
+        'timestamp': 1741840560000,
+        'volume': 2.09768418,
+    },
+    {
+        'close': 83362,
+        'high': 83400,
+        'low': 83359.2,
+        'open': 83390.4,
+        'timestamp': 1741840620000,
+        'volume': 1.57786418,
+    },
+    {
+        'close': 83340,
+        'high': 83362,
+        'low': 83317.6,
+        'open': 83362,
+        'timestamp': 1741840680000,
+        'volume': 3.65268068,
+    },
+    {
+        'close': 83274.4,
+        'high': 83352.1,
+        'low': 83250.1,
+        'open': 83340,
+        'timestamp': 1741840740000,
+        'volume': 3.98739828,
+    },
+    {
+        'close': 83296.8,
+        'high': 83309.9,
+        'low': 83259.3,
+        'open': 83274.4,
+        'timestamp': 1741840800000,
+        'volume': 2.99303448,
+    },
+    {
+        'close': 83326,
+        'high': 83326,
+        'low': 83264.4,
+        'open': 83296.8,
+        'timestamp': 1741840860000,
+        'volume': 2.03124822,
+    },
+    {
+        'close': 83308.2,
+        'high': 83336.6,
+        'low': 83281,
+        'open': 83326,
+        'timestamp': 1741840920000,
+        'volume': 3.16914756,
+    },
+    {
+        'close': 83337.7,
+        'high': 83337.8,
+        'low': 83290.3,
+        'open': 83308.2,
+        'timestamp': 1741840980000,
+        'volume': 1.60912772,
+    },
+    {
+        'close': 83309.8,
+        'high': 83365.7,
+        'low': 83305.3,
+        'open': 83337.7,
+        'timestamp': 1741841040000,
+        'volume': 3.6139506,
+    },
+    {
+        'close': 83377.2,
+        'high': 83379.6,
+        'low': 83289.2,
+        'open': 83309.8,
+        'timestamp': 1741841100000,
+        'volume': 1.89682056,
+    },
+    {
+        'close': 83414.6,
+        'high': 83442.2,
+        'low': 83372.7,
+        'open': 83377.2,
+        'timestamp': 1741841160000,
+        'volume': 1.74170896,
+    },
+    {
+        'close': 83451.3,
+        'high': 83454.5,
+        'low': 83407.1,
+        'open': 83414.6,
+        'timestamp': 1741841220000,
+        'volume': 1.43118168,
+    },
+    {
+        'close': 83420,
+        'high': 83465.8,
+        'low': 83400,
+        'open': 83451.3,
+        'timestamp': 1741841280000,
+        'volume': 1.67634704,
+    },
+    {
+        'close': 83431.4,
+        'high': 83457.9,
+        'low': 83419,
+        'open': 83420,
+        'timestamp': 1741841340000,
+        'volume': 1.24993638,
+    },
+    {
+        'close': 83418.5,
+        'high': 83455.3,
+        'low': 83417.3,
+        'open': 83431.4,
+        'timestamp': 1741841400000,
+        'volume': 2.1251261,
+    },
+    {
+        'close': 83451.5,
+        'high': 83466.1,
+        'low': 83418.5,
+        'open': 83418.5,
+        'timestamp': 1741841460000,
+        'volume': 2.92757216,
+    },
+    {
+        'close': 83423.6,
+        'high': 83469.3,
+        'low': 83407.7,
+        'open': 83451.5,
+        'timestamp': 1741841520000,
+        'volume': 4.39875824,
+    },
+    {
+        'close': 83355.5,
+        'high': 83423.6,
+        'low': 83349,
+        'open': 83423.6,
+        'timestamp': 1741841580000,
+        'volume': 2.30284968,
+    },
+    {
+        'close': 83385.6,
+        'high': 83395.5,
+        'low': 83354.8,
+        'open': 83355.5,
+        'timestamp': 1741841640000,
+        'volume': 3.36441824,
+    },
+    {
+        'close': 83348.4,
+        'high': 83385.6,
+        'low': 83348.3,
+        'open': 83385.6,
+        'timestamp': 1741841700000,
+        'volume': 4.97649834,
+    },
+    {
+        'close': 83296.7,
+        'high': 83355.9,
+        'low': 83282.6,
+        'open': 83348.4,
+        'timestamp': 1741841760000,
+        'volume': 2.89354036,
+    },
+    {
+        'close': 83235,
+        'high': 83299.9,
+        'low': 83221.4,
+        'open': 83296.7,
+        'timestamp': 1741841820000,
+        'volume': 3.54649422,
+    },
+    {
+        'close': 83279.9,
+        'high': 83281.9,
+        'low': 83223.7,
+        'open': 83235,
+        'timestamp': 1741841880000,
+        'volume': 4.42418632,
+    },
+    {
+        'close': 83289.4,
+        'high': 83301.5,
+        'low': 83279.9,
+        'open': 83279.9,
+        'timestamp': 1741841940000,
+        'volume': 2.2136969,
+    },
+    {
+        'close': 83326,
+        'high': 83326,
+        'low': 83263.8,
+        'open': 83289.4,
+        'timestamp': 1741842000000,
+        'volume': 3.31084444,
+    },
+    {
+        'close': 83317.2,
+        'high': 83329.6,
+        'low': 83267.6,
+        'open': 83326,
+        'timestamp': 1741842060000,
+        'volume': 2.66074418,
+    },
+    {
+        'close': 83387.5,
+        'high': 83395,
+        'low': 83306.3,
+        'open': 83317.2,
+        'timestamp': 1741842120000,
+        'volume': 3.11085194,
+    },
+    {
+        'close': 83392,
+        'high': 83406.6,
+        'low': 83342.1,
+        'open': 83387.5,
+        'timestamp': 1741842180000,
+        'volume': 1.53493366,
+    },
+    {
+        'close': 83406.8,
+        'high': 83445.1,
+        'low': 83392,
+        'open': 83392,
+        'timestamp': 1741842240000,
+        'volume': 1.72686028,
+    },
+    {
+        'close': 83441,
+        'high': 83442.2,
+        'low': 83370.6,
+        'open': 83406.8,
+        'timestamp': 1741842300000,
+        'volume': 1.44174744,
+    },
+    {
+        'close': 83431.3,
+        'high': 83441,
+        'low': 83376.7,
+        'open': 83441,
+        'timestamp': 1741842360000,
+        'volume': 1.54760984,
+    },
+    {
+        'close': 83378.2,
+        'high': 83434.7,
+        'low': 83371.3,
+        'open': 83431.3,
+        'timestamp': 1741842420000,
+        'volume': 0.86573666,
+    },
+    {
+        'close': 83370,
+        'high': 83393.9,
+        'low': 83323.4,
+        'open': 83378.2,
+        'timestamp': 1741842480000,
+        'volume': 1.63161316,
+    },
+    {
+        'close': 83327.7,
+        'high': 83370,
+        'low': 83327.7,
+        'open': 83370,
+        'timestamp': 1741842540000,
+        'volume': 0.86853786,
+    },
+    {
+        'close': 83384,
+        'high': 83384,
+        'low': 83327.7,
+        'open': 83327.7,
+        'timestamp': 1741842600000,
+        'volume': 3.16489176,
+    },
+    {
+        'close': 83363.9,
+        'high': 83387.9,
+        'low': 83336,
+        'open': 83384,
+        'timestamp': 1741842660000,
+        'volume': 1.75785418,
+    },
+    {
+        'close': 83350.8,
+        'high': 83385.5,
+        'low': 83340.6,
+        'open': 83363.9,
+        'timestamp': 1741842720000,
+        'volume': 1.26330622,
+    },
+    {
+        'close': 83373.8,
+        'high': 83373.8,
+        'low': 83316.7,
+        'open': 83350.8,
+        'timestamp': 1741842780000,
+        'volume': 1.1154485,
+    },
+    {
+        'close': 83369.7,
+        'high': 83373.8,
+        'low': 83340.8,
+        'open': 83373.8,
+        'timestamp': 1741842840000,
+        'volume': 1.23006444,
+    },
+    {
+        'close': 83321.9,
+        'high': 83371.3,
+        'low': 83317.5,
+        'open': 83369.7,
+        'timestamp': 1741842900000,
+        'volume': 1.52691002,
+    },
+    {
+        'close': 83354.6,
+        'high': 83354.6,
+        'low': 83290.5,
+        'open': 83321.9,
+        'timestamp': 1741842960000,
+        'volume': 2.20135702,
+    },
+    {
+        'close': 83343.9,
+        'high': 83387.9,
+        'low': 83330,
+        'open': 83354.6,
+        'timestamp': 1741843020000,
+        'volume': 1.67232008,
+    },
+    {
+        'close': 83381.9,
+        'high': 83381.9,
+        'low': 83298.2,
+        'open': 83343.9,
+        'timestamp': 1741843080000,
+        'volume': 2.03896918,
+    },
+    {
+        'close': 83408,
+        'high': 83408,
+        'low': 83365.6,
+        'open': 83381.9,
+        'timestamp': 1741843140000,
+        'volume': 1.09613522,
+    },
+    {
+        'close': 83375.5,
+        'high': 83426.5,
+        'low': 83375.5,
+        'open': 83408,
+        'timestamp': 1741843200000,
+        'volume': 10.44177862,
+    },
+    {
+        'close': 83354.9,
+        'high': 83387.7,
+        'low': 83347,
+        'open': 83375.5,
+        'timestamp': 1741843260000,
+        'volume': 1.01660538,
+    },
+    {
+        'close': 83419.9,
+        'high': 83420,
+        'low': 83354.9,
+        'open': 83354.9,
+        'timestamp': 1741843320000,
+        'volume': 1.7461242,
+    },
+    {
+        'close': 83423.9,
+        'high': 83459.3,
+        'low': 83419.9,
+        'open': 83419.9,
+        'timestamp': 1741843380000,
+        'volume': 1.21048506,
+    },
+    {
+        'close': 83500,
+        'high': 83500,
+        'low': 83423.9,
+        'open': 83423.9,
+        'timestamp': 1741843440000,
+        'volume': 2.61026078,
+    },
+    {
+        'close': 83487.4,
+        'high': 83539.8,
+        'low': 83472.4,
+        'open': 83500,
+        'timestamp': 1741843500000,
+        'volume': 9.3161421,
+    },
+    {
+        'close': 83493.5,
+        'high': 83512,
+        'low': 83471.1,
+        'open': 83487.4,
+        'timestamp': 1741843560000,
+        'volume': 1.88178932,
+    },
+    {
+        'close': 83481.9,
+        'high': 83495.9,
+        'low': 83440.2,
+        'open': 83493.5,
+        'timestamp': 1741843620000,
+        'volume': 1.1825537,
+    },
+    {
+        'close': 83452.3,
+        'high': 83483.3,
+        'low': 83445,
+        'open': 83481.9,
+        'timestamp': 1741843680000,
+        'volume': 2.15807068,
+    },
+    {
+        'close': 83451.6,
+        'high': 83476.4,
+        'low': 83445,
+        'open': 83452.3,
+        'timestamp': 1741843740000,
+        'volume': 1.09770674,
+    },
+    {
+        'close': 83459.5,
+        'high': 83460,
+        'low': 83412.1,
+        'open': 83451.6,
+        'timestamp': 1741843800000,
+        'volume': 4.80116266,
+    },
+    {
+        'close': 83386.2,
+        'high': 83459.9,
+        'low': 83383.6,
+        'open': 83459.5,
+        'timestamp': 1741843860000,
+        'volume': 3.31989566,
+    },
+    {
+        'close': 83343.9,
+        'high': 83386.2,
+        'low': 83339.3,
+        'open': 83386.2,
+        'timestamp': 1741843920000,
+        'volume': 1.70093424,
+    },
+    {
+        'close': 83334.9,
+        'high': 83379.8,
+        'low': 83334.8,
+        'open': 83343.9,
+        'timestamp': 1741843980000,
+        'volume': 1.62505098,
+    },
+    {
+        'close': 83310.2,
+        'high': 83355.9,
+        'low': 83299.9,
+        'open': 83334.9,
+        'timestamp': 1741844040000,
+        'volume': 6.50144266,
+    },
+    {
+        'close': 83283.3,
+        'high': 83316.1,
+        'low': 83283.3,
+        'open': 83310.2,
+        'timestamp': 1741844100000,
+        'volume': 3.05542304,
+    },
+    {
+        'close': 83240.1,
+        'high': 83290.8,
+        'low': 83230.6,
+        'open': 83283.3,
+        'timestamp': 1741844160000,
+        'volume': 3.6448735,
+    },
+    {
+        'close': 83175,
+        'high': 83266.3,
+        'low': 83166.3,
+        'open': 83240.1,
+        'timestamp': 1741844220000,
+        'volume': 6.50690518,
+    },
+    {
+        'close': 83209.8,
+        'high': 83209.8,
+        'low': 83150.1,
+        'open': 83175,
+        'timestamp': 1741844280000,
+        'volume': 9.32121522,
+    },
+    {
+        'close': 83182.1,
+        'high': 83215.7,
+        'low': 83164.9,
+        'open': 83209.8,
+        'timestamp': 1741844340000,
+        'volume': 2.33095998,
+    },
+    {
+        'close': 83145.6,
+        'high': 83182.1,
+        'low': 83111.1,
+        'open': 83182.1,
+        'timestamp': 1741844400000,
+        'volume': 7.38599136,
+    },
+    {
+        'close': 83130.5,
+        'high': 83168,
+        'low': 83110,
+        'open': 83145.6,
+        'timestamp': 1741844460000,
+        'volume': 5.585657,
+    },
+    {
+        'close': 83134.3,
+        'high': 83139.4,
+        'low': 83083.7,
+        'open': 83130.5,
+        'timestamp': 1741844520000,
+        'volume': 4.22571208,
+    },
+    {
+        'close': 83118,
+        'high': 83154.1,
+        'low': 83100,
+        'open': 83134.3,
+        'timestamp': 1741844580000,
+        'volume': 1.6634606,
+    },
+    {
+        'close': 83084.1,
+        'high': 83131.5,
+        'low': 83084.1,
+        'open': 83118,
+        'timestamp': 1741844640000,
+        'volume': 4.17391888,
+    },
+    {
+        'close': 83170,
+        'high': 83181.6,
+        'low': 83084.1,
+        'open': 83084.1,
+        'timestamp': 1741844700000,
+        'volume': 2.3389573,
+    },
+    {
+        'close': 83210.1,
+        'high': 83211.4,
+        'low': 83164.9,
+        'open': 83170,
+        'timestamp': 1741844760000,
+        'volume': 2.05556828,
+    },
+    {
+        'close': 83210.7,
+        'high': 83250.8,
+        'low': 83178.3,
+        'open': 83210.1,
+        'timestamp': 1741844820000,
+        'volume': 4.13459282,
+    },
+    {
+        'close': 83216,
+        'high': 83222.8,
+        'low': 83186,
+        'open': 83210.7,
+        'timestamp': 1741844880000,
+        'volume': 0.9269062,
+    },
+    {
+        'close': 83169.9,
+        'high': 83240.6,
+        'low': 83152.3,
+        'open': 83216,
+        'timestamp': 1741844940000,
+        'volume': 2.73118848,
+    },
+    {
+        'close': 83167.9,
+        'high': 83197.6,
+        'low': 83158,
+        'open': 83169.9,
+        'timestamp': 1741845000000,
+        'volume': 1.64371248,
+    },
+    {
+        'close': 83082,
+        'high': 83175.8,
+        'low': 83074,
+        'open': 83167.9,
+        'timestamp': 1741845060000,
+        'volume': 3.1878131,
+    },
+    {
+        'close': 83103.5,
+        'high': 83139.7,
+        'low': 83074.5,
+        'open': 83082,
+        'timestamp': 1741845120000,
+        'volume': 2.86059034,
+    },
+    {
+        'close': 83113.2,
+        'high': 83113.2,
+        'low': 83088.2,
+        'open': 83103.5,
+        'timestamp': 1741845180000,
+        'volume': 1.11794332,
+    },
+    {
+        'close': 83094.9,
+        'high': 83123.3,
+        'low': 83085,
+        'open': 83113.2,
+        'timestamp': 1741845240000,
+        'volume': 1.88498638,
+    },
+    {
+        'close': 83123,
+        'high': 83141.7,
+        'low': 83094.9,
+        'open': 83094.9,
+        'timestamp': 1741845300000,
+        'volume': 7.42917642,
+    },
+    {
+        'close': 83131.8,
+        'high': 83155,
+        'low': 83091.7,
+        'open': 83123,
+        'timestamp': 1741845360000,
+        'volume': 11.66560086,
+    },
+    {
+        'close': 83165.5,
+        'high': 83165.5,
+        'low': 83111.2,
+        'open': 83131.8,
+        'timestamp': 1741845420000,
+        'volume': 2.15396978,
+    },
+    {
+        'close': 83166.5,
+        'high': 83206.1,
+        'low': 83155.2,
+        'open': 83165.5,
+        'timestamp': 1741845480000,
+        'volume': 2.77123624,
+    },
+    {
+        'close': 83156.9,
+        'high': 83180.7,
+        'low': 83135.5,
+        'open': 83166.5,
+        'timestamp': 1741845540000,
+        'volume': 1.06227444,
+    },
+    {
+        'close': 83198.4,
+        'high': 83198.4,
+        'low': 83140.1,
+        'open': 83156.9,
+        'timestamp': 1741845600000,
+        'volume': 2.42960984,
+    },
+    {
+        'close': 83183.2,
+        'high': 83203.9,
+        'low': 83180,
+        'open': 83198.4,
+        'timestamp': 1741845660000,
+        'volume': 1.10805752,
+    },
+    {
+        'close': 83100.1,
+        'high': 83209,
+        'low': 83100.1,
+        'open': 83183.2,
+        'timestamp': 1741845720000,
+        'volume': 2.2829454,
+    },
+    {
+        'close': 83071.3,
+        'high': 83108.4,
+        'low': 83068.9,
+        'open': 83100.1,
+        'timestamp': 1741845780000,
+        'volume': 2.08555482,
+    },
+    {
+        'close': 83077.2,
+        'high': 83105.3,
+        'low': 83061.9,
+        'open': 83071.3,
+        'timestamp': 1741845840000,
+        'volume': 1.62448682,
+    },
+    {
+        'close': 83017.9,
+        'high': 83091.9,
+        'low': 83017.8,
+        'open': 83077.2,
+        'timestamp': 1741845900000,
+        'volume': 2.67282728,
+    },
+    {
+        'close': 83006.5,
+        'high': 83041.2,
+        'low': 83000,
+        'open': 83017.9,
+        'timestamp': 1741845960000,
+        'volume': 2.20043022,
+    },
+    {
+        'close': 83043.6,
+        'high': 83049.9,
+        'low': 82974,
+        'open': 83006.5,
+        'timestamp': 1741846020000,
+        'volume': 9.10972794,
+    },
+    {
+        'close': 83049.8,
+        'high': 83091.5,
+        'low': 83017.8,
+        'open': 83043.6,
+        'timestamp': 1741846080000,
+        'volume': 4.84897196,
+    },
+    {
+        'close': 83008.8,
+        'high': 83066,
+        'low': 82987.9,
+        'open': 83049.8,
+        'timestamp': 1741846140000,
+        'volume': 8.47724106,
+    },
+    {
+        'close': 83028,
+        'high': 83032,
+        'low': 82997.5,
+        'open': 83008.8,
+        'timestamp': 1741846200000,
+        'volume': 1.5747459,
+    },
+    {
+        'close': 83033.7,
+        'high': 83048.2,
+        'low': 83009.4,
+        'open': 83028,
+        'timestamp': 1741846260000,
+        'volume': 3.1849603,
+    },
+    {
+        'close': 83057.9,
+        'high': 83066,
+        'low': 83014.1,
+        'open': 83033.7,
+        'timestamp': 1741846320000,
+        'volume': 1.17716482,
+    },
+    {
+        'close': 83006,
+        'high': 83060.3,
+        'low': 82988.2,
+        'open': 83057.9,
+        'timestamp': 1741846380000,
+        'volume': 1.11475612,
+    },
+    {
+        'close': 82955.4,
+        'high': 83006.6,
+        'low': 82955.3,
+        'open': 83006,
+        'timestamp': 1741846440000,
+        'volume': 4.3970535,
+    },
+    {
+        'close': 83006.3,
+        'high': 83033.3,
+        'low': 82955.4,
+        'open': 82955.4,
+        'timestamp': 1741846500000,
+        'volume': 2.82878756,
+    },
+    {
+        'close': 82952.2,
+        'high': 83007.9,
+        'low': 82942.6,
+        'open': 83006.3,
+        'timestamp': 1741846560000,
+        'volume': 2.01416088,
+    },
+    {
+        'close': 82999.7,
+        'high': 83005.9,
+        'low': 82925.8,
+        'open': 82952.2,
+        'timestamp': 1741846620000,
+        'volume': 2.2659565,
+    },
+    {
+        'close': 83014.7,
+        'high': 83023.2,
+        'low': 82966.6,
+        'open': 82999.7,
+        'timestamp': 1741846680000,
+        'volume': 1.98115294,
+    },
+    {
+        'close': 83006.3,
+        'high': 83018.4,
+        'low': 83003,
+        'open': 83014.7,
+        'timestamp': 1741846740000,
+        'volume': 2.25468348,
+    },
+    {
+        'close': 82928.9,
+        'high': 83016,
+        'low': 82928.9,
+        'open': 83006.3,
+        'timestamp': 1741846800000,
+        'volume': 1.5648268,
+    },
+    {
+        'close': 82977.4,
+        'high': 82978,
+        'low': 82908.1,
+        'open': 82928.9,
+        'timestamp': 1741846860000,
+        'volume': 2.74504254,
+    },
+    {
+        'close': 82944.9,
+        'high': 82993.5,
+        'low': 82944.9,
+        'open': 82977.4,
+        'timestamp': 1741846920000,
+        'volume': 6.33532232,
+    },
+    {
+        'close': 82918.1,
+        'high': 82946.6,
+        'low': 82911.9,
+        'open': 82944.9,
+        'timestamp': 1741846980000,
+        'volume': 1.9571417,
+    },
+    {
+        'close': 82871,
+        'high': 82918.8,
+        'low': 82856,
+        'open': 82918.1,
+        'timestamp': 1741847040000,
+        'volume': 7.19314858,
+    },
+    {
+        'close': 82913.5,
+        'high': 82913.5,
+        'low': 82871,
+        'open': 82871,
+        'timestamp': 1741847100000,
+        'volume': 3.08621772,
+    },
+    {
+        'close': 82969,
+        'high': 82969.1,
+        'low': 82909.1,
+        'open': 82913.5,
+        'timestamp': 1741847160000,
+        'volume': 2.40252802,
+    },
+    {
+        'close': 82908,
+        'high': 82980.6,
+        'low': 82906.3,
+        'open': 82969,
+        'timestamp': 1741847220000,
+        'volume': 1.83573342,
+    },
+    {
+        'close': 82965.6,
+        'high': 82965.6,
+        'low': 82904.6,
+        'open': 82908,
+        'timestamp': 1741847280000,
+        'volume': 3.76516648,
+    },
+    {
+        'close': 83018.6,
+        'high': 83018.6,
+        'low': 82965.6,
+        'open': 82965.6,
+        'timestamp': 1741847340000,
+        'volume': 10.46072824,
+    },
+    {
+        'close': 83050,
+        'high': 83050,
+        'low': 82978.2,
+        'open': 83018.6,
+        'timestamp': 1741847400000,
+        'volume': 7.5939208,
+    },
+    {
+        'close': 83078.2,
+        'high': 83084.8,
+        'low': 83045.4,
+        'open': 83050,
+        'timestamp': 1741847460000,
+        'volume': 3.31902866,
+    },
+    {
+        'close': 83043.6,
+        'high': 83089.6,
+        'low': 83038.8,
+        'open': 83078.2,
+        'timestamp': 1741847520000,
+        'volume': 3.08773108,
+    },
+    {
+        'close': 83085.2,
+        'high': 83088.1,
+        'low': 83043.6,
+        'open': 83043.6,
+        'timestamp': 1741847580000,
+        'volume': 3.5490366,
+    },
+    {
+        'close': 83105.2,
+        'high': 83110,
+        'low': 83076.8,
+        'open': 83085.2,
+        'timestamp': 1741847640000,
+        'volume': 2.07913864,
+    },
+    {
+        'close': 83136,
+        'high': 83149.7,
+        'low': 83105.2,
+        'open': 83105.2,
+        'timestamp': 1741847700000,
+        'volume': 1.48749214,
+    },
+    {
+        'close': 83083.3,
+        'high': 83136.1,
+        'low': 83083.3,
+        'open': 83136,
+        'timestamp': 1741847760000,
+        'volume': 1.89266368,
+    },
+    {
+        'close': 83104.7,
+        'high': 83116.8,
+        'low': 83083,
+        'open': 83083.3,
+        'timestamp': 1741847820000,
+        'volume': 2.3250931,
+    },
+    {
+        'close': 83040.4,
+        'high': 83104.7,
+        'low': 83040.4,
+        'open': 83104.7,
+        'timestamp': 1741847880000,
+        'volume': 2.55447674,
+    },
+    {
+        'close': 83066.9,
+        'high': 83071.2,
+        'low': 83022.4,
+        'open': 83040.4,
+        'timestamp': 1741847940000,
+        'volume': 2.27807804,
+    },
+    {
+        'close': 83088,
+        'high': 83088.3,
+        'low': 83062.1,
+        'open': 83066.9,
+        'timestamp': 1741848000000,
+        'volume': 1.88735922,
+    },
+    {
+        'close': 83038.2,
+        'high': 83088.3,
+        'low': 83028.3,
+        'open': 83088,
+        'timestamp': 1741848060000,
+        'volume': 2.30818062,
+    },
+    {
+        'close': 83066.4,
+        'high': 83080.2,
+        'low': 83028,
+        'open': 83038.2,
+        'timestamp': 1741848120000,
+        'volume': 2.26817238,
+    },
+    {
+        'close': 83044,
+        'high': 83089.2,
+        'low': 83043.9,
+        'open': 83066.4,
+        'timestamp': 1741848180000,
+        'volume': 2.57346432,
+    },
+    {
+        'close': 83050,
+        'high': 83065.2,
+        'low': 83021.7,
+        'open': 83044,
+        'timestamp': 1741848240000,
+        'volume': 1.4909853,
+    },
+    {
+        'close': 83149.9,
+        'high': 83149.9,
+        'low': 83048,
+        'open': 83050,
+        'timestamp': 1741848300000,
+        'volume': 1.89863528,
+    },
+    {
+        'close': 83280,
+        'high': 83280,
+        'low': 83149.9,
+        'open': 83149.9,
+        'timestamp': 1741848360000,
+        'volume': 10.25384678,
+    },
+    {
+        'close': 83207.3,
+        'high': 83280,
+        'low': 83186.2,
+        'open': 83280,
+        'timestamp': 1741848420000,
+        'volume': 3.02344608,
+    },
+    {
+        'close': 83218,
+        'high': 83252.5,
+        'low': 83207.3,
+        'open': 83207.3,
+        'timestamp': 1741848480000,
+        'volume': 3.08522416,
+    },
+    {
+        'close': 83228.7,
+        'high': 83257.4,
+        'low': 83208,
+        'open': 83218,
+        'timestamp': 1741848540000,
+        'volume': 3.29043778,
+    },
+    {
+        'close': 83284,
+        'high': 83298,
+        'low': 83192.1,
+        'open': 83228.7,
+        'timestamp': 1741848600000,
+        'volume': 3.97601852,
+    },
+    {
+        'close': 83321.6,
+        'high': 83321.6,
+        'low': 83244.2,
+        'open': 83284,
+        'timestamp': 1741848660000,
+        'volume': 4.21837,
+    },
+    {
+        'close': 83288.7,
+        'high': 83321.7,
+        'low': 83266.7,
+        'open': 83321.6,
+        'timestamp': 1741848720000,
+        'volume': 1.53819534,
+    },
+    {
+        'close': 83315.5,
+        'high': 83323,
+        'low': 83284.7,
+        'open': 83288.7,
+        'timestamp': 1741848780000,
+        'volume': 3.14434888,
+    },
+    {
+        'close': 83265.7,
+        'high': 83315.6,
+        'low': 83256.1,
+        'open': 83315.5,
+        'timestamp': 1741848840000,
+        'volume': 3.59459778,
+    },
+    {
+        'close': 83214.8,
+        'high': 83267.3,
+        'low': 83200,
+        'open': 83265.7,
+        'timestamp': 1741848900000,
+        'volume': 2.38646008,
+    },
+    {
+        'close': 83288.3,
+        'high': 83293.1,
+        'low': 83214.8,
+        'open': 83214.8,
+        'timestamp': 1741848960000,
+        'volume': 6.21366956,
+    },
+    {
+        'close': 83317.3,
+        'high': 83317.7,
+        'low': 83278,
+        'open': 83288.3,
+        'timestamp': 1741849020000,
+        'volume': 3.39079028,
+    },
+    {
+        'close': 83300,
+        'high': 83333.3,
+        'low': 83300,
+        'open': 83317.3,
+        'timestamp': 1741849080000,
+        'volume': 2.59452534,
+    },
+    {
+        'close': 83289.1,
+        'high': 83305.1,
+        'low': 83268.6,
+        'open': 83300,
+        'timestamp': 1741849140000,
+        'volume': 2.09877806,
+    },
+    {
+        'close': 83271.5,
+        'high': 83333.3,
+        'low': 83271.5,
+        'open': 83289.1,
+        'timestamp': 1741849200000,
+        'volume': 4.99269398,
+    },
+    {
+        'close': 83286.1,
+        'high': 83315.4,
+        'low': 83271.5,
+        'open': 83271.5,
+        'timestamp': 1741849260000,
+        'volume': 4.80411834,
+    },
+    {
+        'close': 83326.8,
+        'high': 83333.2,
+        'low': 83280.1,
+        'open': 83286.1,
+        'timestamp': 1741849320000,
+        'volume': 3.95351156,
+    },
+    {
+        'close': 83304,
+        'high': 83333.2,
+        'low': 83303.7,
+        'open': 83326.8,
+        'timestamp': 1741849380000,
+        'volume': 5.45735756,
+    },
+    {
+        'close': 83300.1,
+        'high': 83344.4,
+        'low': 83289,
+        'open': 83304,
+        'timestamp': 1741849440000,
+        'volume': 4.27180216,
+    },
+    {
+        'close': 83330.5,
+        'high': 83348.5,
+        'low': 83289.1,
+        'open': 83300.1,
+        'timestamp': 1741849500000,
+        'volume': 5.28386546,
+    },
+    {
+        'close': 83292.5,
+        'high': 83331.9,
+        'low': 83278.2,
+        'open': 83330.5,
+        'timestamp': 1741849560000,
+        'volume': 3.19257378,
+    },
+    {
+        'close': 83256,
+        'high': 83311.7,
+        'low': 83252.7,
+        'open': 83292.5,
+        'timestamp': 1741849620000,
+        'volume': 11.55992392,
+    },
+    {
+        'close': 83216.3,
+        'high': 83262.2,
+        'low': 83212,
+        'open': 83256,
+        'timestamp': 1741849680000,
+        'volume': 6.17035566,
+    },
+    {
+        'close': 83179.9,
+        'high': 83216.3,
+        'low': 83149.7,
+        'open': 83216.3,
+        'timestamp': 1741849740000,
+        'volume': 15.63446316,
+    },
+    {
+        'close': 83194.6,
+        'high': 83199.3,
+        'low': 83169.3,
+        'open': 83179.9,
+        'timestamp': 1741849800000,
+        'volume': 1.50810542,
+    },
+    {
+        'close': 83217.7,
+        'high': 83232.7,
+        'low': 83180.6,
+        'open': 83194.6,
+        'timestamp': 1741849860000,
+        'volume': 1.4740839,
+    },
+    {
+        'close': 83261.3,
+        'high': 83270.2,
+        'low': 83217.7,
+        'open': 83217.7,
+        'timestamp': 1741849920000,
+        'volume': 0.91169162,
+    },
+    {
+        'close': 83218.6,
+        'high': 83270.9,
+        'low': 83218.6,
+        'open': 83261.3,
+        'timestamp': 1741849980000,
+        'volume': 1.42118544,
+    },
+    {
+        'close': 83186.5,
+        'high': 83233.7,
+        'low': 83186.5,
+        'open': 83218.6,
+        'timestamp': 1741850040000,
+        'volume': 0.9109973,
+    },
+    {
+        'close': 83237.5,
+        'high': 83237.5,
+        'low': 83186.5,
+        'open': 83186.5,
+        'timestamp': 1741850100000,
+        'volume': 1.25821094,
+    },
+    {
+        'close': 83275.1,
+        'high': 83297.9,
+        'low': 83237.5,
+        'open': 83237.5,
+        'timestamp': 1741850160000,
+        'volume': 1.62157196,
+    },
+    {
+        'close': 83298.9,
+        'high': 83300,
+        'low': 83273.8,
+        'open': 83275.1,
+        'timestamp': 1741850220000,
+        'volume': 1.9465949,
+    },
+    {
+        'close': 83306.5,
+        'high': 83327.9,
+        'low': 83272.1,
+        'open': 83298.9,
+        'timestamp': 1741850280000,
+        'volume': 1.0766827,
+    },
+    {
+        'close': 83281.2,
+        'high': 83306.5,
+        'low': 83272.6,
+        'open': 83306.5,
+        'timestamp': 1741850340000,
+        'volume': 2.33802526,
+    },
+    {
+        'close': 83318.2,
+        'high': 83318.2,
+        'low': 83260,
+        'open': 83281.2,
+        'timestamp': 1741850400000,
+        'volume': 1.6351409,
+    },
+    {
+        'close': 83398.8,
+        'high': 83409.7,
+        'low': 83318.2,
+        'open': 83318.2,
+        'timestamp': 1741850460000,
+        'volume': 12.05752592,
+    },
+    {
+        'close': 83512.2,
+        'high': 83561.2,
+        'low': 83385,
+        'open': 83398.8,
+        'timestamp': 1741850520000,
+        'volume': 7.5895209,
+    },
+    {
+        'close': 83480,
+        'high': 83514.1,
+        'low': 83446.1,
+        'open': 83512.2,
+        'timestamp': 1741850580000,
+        'volume': 5.60098304,
+    },
+    {
+        'close': 83443.6,
+        'high': 83492.9,
+        'low': 83424.1,
+        'open': 83480,
+        'timestamp': 1741850640000,
+        'volume': 3.07967474,
+    },
+    {
+        'close': 83432,
+        'high': 83460.1,
+        'low': 83386.1,
+        'open': 83443.6,
+        'timestamp': 1741850700000,
+        'volume': 2.66536036,
+    },
+    {
+        'close': 83481.1,
+        'high': 83497.9,
+        'low': 83418.3,
+        'open': 83432,
+        'timestamp': 1741850760000,
+        'volume': 1.24841486,
+    },
+    {
+        'close': 83449.9,
+        'high': 83497.9,
+        'low': 83444,
+        'open': 83481.1,
+        'timestamp': 1741850820000,
+        'volume': 1.97420346,
+    },
+    {
+        'close': 83425.6,
+        'high': 83450,
+        'low': 83422.2,
+        'open': 83449.9,
+        'timestamp': 1741850880000,
+        'volume': 1.1537551,
+    },
+    {
+        'close': 83435,
+        'high': 83435,
+        'low': 83414.4,
+        'open': 83425.6,
+        'timestamp': 1741850940000,
+        'volume': 0.46987532,
+    },
+    {
+        'close': 83472.6,
+        'high': 83473.9,
+        'low': 83386.4,
+        'open': 83435,
+        'timestamp': 1741851000000,
+        'volume': 3.44896954,
+    },
+    {
+        'close': 83466.2,
+        'high': 83510.4,
+        'low': 83463,
+        'open': 83472.6,
+        'timestamp': 1741851060000,
+        'volume': 7.36057594,
+    },
+    {
+        'close': 83474.4,
+        'high': 83542.6,
+        'low': 83446,
+        'open': 83466.2,
+        'timestamp': 1741851120000,
+        'volume': 6.32610892,
+    },
+    {
+        'close': 83483.5,
+        'high': 83513.5,
+        'low': 83474.4,
+        'open': 83474.4,
+        'timestamp': 1741851180000,
+        'volume': 1.17033422,
+    },
+    {
+        'close': 83454,
+        'high': 83488.6,
+        'low': 83451.3,
+        'open': 83483.5,
+        'timestamp': 1741851240000,
+        'volume': 0.86554658,
+    },
+    {
+        'close': 83387.5,
+        'high': 83454.1,
+        'low': 83387.5,
+        'open': 83454,
+        'timestamp': 1741851300000,
+        'volume': 4.50137006,
+    },
+    {
+        'close': 83361,
+        'high': 83387.5,
+        'low': 83356,
+        'open': 83387.5,
+        'timestamp': 1741851360000,
+        'volume': 0.9996634,
+    },
+    {
+        'close': 83343.1,
+        'high': 83361,
+        'low': 83343,
+        'open': 83361,
+        'timestamp': 1741851420000,
+        'volume': 0.85899126,
+    },
+    {
+        'close': 83297.1,
+        'high': 83346.7,
+        'low': 83294,
+        'open': 83343.1,
+        'timestamp': 1741851480000,
+        'volume': 3.54807648,
+    },
+    {
+        'close': 83237.5,
+        'high': 83307.6,
+        'low': 83227.4,
+        'open': 83297.1,
+        'timestamp': 1741851540000,
+        'volume': 9.5860917,
+    },
+    {
+        'close': 83257.3,
+        'high': 83278.3,
+        'low': 83237.5,
+        'open': 83237.5,
+        'timestamp': 1741851600000,
+        'volume': 2.20742194,
+    },
+    {
+        'close': 83238.2,
+        'high': 83274.8,
+        'low': 83214,
+        'open': 83257.3,
+        'timestamp': 1741851660000,
+        'volume': 1.37237186,
+    },
+    {
+        'close': 83308.4,
+        'high': 83308.5,
+        'low': 83238.2,
+        'open': 83238.2,
+        'timestamp': 1741851720000,
+        'volume': 0.79357876,
+    },
+    {
+        'close': 83285,
+        'high': 83316.3,
+        'low': 83269.3,
+        'open': 83308.4,
+        'timestamp': 1741851780000,
+        'volume': 1.18799436,
+    },
+    {
+        'close': 83279.3,
+        'high': 83287.2,
+        'low': 83262.6,
+        'open': 83285,
+        'timestamp': 1741851840000,
+        'volume': 1.15425586,
+    },
+    {
+        'close': 83265.9,
+        'high': 83318.2,
+        'low': 83250.1,
+        'open': 83279.3,
+        'timestamp': 1741851900000,
+        'volume': 1.9934615,
+    },
+    {
+        'close': 83286.6,
+        'high': 83299.9,
+        'low': 83242.1,
+        'open': 83265.9,
+        'timestamp': 1741851960000,
+        'volume': 2.2123297,
+    },
+    {
+        'close': 83309.3,
+        'high': 83340.9,
+        'low': 83286.6,
+        'open': 83286.6,
+        'timestamp': 1741852020000,
+        'volume': 1.4692659,
+    },
+    {
+        'close': 83302,
+        'high': 83316.3,
+        'low': 83286.5,
+        'open': 83309.3,
+        'timestamp': 1741852080000,
+        'volume': 0.5899488,
+    },
+    {
+        'close': 83335.2,
+        'high': 83335.3,
+        'low': 83299,
+        'open': 83302,
+        'timestamp': 1741852140000,
+        'volume': 1.89708482,
+    },
+    {
+        'close': 83309.9,
+        'high': 83350.7,
+        'low': 83303.6,
+        'open': 83335.2,
+        'timestamp': 1741852200000,
+        'volume': 1.15175896,
+    },
+    {
+        'close': 83340.8,
+        'high': 83345.9,
+        'low': 83287.3,
+        'open': 83309.9,
+        'timestamp': 1741852260000,
+        'volume': 1.04585638,
+    },
+    {
+        'close': 83283.6,
+        'high': 83340.8,
+        'low': 83283.5,
+        'open': 83340.8,
+        'timestamp': 1741852320000,
+        'volume': 1.13566946,
+    },
+    {
+        'close': 83271.3,
+        'high': 83283.9,
+        'low': 83256.6,
+        'open': 83283.6,
+        'timestamp': 1741852380000,
+        'volume': 0.82781328,
+    },
+    {
+        'close': 83231.8,
+        'high': 83281.9,
+        'low': 83231.8,
+        'open': 83271.3,
+        'timestamp': 1741852440000,
+        'volume': 1.15318338,
+    },
+    {
+        'close': 83222.1,
+        'high': 83231.8,
+        'low': 83193.9,
+        'open': 83231.8,
+        'timestamp': 1741852500000,
+        'volume': 3.56456808,
+    },
+    {
+        'close': 83249.9,
+        'high': 83250,
+        'low': 83197.5,
+        'open': 83222.1,
+        'timestamp': 1741852560000,
+        'volume': 1.22783166,
+    },
+    {
+        'close': 83207.9,
+        'high': 83250,
+        'low': 83199.9,
+        'open': 83249.9,
+        'timestamp': 1741852620000,
+        'volume': 0.93452146,
+    },
+    {
+        'close': 83173.9,
+        'high': 83207.9,
+        'low': 83173.9,
+        'open': 83207.9,
+        'timestamp': 1741852680000,
+        'volume': 0.8288309,
+    },
+    {
+        'close': 83159.8,
+        'high': 83173.9,
+        'low': 83133.4,
+        'open': 83173.9,
+        'timestamp': 1741852740000,
+        'volume': 1.106627,
+    },
+    {
+        'close': 83149.4,
+        'high': 83192.5,
+        'low': 83141.7,
+        'open': 83159.8,
+        'timestamp': 1741852800000,
+        'volume': 3.49457048,
+    },
+    {
+        'close': 83168,
+        'high': 83168,
+        'low': 83134.5,
+        'open': 83149.4,
+        'timestamp': 1741852860000,
+        'volume': 1.97217394,
+    },
+    {
+        'close': 83186.2,
+        'high': 83192,
+        'low': 83148,
+        'open': 83168,
+        'timestamp': 1741852920000,
+        'volume': 2.15149864,
+    },
+    {
+        'close': 83225.9,
+        'high': 83231.4,
+        'low': 83152.1,
+        'open': 83186.2,
+        'timestamp': 1741852980000,
+        'volume': 1.84668154,
+    },
+    {
+        'close': 83235.3,
+        'high': 83269.9,
+        'low': 83214.6,
+        'open': 83225.9,
+        'timestamp': 1741853040000,
+        'volume': 1.36767512,
+    },
+    {
+        'close': 83174.7,
+        'high': 83239.8,
+        'low': 83174.7,
+        'open': 83235.3,
+        'timestamp': 1741853100000,
+        'volume': 1.46638874,
+    },
+    {
+        'close': 83193.4,
+        'high': 83209.8,
+        'low': 83171.1,
+        'open': 83174.7,
+        'timestamp': 1741853160000,
+        'volume': 1.91748642,
+    },
+    {
+        'close': 83150.1,
+        'high': 83200.8,
+        'low': 83150.1,
+        'open': 83193.4,
+        'timestamp': 1741853220000,
+        'volume': 0.86830816,
+    },
+    {
+        'close': 83210.3,
+        'high': 83210.4,
+        'low': 83136.1,
+        'open': 83150.1,
+        'timestamp': 1741853280000,
+        'volume': 2.24422402,
+    },
+    {
+        'close': 83232.4,
+        'high': 83246.6,
+        'low': 83210.3,
+        'open': 83210.3,
+        'timestamp': 1741853340000,
+        'volume': 1.5042895,
+    },
+    {
+        'close': 83188.1,
+        'high': 83232.4,
+        'low': 83188.1,
+        'open': 83232.4,
+        'timestamp': 1741853400000,
+        'volume': 1.1720339,
+    },
+    {
+        'close': 83231.1,
+        'high': 83244.4,
+        'low': 83156,
+        'open': 83188.1,
+        'timestamp': 1741853460000,
+        'volume': 2.43836534,
+    },
+    {
+        'close': 83201.6,
+        'high': 83235.9,
+        'low': 83184,
+        'open': 83231.1,
+        'timestamp': 1741853520000,
+        'volume': 1.61827638,
+    },
+    {
+        'close': 83192,
+        'high': 83224,
+        'low': 83188.8,
+        'open': 83201.6,
+        'timestamp': 1741853580000,
+        'volume': 0.8740968,
+    },
+    {
+        'close': 83107.6,
+        'high': 83192,
+        'low': 83107.6,
+        'open': 83192,
+        'timestamp': 1741853640000,
+        'volume': 1.48339314,
+    },
+    {
+        'close': 83043.9,
+        'high': 83131.5,
+        'low': 83025,
+        'open': 83107.6,
+        'timestamp': 1741853700000,
+        'volume': 3.42521184,
+    },
+    {
+        'close': 83071.6,
+        'high': 83088.1,
+        'low': 83000,
+        'open': 83043.9,
+        'timestamp': 1741853760000,
+        'volume': 4.30368876,
+    },
+    {
+        'close': 82933,
+        'high': 83080.1,
+        'low': 82933,
+        'open': 83071.6,
+        'timestamp': 1741853820000,
+        'volume': 2.77947546,
+    },
+    {
+        'close': 82981.6,
+        'high': 82981.6,
+        'low': 82916.6,
+        'open': 82933,
+        'timestamp': 1741853880000,
+        'volume': 3.56798924,
+    },
+    {
+        'close': 83005.1,
+        'high': 83015.5,
+        'low': 82968.1,
+        'open': 82981.6,
+        'timestamp': 1741853940000,
+        'volume': 1.56809246,
+    },
+    {
+        'close': 83037.4,
+        'high': 83045.2,
+        'low': 82955.7,
+        'open': 83005.1,
+        'timestamp': 1741854000000,
+        'volume': 3.82729064,
+    },
+    {
+        'close': 83060.2,
+        'high': 83073.6,
+        'low': 83037.3,
+        'open': 83037.4,
+        'timestamp': 1741854060000,
+        'volume': 1.84429912,
+    },
+    {
+        'close': 82896.1,
+        'high': 83060.2,
+        'low': 82896.1,
+        'open': 83060.2,
+        'timestamp': 1741854120000,
+        'volume': 8.80571486,
+    },
+    {
+        'close': 82790.2,
+        'high': 82896.1,
+        'low': 82740,
+        'open': 82896.1,
+        'timestamp': 1741854180000,
+        'volume': 13.2092183,
+    },
+    {
+        'close': 82799,
+        'high': 82825.7,
+        'low': 82746.3,
+        'open': 82790.2,
+        'timestamp': 1741854240000,
+        'volume': 3.08176254,
+    },
+    {
+        'close': 82625.1,
+        'high': 82804.8,
+        'low': 82625,
+        'open': 82799,
+        'timestamp': 1741854300000,
+        'volume': 9.00098098,
+    },
+    {
+        'close': 82655.1,
+        'high': 82671.3,
+        'low': 82542.3,
+        'open': 82625.1,
+        'timestamp': 1741854360000,
+        'volume': 9.36363476,
+    },
+    {
+        'close': 82579.9,
+        'high': 82655.1,
+        'low': 82548,
+        'open': 82655.1,
+        'timestamp': 1741854420000,
+        'volume': 4.97377202,
+    },
+    {
+        'close': 82662.2,
+        'high': 82693.3,
+        'low': 82574.9,
+        'open': 82579.9,
+        'timestamp': 1741854480000,
+        'volume': 5.46504992,
+    },
+    {
+        'close': 82652.3,
+        'high': 82681.6,
+        'low': 82610,
+        'open': 82662.2,
+        'timestamp': 1741854540000,
+        'volume': 4.21854606,
+    },
+    {
+        'close': 82718.8,
+        'high': 82728,
+        'low': 82642.4,
+        'open': 82652.3,
+        'timestamp': 1741854600000,
+        'volume': 4.71768098,
+    },
+    {
+        'close': 82711,
+        'high': 82727.7,
+        'low': 82670,
+        'open': 82718.8,
+        'timestamp': 1741854660000,
+        'volume': 2.3400913,
+    },
+    {
+        'close': 82706,
+        'high': 82738.9,
+        'low': 82684.1,
+        'open': 82711,
+        'timestamp': 1741854720000,
+        'volume': 2.8935066,
+    },
+    {
+        'close': 82690.9,
+        'high': 82766.3,
+        'low': 82680.5,
+        'open': 82706,
+        'timestamp': 1741854780000,
+        'volume': 2.07190686,
+    },
+    {
+        'close': 82703.7,
+        'high': 82712.3,
+        'low': 82686.3,
+        'open': 82690.9,
+        'timestamp': 1741854840000,
+        'volume': 1.2583723,
+    },
+    {
+        'close': 82752.6,
+        'high': 82752.7,
+        'low': 82684.1,
+        'open': 82703.7,
+        'timestamp': 1741854900000,
+        'volume': 3.16894048,
+    },
+    {
+        'close': 82784.2,
+        'high': 82794,
+        'low': 82750.1,
+        'open': 82752.6,
+        'timestamp': 1741854960000,
+        'volume': 1.27921866,
+    },
+    {
+        'close': 82700,
+        'high': 82797.2,
+        'low': 82698.4,
+        'open': 82784.2,
+        'timestamp': 1741855020000,
+        'volume': 2.93651938,
+    },
+    {
+        'close': 82633.2,
+        'high': 82700.1,
+        'low': 82591.7,
+        'open': 82700,
+        'timestamp': 1741855080000,
+        'volume': 8.95121454,
+    },
+    {
+        'close': 82603.4,
+        'high': 82643.9,
+        'low': 82600,
+        'open': 82633.2,
+        'timestamp': 1741855140000,
+        'volume': 1.81044316,
+    },
+    {
+        'close': 82456,
+        'high': 82603.4,
+        'low': 82443.2,
+        'open': 82603.4,
+        'timestamp': 1741855200000,
+        'volume': 7.81032864,
+    },
+    {
+        'close': 82511.1,
+        'high': 82511.1,
+        'low': 82400,
+        'open': 82456,
+        'timestamp': 1741855260000,
+        'volume': 4.48180576,
+    },
+    {
+        'close': 82572.1,
+        'high': 82573.3,
+        'low': 82479.4,
+        'open': 82511.1,
+        'timestamp': 1741855320000,
+        'volume': 3.74678346,
+    },
+    {
+        'close': 82632.2,
+        'high': 82639.6,
+        'low': 82546.3,
+        'open': 82572.1,
+        'timestamp': 1741855380000,
+        'volume': 1.80928794,
+    },
+    {
+        'close': 82661.1,
+        'high': 82661.3,
+        'low': 82617.2,
+        'open': 82632.2,
+        'timestamp': 1741855440000,
+        'volume': 1.68165156,
+    },
+    {
+        'close': 82743.3,
+        'high': 82743.3,
+        'low': 82632,
+        'open': 82661.1,
+        'timestamp': 1741855500000,
+        'volume': 2.93935124,
+    },
+    {
+        'close': 82776.1,
+        'high': 82797,
+        'low': 82716.6,
+        'open': 82743.3,
+        'timestamp': 1741855560000,
+        'volume': 2.65847922,
+    },
+    {
+        'close': 82791.1,
+        'high': 82811,
+        'low': 82770,
+        'open': 82776.1,
+        'timestamp': 1741855620000,
+        'volume': 2.26904372,
+    },
+    {
+        'close': 82814,
+        'high': 82852.2,
+        'low': 82791.1,
+        'open': 82791.1,
+        'timestamp': 1741855680000,
+        'volume': 3.15252172,
+    },
+    {
+        'close': 82819.1,
+        'high': 82845,
+        'low': 82794,
+        'open': 82814,
+        'timestamp': 1741855740000,
+        'volume': 1.82850216,
+    },
+    {
+        'close': 82866,
+        'high': 82866.8,
+        'low': 82800.1,
+        'open': 82819.1,
+        'timestamp': 1741855800000,
+        'volume': 2.8339651,
+    },
+    {
+        'close': 82881.2,
+        'high': 82915.7,
+        'low': 82856.8,
+        'open': 82866,
+        'timestamp': 1741855860000,
+        'volume': 2.27023486,
+    },
+    {
+        'close': 82858.6,
+        'high': 82894,
+        'low': 82846.9,
+        'open': 82881.2,
+        'timestamp': 1741855920000,
+        'volume': 2.39322856,
+    },
+    {
+        'close': 82879,
+        'high': 82881.2,
+        'low': 82841.5,
+        'open': 82858.6,
+        'timestamp': 1741855980000,
+        'volume': 2.9495244,
+    },
+    {
+        'close': 82859,
+        'high': 82884,
+        'low': 82837.3,
+        'open': 82879,
+        'timestamp': 1741856040000,
+        'volume': 6.601608,
+    },
+    {
+        'close': 82849.9,
+        'high': 82859,
+        'low': 82825,
+        'open': 82859,
+        'timestamp': 1741856100000,
+        'volume': 1.83200126,
+    },
+    {
+        'close': 82938,
+        'high': 82944.9,
+        'low': 82838.7,
+        'open': 82849.9,
+        'timestamp': 1741856160000,
+        'volume': 8.27953616,
+    },
+    {
+        'close': 83030.4,
+        'high': 83058.3,
+        'low': 82928.6,
+        'open': 82938,
+        'timestamp': 1741856220000,
+        'volume': 4.9027841,
+    },
+    {
+        'close': 83009.6,
+        'high': 83040.4,
+        'low': 82978.3,
+        'open': 83030.4,
+        'timestamp': 1741856280000,
+        'volume': 1.31276864,
+    },
+    {
+        'close': 82975.9,
+        'high': 83035.2,
+        'low': 82965.4,
+        'open': 83009.6,
+        'timestamp': 1741856340000,
+        'volume': 1.35585766,
+    },
+    {
+        'close': 83175.5,
+        'high': 83278.3,
+        'low': 82970.9,
+        'open': 82975.9,
+        'timestamp': 1741856400000,
+        'volume': 10.3454524,
+    },
+    {
+        'close': 83146,
+        'high': 83193.7,
+        'low': 83108.9,
+        'open': 83175.5,
+        'timestamp': 1741856460000,
+        'volume': 5.45803454,
+    },
+    {
+        'close': 83156.2,
+        'high': 83200,
+        'low': 83144,
+        'open': 83146,
+        'timestamp': 1741856520000,
+        'volume': 3.45988984,
+    },
+    {
+        'close': 83136,
+        'high': 83179.5,
+        'low': 83127.8,
+        'open': 83156.2,
+        'timestamp': 1741856580000,
+        'volume': 4.17550246,
+    },
+    {
+        'close': 83057.1,
+        'high': 83147.8,
+        'low': 83050.8,
+        'open': 83136,
+        'timestamp': 1741856640000,
+        'volume': 9.391635,
+    },
+    {
+        'close': 83193.8,
+        'high': 83194.1,
+        'low': 83057.1,
+        'open': 83057.1,
+        'timestamp': 1741856700000,
+        'volume': 2.035203,
+    },
+    {
+        'close': 83123.5,
+        'high': 83209.9,
+        'low': 83123.5,
+        'open': 83193.8,
+        'timestamp': 1741856760000,
+        'volume': 1.67593744,
+    },
+    {
+        'close': 83083.3,
+        'high': 83132.7,
+        'low': 83078,
+        'open': 83123.5,
+        'timestamp': 1741856820000,
+        'volume': 2.48467834,
+    },
+    {
+        'close': 83073.3,
+        'high': 83105.6,
+        'low': 83050.6,
+        'open': 83083.3,
+        'timestamp': 1741856880000,
+        'volume': 1.8809502,
+    },
+    {
+        'close': 83096.6,
+        'high': 83096.6,
+        'low': 83060.9,
+        'open': 83073.3,
+        'timestamp': 1741856940000,
+        'volume': 1.2710034,
+    },
+    {
+        'close': 83104.2,
+        'high': 83133.2,
+        'low': 83090,
+        'open': 83096.6,
+        'timestamp': 1741857000000,
+        'volume': 1.76207372,
+    },
+    {
+        'close': 83201.3,
+        'high': 83201.3,
+        'low': 83104.2,
+        'open': 83104.2,
+        'timestamp': 1741857060000,
+        'volume': 1.59783038,
+    },
+    {
+        'close': 83172.8,
+        'high': 83202.5,
+        'low': 83151,
+        'open': 83201.3,
+        'timestamp': 1741857120000,
+        'volume': 1.39610984,
+    },
+    {
+        'close': 83120.2,
+        'high': 83184.6,
+        'low': 83120.2,
+        'open': 83172.8,
+        'timestamp': 1741857180000,
+        'volume': 1.33316228,
+    },
+    {
+        'close': 83170.2,
+        'high': 83172.3,
+        'low': 83120.2,
+        'open': 83120.2,
+        'timestamp': 1741857240000,
+        'volume': 2.8621,
+    },
+    {
+        'close': 83218.3,
+        'high': 83218.3,
+        'low': 83170.2,
+        'open': 83170.2,
+        'timestamp': 1741857300000,
+        'volume': 2.7987777,
+    },
+    {
+        'close': 83247.8,
+        'high': 83258.8,
+        'low': 83199.9,
+        'open': 83218.3,
+        'timestamp': 1741857360000,
+        'volume': 2.62657402,
+    },
+    {
+        'close': 83240,
+        'high': 83299.9,
+        'low': 83234.4,
+        'open': 83247.8,
+        'timestamp': 1741857420000,
+        'volume': 2.98839752,
+    },
+    {
+        'close': 83292.8,
+        'high': 83292.8,
+        'low': 83240,
+        'open': 83240,
+        'timestamp': 1741857480000,
+        'volume': 3.49955486,
+    },
+    {
+        'close': 83322.5,
+        'high': 83326.8,
+        'low': 83251.6,
+        'open': 83292.8,
+        'timestamp': 1741857540000,
+        'volume': 2.76168992,
+    },
+    {
+        'close': 83464.5,
+        'high': 83472.8,
+        'low': 83312,
+        'open': 83322.5,
+        'timestamp': 1741857600000,
+        'volume': 15.83663246,
+    },
+    {
+        'close': 83493.3,
+        'high': 83493.3,
+        'low': 83370.9,
+        'open': 83464.5,
+        'timestamp': 1741857660000,
+        'volume': 8.05292802,
+    },
+    {
+        'close': 83360,
+        'high': 83499.8,
+        'low': 83360,
+        'open': 83493.3,
+        'timestamp': 1741857720000,
+        'volume': 7.16797826,
+    },
+    {
+        'close': 83298.2,
+        'high': 83366.2,
+        'low': 83289.8,
+        'open': 83360,
+        'timestamp': 1741857780000,
+        'volume': 6.37767114,
+    },
+    {
+        'close': 83310.2,
+        'high': 83332.9,
+        'low': 83260,
+        'open': 83298.2,
+        'timestamp': 1741857840000,
+        'volume': 6.22869472,
+    },
+    {
+        'close': 83337.1,
+        'high': 83369.7,
+        'low': 83310.2,
+        'open': 83310.2,
+        'timestamp': 1741857900000,
+        'volume': 5.68800456,
+    },
+    {
+        'close': 83314.7,
+        'high': 83347.4,
+        'low': 83277.4,
+        'open': 83337.1,
+        'timestamp': 1741857960000,
+        'volume': 3.0721693,
+    },
+    {
+        'close': 83269.6,
+        'high': 83314.8,
+        'low': 83267.2,
+        'open': 83314.7,
+        'timestamp': 1741858020000,
+        'volume': 0.89708862,
+    },
+    {
+        'close': 83228.6,
+        'high': 83283.9,
+        'low': 83228.6,
+        'open': 83269.6,
+        'timestamp': 1741858080000,
+        'volume': 3.36914698,
+    },
+    {
+        'close': 83245,
+        'high': 83246.8,
+        'low': 83228.5,
+        'open': 83228.6,
+        'timestamp': 1741858140000,
+        'volume': 0.46017806,
+    },
+    {
+        'close': 83227.2,
+        'high': 83246.6,
+        'low': 83225.1,
+        'open': 83245,
+        'timestamp': 1741858200000,
+        'volume': 0.73968974,
+    },
+    {
+        'close': 83220.9,
+        'high': 83250.1,
+        'low': 83214.2,
+        'open': 83227.2,
+        'timestamp': 1741858260000,
+        'volume': 2.21234464,
+    },
+    {
+        'close': 83254.7,
+        'high': 83265.9,
+        'low': 83214.2,
+        'open': 83220.9,
+        'timestamp': 1741858320000,
+        'volume': 0.94181348,
+    },
+    {
+        'close': 83298.7,
+        'high': 83316.3,
+        'low': 83254.7,
+        'open': 83254.7,
+        'timestamp': 1741858380000,
+        'volume': 3.26234438,
+    },
+    {
+        'close': 83352.3,
+        'high': 83368.1,
+        'low': 83288.2,
+        'open': 83298.7,
+        'timestamp': 1741858440000,
+        'volume': 5.35517456,
+    },
+    {
+        'close': 83314.9,
+        'high': 83352.3,
+        'low': 83292.1,
+        'open': 83352.3,
+        'timestamp': 1741858500000,
+        'volume': 1.81632546,
+    },
+    {
+        'close': 83323.7,
+        'high': 83363.1,
+        'low': 83303.1,
+        'open': 83314.9,
+        'timestamp': 1741858560000,
+        'volume': 2.50706556,
+    },
+    {
+        'close': 83295.3,
+        'high': 83351.4,
+        'low': 83295.3,
+        'open': 83323.7,
+        'timestamp': 1741858620000,
+        'volume': 2.33525302,
+    },
+    {
+        'close': 83360,
+        'high': 83377.8,
+        'low': 83295.3,
+        'open': 83295.3,
+        'timestamp': 1741858680000,
+        'volume': 3.17655594,
+    },
+    {
+        'close': 83343.5,
+        'high': 83378.3,
+        'low': 83337,
+        'open': 83360,
+        'timestamp': 1741858740000,
+        'volume': 2.18430826,
+    },
+    {
+        'close': 83380,
+        'high': 83380.1,
+        'low': 83342.1,
+        'open': 83343.5,
+        'timestamp': 1741858800000,
+        'volume': 1.1925102,
+    },
+    {
+        'close': 83270.5,
+        'high': 83383.3,
+        'low': 83270.5,
+        'open': 83380,
+        'timestamp': 1741858860000,
+        'volume': 2.04072814,
+    },
+    {
+        'close': 83279.3,
+        'high': 83281.1,
+        'low': 83253.8,
+        'open': 83270.5,
+        'timestamp': 1741858920000,
+        'volume': 0.78234534,
+    },
+    {
+        'close': 83282,
+        'high': 83304.9,
+        'low': 83265.1,
+        'open': 83279.3,
+        'timestamp': 1741858980000,
+        'volume': 2.63308998,
+    },
+    {
+        'close': 83310,
+        'high': 83310,
+        'low': 83250.7,
+        'open': 83282,
+        'timestamp': 1741859040000,
+        'volume': 2.90646438,
+    },
+    {
+        'close': 83339.6,
+        'high': 83360,
+        'low': 83309.9,
+        'open': 83310,
+        'timestamp': 1741859100000,
+        'volume': 2.14734456,
+    },
+    {
+        'close': 83365.1,
+        'high': 83402.2,
+        'low': 83332,
+        'open': 83339.6,
+        'timestamp': 1741859160000,
+        'volume': 2.24136086,
+    },
+    {
+        'close': 83369.9,
+        'high': 83376.1,
+        'low': 83342.7,
+        'open': 83365.1,
+        'timestamp': 1741859220000,
+        'volume': 10.28671872,
+    },
+    {
+        'close': 83430.7,
+        'high': 83430.7,
+        'low': 83369.9,
+        'open': 83369.9,
+        'timestamp': 1741859280000,
+        'volume': 2.09808526,
+    },
+    {
+        'close': 83420,
+        'high': 83528.6,
+        'low': 83409.2,
+        'open': 83430.7,
+        'timestamp': 1741859340000,
+        'volume': 8.23199622,
+    },
+    {
+        'close': 83360.4,
+        'high': 83466.6,
+        'low': 83348.4,
+        'open': 83420,
+        'timestamp': 1741859400000,
+        'volume': 3.96223274,
+    },
+    {
+        'close': 83430.7,
+        'high': 83473.2,
+        'low': 83348.3,
+        'open': 83360.4,
+        'timestamp': 1741859460000,
+        'volume': 4.17086976,
+    },
+    {
+        'close': 83351.9,
+        'high': 83430.7,
+        'low': 83351.9,
+        'open': 83430.7,
+        'timestamp': 1741859520000,
+        'volume': 5.41126194,
+    },
+    {
+        'close': 83325,
+        'high': 83389.9,
+        'low': 83324.9,
+        'open': 83351.9,
+        'timestamp': 1741859580000,
+        'volume': 4.86852206,
+    },
+    {
+        'close': 83348.3,
+        'high': 83364,
+        'low': 83325,
+        'open': 83325,
+        'timestamp': 1741859640000,
+        'volume': 4.26269012,
+    },
+    {
+        'close': 83350.3,
+        'high': 83393.8,
+        'low': 83348.3,
+        'open': 83348.3,
+        'timestamp': 1741859700000,
+        'volume': 4.59677538,
+    },
+    {
+        'close': 83348.2,
+        'high': 83395.7,
+        'low': 83342,
+        'open': 83350.3,
+        'timestamp': 1741859760000,
+        'volume': 4.42152558,
+    },
+    {
+        'close': 83416.9,
+        'high': 83416.9,
+        'low': 83346.5,
+        'open': 83348.2,
+        'timestamp': 1741859820000,
+        'volume': 4.407592,
+    },
+    {
+        'close': 83462.9,
+        'high': 83482.6,
+        'low': 83413.2,
+        'open': 83416.9,
+        'timestamp': 1741859880000,
+        'volume': 5.62927152,
+    },
+    {
+        'close': 83437.4,
+        'high': 83462.9,
+        'low': 83432.3,
+        'open': 83462.9,
+        'timestamp': 1741859940000,
+        'volume': 4.09723424,
+    },
+    {
+        'close': 83457.9,
+        'high': 83457.9,
+        'low': 83415.6,
+        'open': 83437.4,
+        'timestamp': 1741860000000,
+        'volume': 4.8452428,
+    },
+    {
+        'close': 83421.5,
+        'high': 83498.3,
+        'low': 83421.5,
+        'open': 83457.9,
+        'timestamp': 1741860060000,
+        'volume': 5.28427086,
+    },
+    {
+        'close': 83374.8,
+        'high': 83437.5,
+        'low': 83374.7,
+        'open': 83421.5,
+        'timestamp': 1741860120000,
+        'volume': 3.95319668,
+    },
+    {
+        'close': 83344.8,
+        'high': 83404,
+        'low': 83324.4,
+        'open': 83374.8,
+        'timestamp': 1741860180000,
+        'volume': 3.73563218,
+    },
+    {
+        'close': 83394.1,
+        'high': 83405.1,
+        'low': 83344.8,
+        'open': 83344.8,
+        'timestamp': 1741860240000,
+        'volume': 3.25715756,
+    },
+    {
+        'close': 83393.7,
+        'high': 83399.2,
+        'low': 83360.1,
+        'open': 83394.1,
+        'timestamp': 1741860300000,
+        'volume': 3.05896938,
+    },
+    {
+        'close': 83340,
+        'high': 83393.8,
+        'low': 83334.2,
+        'open': 83393.7,
+        'timestamp': 1741860360000,
+        'volume': 2.37194966,
+    },
+    {
+        'close': 83292.9,
+        'high': 83345.9,
+        'low': 83288.2,
+        'open': 83340,
+        'timestamp': 1741860420000,
+        'volume': 3.9742597,
+    },
+    {
+        'close': 83289.6,
+        'high': 83310.4,
+        'low': 83285.6,
+        'open': 83292.9,
+        'timestamp': 1741860480000,
+        'volume': 2.53749888,
+    },
+    {
+        'close': 83285.9,
+        'high': 83293.9,
+        'low': 83256.8,
+        'open': 83289.6,
+        'timestamp': 1741860540000,
+        'volume': 3.60344886,
+    },
+    {
+        'close': 83273.8,
+        'high': 83305.2,
+        'low': 83272.2,
+        'open': 83285.9,
+        'timestamp': 1741860600000,
+        'volume': 0.94213134,
+    },
+    {
+        'close': 83332.2,
+        'high': 83332.2,
+        'low': 83273.8,
+        'open': 83273.8,
+        'timestamp': 1741860660000,
+        'volume': 2.98789608,
+    },
+    {
+        'close': 83304.4,
+        'high': 83359.9,
+        'low': 83304.4,
+        'open': 83332.2,
+        'timestamp': 1741860720000,
+        'volume': 3.08507796,
+    },
+    {
+        'close': 83322.4,
+        'high': 83322.4,
+        'low': 83302,
+        'open': 83304.4,
+        'timestamp': 1741860780000,
+        'volume': 0.82112272,
+    },
+    {
+        'close': 83361.9,
+        'high': 83371.9,
+        'low': 83322.4,
+        'open': 83322.4,
+        'timestamp': 1741860840000,
+        'volume': 2.72049578,
+    },
+    {
+        'close': 83292.9,
+        'high': 83388,
+        'low': 83292.9,
+        'open': 83361.9,
+        'timestamp': 1741860900000,
+        'volume': 2.97416012,
+    },
+    {
+        'close': 83269.4,
+        'high': 83298.9,
+        'low': 83258.2,
+        'open': 83292.9,
+        'timestamp': 1741860960000,
+        'volume': 3.45517374,
+    },
+    {
+        'close': 83271.9,
+        'high': 83275.2,
+        'low': 83238.1,
+        'open': 83269.4,
+        'timestamp': 1741861020000,
+        'volume': 2.39052098,
+    },
+    {
+        'close': 83238.2,
+        'high': 83279.8,
+        'low': 83238.1,
+        'open': 83271.9,
+        'timestamp': 1741861080000,
+        'volume': 1.44843522,
+    },
+    {
+        'close': 83207.5,
+        'high': 83240.4,
+        'low': 83207.5,
+        'open': 83238.2,
+        'timestamp': 1741861140000,
+        'volume': 3.29589502,
+    },
+    {
+        'close': 83213,
+        'high': 83225.7,
+        'low': 83160.9,
+        'open': 83207.5,
+        'timestamp': 1741861200000,
+        'volume': 12.4332329,
+    },
+    {
+        'close': 83238.5,
+        'high': 83238.5,
+        'low': 83190.2,
+        'open': 83213,
+        'timestamp': 1741861260000,
+        'volume': 1.23152564,
+    },
+    {
+        'close': 83259.5,
+        'high': 83259.5,
+        'low': 83210,
+        'open': 83238.5,
+        'timestamp': 1741861320000,
+        'volume': 1.43973286,
+    },
+    {
+        'close': 83223.9,
+        'high': 83279.2,
+        'low': 83206.4,
+        'open': 83259.5,
+        'timestamp': 1741861380000,
+        'volume': 3.08298866,
+    },
+    {
+        'close': 83244.3,
+        'high': 83253.7,
+        'low': 83223.3,
+        'open': 83223.9,
+        'timestamp': 1741861440000,
+        'volume': 1.5052821,
+    },
+    {
+        'close': 83244.3,
+        'high': 83266.5,
+        'low': 83244.3,
+        'open': 83244.3,
+        'timestamp': 1741861500000,
+        'volume': 1.3484977,
+    },
+    {
+        'close': 83177,
+        'high': 83281.7,
+        'low': 83177,
+        'open': 83244.3,
+        'timestamp': 1741861560000,
+        'volume': 5.23460736,
+    },
+    {
+        'close': 83189.9,
+        'high': 83205.7,
+        'low': 83100.3,
+        'open': 83177,
+        'timestamp': 1741861620000,
+        'volume': 4.89959926,
+    },
+    {
+        'close': 83291.8,
+        'high': 83293.5,
+        'low': 83186.1,
+        'open': 83189.9,
+        'timestamp': 1741861680000,
+        'volume': 3.16231612,
+    },
+    {
+        'close': 83297.1,
+        'high': 83307.2,
+        'low': 83272.2,
+        'open': 83291.8,
+        'timestamp': 1741861740000,
+        'volume': 3.72952008,
+    },
+    {
+        'close': 83403.8,
+        'high': 83403.8,
+        'low': 83297,
+        'open': 83297.1,
+        'timestamp': 1741861800000,
+        'volume': 5.32722432,
+    },
+    {
+        'close': 83341.6,
+        'high': 83403.8,
+        'low': 83318.4,
+        'open': 83403.8,
+        'timestamp': 1741861860000,
+        'volume': 3.76302684,
+    },
+    {
+        'close': 83280.1,
+        'high': 83372.1,
+        'low': 83278.1,
+        'open': 83341.6,
+        'timestamp': 1741861920000,
+        'volume': 1.85741632,
+    },
+    {
+        'close': 83258.8,
+        'high': 83300.1,
+        'low': 83255.1,
+        'open': 83280.1,
+        'timestamp': 1741861980000,
+        'volume': 1.54301872,
+    },
+    {
+        'close': 83100,
+        'high': 83259.9,
+        'low': 83100,
+        'open': 83258.8,
+        'timestamp': 1741862040000,
+        'volume': 6.39705656,
+    },
+    {
+        'close': 83074,
+        'high': 83100,
+        'low': 83038.3,
+        'open': 83100,
+        'timestamp': 1741862100000,
+        'volume': 8.94943748,
+    },
+    {
+        'close': 83092.1,
+        'high': 83099.6,
+        'low': 83048.4,
+        'open': 83074,
+        'timestamp': 1741862160000,
+        'volume': 1.69931844,
+    },
+    {
+        'close': 83106,
+        'high': 83111.8,
+        'low': 83086.3,
+        'open': 83092.1,
+        'timestamp': 1741862220000,
+        'volume': 2.07191638,
+    },
+    {
+        'close': 83170.7,
+        'high': 83170.7,
+        'low': 83083.1,
+        'open': 83106,
+        'timestamp': 1741862280000,
+        'volume': 1.65391908,
+    },
+    {
+        'close': 83192.1,
+        'high': 83210.6,
+        'low': 83168.8,
+        'open': 83170.7,
+        'timestamp': 1741862340000,
+        'volume': 1.13643934,
+    },
+    {
+        'close': 83127.4,
+        'high': 83243,
+        'low': 83127.4,
+        'open': 83192.1,
+        'timestamp': 1741862400000,
+        'volume': 2.25121638,
+    },
+    {
+        'close': 83100.7,
+        'high': 83127.4,
+        'low': 83068.3,
+        'open': 83127.4,
+        'timestamp': 1741862460000,
+        'volume': 2.49130932,
+    },
+    {
+        'close': 83067.8,
+        'high': 83114.9,
+        'low': 83067.8,
+        'open': 83100.7,
+        'timestamp': 1741862520000,
+        'volume': 2.66494488,
+    },
+    {
+        'close': 83112.3,
+        'high': 83132.9,
+        'low': 83066.7,
+        'open': 83067.8,
+        'timestamp': 1741862580000,
+        'volume': 1.1409189,
+    },
+    {
+        'close': 83091.1,
+        'high': 83129.2,
+        'low': 83081.1,
+        'open': 83112.3,
+        'timestamp': 1741862640000,
+        'volume': 1.35715138,
+    },
+    {
+        'close': 83047.1,
+        'high': 83092.3,
+        'low': 83034.1,
+        'open': 83091.1,
+        'timestamp': 1741862700000,
+        'volume': 1.89302062,
+    },
+    {
+        'close': 83014.2,
+        'high': 83049.9,
+        'low': 83011.1,
+        'open': 83047.1,
+        'timestamp': 1741862760000,
+        'volume': 1.36389158,
+    },
+    {
+        'close': 83052.9,
+        'high': 83052.9,
+        'low': 82999.9,
+        'open': 83014.2,
+        'timestamp': 1741862820000,
+        'volume': 1.98322492,
+    },
+    {
+        'close': 83075.6,
+        'high': 83099,
+        'low': 83049.9,
+        'open': 83052.9,
+        'timestamp': 1741862880000,
+        'volume': 2.33723336,
+    },
+    {
+        'close': 83156.1,
+        'high': 83165.5,
+        'low': 83072.2,
+        'open': 83075.6,
+        'timestamp': 1741862940000,
+        'volume': 1.45228104,
+    },
+    {
+        'close': 83244.5,
+        'high': 83285.6,
+        'low': 83156,
+        'open': 83156.1,
+        'timestamp': 1741863000000,
+        'volume': 8.86969562,
+    },
+    {
+        'close': 83208.5,
+        'high': 83277.3,
+        'low': 83208.5,
+        'open': 83244.5,
+        'timestamp': 1741863060000,
+        'volume': 2.36277618,
+    },
+    {
+        'close': 83275.5,
+        'high': 83275.5,
+        'low': 83208.5,
+        'open': 83208.5,
+        'timestamp': 1741863120000,
+        'volume': 1.5817376,
+    },
+    {
+        'close': 83227.4,
+        'high': 83309.4,
+        'low': 83227.3,
+        'open': 83275.5,
+        'timestamp': 1741863180000,
+        'volume': 2.26002724,
+    },
+    {
+        'close': 83231.7,
+        'high': 83231.9,
+        'low': 83187.2,
+        'open': 83227.4,
+        'timestamp': 1741863240000,
+        'volume': 1.97653202,
+    },
+    {
+        'close': 83284,
+        'high': 83289.7,
+        'low': 83231.6,
+        'open': 83231.7,
+        'timestamp': 1741863300000,
+        'volume': 2.07470604,
+    },
+    {
+        'close': 83232.7,
+        'high': 83293.9,
+        'low': 83208.1,
+        'open': 83284,
+        'timestamp': 1741863360000,
+        'volume': 2.25734164,
+    },
+    {
+        'close': 83148.2,
+        'high': 83232.7,
+        'low': 83131.1,
+        'open': 83232.7,
+        'timestamp': 1741863420000,
+        'volume': 2.37294372,
+    },
+    {
+        'close': 83156.7,
+        'high': 83175.7,
+        'low': 83125,
+        'open': 83148.2,
+        'timestamp': 1741863480000,
+        'volume': 1.80115618,
+    },
+    {
+        'close': 83187.9,
+        'high': 83194.5,
+        'low': 83156.2,
+        'open': 83156.7,
+        'timestamp': 1741863540000,
+        'volume': 0.46666856,
+    },
+    {
+        'close': 83205.7,
+        'high': 83205.7,
+        'low': 83121.4,
+        'open': 83187.9,
+        'timestamp': 1741863600000,
+        'volume': 2.16080056,
+    },
+    {
+        'close': 83176.7,
+        'high': 83237.8,
+        'low': 83168.1,
+        'open': 83205.7,
+        'timestamp': 1741863660000,
+        'volume': 1.4876338,
+    },
+    {
+        'close': 83109.1,
+        'high': 83176.7,
+        'low': 83109,
+        'open': 83176.7,
+        'timestamp': 1741863720000,
+        'volume': 2.63401534,
+    },
+    {
+        'close': 83137,
+        'high': 83137.1,
+        'low': 83080.1,
+        'open': 83109.1,
+        'timestamp': 1741863780000,
+        'volume': 5.5853807,
+    },
+    {
+        'close': 83092.2,
+        'high': 83143.9,
+        'low': 83092.2,
+        'open': 83137,
+        'timestamp': 1741863840000,
+        'volume': 1.46902838,
+    },
+    {
+        'close': 83042.2,
+        'high': 83132.3,
+        'low': 83012.3,
+        'open': 83092.2,
+        'timestamp': 1741863900000,
+        'volume': 14.3823572,
+    },
+    {
+        'close': 83038,
+        'high': 83070,
+        'low': 83014.4,
+        'open': 83042.2,
+        'timestamp': 1741863960000,
+        'volume': 1.34472174,
+    },
+    {
+        'close': 83101.6,
+        'high': 83109.4,
+        'low': 83037.9,
+        'open': 83038,
+        'timestamp': 1741864020000,
+        'volume': 1.53054362,
+    },
+    {
+        'close': 83090.1,
+        'high': 83135.9,
+        'low': 83090.1,
+        'open': 83101.6,
+        'timestamp': 1741864080000,
+        'volume': 1.93786534,
+    },
+    {
+        'close': 83059.3,
+        'high': 83116.6,
+        'low': 83059.2,
+        'open': 83090.1,
+        'timestamp': 1741864140000,
+        'volume': 1.57675428,
+    },
+    {
+        'close': 83126.3,
+        'high': 83126.3,
+        'low': 83059.2,
+        'open': 83059.3,
+        'timestamp': 1741864200000,
+        'volume': 1.25482886,
+    },
+    {
+        'close': 83031.5,
+        'high': 83126.4,
+        'low': 83023.1,
+        'open': 83126.3,
+        'timestamp': 1741864260000,
+        'volume': 3.2196783,
+    },
+    {
+        'close': 83047.5,
+        'high': 83047.5,
+        'low': 83020.2,
+        'open': 83031.5,
+        'timestamp': 1741864320000,
+        'volume': 3.28217414,
+    },
+    {
+        'close': 83002.4,
+        'high': 83054.2,
+        'low': 83000,
+        'open': 83047.5,
+        'timestamp': 1741864380000,
+        'volume': 1.24720696,
+    },
+    {
+        'close': 83001.1,
+        'high': 83006.5,
+        'low': 82998.3,
+        'open': 83002.4,
+        'timestamp': 1741864440000,
+        'volume': 0.42431094,
+    },
+]
+
+function fmt (time) {
+    return new Date(time).toLocaleString('en-US', {
+        timeZone: 'Asia/Shanghai',
+        hour12: false,
+    }).substring(11, 16)
+}
+
+let it = {
+    name: 'EMA',
+    shortName: 'EMA',
+    series: 'price',
+    calcParams: [20],
+    precision: 2,
+    shouldOhlc: !0,
+    figures: [
+        //
+        //     {
+        //     key: 'ema1',
+        //     title: 'EMA6: ',
+        //     type: 'line',
+        // }, {
+        //     key: 'ema2',
+        //     title: 'EMA12: ',
+        //     type: 'line',
+        // },
+        //     {
+        //     key: 'ema3',
+        //     title: 'EMA20: ',
+        //     type: 'line',
+        // }
+        {
+            'key': 'ema20',
+            'title': 'EMA20: ',
+            'type': 'line',
+        },
+    ],
+    regenerateFigures: function(t) {
+        return t.map((function(t, e) {
+                return {
+                    key: 'ema'.concat(t),
+                    title: 'EMA'.concat(t, ': '),
+                    type: 'line',
+                }
+            }
+        ))
+    },
+    // calc: function(t, e) {
+    //     var n = e.calcParams
+    //         , i = e.figures
+    //         , o = 0
+    //         , r = []
+    //     return t.map((function(t, e) {
+    //             var a = {}
+    //                 , s = t.close
+    //                 , time = t.timestamp
+    //             return o += s,
+    //                 n.forEach((function(t, n) {
+    //                         t - 1 > e || (r[n] = e > t - 1 ? (2 * s + (t - 1) * r[n]) / (t + 1) : o / t,
+    //                             a[i[n].key] = r[n], a['time'] = fmt(time))
+    //                     }
+    //                 )),
+    //                 a
+    //         }
+    //     ))
+    // },
+     calc: function(data, indicator) {
+         const periods = indicator.calcParams;
+         const figures = indicator.figures;
+         let sum = 0;
+         let emaValues = [];
+
+         return data.map((item, index) => {
+             const result = {};
+             const closePrice = item.close;
+             const timestamp = item.timestamp;
+
+             sum += closePrice;
+
+             periods.forEach((period, periodIndex) => {
+                 if (index < period - 1) {
+                     return;
+                 }
+
+                 emaValues[periodIndex] = index > period - 1
+                     ? (2 * closePrice + (period - 1) * emaValues[periodIndex]) / (period + 1)
+                     : sum / period;
+
+                 result[figures[periodIndex].key] = emaValues[periodIndex];
+                 result['time'] = fmt(timestamp);
+             });
+
+             return result;
+         });
+     },
+}
+
+let res = it.calc(data, it)
+
+// console.info(JSON.stringify(res, null, 2))
+
+x = [], y = []
+
+res.filter(e => e.time).forEach(function(e) {
+    x.push(e.time)
+    y.push(e.ema20)
+})
+
+console.info(JSON.stringify(x))
+console.info(JSON.stringify(y))
+console.info('最小值:', Math.min.apply(null, y))
+console.info('最大值:', Math.max.apply(null, y))