diff --git a/.gitignore b/.gitignore index 8b13789..a3b0198 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 35eb1dd..5925268 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 5eff84f..9b54d24 100644 --- a/backend_api_python/app/data_sources/base.py +++ b/backend_api_python/app/data_sources/base.py @@ -140,10 +140,10 @@ class BaseDataSource(ABC): 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 7b55a8d..871752e 100644 --- a/backend_api_python/app/data_sources/crypto.py +++ b/backend_api_python/app/data_sources/crypto.py @@ -84,7 +84,7 @@ class CryptoDataSource(BaseDataSource): else: symbol_pair = symbol - # logger.info(f"获取加密货币K线: {symbol_pair}, 周期: {ccxt_timeframe}, 条数: {limit}") + logger.info(f"获取加密货币K线: {symbol_pair}, 周期: {ccxt_timeframe}, 条数: {limit}") ohlcv = self._fetch_ohlcv(symbol_pair, ccxt_timeframe, limit, before_time, timeframe) @@ -136,7 +136,7 @@ class CryptoDataSource(BaseDataSource): since = int(start_time.timestamp() * 1000) end_ms = before_time * 1000 - # logger.info(f"历史数据请求: since={since//1000}, end={before_time}, 时间跨度={total_seconds/86400:.1f}天") + logger.info(f"历史数据请求: since={since//1000}, end={before_time}, 时间跨度={total_seconds/86400:.1f}天") # 分页获取数据,直到覆盖完整时间范围 all_ohlcv = [] @@ -160,20 +160,21 @@ class CryptoDataSource(BaseDataSource): 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 # 下次从最后一条的下一个时间点开始 timeframe_ms = TIMEFRAME_SECONDS.get(timeframe, 86400) * 1000 current_since = last_timestamp + timeframe_ms - # logger.info(f"分页获取中: 已获取 {len(all_ohlcv)} 条, 继续从 {datetime.fromtimestamp(current_since/1000)}") + logger.info(f"分页获取中: 已获取 {len(all_ohlcv)} 条, 继续从 {datetime.fromtimestamp(current_since/1000)}") ohlcv = all_ohlcv else: ohlcv = self.exchange.fetch_ohlcv(symbol_pair, ccxt_timeframe, limit=limit) - # logger.info(f"CCXT 返回 {len(ohlcv) if ohlcv else 0} 条数据") + logger.info(f"CCXT 返回 {len(ohlcv) if ohlcv else 0} 条数据") return ohlcv except Exception as e: @@ -200,7 +201,7 @@ class CryptoDataSource(BaseDataSource): since = int((datetime.now() - timedelta(seconds=total_seconds)).timestamp() * 1000) ohlcv = self.exchange.fetch_ohlcv(symbol_pair, ccxt_timeframe, since=since, limit=limit) - # logger.info(f"CCXT 备用方法返回 {len(ohlcv) if ohlcv else 0} 条数据") + logger.info(f"CCXT 备用方法返回 {len(ohlcv) if ohlcv else 0} 条数据") return ohlcv except Exception as e: logger.error(f"CCXT fallback method also failed: {str(e)}") diff --git a/backend_api_python/app/services/trading_executor.py b/backend_api_python/app/services/trading_executor.py index af6b0ea..71ffe24 100644 --- a/backend_api_python/app/services/trading_executor.py +++ b/backend_api_python/app/services/trading_executor.py @@ -596,7 +596,7 @@ class TradingExecutor: 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} kline number: {len(klines)}') + logger.info(rf'Strategy {strategy_id} history kline number: {len(klines)}') # 转换为DataFrame df = self._klines_to_dataframe(klines) @@ -1093,7 +1093,8 @@ class TradingExecutor: 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)}") diff --git a/backend_api_python/scripts/simulate_trading_executor.py b/backend_api_python/scripts/simulate_trading_executor.py index 211fa81..af07c53 100644 --- a/backend_api_python/scripts/simulate_trading_executor.py +++ b/backend_api_python/scripts/simulate_trading_executor.py @@ -274,7 +274,7 @@ def _insert_strategy( json.dumps(indicator_config, ensure_ascii=False), json.dumps(trading_config, ensure_ascii=False), json.dumps({}, ensure_ascii=False), - 300, + 3000, now, now, ),