diff --git a/.gitignore b/.gitignore index 8b1378917..a3b01980d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,434 @@ +/quantdinger_vue/.browserslistrc +/quantdinger_vue/.dockerignore +/quantdinger_vue/.editorconfig +/quantdinger_vue/.env +/quantdinger_vue/.env.development +/quantdinger_vue/.env.preview +/quantdinger_vue/tests/unit/.eslintrc.js +/quantdinger_vue/.eslintrc.js +/quantdinger_vue/.eslintrc.json +/quantdinger_vue/.gitattributes +/quantdinger_vue/.husky/.gitignore +/quantdinger_vue/.gitignore +/quantdinger_vue/.lintstagedrc.json +/quantdinger_vue/.prettierrc +/quantdinger_vue/.stylelintrc.js +/quantdinger_vue/.travis.yml +/quantdinger_vue/src/views/exception/403.vue +/quantdinger_vue/src/views/exception/404.vue +/quantdinger_vue/src/views/404.vue +/quantdinger_vue/src/views/exception/500.vue +/quantdinger_vue/src/core/directives/action.js +/quantdinger_vue/src/api/ai-trading.js +/quantdinger_vue/src/views/trading-assistant/components/AIDecisionRecords.vue +/quantdinger_vue/src/config/aiModels.js +/quantdinger_vue/src/store/modules/app.js +/quantdinger_vue/src/App.vue +/quantdinger_vue/src/store/app-mixin.js +/quantdinger_vue/src/locales/lang/ar-SA.js +/quantdinger_vue/src/mock/services/article.js +/quantdinger_vue/src/components/ArticleListContent/ArticleListContent.vue +/quantdinger_vue/src/store/modules/async-router.js +/quantdinger_vue/src/api/auth.js +/quantdinger_vue/src/mock/services/auth.js +/quantdinger_vue/public/avatar2.jpg +/quantdinger_vue/src/components/GlobalHeader/AvatarDropdown.vue +/quantdinger_vue/src/utils/axios.js +/quantdinger_vue/babel.config.js +/quantdinger_vue/src/assets/background.svg +/quantdinger_vue/src/views/indicator-analysis/components/BacktestHistoryDrawer.vue +/quantdinger_vue/src/views/indicator-analysis/components/BacktestModal.vue +/quantdinger_vue/src/views/indicator-analysis/components/BacktestRunViewer.vue +/quantdinger_vue/src/components/Charts/Bar.vue +/quantdinger_vue/src/layouts/BasicLayout.less +/quantdinger_vue/src/layouts/BasicLayout.vue +/quantdinger_vue/src/layouts/BlankLayout.vue +/quantdinger_vue/src/core/bootstrap.js +/quantdinger_vue/src/assets/icons/bx-analyse.svg +/quantdinger_vue/deploy/caddy.conf +/quantdinger_vue/src/components/Other/CarbonAds.vue +/quantdinger_vue/src/components/Charts/chart.less +/quantdinger_vue/src/components/Charts/ChartCard.vue +/quantdinger_vue/src/utils/codeDecrypt.js +/quantdinger_vue/commitlint.config.js +/quantdinger_vue/src/api/credentials.js +/quantdinger_vue/src/api/dashboard.js +/quantdinger_vue/src/locales/lang/de-DE.js +/quantdinger_vue/src/config/defaultSettings.js +/quantdinger_vue/src/store/device-mixin.js +/quantdinger_vue/src/components/Dialog.js +/quantdinger_vue/Dockerfile +/quantdinger_vue/src/utils/domUtil.js +/quantdinger_vue/src/components/Ellipsis/Ellipsis.vue +/quantdinger_vue/src/locales/lang/en-US.js +/quantdinger_vue/src/components/MultiTab/events.js +/quantdinger_vue/scripts/fetch_pyodide.ps1 +/quantdinger_vue/src/utils/filter.js +/quantdinger_vue/src/components/FooterToolbar/FooterToolBar.vue +/quantdinger_vue/src/locales/lang/fr-FR.js +/quantdinger_vue/src/router/generator-routers.js +/quantdinger_vue/src/store/getters.js +/quantdinger_vue/src/global.less +/quantdinger_vue/src/components/Search/GlobalSearch.jsx +/quantdinger_vue/src/store/i18n-mixin.js +/quantdinger_vue/src/components/IconSelector/icons.js +/quantdinger_vue/src/core/icons.js +/quantdinger_vue/src/components/IconSelector/IconSelector.vue +/quantdinger_vue/public/index.html +/quantdinger_vue/src/components/ArticleListContent/index.js +/quantdinger_vue/src/components/AvatarList/index.js +/quantdinger_vue/src/components/Ellipsis/index.js +/quantdinger_vue/src/components/FooterToolbar/index.js +/quantdinger_vue/src/components/IconSelector/index.js +/quantdinger_vue/src/components/MultiTab/index.js +/quantdinger_vue/src/components/NoticeIcon/index.js +/quantdinger_vue/src/components/NumberInfo/index.js +/quantdinger_vue/src/components/SettingDrawer/index.js +/quantdinger_vue/src/components/StandardFormRow/index.js +/quantdinger_vue/src/components/Table/index.js +/quantdinger_vue/src/components/Trend/index.js +/quantdinger_vue/src/components/index.js +/quantdinger_vue/src/layouts/index.js +/quantdinger_vue/src/locales/index.js +/quantdinger_vue/src/mock/index.js +/quantdinger_vue/src/router/index.js +/quantdinger_vue/src/store/index.js +/quantdinger_vue/src/components/PageLoading/index.jsx +/quantdinger_vue/src/components/SelectLang/index.jsx +/quantdinger_vue/src/components/TagSelect/index.jsx +/quantdinger_vue/src/components/TextArea/index.jsx +/quantdinger_vue/src/components/AvatarList/index.less +/quantdinger_vue/src/components/FooterToolbar/index.less +/quantdinger_vue/src/components/MultiTab/index.less +/quantdinger_vue/src/components/NumberInfo/index.less +/quantdinger_vue/src/components/Search/index.less +/quantdinger_vue/src/components/SelectLang/index.less +/quantdinger_vue/src/components/Trend/index.less +/quantdinger_vue/src/components/index.less +/quantdinger_vue/src/components/AvatarList/index.md +/quantdinger_vue/src/components/Ellipsis/index.md +/quantdinger_vue/src/components/FooterToolbar/index.md +/quantdinger_vue/src/components/NumberInfo/index.md +/quantdinger_vue/src/components/Trend/index.md +/quantdinger_vue/src/components/GlobalFooter/index.vue +/quantdinger_vue/src/components/Turnstile/index.vue +/quantdinger_vue/src/views/ai-analysis/components/index.vue +/quantdinger_vue/src/views/ai-analysis/index.vue +/quantdinger_vue/src/views/dashboard/index.vue +/quantdinger_vue/src/views/indicator-analysis/index.vue +/quantdinger_vue/src/views/indicator-community/index.vue +/quantdinger_vue/src/views/portfolio/index.vue +/quantdinger_vue/src/views/profile/index.vue +/quantdinger_vue/src/views/settings/index.vue +/quantdinger_vue/src/views/trading-assistant/index.vue +/quantdinger_vue/src/views/user-manage/index.vue +/quantdinger_vue/src/views/indicator-analysis/components/IndicatorEditor.vue +/quantdinger_vue/src/components/AvatarList/Item.jsx +/quantdinger_vue/src/locales/lang/ja-JP.js +/quantdinger_vue/jest.config.js +/quantdinger_vue/jsconfig.json +/quantdinger_vue/src/views/indicator-analysis/components/KlineChart.vue +/quantdinger_vue/src/locales/lang/ko-KR.js +/quantdinger_vue/src/core/lazy_use.js +/quantdinger_vue/src/components/Charts/Liquid.vue +/quantdinger_vue/src/components/AvatarList/List.jsx +/quantdinger_vue/src/api/login.js +/quantdinger_vue/src/views/user/Login.vue +/quantdinger_vue/public/logo.png +/quantdinger_vue/src/assets/logo.png +/quantdinger_vue/src/assets/logo.svg +/quantdinger_vue/src/main.js +/quantdinger_vue/src/api/manage.js +/quantdinger_vue/src/mock/services/manage.js +/quantdinger_vue/src/api/market.js +/quantdinger_vue/src/components/Charts/MiniArea.vue +/quantdinger_vue/src/components/Charts/MiniBar.vue +/quantdinger_vue/src/components/Charts/MiniProgress.vue +/quantdinger_vue/src/components/Charts/MiniSmoothArea.vue +/quantdinger_vue/src/components/MultiTab/MultiTab.vue +/quantdinger_vue/src/store/mutation-types.js +/quantdinger_vue/deploy/nginx.conf +/quantdinger_vue/deploy/nginx-docker.conf +/quantdinger_vue/src/components/NoticeIcon/NoticeIcon.vue +/quantdinger_vue/src/components/NProgress/nprogress.less +/quantdinger_vue/src/components/NumberInfo/NumberInfo.vue +/quantdinger_vue/src/mock/services/other.js +/quantdinger_vue/package.json +/quantdinger_vue/src/layouts/PageView.vue +/quantdinger_vue/src/core/permission/permission.js +/quantdinger_vue/src/permission.js +/quantdinger_vue/config/plugin.config.js +/quantdinger_vue/pnpm-lock.yaml +/quantdinger_vue/src/api/portfolio.js +/quantdinger_vue/src/views/trading-assistant/components/PositionRecords.vue +/quantdinger_vue/postcss.config.js +/quantdinger_vue/src/components/Editor/QuillEditor.vue +/quantdinger_vue/src/components/Charts/Radar.vue +/quantdinger_vue/src/components/Charts/RankList.vue +/quantdinger_vue/src/components/IconSelector/README.md +/quantdinger_vue/src/components/Table/README.md +/quantdinger_vue/src/router/README.md +/quantdinger_vue/README.md +/quantdinger_vue/src/views/user/RegisterResult.vue +/quantdinger_vue/src/utils/request.js +/quantdinger_vue/src/components/GlobalHeader/RightContent.vue +/quantdinger_vue/src/utils/routeConvert.js +/quantdinger_vue/src/config/router.config.js +/quantdinger_vue/src/layouts/RouteView.vue +/quantdinger_vue/src/utils/screenLog.js +/quantdinger_vue/src/components/SettingDrawer/settingConfig.js +/quantdinger_vue/src/components/SettingDrawer/SettingDrawer.vue +/quantdinger_vue/src/components/SettingDrawer/SettingItem.vue +/quantdinger_vue/src/api/settings.js +/quantdinger_vue/public/slogo.png +/quantdinger_vue/src/assets/slogo.png +/quantdinger_vue/src/components/Charts/smooth.area.less +/quantdinger_vue/src/components/StandardFormRow/StandardFormRow.vue +/quantdinger_vue/src/store/modules/static-router.js +/quantdinger_vue/src/api/strategy.js +/quantdinger_vue/src/components/TextArea/style.less +/quantdinger_vue/src/mock/services/tagCloud.js +/quantdinger_vue/src/components/Charts/TagCloud.vue +/quantdinger_vue/src/components/TagSelect/TagSelectOption.jsx +/quantdinger_vue/src/locales/lang/th-TH.js +/quantdinger_vue/src/components/SettingDrawer/themeColor.js +/quantdinger_vue/config/themePluginConfig.js +/quantdinger_vue/src/views/trading-assistant/components/TradingRecords.vue +/quantdinger_vue/src/components/Charts/TransferBar.vue +/quantdinger_vue/src/components/Tree/Tree.jsx +/quantdinger_vue/src/components/Charts/Trend.vue +/quantdinger_vue/src/components/Trend/Trend.vue +/quantdinger_vue/src/components/tools/TwoStepCaptcha.vue +/quantdinger_vue/src/core/use.js +/quantdinger_vue/src/api/user.js +/quantdinger_vue/src/mock/services/user.js +/quantdinger_vue/src/store/modules/user.js +/quantdinger_vue/src/layouts/UserLayout.vue +/quantdinger_vue/src/components/_util/util.js +/quantdinger_vue/src/mock/util.js +/quantdinger_vue/src/utils/util.js +/quantdinger_vue/src/utils/utils.less +/quantdinger_vue/src/locales/lang/vi-VN.js +/quantdinger_vue/vue.config.js +/quantdinger_vue/src/components/Editor/WangEditor.vue +/quantdinger_vue/yarn.lock +/quantdinger_vue/src/locales/lang/zh-CN.js +/quantdinger_vue/src/locales/lang/zh-TW.js +/quantdinger_vue/.browserslistrc +/quantdinger_vue/.dockerignore +/quantdinger_vue/.editorconfig +/quantdinger_vue/.env +/quantdinger_vue/.env.development +/quantdinger_vue/.env.preview +/quantdinger_vue/tests/unit/.eslintrc.js +/quantdinger_vue/.eslintrc.js +/quantdinger_vue/.eslintrc.json +/quantdinger_vue/.gitattributes +/quantdinger_vue/.husky/.gitignore +/quantdinger_vue/.gitignore +/quantdinger_vue/.lintstagedrc.json +/quantdinger_vue/.prettierrc +/quantdinger_vue/.stylelintrc.js +/quantdinger_vue/.travis.yml +/quantdinger_vue/src/views/exception/403.vue +/quantdinger_vue/src/views/exception/404.vue +/quantdinger_vue/src/views/404.vue +/quantdinger_vue/src/views/exception/500.vue +/quantdinger_vue/src/core/directives/action.js +/quantdinger_vue/src/api/ai-trading.js +/quantdinger_vue/src/views/trading-assistant/components/AIDecisionRecords.vue +/quantdinger_vue/src/config/aiModels.js +/quantdinger_vue/src/store/modules/app.js +/quantdinger_vue/src/App.vue +/quantdinger_vue/src/store/app-mixin.js +/quantdinger_vue/src/locales/lang/ar-SA.js +/quantdinger_vue/src/mock/services/article.js +/quantdinger_vue/src/components/ArticleListContent/ArticleListContent.vue +/quantdinger_vue/src/store/modules/async-router.js +/quantdinger_vue/src/api/auth.js +/quantdinger_vue/src/mock/services/auth.js +/quantdinger_vue/public/avatar2.jpg +/quantdinger_vue/src/components/GlobalHeader/AvatarDropdown.vue +/quantdinger_vue/src/utils/axios.js +/quantdinger_vue/babel.config.js +/quantdinger_vue/src/assets/background.svg +/quantdinger_vue/src/views/indicator-analysis/components/BacktestHistoryDrawer.vue +/quantdinger_vue/src/views/indicator-analysis/components/BacktestModal.vue +/quantdinger_vue/src/views/indicator-analysis/components/BacktestRunViewer.vue +/quantdinger_vue/src/components/Charts/Bar.vue +/quantdinger_vue/src/layouts/BasicLayout.less +/quantdinger_vue/src/layouts/BasicLayout.vue +/quantdinger_vue/src/layouts/BlankLayout.vue +/quantdinger_vue/src/core/bootstrap.js +/quantdinger_vue/src/assets/icons/bx-analyse.svg +/quantdinger_vue/deploy/caddy.conf +/quantdinger_vue/src/components/Other/CarbonAds.vue +/quantdinger_vue/src/components/Charts/chart.less +/quantdinger_vue/src/components/Charts/ChartCard.vue +/quantdinger_vue/src/utils/codeDecrypt.js +/quantdinger_vue/commitlint.config.js +/quantdinger_vue/src/api/credentials.js +/quantdinger_vue/src/api/dashboard.js +/quantdinger_vue/src/locales/lang/de-DE.js +/quantdinger_vue/src/config/defaultSettings.js +/quantdinger_vue/src/store/device-mixin.js +/quantdinger_vue/src/components/Dialog.js +/quantdinger_vue/Dockerfile +/quantdinger_vue/src/utils/domUtil.js +/quantdinger_vue/src/components/Ellipsis/Ellipsis.vue +/quantdinger_vue/src/locales/lang/en-US.js +/quantdinger_vue/src/components/MultiTab/events.js +/quantdinger_vue/scripts/fetch_pyodide.ps1 +/quantdinger_vue/src/utils/filter.js +/quantdinger_vue/src/components/FooterToolbar/FooterToolBar.vue +/quantdinger_vue/src/locales/lang/fr-FR.js +/quantdinger_vue/src/router/generator-routers.js +/quantdinger_vue/src/store/getters.js +/quantdinger_vue/src/global.less +/quantdinger_vue/src/components/Search/GlobalSearch.jsx +/quantdinger_vue/src/store/i18n-mixin.js +/quantdinger_vue/src/components/IconSelector/icons.js +/quantdinger_vue/src/core/icons.js +/quantdinger_vue/src/components/IconSelector/IconSelector.vue +/quantdinger_vue/public/index.html +/quantdinger_vue/src/components/ArticleListContent/index.js +/quantdinger_vue/src/components/AvatarList/index.js +/quantdinger_vue/src/components/Ellipsis/index.js +/quantdinger_vue/src/components/FooterToolbar/index.js +/quantdinger_vue/src/components/IconSelector/index.js +/quantdinger_vue/src/components/MultiTab/index.js +/quantdinger_vue/src/components/NoticeIcon/index.js +/quantdinger_vue/src/components/NumberInfo/index.js +/quantdinger_vue/src/components/SettingDrawer/index.js +/quantdinger_vue/src/components/StandardFormRow/index.js +/quantdinger_vue/src/components/Table/index.js +/quantdinger_vue/src/components/Trend/index.js +/quantdinger_vue/src/components/index.js +/quantdinger_vue/src/layouts/index.js +/quantdinger_vue/src/locales/index.js +/quantdinger_vue/src/mock/index.js +/quantdinger_vue/src/router/index.js +/quantdinger_vue/src/store/index.js +/quantdinger_vue/src/components/PageLoading/index.jsx +/quantdinger_vue/src/components/SelectLang/index.jsx +/quantdinger_vue/src/components/TagSelect/index.jsx +/quantdinger_vue/src/components/TextArea/index.jsx +/quantdinger_vue/src/components/AvatarList/index.less +/quantdinger_vue/src/components/FooterToolbar/index.less +/quantdinger_vue/src/components/MultiTab/index.less +/quantdinger_vue/src/components/NumberInfo/index.less +/quantdinger_vue/src/components/Search/index.less +/quantdinger_vue/src/components/SelectLang/index.less +/quantdinger_vue/src/components/Trend/index.less +/quantdinger_vue/src/components/index.less +/quantdinger_vue/src/components/AvatarList/index.md +/quantdinger_vue/src/components/Ellipsis/index.md +/quantdinger_vue/src/components/FooterToolbar/index.md +/quantdinger_vue/src/components/NumberInfo/index.md +/quantdinger_vue/src/components/Trend/index.md +/quantdinger_vue/src/components/GlobalFooter/index.vue +/quantdinger_vue/src/components/Turnstile/index.vue +/quantdinger_vue/src/views/ai-analysis/components/index.vue +/quantdinger_vue/src/views/ai-analysis/index.vue +/quantdinger_vue/src/views/dashboard/index.vue +/quantdinger_vue/src/views/indicator-analysis/index.vue +/quantdinger_vue/src/views/indicator-community/index.vue +/quantdinger_vue/src/views/portfolio/index.vue +/quantdinger_vue/src/views/profile/index.vue +/quantdinger_vue/src/views/settings/index.vue +/quantdinger_vue/src/views/trading-assistant/index.vue +/quantdinger_vue/src/views/user-manage/index.vue +/quantdinger_vue/src/views/indicator-analysis/components/IndicatorEditor.vue +/quantdinger_vue/src/components/AvatarList/Item.jsx +/quantdinger_vue/src/locales/lang/ja-JP.js +/quantdinger_vue/jest.config.js +/quantdinger_vue/jsconfig.json +/quantdinger_vue/src/views/indicator-analysis/components/KlineChart.vue +/quantdinger_vue/src/locales/lang/ko-KR.js +/quantdinger_vue/src/core/lazy_use.js +/quantdinger_vue/src/components/Charts/Liquid.vue +/quantdinger_vue/src/components/AvatarList/List.jsx +/quantdinger_vue/src/api/login.js +/quantdinger_vue/src/views/user/Login.vue +/quantdinger_vue/public/logo.png +/quantdinger_vue/src/assets/logo.png +/quantdinger_vue/src/assets/logo.svg +/quantdinger_vue/src/main.js +/quantdinger_vue/src/api/manage.js +/quantdinger_vue/src/mock/services/manage.js +/quantdinger_vue/src/api/market.js +/quantdinger_vue/src/components/Charts/MiniArea.vue +/quantdinger_vue/src/components/Charts/MiniBar.vue +/quantdinger_vue/src/components/Charts/MiniProgress.vue +/quantdinger_vue/src/components/Charts/MiniSmoothArea.vue +/quantdinger_vue/src/components/MultiTab/MultiTab.vue +/quantdinger_vue/src/store/mutation-types.js +/quantdinger_vue/deploy/nginx.conf +/quantdinger_vue/deploy/nginx-docker.conf +/quantdinger_vue/src/components/NoticeIcon/NoticeIcon.vue +/quantdinger_vue/src/components/NProgress/nprogress.less +/quantdinger_vue/src/components/NumberInfo/NumberInfo.vue +/quantdinger_vue/src/mock/services/other.js +/quantdinger_vue/package.json +/quantdinger_vue/src/layouts/PageView.vue +/quantdinger_vue/src/core/permission/permission.js +/quantdinger_vue/src/permission.js +/quantdinger_vue/config/plugin.config.js +/quantdinger_vue/pnpm-lock.yaml +/quantdinger_vue/src/api/portfolio.js +/quantdinger_vue/src/views/trading-assistant/components/PositionRecords.vue +/quantdinger_vue/postcss.config.js +/quantdinger_vue/src/components/Editor/QuillEditor.vue +/quantdinger_vue/src/components/Charts/Radar.vue +/quantdinger_vue/src/components/Charts/RankList.vue +/quantdinger_vue/src/components/IconSelector/README.md +/quantdinger_vue/src/components/Table/README.md +/quantdinger_vue/src/router/README.md +/quantdinger_vue/README.md +/quantdinger_vue/src/views/user/RegisterResult.vue +/quantdinger_vue/src/utils/request.js +/quantdinger_vue/src/components/GlobalHeader/RightContent.vue +/quantdinger_vue/src/utils/routeConvert.js +/quantdinger_vue/src/config/router.config.js +/quantdinger_vue/src/layouts/RouteView.vue +/quantdinger_vue/src/utils/screenLog.js +/quantdinger_vue/src/components/SettingDrawer/settingConfig.js +/quantdinger_vue/src/components/SettingDrawer/SettingDrawer.vue +/quantdinger_vue/src/components/SettingDrawer/SettingItem.vue +/quantdinger_vue/src/api/settings.js +/quantdinger_vue/public/slogo.png +/quantdinger_vue/src/assets/slogo.png +/quantdinger_vue/src/components/Charts/smooth.area.less +/quantdinger_vue/src/components/StandardFormRow/StandardFormRow.vue +/quantdinger_vue/src/store/modules/static-router.js +/quantdinger_vue/src/api/strategy.js +/quantdinger_vue/src/components/TextArea/style.less +/quantdinger_vue/src/mock/services/tagCloud.js +/quantdinger_vue/src/components/Charts/TagCloud.vue +/quantdinger_vue/src/components/TagSelect/TagSelectOption.jsx +/quantdinger_vue/src/locales/lang/th-TH.js +/quantdinger_vue/src/components/SettingDrawer/themeColor.js +/quantdinger_vue/config/themePluginConfig.js +/quantdinger_vue/src/views/trading-assistant/components/TradingRecords.vue +/quantdinger_vue/src/components/Charts/TransferBar.vue +/quantdinger_vue/src/components/Tree/Tree.jsx +/quantdinger_vue/src/components/Charts/Trend.vue +/quantdinger_vue/src/components/Trend/Trend.vue +/quantdinger_vue/src/components/tools/TwoStepCaptcha.vue +/quantdinger_vue/src/core/use.js +/quantdinger_vue/src/api/user.js +/quantdinger_vue/src/mock/services/user.js +/quantdinger_vue/src/store/modules/user.js +/quantdinger_vue/src/layouts/UserLayout.vue +/quantdinger_vue/src/components/_util/util.js +/quantdinger_vue/src/mock/util.js +/quantdinger_vue/src/utils/util.js +/quantdinger_vue/src/utils/utils.less +/quantdinger_vue/src/locales/lang/vi-VN.js +/quantdinger_vue/vue.config.js +/quantdinger_vue/src/components/Editor/WangEditor.vue +/quantdinger_vue/yarn.lock +/quantdinger_vue/src/locales/lang/zh-CN.js +/quantdinger_vue/src/locales/lang/zh-TW.js +/quantdinger_vue/.browserslistrc diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 35eb1ddfb..5925268ad 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,5 +2,6 @@ + \ No newline at end of file diff --git a/backend_api_python/app/data_sources/base.py b/backend_api_python/app/data_sources/base.py index 5eff84f81..9b54d242f 100644 --- a/backend_api_python/app/data_sources/base.py +++ b/backend_api_python/app/data_sources/base.py @@ -140,10 +140,10 @@ def log_result( if klines: latest_time = datetime.fromtimestamp(klines[-1]['time']) time_diff = (datetime.now() - latest_time).total_seconds() - # logger.info( - # f"{self.name}: {symbol} 获取 {len(klines)} 条数据, " - # f"最新时间: {latest_time}, 延迟: {time_diff:.0f}秒" - # ) + logger.info( + f"{self.name}: {symbol} 获取 {len(klines)} 条数据, " + f"最新时间: {latest_time}, 延迟: {time_diff:.0f}秒" + ) # 检查数据是否过旧 max_diff = TIMEFRAME_SECONDS.get(timeframe, 3600) * 2 diff --git a/backend_api_python/app/data_sources/crypto.py b/backend_api_python/app/data_sources/crypto.py index 7b55a8da5..039bbfa9d 100644 --- a/backend_api_python/app/data_sources/crypto.py +++ b/backend_api_python/app/data_sources/crypto.py @@ -160,7 +160,8 @@ def _fetch_ohlcv( last_timestamp = batch[-1][0] # 如果最后一条数据时间超过了结束时间,或者返回数据少于请求量,说明已经获取完毕 - if last_timestamp >= end_ms or len(batch) < batch_limit: + # if last_timestamp >= end_ms or len(batch) < batch_limit: + if last_timestamp >= end_ms: break # 下次从最后一条的下一个时间点开始 diff --git a/backend_api_python/app/routes/strategy.py b/backend_api_python/app/routes/strategy.py index cb614e3fe..083ee2b3f 100644 --- a/backend_api_python/app/routes/strategy.py +++ b/backend_api_python/app/routes/strategy.py @@ -471,7 +471,7 @@ def get_equity_curve(): equity += float(r.get('profit') or 0) except Exception: pass - ts = int(r.get('created_at') or time.time()) + ts = int(r.get('created_at').timestamp() or time.time()) curve.append({'time': ts, 'equity': equity}) return jsonify({'code': 1, 'msg': 'success', 'data': curve}) diff --git a/backend_api_python/app/services/trading_executor.py b/backend_api_python/app/services/trading_executor.py index a663c397d..644ffd977 100644 --- a/backend_api_python/app/services/trading_executor.py +++ b/backend_api_python/app/services/trading_executor.py @@ -596,6 +596,7 @@ def _run_strategy_loop(self, strategy_id: int): if not klines or len(klines) < 2: logger.error(f"Strategy {strategy_id} failed to fetch K-lines") return + logger.info(rf'Strategy {strategy_id} history kline number: {len(klines)}') # 转换为DataFrame df = self._klines_to_dataframe(klines) @@ -708,7 +709,7 @@ def _run_strategy_loop(self, strategy_id: int): # 2. 检查是否需要更新K线(每个K线周期更新一次,从API拉取) # ============================================ if current_time - last_kline_update_time >= kline_update_interval: - klines = self._fetch_latest_kline(symbol, timeframe, limit=500) + klines = self._fetch_latest_kline(symbol, timeframe, limit=history_limit) if klines and len(klines) >= 2: df = self._klines_to_dataframe(klines) if len(df) > 0: @@ -1092,7 +1093,8 @@ def _fetch_latest_kline(self, symbol: str, timeframe: str, limit: int = 500) -> market='Crypto', symbol=symbol, timeframe=timeframe, - limit=limit + limit=limit, + before_time=int(time.time()) ) except Exception as e: logger.error(f"Failed to fetch K-lines: {str(e)}")