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)

+
+ +
+ +
+ + + + + + + + 2026-03-07T03:15:44.006410 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + 2026-03-07T03:15:44.040476 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + 2026-03-07T03:15:44.079960 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + 2026-03-07T03:15:44.129086 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + 2026-03-07T03:15:44.166439 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + 2026-03-07T03:15:44.206073 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + 2026-03-07T03:15:44.241204 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + 2026-03-07T03:15:44.277135 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + 2026-03-07T03:15:44.319194 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + 2026-03-07T03:15:44.363378 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + 2026-03-07T03:15:44.428676 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + 2026-03-07T03:15:44.487058 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + 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,