diff --git a/.gitignore b/.gitignore
index cb4e3a3..9ceda65 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,5 @@ data/*.parquet
.worktrees/
.venv
+dashboard/ui/node_modules/
+dashboard/ui/dist/
\ No newline at end of file
diff --git a/CLAUDE.md b/CLAUDE.md
index 3e7cc1e..58e6312 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -138,4 +138,4 @@ All design documents and implementation plans are stored in `docs/plans/` with t
| 2026-03-06 | `multi-symbol-dashboard` (design + plan) | Completed |
| 2026-03-06 | `strategy-parameter-sweep` (plan) | Completed |
| 2026-03-07 | `weekly-report` (plan) | Completed |
-| 2026-03-07 | `code-review-improvements` | Pending |
+| 2026-03-07 | `code-review-improvements` | Partial (#1,#2,#4,#5,#6,#8 완료) |
diff --git a/dashboard/api/log_parser.py b/dashboard/api/log_parser.py
index 486ebbb..cfce081 100644
--- a/dashboard/api/log_parser.py
+++ b/dashboard/api/log_parser.py
@@ -214,7 +214,7 @@ class LogParser:
time.sleep(POLL_INTERVAL)
def _scan_logs(self):
- log_files = sorted(glob.glob(os.path.join(LOG_DIR, "bot_*.log")))
+ log_files = sorted(glob.glob(os.path.join(LOG_DIR, "bot*.log")))
main_log = os.path.join(LOG_DIR, "bot.log")
if os.path.exists(main_log):
log_files.append(main_log)
diff --git a/dashboard/ui/package-lock.json b/dashboard/ui/package-lock.json
new file mode 100644
index 0000000..5739171
--- /dev/null
+++ b/dashboard/ui/package-lock.json
@@ -0,0 +1,2055 @@
+{
+ "name": "trading-dashboard",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "trading-dashboard",
+ "version": "1.0.0",
+ "dependencies": {
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "recharts": "^2.12.0"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-react": "^4.2.0",
+ "vite": "^5.4.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
+ "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
+ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helpers": "^7.28.6",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/traverse": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/remapping": "^2.3.5",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.29.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
+ "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
+ "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.28.6",
+ "@babel/helper-validator-option": "^7.27.1",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-globals": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
+ "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.28.6",
+ "@babel/types": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
+ "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/traverse": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
+ "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz",
+ "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
+ "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.29.0"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz",
+ "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz",
+ "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz",
+ "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
+ "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.28.6",
+ "@babel/parser": "^7.28.6",
+ "@babel/types": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
+ "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-globals": "^7.28.0",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.29.0",
+ "debug": "^4.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
+ "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz",
+ "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz",
+ "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz",
+ "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz",
+ "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz",
+ "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz",
+ "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz",
+ "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz",
+ "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz",
+ "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz",
+ "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz",
+ "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz",
+ "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz",
+ "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz",
+ "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz",
+ "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz",
+ "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz",
+ "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz",
+ "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz",
+ "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz",
+ "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz",
+ "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz",
+ "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz",
+ "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz",
+ "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz",
+ "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz",
+ "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.28.2"
+ }
+ },
+ "node_modules/@types/d3-array": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz",
+ "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-color": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
+ "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-ease": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
+ "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-interpolate": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
+ "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-color": "*"
+ }
+ },
+ "node_modules/@types/d3-path": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz",
+ "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-scale": {
+ "version": "4.0.9",
+ "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz",
+ "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-time": "*"
+ }
+ },
+ "node_modules/@types/d3-shape": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz",
+ "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-path": "*"
+ }
+ },
+ "node_modules/@types/d3-time": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
+ "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-timer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
+ "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@vitejs/plugin-react": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz",
+ "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.28.0",
+ "@babel/plugin-transform-react-jsx-self": "^7.27.1",
+ "@babel/plugin-transform-react-jsx-source": "^7.27.1",
+ "@rolldown/pluginutils": "1.0.0-beta.27",
+ "@types/babel__core": "^7.20.5",
+ "react-refresh": "^0.17.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
+ }
+ },
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz",
+ "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.28.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
+ "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "baseline-browser-mapping": "^2.9.0",
+ "caniuse-lite": "^1.0.30001759",
+ "electron-to-chromium": "^1.5.263",
+ "node-releases": "^2.0.27",
+ "update-browserslist-db": "^1.2.0"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001777",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001777.tgz",
+ "integrity": "sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/csstype": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+ "license": "MIT"
+ },
+ "node_modules/d3-array": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+ "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+ "license": "ISC",
+ "dependencies": {
+ "internmap": "1 - 2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-color": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-ease": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+ "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-format": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz",
+ "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-interpolate": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-color": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-path": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-scale": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2.10.0 - 3",
+ "d3-format": "1 - 3",
+ "d3-interpolate": "1.2.0 - 3",
+ "d3-time": "2.1.1 - 3",
+ "d3-time-format": "2 - 4"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-shape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+ "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-path": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+ "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time-format": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-time": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-timer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decimal.js-light": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
+ "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==",
+ "license": "MIT"
+ },
+ "node_modules/dom-helpers": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.307",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz",
+ "integrity": "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "license": "MIT"
+ },
+ "node_modules/fast-equals": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.0.tgz",
+ "integrity": "sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/internmap": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
+ "license": "MIT"
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.36",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz",
+ "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/postcss": {
+ "version": "8.5.8",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz",
+ "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/prop-types/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "license": "MIT"
+ },
+ "node_modules/react": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
+ },
+ "peerDependencies": {
+ "react": "^18.3.1"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "license": "MIT"
+ },
+ "node_modules/react-refresh": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz",
+ "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-smooth": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz",
+ "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-equals": "^5.0.1",
+ "prop-types": "^15.8.1",
+ "react-transition-group": "^4.4.5"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/react-transition-group": {
+ "version": "4.4.5",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
+ "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "dom-helpers": "^5.0.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.6.0",
+ "react-dom": ">=16.6.0"
+ }
+ },
+ "node_modules/recharts": {
+ "version": "2.15.4",
+ "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.4.tgz",
+ "integrity": "sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==",
+ "license": "MIT",
+ "dependencies": {
+ "clsx": "^2.0.0",
+ "eventemitter3": "^4.0.1",
+ "lodash": "^4.17.21",
+ "react-is": "^18.3.1",
+ "react-smooth": "^4.0.4",
+ "recharts-scale": "^0.4.4",
+ "tiny-invariant": "^1.3.1",
+ "victory-vendor": "^36.6.8"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/recharts-scale": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz",
+ "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==",
+ "license": "MIT",
+ "dependencies": {
+ "decimal.js-light": "^2.4.1"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz",
+ "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.59.0",
+ "@rollup/rollup-android-arm64": "4.59.0",
+ "@rollup/rollup-darwin-arm64": "4.59.0",
+ "@rollup/rollup-darwin-x64": "4.59.0",
+ "@rollup/rollup-freebsd-arm64": "4.59.0",
+ "@rollup/rollup-freebsd-x64": "4.59.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.59.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.59.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.59.0",
+ "@rollup/rollup-linux-arm64-musl": "4.59.0",
+ "@rollup/rollup-linux-loong64-gnu": "4.59.0",
+ "@rollup/rollup-linux-loong64-musl": "4.59.0",
+ "@rollup/rollup-linux-ppc64-gnu": "4.59.0",
+ "@rollup/rollup-linux-ppc64-musl": "4.59.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.59.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.59.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.59.0",
+ "@rollup/rollup-linux-x64-gnu": "4.59.0",
+ "@rollup/rollup-linux-x64-musl": "4.59.0",
+ "@rollup/rollup-openbsd-x64": "4.59.0",
+ "@rollup/rollup-openharmony-arm64": "4.59.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.59.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.59.0",
+ "@rollup/rollup-win32-x64-gnu": "4.59.0",
+ "@rollup/rollup-win32-x64-msvc": "4.59.0",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/tiny-invariant": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
+ "license": "MIT"
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/victory-vendor": {
+ "version": "36.9.2",
+ "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz",
+ "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==",
+ "license": "MIT AND ISC",
+ "dependencies": {
+ "@types/d3-array": "^3.0.3",
+ "@types/d3-ease": "^3.0.0",
+ "@types/d3-interpolate": "^3.0.1",
+ "@types/d3-scale": "^4.0.2",
+ "@types/d3-shape": "^3.1.0",
+ "@types/d3-time": "^3.0.0",
+ "@types/d3-timer": "^3.0.0",
+ "d3-array": "^3.1.6",
+ "d3-ease": "^3.0.1",
+ "d3-interpolate": "^3.0.1",
+ "d3-scale": "^4.0.2",
+ "d3-shape": "^3.1.0",
+ "d3-time": "^3.0.0",
+ "d3-timer": "^3.0.1"
+ }
+ },
+ "node_modules/vite": {
+ "version": "5.4.21",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz",
+ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.43",
+ "rollup": "^4.20.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true,
+ "license": "ISC"
+ }
+ }
+}
diff --git a/data/dogeusdt/combined_15m.parquet b/data/dogeusdt/combined_15m.parquet
index d1bd993..80cb2e1 100644
Binary files a/data/dogeusdt/combined_15m.parquet and b/data/dogeusdt/combined_15m.parquet differ
diff --git a/data/trxusdt/combined_15m.parquet b/data/trxusdt/combined_15m.parquet
index 4f64901..35ad389 100644
Binary files a/data/trxusdt/combined_15m.parquet and b/data/trxusdt/combined_15m.parquet differ
diff --git a/data/xrpusdt/combined_15m.parquet b/data/xrpusdt/combined_15m.parquet
index 04a4c28..9a85adb 100644
Binary files a/data/xrpusdt/combined_15m.parquet and b/data/xrpusdt/combined_15m.parquet differ
diff --git a/results/weekly/report_2026-03-07.html b/results/weekly/report_2026-03-07.html
new file mode 100644
index 0000000..ac9b81a
--- /dev/null
+++ b/results/weekly/report_2026-03-07.html
@@ -0,0 +1,13402 @@
+
+
+
+
+
+
+
+
+ Tearsheet (generated by QuantStats)
+
+
+
+
+
+
+
+
+
+
CoinTrader 주간 리포트 (2026-03-07) (Compounded) 9 Jun, 2025 - 4 Jan, 2026
+
Periods/Year: 252 • RF: 0.0% | Generated by QuantStats (v. 0.0.81)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Key Performance Metrics
+
+
+| Metric | Strategy |
+
+
+| Risk-Free Rate | 0.0% |
+| Time in Market | 100.0% |
+
|
+| Cumulative Return | 37.94% |
+| CAGR﹪ | 375.28% |
+
|
+| Sharpe | 2.09 |
+| Prob. Sharpe Ratio | 83.52% |
+| Smart Sharpe | 1.95 |
+| Sortino | 3.57 |
+| Smart Sortino | 3.35 |
+| Sortino/√2 | 2.52 |
+| Smart Sortino/√2 | 2.37 |
+| Omega | 1.39 |
+
|
+| Max Drawdown | -24.38% |
+| Max DD Date | 2025-06-16 |
+| Max DD Period Start | 2025-06-09 |
+| Max DD Period End | 2025-06-17 |
+| Longest DD Days | 85 |
+| Volatility (ann.) | 96.23% |
+| Calmar | 15.39 |
+| Skew | 0.55 |
+| Kurtosis | 0.44 |
+| Ulcer Performance Index | 4.39 |
+| Risk-Adjusted Return | 375.28% |
+| Risk-Return Ratio | 0.13 |
+
|
+| Avg. Return | 0.8% |
+| Avg. Win | 4.94% |
+| Avg. Loss | -4.85% |
+| Win/Loss Ratio | 1.02 |
+| Profit Ratio | 0.75 |
+
|
+| Expected Daily | 0.62% |
+| Expected Monthly | 5.51% |
+| Expected Yearly | 17.45% |
+| Kelly Criterion | 16.13% |
+| Risk of Ruin | 0.0% |
+| Daily Value-at-Risk | -9.17% |
+| Expected Shortfall (cVaR) | -10.85% |
+
|
+| Max Consecutive Wins | 5 |
+| Max Consecutive Losses | 4 |
+| Gain/Pain Ratio | 0.39 |
+| Gain/Pain (1M) | 5.13 |
+
|
+| Payoff Ratio | 1.02 |
+| Profit Factor | 1.39 |
+| Common Sense Ratio | 2.27 |
+| CPC Index | 0.82 |
+| Tail Ratio | 1.63 |
+| Outlier Win Ratio | 3.27 |
+| Outlier Loss Ratio | 1.91 |
+
|
+| MTD | 5.95% |
+| 3M | 13.63% |
+| 6M | 51.39% |
+| YTD | 5.95% |
+| 1Y | 37.94% |
+| 3Y (ann.) | 375.28% |
+| 5Y (ann.) | 375.28% |
+| 10Y (ann.) | 375.28% |
+| All-time (ann.) | 375.28% |
+
|
+| Best Day | 18.49% |
+| Worst Day | -10.85% |
+| Best Month | 28.26% |
+| Worst Month | -8.29% |
+| Best Year | 30.19% |
+| Worst Year | 5.95% |
+
|
+| Avg. Drawdown | -11.24% |
+| Avg. Drawdown Days | 27 |
+| Recovery Factor | 1.7 |
+| Ulcer Index | 0.09 |
+| Serenity Index | 1.38 |
+
|
+| Avg. Up Month | 12.13% |
+| Avg. Down Month | -5.86% |
+| Win Days | 57.69% |
+| Win Month | 66.67% |
+| Win Quarter | 75.0% |
+| Win Year | 100.0% |
+
+
+
+
EOY Returns
+
+
+| Year | Return | Cumulative |
+
+
+| 2025 | 35.15 | 30.19 |
+| 2026 | 6.26 | 5.95 |
+
+
+
+
+
Worst 10 Drawdowns
+
+
+| Started | Recovered | Drawdown | Days |
+
+
+| 2025-06-09 | 2025-06-17 | -24.38 | 9 |
+| 2025-06-23 | 2025-09-05 | -12.80 | 75 |
+| 2025-09-08 | 2025-09-12 | -11.61 | 5 |
+| 2025-09-20 | 2025-12-13 | -11.37 | 85 |
+| 2025-12-29 | 2026-01-01 | -6.94 | 4 |
+| 2026-01-03 | 2026-01-04 | -6.35 | 2 |
+| 2025-12-17 | 2025-12-23 | -5.22 | 7 |
+
+
+
+
+
+
+
+
+
diff --git a/results/weekly/report_2026-03-07.json b/results/weekly/report_2026-03-07.json
index 368c4c3..3e79310 100644
--- a/results/weekly/report_2026-03-07.json
+++ b/results/weekly/report_2026-03-07.json
@@ -58,7 +58,2121 @@
"REVERSE_SIGNAL": 1
}
}
- }
+ },
+ "trades": [
+ {
+ "symbol": "XRPUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-06-12 11:15:00",
+ "exit_time": "2025-06-12 13:00:00",
+ "entry_price": 2.223978,
+ "exit_price": 2.237955,
+ "quantity": 2248.0,
+ "sl": 2.237955,
+ "tp": 2.21,
+ "gross_pnl": -31.420573,
+ "entry_fee": 1.999801,
+ "exit_fee": 2.012369,
+ "net_pnl": -35.432743,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 26.97199737318929,
+ "macd_hist": -0.0007807103280135859,
+ "atr": 0.006988561711463904,
+ "adx": 43.4578914382015
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "LONG",
+ "entry_time": "2025-06-12 20:30:00",
+ "exit_time": "2025-06-13 00:00:00",
+ "entry_price": 2.186419,
+ "exit_price": 2.163885,
+ "quantity": 2201.5,
+ "sl": 2.163885,
+ "tp": 2.208952,
+ "gross_pnl": -49.607437,
+ "entry_fee": 1.92536,
+ "exit_fee": 1.905517,
+ "net_pnl": -53.438315,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 26.41519543415668,
+ "macd_hist": -0.005495027011351469,
+ "atr": 0.011266735681191995,
+ "adx": 35.41443548413551
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "LONG",
+ "entry_time": "2025-06-16 22:30:00",
+ "exit_time": "2025-06-16 23:45:00",
+ "entry_price": 2.260826,
+ "exit_price": 2.231631,
+ "quantity": 2006.6,
+ "sl": 2.231631,
+ "tp": 2.290021,
+ "gross_pnl": -58.582699,
+ "entry_fee": 1.814629,
+ "exit_fee": 1.791196,
+ "net_pnl": -62.188525,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 33.211506920436555,
+ "macd_hist": -0.007666291215691772,
+ "atr": 0.014597503086660083,
+ "adx": 41.77057022158849
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-06-17 15:00:00",
+ "exit_time": "2025-06-17 15:30:00",
+ "entry_price": 2.188781,
+ "exit_price": 2.164935,
+ "quantity": 1926.0,
+ "sl": 2.212627,
+ "tp": 2.164935,
+ "gross_pnl": 45.926824,
+ "entry_fee": 1.686237,
+ "exit_fee": 1.667866,
+ "net_pnl": 42.572721,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 35.98442517376965,
+ "macd_hist": -0.000473160901783975,
+ "atr": 0.011922851577807921,
+ "adx": 31.230008994240638
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "LONG",
+ "entry_time": "2025-06-21 13:30:00",
+ "exit_time": "2025-06-21 15:15:00",
+ "entry_price": 2.119112,
+ "exit_price": 2.109684,
+ "quantity": 2086.2,
+ "sl": 2.109684,
+ "tp": 2.128539,
+ "gross_pnl": -19.667423,
+ "entry_fee": 1.768356,
+ "exit_fee": 1.76049,
+ "net_pnl": -23.196269,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 29.460371663394117,
+ "macd_hist": -0.002291006577745399,
+ "atr": 0.0047136955379463,
+ "adx": 26.139853452702802
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-06-21 21:15:00",
+ "exit_time": "2025-06-21 21:30:00",
+ "entry_price": 2.045995,
+ "exit_price": 2.018384,
+ "quantity": 2099.3,
+ "sl": 2.073607,
+ "tp": 2.018384,
+ "gross_pnl": 57.964484,
+ "entry_fee": 1.718063,
+ "exit_fee": 1.694877,
+ "net_pnl": 54.551543,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 24.112041978961905,
+ "macd_hist": -0.0015821538372272313,
+ "atr": 0.013805669484335523,
+ "adx": 47.020225174544926
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "LONG",
+ "entry_time": "2025-06-24 05:30:00",
+ "exit_time": "2025-06-24 06:00:00",
+ "entry_price": 2.184818,
+ "exit_price": 2.207587,
+ "quantity": 2087.2,
+ "sl": 2.16205,
+ "tp": 2.207587,
+ "gross_pnl": 47.522393,
+ "entry_fee": 1.824061,
+ "exit_fee": 1.84307,
+ "net_pnl": 43.855261,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 73.02163697288638,
+ "macd_hist": 0.0005479493365071683,
+ "atr": 0.011384245075129916,
+ "adx": 47.36536786932758
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-07-01 13:00:00",
+ "exit_time": "2025-07-01 14:15:00",
+ "entry_price": 2.185781,
+ "exit_price": 2.203594,
+ "quantity": 2182.0,
+ "sl": 2.203594,
+ "tp": 2.167969,
+ "gross_pnl": -38.866074,
+ "entry_fee": 1.90775,
+ "exit_fee": 1.923296,
+ "net_pnl": -42.697121,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 34.25494593254047,
+ "macd_hist": -0.00014675405719808375,
+ "atr": 0.008906066514248343,
+ "adx": 38.40722178323835
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-07-04 06:00:00",
+ "exit_time": "2025-07-04 07:30:00",
+ "entry_price": 2.232877,
+ "exit_price": 2.220445,
+ "quantity": 2036.1,
+ "sl": 2.245309,
+ "tp": 2.220445,
+ "gross_pnl": 25.312421,
+ "entry_fee": 1.818544,
+ "exit_fee": 1.808419,
+ "net_pnl": 21.685458,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 31.442919224174045,
+ "macd_hist": -0.00029321477558042104,
+ "atr": 0.0062159081353788895,
+ "adx": 33.56850119916028
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-09-05 19:45:00",
+ "exit_time": "2025-09-05 21:00:00",
+ "entry_price": 2.863514,
+ "exit_price": 2.839468,
+ "quantity": 1745.9,
+ "sl": 2.887559,
+ "tp": 2.839468,
+ "gross_pnl": 41.980567,
+ "entry_fee": 1.999763,
+ "exit_fee": 1.982971,
+ "net_pnl": 37.997832,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 66.8667614741176,
+ "macd_hist": 0.005566660638547516,
+ "atr": 0.012022614930199287,
+ "adx": 25.794325095274626
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "LONG",
+ "entry_time": "2025-09-07 07:30:00",
+ "exit_time": "2025-09-07 13:30:00",
+ "entry_price": 2.831483,
+ "exit_price": 2.839182,
+ "quantity": 1750.6,
+ "sl": 2.823784,
+ "tp": 2.839182,
+ "gross_pnl": 13.478415,
+ "entry_fee": 1.982718,
+ "exit_fee": 1.988109,
+ "net_pnl": 9.507588,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 70.72939012092385,
+ "macd_hist": 0.00013947818915852105,
+ "atr": 0.0038496557346203194,
+ "adx": 25.87514662158794
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-09-07 14:15:00",
+ "exit_time": "2025-09-07 17:45:00",
+ "entry_price": 2.888611,
+ "exit_price": 2.863658,
+ "quantity": 1711.8,
+ "sl": 2.913564,
+ "tp": 2.863658,
+ "gross_pnl": 42.714942,
+ "entry_fee": 1.97789,
+ "exit_fee": 1.960804,
+ "net_pnl": 38.776248,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 76.27147788789821,
+ "macd_hist": 0.006331113894477991,
+ "atr": 0.012476615713124774,
+ "adx": 29.135371839765913
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-09-09 07:00:00",
+ "exit_time": "2025-09-09 08:30:00",
+ "entry_price": 3.009099,
+ "exit_price": 3.032748,
+ "quantity": 1621.9,
+ "sl": 3.032748,
+ "tp": 2.98545,
+ "gross_pnl": -38.356788,
+ "entry_fee": 1.952183,
+ "exit_fee": 1.967526,
+ "net_pnl": -42.276497,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 73.38194905544675,
+ "macd_hist": 0.006160466326798137,
+ "atr": 0.011824646391069867,
+ "adx": 28.105801823891394
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-09-12 20:45:00",
+ "exit_time": "2025-09-12 21:30:00",
+ "entry_price": 3.121788,
+ "exit_price": 3.09291,
+ "quantity": 1587.4,
+ "sl": 3.150665,
+ "tp": 3.09291,
+ "gross_pnl": 45.839824,
+ "entry_fee": 1.98221,
+ "exit_fee": 1.963874,
+ "net_pnl": 41.893739,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 78.88995114530964,
+ "macd_hist": 0.004793783646225545,
+ "atr": 0.014438649390670705,
+ "adx": 33.848649235778474
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-09-14 11:15:00",
+ "exit_time": "2025-09-14 12:30:00",
+ "entry_price": 3.066993,
+ "exit_price": 3.050039,
+ "quantity": 1594.0,
+ "sl": 3.083947,
+ "tp": 3.050039,
+ "gross_pnl": 27.024629,
+ "entry_fee": 1.955515,
+ "exit_fee": 1.944705,
+ "net_pnl": 23.124409,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 31.419480021379645,
+ "macd_hist": -0.0003629091436070245,
+ "atr": 0.008476985221720718,
+ "adx": 31.882046477112183
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-09-20 14:00:00",
+ "exit_time": "2025-09-20 15:00:00",
+ "entry_price": 2.971603,
+ "exit_price": 2.984114,
+ "quantity": 1630.7,
+ "sl": 2.984114,
+ "tp": 2.959092,
+ "gross_pnl": -20.401941,
+ "entry_fee": 1.938317,
+ "exit_fee": 1.946478,
+ "net_pnl": -24.286736,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 36.09553473183674,
+ "macd_hist": -0.00018720159437711752,
+ "atr": 0.006255577606168083,
+ "adx": 28.84076206692945
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "LONG",
+ "entry_time": "2025-09-24 19:45:00",
+ "exit_time": "2025-09-24 21:45:00",
+ "entry_price": 2.976198,
+ "exit_price": 2.948913,
+ "quantity": 1646.2,
+ "sl": 2.948913,
+ "tp": 3.003482,
+ "gross_pnl": -44.915196,
+ "entry_fee": 1.959767,
+ "exit_fee": 1.941801,
+ "net_pnl": -48.816763,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 77.25608496751632,
+ "macd_hist": 0.00019635721897620986,
+ "atr": 0.013642083686890932,
+ "adx": 66.36435142210216
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-09-25 12:15:00",
+ "exit_time": "2025-09-25 12:30:00",
+ "entry_price": 2.793221,
+ "exit_price": 2.81825,
+ "quantity": 1781.8,
+ "sl": 2.81825,
+ "tp": 2.768191,
+ "gross_pnl": -44.597807,
+ "entry_fee": 1.990784,
+ "exit_fee": 2.008623,
+ "net_pnl": -48.597214,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 27.256149561284357,
+ "macd_hist": -0.0005773233003328118,
+ "atr": 0.012514818420656685,
+ "adx": 36.706433983392714
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "LONG",
+ "entry_time": "2025-09-28 22:00:00",
+ "exit_time": "2025-09-29 02:15:00",
+ "entry_price": 2.850785,
+ "exit_price": 2.868214,
+ "quantity": 1700.7,
+ "sl": 2.833356,
+ "tp": 2.868214,
+ "gross_pnl": 29.641341,
+ "entry_fee": 1.939332,
+ "exit_fee": 1.951189,
+ "net_pnl": 25.750821,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 69.94607598871028,
+ "macd_hist": 0.0002172037763433672,
+ "atr": 0.008714453238038499,
+ "adx": 45.96715774504039
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-12-10 10:30:00",
+ "exit_time": "2025-12-10 14:30:00",
+ "entry_price": 2.069993,
+ "exit_price": 2.056326,
+ "quantity": 2415.2,
+ "sl": 2.08366,
+ "tp": 2.056326,
+ "gross_pnl": 33.009596,
+ "entry_fee": 1.999779,
+ "exit_fee": 1.986575,
+ "net_pnl": 29.023242,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 37.038012691554805,
+ "macd_hist": -9.211636302669133e-05,
+ "atr": 0.0068337189344636114,
+ "adx": 28.943927763667713
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "LONG",
+ "entry_time": "2025-12-12 16:00:00",
+ "exit_time": "2025-12-12 18:30:00",
+ "entry_price": 1.988899,
+ "exit_price": 2.013001,
+ "quantity": 2498.4,
+ "sl": 1.964797,
+ "tp": 2.013001,
+ "gross_pnl": 60.216838,
+ "entry_fee": 1.987626,
+ "exit_fee": 2.011713,
+ "net_pnl": 56.2175,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 28.182013495720106,
+ "macd_hist": -0.00643391832048344,
+ "atr": 0.01205108033747697,
+ "adx": 30.769786891839054
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-12-19 13:15:00",
+ "exit_time": "2025-12-19 13:45:00",
+ "entry_price": 1.878712,
+ "exit_price": 1.863781,
+ "quantity": 2596.8,
+ "sl": 1.893643,
+ "tp": 1.863781,
+ "gross_pnl": 38.773597,
+ "entry_fee": 1.951456,
+ "exit_fee": 1.935946,
+ "net_pnl": 34.886195,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 68.16547032772114,
+ "macd_hist": -4.5929936914913816e-05,
+ "atr": 0.007465649526915487,
+ "adx": 40.69667585881617
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "LONG",
+ "entry_time": "2025-12-25 23:30:00",
+ "exit_time": "2025-12-26 02:00:00",
+ "entry_price": 1.831783,
+ "exit_price": 1.844712,
+ "quantity": 2624.8,
+ "sl": 1.818854,
+ "tp": 1.844712,
+ "gross_pnl": 33.936201,
+ "entry_fee": 1.923226,
+ "exit_fee": 1.9368,
+ "net_pnl": 30.076175,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 18.688435627302994,
+ "macd_hist": -0.0034657628634239823,
+ "atr": 0.006464530874639477,
+ "adx": 30.228290924248867
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "LONG",
+ "entry_time": "2026-01-01 15:45:00",
+ "exit_time": "2026-01-01 17:15:00",
+ "entry_price": 1.861986,
+ "exit_price": 1.870892,
+ "quantity": 2543.8,
+ "sl": 1.853081,
+ "tp": 1.870892,
+ "gross_pnl": 22.653457,
+ "entry_fee": 1.894608,
+ "exit_fee": 1.90367,
+ "net_pnl": 18.855179,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 64.9515011671277,
+ "macd_hist": 8.017825296896758e-05,
+ "atr": 0.004452680396625609,
+ "adx": 29.061543249865803
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "LONG",
+ "entry_time": "2026-01-02 14:30:00",
+ "exit_time": "2026-01-02 14:45:00",
+ "entry_price": 1.906991,
+ "exit_price": 1.92129,
+ "quantity": 2458.8,
+ "sl": 1.892691,
+ "tp": 1.92129,
+ "gross_pnl": 35.159553,
+ "entry_fee": 1.875563,
+ "exit_fee": 1.889627,
+ "net_pnl": 31.394362,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 68.243618769103,
+ "macd_hist": 0.00021763021087121363,
+ "atr": 0.007149738287103824,
+ "adx": 34.75978288472445
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "SHORT",
+ "entry_time": "2026-01-04 00:45:00",
+ "exit_time": "2026-01-04 01:30:00",
+ "entry_price": 2.041396,
+ "exit_price": 2.026932,
+ "quantity": 2251.8,
+ "sl": 2.05586,
+ "tp": 2.026932,
+ "gross_pnl": 32.569888,
+ "entry_fee": 1.838726,
+ "exit_fee": 1.825698,
+ "net_pnl": 28.905464,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 78.42031027026397,
+ "macd_hist": 0.002773445174521872,
+ "atr": 0.007231967338050755,
+ "adx": 25.06146716762975
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "XRPUSDT",
+ "side": "LONG",
+ "entry_time": "2026-01-04 03:00:00",
+ "exit_time": "2026-01-04 03:45:00",
+ "entry_price": 2.038904,
+ "exit_price": 2.053633,
+ "quantity": 2209.5,
+ "sl": 2.024175,
+ "tp": 2.053633,
+ "gross_pnl": 32.54375,
+ "entry_fee": 1.801983,
+ "exit_fee": 1.815001,
+ "net_pnl": 28.926766,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 66.00101725582081,
+ "macd_hist": 4.503977849404806e-05,
+ "atr": 0.007364505506906315,
+ "adx": 30.991168735172053
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "LONG",
+ "entry_time": "2025-06-11 17:00:00",
+ "exit_time": "2025-06-11 19:45:00",
+ "entry_price": 0.282968,
+ "exit_price": 0.280059,
+ "quantity": 17671.6,
+ "sl": 0.280059,
+ "tp": 0.285877,
+ "gross_pnl": -51.403627,
+ "entry_fee": 2.000201,
+ "exit_fee": 1.97964,
+ "net_pnl": -55.383467,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 21.310011221387928,
+ "macd_hist": -0.0009208923407909242,
+ "atr": 0.001454413485759152,
+ "adx": 32.474695496414746
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-06-13 00:00:00",
+ "exit_time": "2025-06-13 00:15:00",
+ "entry_price": 0.268723,
+ "exit_price": 0.270639,
+ "quantity": 17537.0,
+ "sl": 0.270639,
+ "tp": 0.266808,
+ "gross_pnl": -33.591402,
+ "entry_fee": 1.885039,
+ "exit_fee": 1.898476,
+ "net_pnl": -37.374917,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 26.966927261980565,
+ "macd_hist": -1.9569743207310678e-05,
+ "atr": 0.0009577294352106148,
+ "adx": 26.838036717103265
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "LONG",
+ "entry_time": "2025-06-16 23:45:00",
+ "exit_time": "2025-06-17 04:45:00",
+ "entry_price": 0.273887,
+ "exit_price": 0.276694,
+ "quantity": 16493.0,
+ "sl": 0.27108,
+ "tp": 0.276694,
+ "gross_pnl": 46.294738,
+ "entry_fee": 1.80689,
+ "exit_fee": 1.825408,
+ "net_pnl": 42.662441,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 28.74454185909087,
+ "macd_hist": -0.0006231433167976357,
+ "atr": 0.0014034662689071044,
+ "adx": 28.215673425255815
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "LONG",
+ "entry_time": "2025-06-22 14:15:00",
+ "exit_time": "2025-06-22 14:45:00",
+ "entry_price": 0.264836,
+ "exit_price": 0.267254,
+ "quantity": 17828.1,
+ "sl": 0.262419,
+ "tp": 0.267254,
+ "gross_pnl": 43.092141,
+ "entry_fee": 1.888613,
+ "exit_fee": 1.905849,
+ "net_pnl": 39.297679,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 23.816317652581944,
+ "macd_hist": -0.0007482968367435475,
+ "atr": 0.0012085455367911535,
+ "adx": 28.05756581397983
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "LONG",
+ "entry_time": "2025-07-04 14:15:00",
+ "exit_time": "2025-07-04 15:30:00",
+ "entry_price": 0.283728,
+ "exit_price": 0.282103,
+ "quantity": 17300.3,
+ "sl": 0.282103,
+ "tp": 0.285354,
+ "gross_pnl": -28.120591,
+ "entry_fee": 1.963434,
+ "exit_fee": 1.952186,
+ "net_pnl": -32.036212,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 27.74105415081286,
+ "macd_hist": -0.0003117196058060476,
+ "atr": 0.0008127197629142321,
+ "adx": 32.363795146724236
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-09-06 20:45:00",
+ "exit_time": "2025-09-06 21:00:00",
+ "entry_price": 0.321678,
+ "exit_price": 0.319715,
+ "quantity": 15541.9,
+ "sl": 0.323641,
+ "tp": 0.319715,
+ "gross_pnl": 30.509805,
+ "entry_fee": 1.999794,
+ "exit_fee": 1.98759,
+ "net_pnl": 26.522421,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 14.50979679434796,
+ "macd_hist": -0.0001481211181555309,
+ "atr": 0.0009815339390825979,
+ "adx": 64.7935479437538
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "LONG",
+ "entry_time": "2025-09-06 22:00:00",
+ "exit_time": "2025-09-06 22:15:00",
+ "entry_price": 0.305541,
+ "exit_price": 0.31122,
+ "quantity": 16274.0,
+ "sl": 0.299861,
+ "tp": 0.31122,
+ "gross_pnl": 92.431123,
+ "entry_fee": 1.988947,
+ "exit_fee": 2.025919,
+ "net_pnl": 88.416257,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 7.92971732591285,
+ "macd_hist": -0.0020195476384628087,
+ "atr": 0.0028398403210786296,
+ "adx": 72.55182590993492
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "LONG",
+ "entry_time": "2025-09-08 09:15:00",
+ "exit_time": "2025-09-08 10:00:00",
+ "entry_price": 0.332173,
+ "exit_price": 0.333369,
+ "quantity": 14497.5,
+ "sl": 0.330978,
+ "tp": 0.333369,
+ "gross_pnl": 17.330829,
+ "entry_fee": 1.926272,
+ "exit_fee": 1.933205,
+ "net_pnl": 13.471352,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 65.07783460048826,
+ "macd_hist": 1.5209076637119471e-05,
+ "atr": 0.0005977178625434464,
+ "adx": 29.94633147610989
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "LONG",
+ "entry_time": "2025-09-10 12:30:00",
+ "exit_time": "2025-09-10 13:45:00",
+ "entry_price": 0.338144,
+ "exit_price": 0.339223,
+ "quantity": 14159.5,
+ "sl": 0.337065,
+ "tp": 0.339223,
+ "gross_pnl": 15.278548,
+ "entry_fee": 1.915179,
+ "exit_fee": 1.92129,
+ "net_pnl": 11.442078,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 69.27306940076188,
+ "macd_hist": 1.761110324105758e-05,
+ "atr": 0.0005395157903468375,
+ "adx": 28.042143316321827
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-09-13 05:30:00",
+ "exit_time": "2025-09-13 06:45:00",
+ "entry_price": 0.354365,
+ "exit_price": 0.353225,
+ "quantity": 13440.7,
+ "sl": 0.355504,
+ "tp": 0.353225,
+ "gross_pnl": 15.319292,
+ "entry_fee": 1.905163,
+ "exit_fee": 1.899035,
+ "net_pnl": 11.515093,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 75.09668428355302,
+ "macd_hist": 0.00010590971216388305,
+ "atr": 0.0005698844413077655,
+ "adx": 40.031791993546236
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "LONG",
+ "entry_time": "2025-09-18 16:15:00",
+ "exit_time": "2025-09-18 17:00:00",
+ "entry_price": 0.349035,
+ "exit_price": 0.350709,
+ "quantity": 13576.0,
+ "sl": 0.34736,
+ "tp": 0.350709,
+ "gross_pnl": 22.73422,
+ "entry_fee": 1.895399,
+ "exit_fee": 1.904493,
+ "net_pnl": 18.934328,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 71.40338684709819,
+ "macd_hist": 2.7945430776989415e-05,
+ "atr": 0.0008372944810174205,
+ "adx": 41.403707409730266
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-09-21 08:15:00",
+ "exit_time": "2025-09-21 09:15:00",
+ "entry_price": 0.344206,
+ "exit_price": 0.343239,
+ "quantity": 13625.0,
+ "sl": 0.345172,
+ "tp": 0.343239,
+ "gross_pnl": 13.169344,
+ "entry_fee": 1.87592,
+ "exit_fee": 1.870653,
+ "net_pnl": 9.422771,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 30.782692658162308,
+ "macd_hist": -7.421870424645718e-05,
+ "atr": 0.0004832786824330342,
+ "adx": 31.221203425283278
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "LONG",
+ "entry_time": "2025-09-21 23:00:00",
+ "exit_time": "2025-09-22 00:30:00",
+ "entry_price": 0.342464,
+ "exit_price": 0.341551,
+ "quantity": 13632.0,
+ "sl": 0.341551,
+ "tp": 0.343378,
+ "gross_pnl": -12.451938,
+ "entry_fee": 1.867389,
+ "exit_fee": 1.862408,
+ "net_pnl": -16.181735,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 32.492156959618264,
+ "macd_hist": -0.00011844966177527712,
+ "atr": 0.0004567172002937059,
+ "adx": 30.86524355608222
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-09-22 06:00:00",
+ "exit_time": "2025-09-22 11:15:00",
+ "entry_price": 0.334297,
+ "exit_price": 0.337072,
+ "quantity": 14118.1,
+ "sl": 0.337072,
+ "tp": 0.331521,
+ "gross_pnl": -39.186716,
+ "entry_fee": 1.887853,
+ "exit_fee": 1.903528,
+ "net_pnl": -42.978096,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 19.554287882129668,
+ "macd_hist": -0.00022792604366828832,
+ "atr": 0.0013878183290049766,
+ "adx": 30.760886738521233
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "LONG",
+ "entry_time": "2025-09-27 08:00:00",
+ "exit_time": "2025-09-27 09:00:00",
+ "entry_price": 0.336534,
+ "exit_price": 0.335566,
+ "quantity": 14361.6,
+ "sl": 0.335566,
+ "tp": 0.337501,
+ "gross_pnl": -13.898667,
+ "entry_fee": 1.933265,
+ "exit_fee": 1.927705,
+ "net_pnl": -17.759637,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 28.90053605935814,
+ "macd_hist": -0.00025988593478820746,
+ "atr": 0.00048388294790651314,
+ "adx": 26.380156011508365
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "LONG",
+ "entry_time": "2025-09-29 10:00:00",
+ "exit_time": "2025-09-29 10:45:00",
+ "entry_price": 0.332323,
+ "exit_price": 0.333211,
+ "quantity": 14669.3,
+ "sl": 0.331435,
+ "tp": 0.333211,
+ "gross_pnl": 13.030313,
+ "entry_fee": 1.94998,
+ "exit_fee": 1.955192,
+ "net_pnl": 9.125141,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 19.362378267287347,
+ "macd_hist": -0.0002291318308186226,
+ "atr": 0.00044413546950098455,
+ "adx": 29.645494050123773
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "LONG",
+ "entry_time": "2025-09-30 03:30:00",
+ "exit_time": "2025-09-30 06:15:00",
+ "entry_price": 0.337134,
+ "exit_price": 0.336068,
+ "quantity": 14416.4,
+ "sl": 0.336068,
+ "tp": 0.3382,
+ "gross_pnl": -15.367974,
+ "entry_fee": 1.944102,
+ "exit_fee": 1.937955,
+ "net_pnl": -19.25003,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 58.81934618554273,
+ "macd_hist": 9.633358724452359e-06,
+ "atr": 0.0005330031631932522,
+ "adx": 34.07177915564808
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "LONG",
+ "entry_time": "2025-10-01 08:15:00",
+ "exit_time": "2025-10-01 08:45:00",
+ "entry_price": 0.335354,
+ "exit_price": 0.336308,
+ "quantity": 14616.9,
+ "sl": 0.334399,
+ "tp": 0.336308,
+ "gross_pnl": 13.951362,
+ "entry_fee": 1.960732,
+ "exit_fee": 1.966312,
+ "net_pnl": 10.024318,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 70.24789531394917,
+ "macd_hist": 4.729285330987371e-05,
+ "atr": 0.0004772339591884286,
+ "adx": 31.542285567700812
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-12-08 23:15:00",
+ "exit_time": "2025-12-09 00:00:00",
+ "entry_price": 0.281402,
+ "exit_price": 0.28061,
+ "quantity": 17766.4,
+ "sl": 0.282193,
+ "tp": 0.28061,
+ "gross_pnl": 14.063894,
+ "entry_fee": 1.999799,
+ "exit_fee": 1.994174,
+ "net_pnl": 10.069921,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 22.36971195563758,
+ "macd_hist": -5.3411406416355763e-05,
+ "atr": 0.0003958003322855375,
+ "adx": 36.500835949606106
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-12-12 07:45:00",
+ "exit_time": "2025-12-12 08:15:00",
+ "entry_price": 0.278582,
+ "exit_price": 0.277953,
+ "quantity": 17915.9,
+ "sl": 0.279211,
+ "tp": 0.277953,
+ "gross_pnl": 11.265055,
+ "entry_fee": 1.99642,
+ "exit_fee": 1.991914,
+ "net_pnl": 7.276721,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 29.438038967517357,
+ "macd_hist": -2.5520992386730775e-05,
+ "atr": 0.0003143870866373587,
+ "adx": 26.711440675930646
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-12-12 15:30:00",
+ "exit_time": "2025-12-12 15:45:00",
+ "entry_price": 0.276062,
+ "exit_price": 0.275244,
+ "quantity": 18057.8,
+ "sl": 0.276881,
+ "tp": 0.275244,
+ "gross_pnl": 14.773959,
+ "entry_fee": 1.994032,
+ "exit_fee": 1.988122,
+ "net_pnl": 10.791805,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 28.751521638219945,
+ "macd_hist": -8.36146151699088e-06,
+ "atr": 0.00040907415881422674,
+ "adx": 39.02029513782675
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-12-13 10:15:00",
+ "exit_time": "2025-12-13 12:30:00",
+ "entry_price": 0.272363,
+ "exit_price": 0.271775,
+ "quantity": 18263.9,
+ "sl": 0.272951,
+ "tp": 0.271775,
+ "gross_pnl": 10.736675,
+ "entry_fee": 1.989762,
+ "exit_fee": 1.985468,
+ "net_pnl": 6.761445,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 28.50309030113114,
+ "macd_hist": -1.9348391567442782e-05,
+ "atr": 0.0002939316152227498,
+ "adx": 25.21703387256171
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-12-26 15:00:00",
+ "exit_time": "2025-12-26 19:30:00",
+ "entry_price": 0.277452,
+ "exit_price": 0.278149,
+ "quantity": 17906.6,
+ "sl": 0.278149,
+ "tp": 0.276756,
+ "gross_pnl": -12.474826,
+ "entry_fee": 1.987291,
+ "exit_fee": 1.992281,
+ "net_pnl": -16.454397,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 29.51622507815984,
+ "macd_hist": -4.6760678561223154e-05,
+ "atr": 0.0003483303942996465,
+ "adx": 36.669526375660595
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "LONG",
+ "entry_time": "2025-12-27 20:00:00",
+ "exit_time": "2025-12-27 22:00:00",
+ "entry_price": 0.283318,
+ "exit_price": 0.284114,
+ "quantity": 17618.3,
+ "sl": 0.282523,
+ "tp": 0.284114,
+ "gross_pnl": 14.013879,
+ "entry_fee": 1.996635,
+ "exit_fee": 2.00224,
+ "net_pnl": 10.015004,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 77.49503286668957,
+ "macd_hist": 3.5147071292014305e-05,
+ "atr": 0.00039770804019150625,
+ "adx": 43.053847108404184
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "TRXUSDT",
+ "side": "SHORT",
+ "entry_time": "2026-01-04 00:00:00",
+ "exit_time": "2026-01-04 00:45:00",
+ "entry_price": 0.294841,
+ "exit_price": 0.295553,
+ "quantity": 16895.1,
+ "sl": 0.295553,
+ "tp": 0.294128,
+ "gross_pnl": -12.034542,
+ "entry_fee": 1.992544,
+ "exit_fee": 1.997358,
+ "net_pnl": -16.024444,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 66.6678799584072,
+ "macd_hist": -3.2551549800375387e-05,
+ "atr": 0.00035615479915180313,
+ "adx": 74.06247870613235
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-06-09 09:45:00",
+ "exit_time": "2025-06-09 10:30:00",
+ "entry_price": 0.184312,
+ "exit_price": 0.186099,
+ "quantity": 27125.3,
+ "sl": 0.186099,
+ "tp": 0.182524,
+ "gross_pnl": -48.496013,
+ "entry_fee": 1.999803,
+ "exit_fee": 2.019201,
+ "net_pnl": -52.515016,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 67.34545854809373,
+ "macd_hist": 0.00045777683806403745,
+ "atr": 0.0008939258330681654,
+ "adx": 26.753579547378944
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-06-12 15:45:00",
+ "exit_time": "2025-06-12 16:15:00",
+ "entry_price": 0.185781,
+ "exit_price": 0.188043,
+ "quantity": 25443.6,
+ "sl": 0.188043,
+ "tp": 0.18352,
+ "gross_pnl": -57.548306,
+ "entry_fee": 1.890779,
+ "exit_fee": 1.913799,
+ "net_pnl": -61.352884,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 32.87563936239978,
+ "macd_hist": -6.154194236816622e-05,
+ "atr": 0.0011308994454790138,
+ "adx": 36.72844618637212
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-06-13 00:00:00",
+ "exit_time": "2025-06-13 00:30:00",
+ "entry_price": 0.175862,
+ "exit_price": 0.172419,
+ "quantity": 25080.8,
+ "sl": 0.179306,
+ "tp": 0.172419,
+ "gross_pnl": 86.371409,
+ "entry_fee": 1.764308,
+ "exit_fee": 1.729759,
+ "net_pnl": 82.877341,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 23.82274308710309,
+ "macd_hist": -0.00018936322017631762,
+ "atr": 0.0017218631157866595,
+ "adx": 49.101001050928005
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "LONG",
+ "entry_time": "2025-06-15 08:00:00",
+ "exit_time": "2025-06-15 13:45:00",
+ "entry_price": 0.174757,
+ "exit_price": 0.176023,
+ "quantity": 27565.4,
+ "sl": 0.173492,
+ "tp": 0.176023,
+ "gross_pnl": 34.876091,
+ "entry_fee": 1.926904,
+ "exit_fee": 1.940854,
+ "net_pnl": 31.008333,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 24.780054637272638,
+ "macd_hist": -0.0002590315281965996,
+ "atr": 0.0006326062990674968,
+ "adx": 30.652243262468048
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-06-17 15:00:00",
+ "exit_time": "2025-06-17 15:15:00",
+ "entry_price": 0.169793,
+ "exit_price": 0.167789,
+ "quantity": 29222.0,
+ "sl": 0.171797,
+ "tp": 0.167789,
+ "gross_pnl": 58.558778,
+ "entry_fee": 1.984677,
+ "exit_fee": 1.961253,
+ "net_pnl": 54.612848,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 35.547832446911734,
+ "macd_hist": -5.0941667818399415e-05,
+ "atr": 0.0010019638901851717,
+ "adx": 33.89821436286415
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-06-21 21:15:00",
+ "exit_time": "2025-06-21 21:30:00",
+ "entry_price": 0.154635,
+ "exit_price": 0.152064,
+ "quantity": 31960.9,
+ "sl": 0.157205,
+ "tp": 0.152064,
+ "gross_pnl": 82.160178,
+ "entry_fee": 1.976904,
+ "exit_fee": 1.944039,
+ "net_pnl": 78.239235,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 26.457816380696,
+ "macd_hist": -0.00012481742306554315,
+ "atr": 0.001285323281513888,
+ "adx": 37.795973656729004
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "LONG",
+ "entry_time": "2025-06-23 05:45:00",
+ "exit_time": "2025-06-23 09:15:00",
+ "entry_price": 0.154205,
+ "exit_price": 0.152478,
+ "quantity": 31067.9,
+ "sl": 0.152478,
+ "tp": 0.155933,
+ "gross_pnl": -53.668609,
+ "entry_fee": 1.916335,
+ "exit_fee": 1.894868,
+ "net_pnl": -57.479812,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 68.35056270975231,
+ "macd_hist": 4.524144395032638e-05,
+ "atr": 0.0008637308750963044,
+ "adx": 31.64341200149608
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "LONG",
+ "entry_time": "2025-06-24 05:30:00",
+ "exit_time": "2025-06-24 07:30:00",
+ "entry_price": 0.165817,
+ "exit_price": 0.163918,
+ "quantity": 29644.5,
+ "sl": 0.163918,
+ "tp": 0.167715,
+ "gross_pnl": -56.289792,
+ "entry_fee": 1.96622,
+ "exit_fee": 1.943704,
+ "net_pnl": -60.199716,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 71.91537787231637,
+ "macd_hist": 7.80952216130269e-05,
+ "atr": 0.0009494137535534953,
+ "adx": 33.04146955102302
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-06-30 14:45:00",
+ "exit_time": "2025-06-30 15:45:00",
+ "entry_price": 0.163204,
+ "exit_price": 0.164835,
+ "quantity": 30626.3,
+ "sl": 0.164835,
+ "tp": 0.161573,
+ "gross_pnl": -49.952474,
+ "entry_fee": 1.99933,
+ "exit_fee": 2.019311,
+ "net_pnl": -53.971115,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 34.694739395161335,
+ "macd_hist": -2.4481776487695294e-05,
+ "atr": 0.0008155159726745009,
+ "adx": 36.86861772419954
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "LONG",
+ "entry_time": "2025-07-01 13:30:00",
+ "exit_time": "2025-07-01 14:00:00",
+ "entry_price": 0.158926,
+ "exit_price": 0.160291,
+ "quantity": 29695.9,
+ "sl": 0.157561,
+ "tp": 0.160291,
+ "gross_pnl": 40.526071,
+ "entry_fee": 1.887779,
+ "exit_fee": 1.903989,
+ "net_pnl": 36.734302,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 22.477319427427954,
+ "macd_hist": -9.620625262051722e-05,
+ "atr": 0.0006823512797731415,
+ "adx": 54.80815080269273
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-07-04 13:30:00",
+ "exit_time": "2025-07-04 14:15:00",
+ "entry_price": 0.165093,
+ "exit_price": 0.163687,
+ "quantity": 29636.0,
+ "sl": 0.1665,
+ "tp": 0.163687,
+ "gross_pnl": 41.67986,
+ "entry_fee": 1.957084,
+ "exit_fee": 1.940412,
+ "net_pnl": 37.782364,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 28.005630053291462,
+ "macd_hist": -2.2292129766276537e-05,
+ "atr": 0.0007031964563771208,
+ "adx": 42.184408275078944
+ },
+ "fold": 1
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-09-06 09:00:00",
+ "exit_time": "2025-09-06 12:30:00",
+ "entry_price": 0.214459,
+ "exit_price": 0.213417,
+ "quantity": 23312.2,
+ "sl": 0.2155,
+ "tp": 0.213417,
+ "gross_pnl": 24.283274,
+ "entry_fee": 1.9998,
+ "exit_fee": 1.990087,
+ "net_pnl": 20.293386,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 27.72362652968821,
+ "macd_hist": -4.1870994937527064e-05,
+ "atr": 0.0005208275826006094,
+ "adx": 29.251970601813117
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "LONG",
+ "entry_time": "2025-09-08 13:00:00",
+ "exit_time": "2025-09-08 13:15:00",
+ "entry_price": 0.239354,
+ "exit_price": 0.237676,
+ "quantity": 20806.8,
+ "sl": 0.236511,
+ "tp": 0.242196,
+ "gross_pnl": -34.907631,
+ "entry_fee": 1.992076,
+ "exit_fee": 1.978113,
+ "net_pnl": -38.877819,
+ "close_reason": "REVERSE_SIGNAL",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 77.0407640779084,
+ "macd_hist": 0.00030723417797429717,
+ "atr": 0.0014212239323279944,
+ "adx": 25.511092566066164
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-09-08 13:15:00",
+ "exit_time": "2025-09-08 21:00:00",
+ "entry_price": 0.237676,
+ "exit_price": 0.240614,
+ "quantity": 20560.0,
+ "sl": 0.240614,
+ "tp": 0.234738,
+ "gross_pnl": -60.405019,
+ "entry_fee": 1.954649,
+ "exit_fee": 1.978811,
+ "net_pnl": -64.33848,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 66.83918953751622,
+ "macd_hist": 0.00037497263875952314,
+ "atr": 0.001468993651447424,
+ "adx": 27.856072192833714
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "LONG",
+ "entry_time": "2025-09-09 12:00:00",
+ "exit_time": "2025-09-09 12:15:00",
+ "entry_price": 0.246265,
+ "exit_price": 0.249434,
+ "quantity": 18500.9,
+ "sl": 0.243095,
+ "tp": 0.249434,
+ "gross_pnl": 58.645342,
+ "entry_fee": 1.822447,
+ "exit_fee": 1.845905,
+ "net_pnl": 54.97699,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 74.03847788480495,
+ "macd_hist": 0.00025518498301992164,
+ "atr": 0.0015849321269105327,
+ "adx": 33.93033682724456
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "LONG",
+ "entry_time": "2025-09-10 16:45:00",
+ "exit_time": "2025-09-10 17:15:00",
+ "entry_price": 0.247915,
+ "exit_price": 0.244558,
+ "quantity": 19449.9,
+ "sl": 0.244558,
+ "tp": 0.251271,
+ "gross_pnl": -65.283338,
+ "entry_fee": 1.928767,
+ "exit_fee": 1.902654,
+ "net_pnl": -69.114759,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 69.86492326260483,
+ "macd_hist": 0.00017047619713731908,
+ "atr": 0.001678243537964013,
+ "adx": 34.14678587193939
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "LONG",
+ "entry_time": "2025-09-12 22:15:00",
+ "exit_time": "2025-09-13 01:00:00",
+ "entry_price": 0.275988,
+ "exit_price": 0.279803,
+ "quantity": 16184.3,
+ "sl": 0.272173,
+ "tp": 0.279803,
+ "gross_pnl": 61.742819,
+ "entry_fee": 1.786666,
+ "exit_fee": 1.811364,
+ "net_pnl": 58.144789,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 76.58805471974998,
+ "macd_hist": 4.664366386725985e-05,
+ "atr": 0.0019074911824376896,
+ "adx": 44.711937954746844
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "LONG",
+ "entry_time": "2025-09-13 09:00:00",
+ "exit_time": "2025-09-13 09:15:00",
+ "entry_price": 0.287769,
+ "exit_price": 0.291574,
+ "quantity": 16501.0,
+ "sl": 0.283964,
+ "tp": 0.291574,
+ "gross_pnl": 62.782388,
+ "entry_fee": 1.899389,
+ "exit_fee": 1.924502,
+ "net_pnl": 58.958497,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 71.97326146387331,
+ "macd_hist": 0.00012877809784102843,
+ "atr": 0.0019023813158768733,
+ "adx": 36.85858934916456
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-09-19 09:45:00",
+ "exit_time": "2025-09-19 11:15:00",
+ "entry_price": 0.273413,
+ "exit_price": 0.270525,
+ "quantity": 18260.2,
+ "sl": 0.2763,
+ "tp": 0.270525,
+ "gross_pnl": 52.721881,
+ "entry_fee": 1.997028,
+ "exit_fee": 1.975939,
+ "net_pnl": 48.748914,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 36.94887723496356,
+ "macd_hist": -2.413666691537049e-05,
+ "atr": 0.0014436282597533449,
+ "adx": 26.02356329086619
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-09-19 15:00:00",
+ "exit_time": "2025-09-20 15:15:00",
+ "entry_price": 0.264754,
+ "exit_price": 0.268271,
+ "quantity": 18617.2,
+ "sl": 0.268271,
+ "tp": 0.261236,
+ "gross_pnl": -65.492096,
+ "entry_fee": 1.971588,
+ "exit_fee": 1.997785,
+ "net_pnl": -69.461469,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 21.865956632847094,
+ "macd_hist": -0.0003218566897059249,
+ "atr": 0.0017589137003899537,
+ "adx": 41.170460149238615
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-09-22 06:00:00",
+ "exit_time": "2025-09-24 04:00:00",
+ "entry_price": 0.238686,
+ "exit_price": 0.232935,
+ "quantity": 20568.4,
+ "sl": 0.244438,
+ "tp": 0.232935,
+ "gross_pnl": 118.297732,
+ "entry_fee": 1.963757,
+ "exit_fee": 1.916438,
+ "net_pnl": 114.417538,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 16.34153124729428,
+ "macd_hist": -0.00028414939720653766,
+ "atr": 0.0028757154782821804,
+ "adx": 54.56661856743755
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "LONG",
+ "entry_time": "2025-09-24 13:30:00",
+ "exit_time": "2025-09-24 14:15:00",
+ "entry_price": 0.244504,
+ "exit_price": 0.247008,
+ "quantity": 19846.5,
+ "sl": 0.242001,
+ "tp": 0.247008,
+ "gross_pnl": 49.68547,
+ "entry_fee": 1.941023,
+ "exit_fee": 1.960897,
+ "net_pnl": 45.78355,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 71.2906943818606,
+ "macd_hist": 2.5862815475293172e-05,
+ "atr": 0.0012517438871727342,
+ "adx": 36.53568933530894
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-10-04 15:15:00",
+ "exit_time": "2025-10-04 20:15:00",
+ "entry_price": 0.247425,
+ "exit_price": 0.249899,
+ "quantity": 19183.7,
+ "sl": 0.249899,
+ "tp": 0.244952,
+ "gross_pnl": -47.453069,
+ "entry_fee": 1.898613,
+ "exit_fee": 1.917594,
+ "net_pnl": -51.269276,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 31.16773615602384,
+ "macd_hist": -8.582094300284889e-05,
+ "atr": 0.0012368070043067224,
+ "adx": 32.76110746771211
+ },
+ "fold": 2
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-12-05 16:00:00",
+ "exit_time": "2025-12-05 16:30:00",
+ "entry_price": 0.140976,
+ "exit_price": 0.1391,
+ "quantity": 35463.5,
+ "sl": 0.142852,
+ "tp": 0.1391,
+ "gross_pnl": 66.529579,
+ "entry_fee": 1.9998,
+ "exit_fee": 1.973188,
+ "net_pnl": 62.556592,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 27.006810663086608,
+ "macd_hist": -6.804193426309074e-05,
+ "atr": 0.0009380007520786951,
+ "adx": 27.496704414120043
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-12-10 19:00:00",
+ "exit_time": "2025-12-10 20:15:00",
+ "entry_price": 0.147965,
+ "exit_price": 0.150171,
+ "quantity": 33230.4,
+ "sl": 0.150171,
+ "tp": 0.14576,
+ "gross_pnl": -73.29433,
+ "entry_fee": 1.966777,
+ "exit_fee": 1.996095,
+ "net_pnl": -77.257202,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 69.08474596518961,
+ "macd_hist": 0.00024444618170829343,
+ "atr": 0.0011028204610718977,
+ "adx": 25.335388110542468
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-12-11 14:45:00",
+ "exit_time": "2025-12-11 18:30:00",
+ "entry_price": 0.137106,
+ "exit_price": 0.138298,
+ "quantity": 35783.7,
+ "sl": 0.138298,
+ "tp": 0.135914,
+ "gross_pnl": -42.657392,
+ "entry_fee": 1.962468,
+ "exit_fee": 1.979531,
+ "net_pnl": -46.599392,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 37.48045414695715,
+ "macd_hist": -1.3197028545546734e-06,
+ "atr": 0.0005960450211185996,
+ "adx": 27.54410485048102
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "LONG",
+ "entry_time": "2025-12-12 16:00:00",
+ "exit_time": "2025-12-13 05:00:00",
+ "entry_price": 0.135924,
+ "exit_price": 0.137754,
+ "quantity": 34315.8,
+ "sl": 0.134093,
+ "tp": 0.137754,
+ "gross_pnl": 62.814779,
+ "entry_fee": 1.865731,
+ "exit_fee": 1.890857,
+ "net_pnl": 59.058191,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 21.047744351941322,
+ "macd_hist": -0.0005811926109814281,
+ "atr": 0.0009152457279255846,
+ "adx": 33.592136040064716
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-12-14 17:00:00",
+ "exit_time": "2025-12-14 23:30:00",
+ "entry_price": 0.133937,
+ "exit_price": 0.132554,
+ "quantity": 36952.7,
+ "sl": 0.135319,
+ "tp": 0.132554,
+ "gross_pnl": 51.096135,
+ "entry_fee": 1.979728,
+ "exit_fee": 1.959289,
+ "net_pnl": 47.157118,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 29.236488118342884,
+ "macd_hist": -7.410908928065952e-05,
+ "atr": 0.0006913721507599538,
+ "adx": 57.10070430535465
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-12-17 14:45:00",
+ "exit_time": "2025-12-17 15:00:00",
+ "entry_price": 0.134427,
+ "exit_price": 0.136197,
+ "quantity": 36874.8,
+ "sl": 0.136197,
+ "tp": 0.132656,
+ "gross_pnl": -65.276219,
+ "entry_fee": 1.982781,
+ "exit_fee": 2.008891,
+ "net_pnl": -69.267891,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 78.91819645062768,
+ "macd_hist": 0.00037594271736105997,
+ "atr": 0.0008851060762978883,
+ "adx": 25.790767933896934
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-12-23 13:30:00",
+ "exit_time": "2025-12-23 14:45:00",
+ "entry_price": 0.129877,
+ "exit_price": 0.128859,
+ "quantity": 37104.1,
+ "sl": 0.130895,
+ "tp": 0.128859,
+ "gross_pnl": 37.77032,
+ "entry_fee": 1.927588,
+ "exit_fee": 1.91248,
+ "net_pnl": 33.930252,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 36.510776854433274,
+ "macd_hist": -2.074599389111751e-05,
+ "atr": 0.000508977708552182,
+ "adx": 25.915224810205064
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "LONG",
+ "entry_time": "2025-12-25 23:30:00",
+ "exit_time": "2025-12-26 02:00:00",
+ "entry_price": 0.123402,
+ "exit_price": 0.124694,
+ "quantity": 40355.5,
+ "sl": 0.122111,
+ "tp": 0.124694,
+ "gross_pnl": 52.129851,
+ "entry_fee": 1.991985,
+ "exit_fee": 2.012837,
+ "net_pnl": 48.125028,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 21.956332463701127,
+ "macd_hist": -0.000385472424204334,
+ "atr": 0.0006458828497821451,
+ "adx": 30.989184860729928
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "SHORT",
+ "entry_time": "2025-12-29 01:30:00",
+ "exit_time": "2025-12-29 02:00:00",
+ "entry_price": 0.125557,
+ "exit_price": 0.126655,
+ "quantity": 39399.4,
+ "sl": 0.126655,
+ "tp": 0.12446,
+ "gross_pnl": -43.228085,
+ "entry_fee": 1.978755,
+ "exit_fee": 1.996046,
+ "net_pnl": -47.202887,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 70.93949088379718,
+ "macd_hist": 0.00021125843649452418,
+ "atr": 0.0005485881139353086,
+ "adx": 29.808703571101656
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "LONG",
+ "entry_time": "2025-12-29 09:30:00",
+ "exit_time": "2025-12-29 12:00:00",
+ "entry_price": 0.124842,
+ "exit_price": 0.123687,
+ "quantity": 39767.9,
+ "sl": 0.123687,
+ "tp": 0.125998,
+ "gross_pnl": -45.954662,
+ "entry_fee": 1.985889,
+ "exit_fee": 1.967507,
+ "net_pnl": -49.908058,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 29.928315069400387,
+ "macd_hist": -0.0002477948827792159,
+ "atr": 0.0005777858720937434,
+ "adx": 25.21798449098985
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "LONG",
+ "entry_time": "2026-01-01 15:30:00",
+ "exit_time": "2026-01-01 15:45:00",
+ "entry_price": 0.123192,
+ "exit_price": 0.124236,
+ "quantity": 38194.1,
+ "sl": 0.122149,
+ "tp": 0.124236,
+ "gross_pnl": 39.843971,
+ "entry_fee": 1.882088,
+ "exit_fee": 1.898025,
+ "net_pnl": 36.063857,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 81.91382400844881,
+ "macd_hist": 9.922714809708637e-05,
+ "atr": 0.0005215985022999254,
+ "adx": 39.562088065326265
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "LONG",
+ "entry_time": "2026-01-02 03:30:00",
+ "exit_time": "2026-01-02 09:30:00",
+ "entry_price": 0.128343,
+ "exit_price": 0.1295,
+ "quantity": 37993.1,
+ "sl": 0.127186,
+ "tp": 0.1295,
+ "gross_pnl": 43.948281,
+ "entry_fee": 1.950457,
+ "exit_fee": 1.968036,
+ "net_pnl": 40.029788,
+ "close_reason": "TAKE_PROFIT",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 76.09091369250733,
+ "macd_hist": 4.9930842311590165e-05,
+ "atr": 0.0005783718724173577,
+ "adx": 54.52255800580547
+ },
+ "fold": 3
+ },
+ {
+ "symbol": "DOGEUSDT",
+ "side": "LONG",
+ "entry_time": "2026-01-02 22:00:00",
+ "exit_time": "2026-01-03 07:15:00",
+ "entry_price": 0.143004,
+ "exit_price": 0.140517,
+ "quantity": 34867.8,
+ "sl": 0.140517,
+ "tp": 0.145491,
+ "gross_pnl": -86.70983,
+ "entry_fee": 1.994498,
+ "exit_fee": 1.959814,
+ "net_pnl": -90.664143,
+ "close_reason": "STOP_LOSS",
+ "ml_proba": null,
+ "indicators": {
+ "rsi": 82.24373107208923,
+ "macd_hist": 3.759488327717141e-05,
+ "atr": 0.00124340839260955,
+ "adx": 44.70886575835927
+ },
+ "fold": 3
+ }
+ ]
},
"live_trades": {
"count": 0,