Files
DinQuant/frontend/dist/js/37.4b1f5240.js
T
Dinger 8563e4ea53 v3.0.1
Signed-off-by: Dinger <quantdinger@gmail.com>
2026-04-07 22:47:07 +08:00

1 line
225 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[37],{40037:function(t,e,a){a.r(e),a.d(e,{default:function(){return Lt}});a(74423);var s=function(){var t,e=this,a=e._self._c;return a("div",{staticClass:"trading-assistant",class:{"theme-dark":e.isDarkTheme}},[e.showAssistantGuide?a("div",{staticClass:"assistant-guide-bar"},[a("div",{staticClass:"assistant-guide-copy"},[a("div",{staticClass:"assistant-guide-eyebrow"},[e._v(e._s(e.$t("trading-assistant.guide.eyebrow")))]),a("div",{staticClass:"assistant-guide-title"},[e._v(e._s(e.$t("trading-assistant.guide.title")))]),a("div",{staticClass:"assistant-guide-desc"},[e._v(e._s(e.$t("trading-assistant.guide.desc")))])]),a("div",{staticClass:"assistant-guide-steps"},[a("div",{staticClass:"assistant-step-card"},[a("div",{staticClass:"assistant-step-index"},[e._v("1")]),a("div",{staticClass:"assistant-step-body"},[a("div",{staticClass:"assistant-step-title"},[e._v(e._s(e.$t("trading-assistant.guide.step1Title")))]),a("div",{staticClass:"assistant-step-desc"},[e._v(e._s(e.$t("trading-assistant.guide.step1Desc")))])])]),a("div",{staticClass:"assistant-step-card"},[a("div",{staticClass:"assistant-step-index"},[e._v("2")]),a("div",{staticClass:"assistant-step-body"},[a("div",{staticClass:"assistant-step-title"},[e._v(e._s(e.$t("trading-assistant.guide.step2Title")))]),a("div",{staticClass:"assistant-step-desc"},[e._v(e._s(e.$t("trading-assistant.guide.step2Desc")))])])]),a("div",{staticClass:"assistant-step-card"},[a("div",{staticClass:"assistant-step-index"},[e._v("3")]),a("div",{staticClass:"assistant-step-body"},[a("div",{staticClass:"assistant-step-title"},[e._v(e._s(e.$t("trading-assistant.guide.step3Title")))]),a("div",{staticClass:"assistant-step-desc"},[e._v(e._s(e.$t("trading-assistant.guide.step3Desc")))])])])]),a("div",{staticClass:"assistant-guide-actions"},[a("a-button",{on:{click:e.goToStrategyTab}},[a("a-icon",{attrs:{type:"appstore"}}),e._v(" "+e._s(e.$t("trading-assistant.guide.secondary"))+" ")],1),a("a-button",{attrs:{type:"primary"},on:{click:e.openCreateStrategyFromGuide}},[a("a-icon",{attrs:{type:"plus"}}),e._v(" "+e._s(e.$t("trading-assistant.guide.primary"))+" ")],1),a("a-button",{staticClass:"assistant-guide-close",on:{click:e.dismissAssistantGuide}},[a("a-icon",{attrs:{type:"close"}})],1)],1)]):e._e(),a("a-tabs",{staticClass:"top-level-tabs",attrs:{animated:!1},model:{value:e.topTab,callback:function(t){e.topTab=t},expression:"topTab"}},[a("a-tab-pane",{key:"overview",attrs:{tab:e.$t("trading-assistant.tabs.overview")}},["overview"===e.topTab?a("dashboard-overview",{attrs:{"hide-setup-guide":!0}}):e._e()],1),a("a-tab-pane",{key:"strategy",attrs:{tab:e.$t("trading-assistant.tabs.strategyManage")}},[a("a-row",{staticClass:"strategy-layout",attrs:{gutter:24}},[a("a-col",{staticClass:"strategy-list-col",attrs:{xs:24,sm:24,md:10,lg:8,xl:8}},[a("a-card",{staticClass:"strategy-list-card",attrs:{bordered:!1}},[a("div",{staticClass:"card-title",attrs:{slot:"title"},slot:"title"},[a("span",[e._v(e._s(e.$t("trading-assistant.strategyList")))]),a("a-button",{attrs:{type:"primary",size:"small"},on:{click:e.handleCreateStrategy}},[a("a-icon",{attrs:{type:"plus"}}),e._v(" "+e._s(e.$t("trading-assistant.createStrategy"))+" ")],1)],1),a("div",{staticClass:"group-mode-switch"},[a("span",{staticClass:"group-mode-label"},[e._v(e._s(e.$t("trading-assistant.groupBy"))+":")]),a("a-radio-group",{attrs:{size:"small","button-style":"solid"},model:{value:e.groupByMode,callback:function(t){e.groupByMode=t},expression:"groupByMode"}},[a("a-radio-button",{attrs:{value:"strategy"}},[a("a-icon",{attrs:{type:"folder"}}),e._v(" "+e._s(e.$t("trading-assistant.groupByStrategy"))+" ")],1),a("a-radio-button",{attrs:{value:"symbol"}},[a("a-icon",{attrs:{type:"stock"}}),e._v(" "+e._s(e.$t("trading-assistant.groupBySymbol"))+" ")],1)],1)],1),a("a-spin",{attrs:{spinning:e.loading}},[e.loading||0!==e.strategies.length?a("div",{staticClass:"strategy-grouped-list"},[e._l(e.groupedStrategies.groups,function(t){return a("div",{key:t.id,staticClass:"strategy-group"},[a("div",{staticClass:"strategy-group-header",on:{click:function(a){return e.toggleGroup(t.id)}}},[a("div",{staticClass:"group-header-left"},[a("a-icon",{staticClass:"collapse-icon",attrs:{type:e.collapsedGroups[t.id]?"right":"down"}}),a("a-icon",{staticClass:"group-icon",attrs:{type:"symbol"===e.groupByMode?"stock":"folder"}}),a("span",{staticClass:"group-name"},[e._v(e._s(t.baseName))]),a("a-tag",{attrs:{size:"small",color:"blue"}},[e._v(e._s(t.strategies.length)+" "+e._s("symbol"===e.groupByMode?e.$t("trading-assistant.strategyCount"):e.$t("trading-assistant.symbolCount")))])],1),a("div",{staticClass:"group-header-right",on:{click:function(t){t.stopPropagation()}}},[t.runningCount>0?a("span",{staticClass:"group-status running"},[e._v(" "+e._s(t.runningCount)+" "+e._s(e.$t("trading-assistant.status.running"))+" ")]):e._e(),t.stoppedCount>0?a("span",{staticClass:"group-status stopped"},[e._v(" "+e._s(t.stoppedCount)+" "+e._s(e.$t("trading-assistant.status.stopped"))+" ")]):e._e(),a("a-dropdown",{attrs:{getPopupContainer:e.getDropdownContainer,trigger:["click"]}},[a("a-menu",{attrs:{slot:"overlay"},on:{click:function(a){var s=a.key;return e.handleGroupMenuClick(s,t)}},slot:"overlay"},[a("a-menu-item",{key:"startAll"},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startAll"))+" ")],1),a("a-menu-item",{key:"stopAll"},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopAll"))+" ")],1),a("a-menu-divider"),a("a-menu-item",{key:"deleteAll",staticClass:"danger-item"},[a("a-icon",{attrs:{type:"delete"}}),e._v(" "+e._s(e.$t("trading-assistant.deleteAll"))+" ")],1)],1),a("a-button",{attrs:{type:"link",icon:"more",size:"small"}})],1)],1)]),a("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsedGroups[t.id],expression:"!collapsedGroups[group.id]"}],staticClass:"strategy-group-content"},e._l(t.strategies,function(t){return a("div",{key:t.id,class:["strategy-list-item",{active:e.selectedStrategy&&e.selectedStrategy.id===t.id},{"strategy-list-item--strategy-group":"strategy"===e.groupByMode}],on:{click:function(a){return e.handleSelectStrategy(t)}}},[a("div",{staticClass:"strategy-item-content"},[a("div",{staticClass:"strategy-item-header"},[a("div",{class:["strategy-name-wrapper",{"strategy-name-wrapper--grouped":"symbol"===e.groupByMode}]},["strategy"===e.groupByMode?[a("span",{staticClass:"strategy-name"},[e._v(e._s(t.strategy_name))]),"PromptBasedStrategy"===t.strategy_type?a("a-tag",{staticClass:"strategy-type-tag",attrs:{color:"purple",size:"small"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"robot"}}),e._v(" AI ")],1):e._e(),"script"===t.strategy_mode?a("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{size:"small",color:"green"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"code"}}),e._v(e._s(e.$t("trading-assistant.strategyMode.script"))+" ")],1):e._e(),"script"===t.strategy_mode&&e.scriptTemplateKeyOf(t)?a("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{size:"small",color:"blue"}},[e._v(" "+e._s(e.scriptTemplateLabel(e.scriptTemplateKeyOf(t)))+" ")]):e._e()]:[a("span",{staticClass:"info-item strategy-name-text"},[a("a-icon",{attrs:{type:"thunderbolt"}}),e._v(" "+e._s(t.displayInfo?t.displayInfo.strategyName:t.strategy_name)+" ")],1),t.displayInfo&&t.displayInfo.timeframe?a("a-tag",{attrs:{size:"small",color:"cyan"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"clock-circle"}}),e._v(" "+e._s(t.displayInfo.timeframe)+" ")],1):e._e(),t.displayInfo&&t.displayInfo.indicatorName&&"-"!==t.displayInfo.indicatorName?a("a-tag",{attrs:{size:"small",color:"purple"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"line-chart"}}),e._v(" "+e._s(t.displayInfo.indicatorName)+" ")],1):e._e(),"script"===t.strategy_mode?a("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{size:"small",color:"green"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"code"}}),e._v(e._s(e.$t("trading-assistant.strategyMode.script"))+" ")],1):e._e(),"script"===t.strategy_mode&&e.scriptTemplateKeyOf(t)?a("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{size:"small",color:"blue"}},[e._v(" "+e._s(e.scriptTemplateLabel(e.scriptTemplateKeyOf(t)))+" ")]):e._e()]],2)]),a("div",{staticClass:"strategy-item-info"},["strategy"===e.groupByMode?[t.trading_config&&t.trading_config.symbol?a("span",{staticClass:"info-item"},[a("a-icon",{attrs:{type:"dollar"}}),e._v(" "+e._s(t.trading_config.symbol)+" ")],1):e._e(),t.exchange_config&&t.exchange_config.exchange_id?a("span",{staticClass:"info-item"},[a("a-icon",{attrs:{type:"bank"}}),e._v(" "+e._s(e.getExchangeDisplayName(t.exchange_config.exchange_id))+" ")],1):e._e(),t.trading_config&&t.trading_config.timeframe?a("span",{staticClass:"info-item"},[a("a-icon",{attrs:{type:"clock-circle"}}),e._v(" "+e._s(t.trading_config.timeframe)+" ")],1):e._e()]:e._e(),a("span",{staticClass:"status-label",class:[t.status?"status-".concat(t.status):"",{"status-stopped":"stopped"===t.status}]},[e._v(" "+e._s(e.getStatusText(t.status))+" ")])],2)]),a("div",{staticClass:"strategy-item-actions",on:{click:function(t){t.stopPropagation()}}},[a("a-dropdown",{attrs:{getPopupContainer:e.getDropdownContainer,trigger:["click"]}},[a("a-menu",{attrs:{slot:"overlay"},on:{click:function(a){var s=a.key;return e.handleMenuClick(s,t)}},slot:"overlay"},["stopped"===t.status?a("a-menu-item",{key:"start"},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startStrategy"))+" ")],1):e._e(),"running"===t.status?a("a-menu-item",{key:"stop"},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopStrategy"))+" ")],1):e._e(),a("a-menu-divider"),a("a-menu-item",{key:"edit"},[a("a-icon",{attrs:{type:"edit"}}),e._v(" "+e._s(e.$t("trading-assistant.editStrategy"))+" ")],1),a("a-menu-item",{key:"backtest"},[a("a-icon",{attrs:{type:"experiment"}}),e._v(" "+e._s(e.$t("dashboard.indicator.action.backtest"))+" ")],1),a("a-menu-divider"),a("a-menu-item",{key:"delete",staticClass:"danger-item"},[a("a-icon",{attrs:{type:"delete"}}),e._v(" "+e._s(e.$t("trading-assistant.deleteStrategy"))+" ")],1)],1),a("a-button",{attrs:{type:"link",icon:"more",size:"small"}})],1)],1)])}),0)])}),e._l(e.groupedStrategies.ungrouped,function(t){return a("div",{key:t.id,class:["strategy-list-item",{active:e.selectedStrategy&&e.selectedStrategy.id===t.id}],on:{click:function(a){return e.handleSelectStrategy(t)}}},[a("div",{staticClass:"strategy-item-content"},[a("div",{staticClass:"strategy-item-header"},[a("div",{staticClass:"strategy-name-wrapper"},[t.exchange_config&&t.exchange_config.exchange_id?a("a-tag",{staticClass:"exchange-tag",attrs:{color:e.getExchangeTagColor(t.exchange_config.exchange_id),size:"small"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"bank"}}),e._v(" "+e._s(e.getExchangeDisplayName(t.exchange_config.exchange_id))+" ")],1):e._e(),a("span",{staticClass:"strategy-name"},[e._v(e._s(t.strategy_name))]),"PromptBasedStrategy"===t.strategy_type?a("a-tag",{staticClass:"strategy-type-tag",attrs:{color:"purple",size:"small"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"robot"}}),e._v(" AI ")],1):e._e(),"script"===t.strategy_mode?a("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{size:"small",color:"green"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"code"}}),e._v(e._s(e.$t("trading-assistant.strategyMode.script"))+" ")],1):e._e(),"script"===t.strategy_mode&&e.scriptTemplateKeyOf(t)?a("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{size:"small",color:"blue"}},[e._v(" "+e._s(e.scriptTemplateLabel(e.scriptTemplateKeyOf(t)))+" ")]):e._e()],1)]),a("div",{staticClass:"strategy-item-info"},[t.trading_config&&t.trading_config.symbol?a("span",{staticClass:"info-item"},[a("a-icon",{attrs:{type:"dollar"}}),e._v(" "+e._s(t.trading_config.symbol)+" ")],1):e._e(),a("span",{staticClass:"status-label",class:[t.status?"status-".concat(t.status):"",{"status-stopped":"stopped"===t.status}]},[e._v(" "+e._s(e.getStatusText(t.status))+" ")])])]),a("div",{staticClass:"strategy-item-actions",on:{click:function(t){t.stopPropagation()}}},[a("a-dropdown",{attrs:{getPopupContainer:e.getDropdownContainer,trigger:["click"]}},[a("a-menu",{attrs:{slot:"overlay"},on:{click:function(a){var s=a.key;return e.handleMenuClick(s,t)}},slot:"overlay"},["stopped"===t.status?a("a-menu-item",{key:"start"},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startStrategy"))+" ")],1):e._e(),"running"===t.status?a("a-menu-item",{key:"stop"},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopStrategy"))+" ")],1):e._e(),a("a-menu-divider"),a("a-menu-item",{key:"edit"},[a("a-icon",{attrs:{type:"edit"}}),e._v(" "+e._s(e.$t("trading-assistant.editStrategy"))+" ")],1),a("a-menu-item",{key:"backtest"},[a("a-icon",{attrs:{type:"experiment"}}),e._v(" "+e._s(e.$t("dashboard.indicator.action.backtest"))+" ")],1),a("a-menu-divider"),a("a-menu-item",{key:"delete",staticClass:"danger-item"},[a("a-icon",{attrs:{type:"delete"}}),e._v(" "+e._s(e.$t("trading-assistant.deleteStrategy"))+" ")],1)],1),a("a-button",{attrs:{type:"link",icon:"more",size:"small"}})],1)],1)])})],2):a("div",{staticClass:"strategy-empty-state"},[a("a-empty",{attrs:{description:e.$t("trading-assistant.empty.title")}}),a("div",{staticClass:"strategy-empty-desc"},[e._v(e._s(e.$t("trading-assistant.empty.desc")))]),a("a-button",{attrs:{type:"primary"},on:{click:e.openCreateStrategyFromGuide}},[a("a-icon",{attrs:{type:"plus"}}),e._v(" "+e._s(e.$t("trading-assistant.empty.primary"))+" ")],1)],1)])],1)],1),a("a-col",{staticClass:"strategy-detail-col",attrs:{xs:24,sm:24,md:14,lg:16,xl:16}},[e.selectedStrategy?a("div",{staticClass:"strategy-detail-panel"},[a("a-card",{staticClass:"strategy-header-card",attrs:{bordered:!1}},[a("div",{staticClass:"strategy-header"},[a("div",{staticClass:"header-left"},[a("div",{staticClass:"strategy-title-row"},[a("h3",{staticClass:"strategy-title"},[e._v(e._s(e.selectedStrategy.strategy_name))]),a("div",{staticClass:"status-badge",class:["status-".concat(e.selectedStrategy.status)]},[a("span",{staticClass:"status-dot"}),e._v(" "+e._s(e.getStatusText(e.selectedStrategy.status))+" ")])]),a("div",{staticClass:"key-stats-grid"},[e.selectedStrategy.initial_capital||e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.initial_capital?a("div",{staticClass:"stat-card"},[a("div",{staticClass:"stat-icon investment"},[a("a-icon",{attrs:{type:"wallet"}})],1),a("div",{staticClass:"stat-content"},[a("div",{staticClass:"stat-label"},[e._v(e._s(e.$t("trading-assistant.detail.totalInvestment")))]),a("div",{staticClass:"stat-value"},[e._v("$"+e._s(parseFloat(e.selectedStrategy.initial_capital||(null===(t=e.selectedStrategy.trading_config)||void 0===t?void 0:t.initial_capital)||0).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})))])])]):e._e(),null!==e.currentEquity?a("div",{staticClass:"stat-card"},[a("div",{staticClass:"stat-icon equity"},[a("a-icon",{attrs:{type:"fund"}})],1),a("div",{staticClass:"stat-content"},[a("div",{staticClass:"stat-label"},[e._v(e._s(e.$t("trading-assistant.detail.currentEquity")))]),a("div",{staticClass:"stat-value",class:e.getEquityColorClass},[e._v(e._s(e.formatCurrency(e.currentEquity)))])])]):e._e(),null!==e.totalPnl?a("div",{staticClass:"stat-card pnl-card",class:{profit:e.totalPnl>0,loss:e.totalPnl<0}},[a("div",{staticClass:"stat-icon pnl"},[a("a-icon",{attrs:{type:e.totalPnl>=0?"rise":"fall"}})],1),a("div",{staticClass:"stat-content"},[a("div",{staticClass:"stat-label"},[e._v(e._s(e.$t("trading-assistant.detail.totalPnl")))]),a("div",{staticClass:"stat-value",class:e.getPnlColorClass},[e._v(" "+e._s(e.formatPnl(e.totalPnl))+" "),a("span",{staticClass:"pnl-percent"},[e._v("("+e._s(e.formatPnlPercent(e.totalPnlPercent))+")")])])])]):e._e()]),a("div",{staticClass:"strategy-tags"},[e.selectedStrategy.trading_config?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"stock"}}),a("span",[e._v(e._s(e.selectedStrategy.trading_config.symbol))])],1):e._e(),e.selectedStrategy.indicator_config&&e.selectedStrategy.indicator_config.indicator_name?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"line-chart"}}),a("span",[e._v(e._s(e.selectedStrategy.indicator_config.indicator_name))])],1):e._e(),e.selectedStrategy.trading_config?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"thunderbolt"}}),a("span",[e._v(e._s(e.selectedStrategy.trading_config.leverage||1)+"x")])],1):e._e(),e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.trade_direction?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"swap"}}),a("span",[e._v(e._s(e.getTradeDirectionText(e.selectedStrategy.trading_config.trade_direction)))])],1):e._e(),"script"===e.selectedStrategy.strategy_mode&&e.scriptTemplateKeyOf(e.selectedStrategy)?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"file-text"}}),a("span",[e._v(e._s(e.scriptTemplateLabel(e.scriptTemplateKeyOf(e.selectedStrategy))))])],1):e._e(),e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.timeframe?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"clock-circle"}}),a("span",[e._v(e._s(e.selectedStrategy.trading_config.timeframe))])],1):e._e()])]),a("div",{staticClass:"header-right"},["stopped"===e.selectedStrategy.status?a("a-button",{staticClass:"action-btn start-btn",attrs:{type:"primary",size:"large"},on:{click:function(t){return e.handleStartStrategy(e.selectedStrategy.id)}}},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startStrategy"))+" ")],1):e._e(),"running"===e.selectedStrategy.status?a("a-button",{staticClass:"action-btn stop-btn",attrs:{type:"danger",size:"large"},on:{click:function(t){return e.handleStopStrategy(e.selectedStrategy.id)}}},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopStrategy"))+" ")],1):e._e()],1)])]),a("a-card",{staticClass:"strategy-content-card",attrs:{bordered:!1}},[a("a-tabs",{attrs:{defaultActiveKey:"positions"}},[a("a-tab-pane",{key:"positions",attrs:{tab:e.$t("trading-assistant.tabs.positions")}},[a("position-records",{attrs:{"strategy-id":e.selectedStrategy.id,"market-type":e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.market_type||"swap",leverage:e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.leverage||1,loading:e.loadingRecords,"is-dark":e.isDarkTheme}})],1),a("a-tab-pane",{key:"trades",attrs:{tab:e.$t("trading-assistant.tabs.tradingRecords")}},[a("trading-records",{attrs:{"strategy-id":e.selectedStrategy.id,loading:e.loadingRecords,"is-dark":e.isDarkTheme}})],1),a("a-tab-pane",{key:"performance",attrs:{tab:e.$t("trading-assistant.tabs.performance")}},[a("performance-analysis",{attrs:{"strategy-id":e.selectedStrategy.id,"is-dark":e.isDarkTheme}})],1),a("a-tab-pane",{key:"logs",attrs:{tab:e.$t("trading-assistant.tabs.logs")}},[a("strategy-logs",{attrs:{"strategy-id":e.selectedStrategy.id,"is-dark":e.isDarkTheme}})],1)],1)],1)],1):a("div",{staticClass:"strategy-empty-detail"},[a("div",{staticClass:"strategy-empty-detail-card"},[a("div",{staticClass:"strategy-empty-detail-icon"},[a("a-icon",{attrs:{type:"deployment-unit"}})],1),a("h3",{staticClass:"strategy-empty-detail-title"},[e._v(e._s(e.$t("trading-assistant.emptyDetail.title")))]),a("p",{staticClass:"strategy-empty-detail-hint"},[e._v(e._s(e.$t("trading-assistant.emptyDetail.hint")))]),a("div",{staticClass:"strategy-empty-detail-actions"},[a("a-button",{attrs:{type:"primary"},on:{click:e.handleCreateStrategy}},[a("a-icon",{attrs:{type:"plus"}}),e._v(" "+e._s(e.$t("trading-assistant.createStrategy"))+" ")],1)],1)])])])],1),a("a-modal",{staticClass:"mode-selector-modal",attrs:{visible:e.showModeSelector,title:e.$t("trading-assistant.selectMode"),width:e.isMobile?"95%":700,footer:null,maskClosable:!0,bodyStyle:{padding:"16px 24px"}},on:{cancel:function(t){e.showModeSelector=!1}}},[a("strategy-type-selector",{attrs:{selected:e.strategyMode,"is-dark":e.isDarkTheme},on:{select:e.handleModeSelect,"use-template":e.handleUseTemplate}})],1),a("a-modal",{attrs:{visible:e.showFormModal,title:e.editingStrategy?e.$t("trading-assistant.editStrategy"):e.$t("trading-assistant.createStrategy")+("script"===e.strategyMode?" - "+e.$t("trading-assistant.strategyMode.script"):""),width:e.isMobile?"95%":1120,confirmLoading:e.saving,maskClosable:!1,wrapClassName:e.strategyFormWrapClass,bodyStyle:{maxHeight:"76vh",overflowY:"auto",paddingBottom:"8px"}},on:{ok:e.handleSubmit,cancel:e.handleCloseModal}},[a("a-spin",{attrs:{spinning:e.loadingIndicators}},[a("a-steps",{staticClass:"steps-container",attrs:{current:e.displayCurrentStep}},["script"===e.strategyMode?[a("a-step",{attrs:{title:e.$t("trading-assistant.form.simpleStep1")}}),a("a-step",{attrs:{title:e.$t("trading-assistant.editor.title")}}),a("a-step",{attrs:{title:e.$t("trading-assistant.form.step3Signal")}})]:[a("a-step",{attrs:{title:e.$t("trading-assistant.form.stepMergedConfig")}}),a("a-step",{attrs:{title:e.$t("trading-assistant.form.step3Signal")}})]],2),a("div",{staticClass:"form-container"},[a("div",{directives:[{name:"show",rawName:"v-show",value:0===e.currentStep,expression:"currentStep === 0"}],staticClass:"step-content"},["indicator"===e.strategyType&&"script"!==e.strategyMode?a("div",[a("a-form",{attrs:{form:e.form,layout:"vertical"}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.indicator")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["indicator_id",{rules:[{required:!0,message:e.$t("trading-assistant.validation.indicatorRequired")}]}],expression:"['indicator_id', { rules: [{ required: true, message: $t('trading-assistant.validation.indicatorRequired') }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectIndicator"),"show-search":"",optionLabelProp:"label","filter-option":e.filterIndicatorOption,loading:e.loadingIndicators,getPopupContainer:function(t){return t.parentNode}},on:{focus:e.handleIndicatorSelectFocus,change:e.handleIndicatorChange}},e._l(e.availableIndicators,function(t){return a("a-select-option",{key:String(t.id),attrs:{value:String(t.id),label:e.getIndicatorOptionLabel(t)}},[a("div",{staticClass:"indicator-option"},[a("div",{staticClass:"indicator-option-main"},[a("span",{staticClass:"indicator-name"},[e._v(e._s(t.name))]),t.description?a("span",{staticClass:"indicator-option-desc"},[e._v(e._s(t.description))]):e._e()]),t.type?a("a-tag",{attrs:{size:"small",color:e.getIndicatorTypeColor(t.type)}},[e._v(" "+e._s(e.getIndicatorTypeName(t.type))+" ")]):e._e()],1)])}),1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.indicatorHint"))+" ")]),e.loadingIndicators||e.availableIndicators&&0!==e.availableIndicators.length?e._e():a("a-alert",{staticStyle:{"margin-top":"12px"},attrs:{type:"info","show-icon":"",message:e.$t("trading-assistant.indicatorEmpty.title"),description:e.$t("trading-assistant.indicatorEmpty.desc")}},[a("template",{slot:"action"},[a("a-button",{attrs:{type:"primary",size:"small"},on:{click:e.goToIndicatorAnalysisCreate}},[a("a-icon",{attrs:{type:"rocket"}}),e._v(" "+e._s(e.$t("trading-assistant.indicatorEmpty.cta"))+" ")],1)],1)],2)],1),e.selectedIndicator?a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.indicatorDescription")}},[a("div",{staticClass:"selected-indicator-card"},[a("div",{staticClass:"selected-indicator-header"},[a("span",{staticClass:"selected-indicator-name"},[e._v(e._s(e.selectedIndicator.name))]),e.selectedIndicator.type?a("a-tag",{attrs:{size:"small",color:e.getIndicatorTypeColor(e.selectedIndicator.type)}},[e._v(" "+e._s(e.getIndicatorTypeName(e.selectedIndicator.type))+" ")]):e._e()],1),a("div",{staticClass:"indicator-description"},[e._v(" "+e._s(e.selectedIndicator.description||e.$t("trading-assistant.form.noDescription"))+" ")])])]):e._e(),e.indicatorParams.length>0?a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.indicatorParams")}},[a("div",{staticClass:"indicator-params-form"},[a("a-row",{attrs:{gutter:16}},e._l(e.indicatorParams,function(t){return a("a-col",{key:t.name,attrs:{xs:24,sm:12,md:8}},[a("div",{staticClass:"param-item"},[a("label",{staticClass:"param-label"},[e._v(" "+e._s(t.name)+" "),t.description?a("a-tooltip",{attrs:{title:t.description}},[a("a-icon",{staticStyle:{"margin-left":"4px",color:"#999"},attrs:{type:"question-circle"}})],1):e._e()],1),"int"===t.type?a("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:0,size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}}):"float"===t.type?a("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:4,size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}}):"bool"===t.type?a("a-switch",{attrs:{size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}}):a("a-input",{attrs:{size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}})],1)])}),1),a("div",{staticClass:"form-item-hint",staticStyle:{"margin-top":"8px"}},[e._v(" "+e._s(e.$t("trading-assistant.form.indicatorParamsHint"))+" ")])],1)]):e._e(),a("a-divider"),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.strategyName")}},[a("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["strategy_name",{rules:[{required:!0,message:e.$t("trading-assistant.validation.strategyNameRequired")}]}],expression:"['strategy_name', { rules: [{ required: true, message: $t('trading-assistant.validation.strategyNameRequired') }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.inputStrategyName")}}),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.strategyNameHint"))+" ")])],1),a("div",{staticClass:"advanced-settings-shell"},[a("div",{staticClass:"section-block-title"},[a("span",[e._v(e._s(e.$t("trading-assistant.form.sectionStrategyMarket")))]),a("span",{staticClass:"section-block-desc"},[e._v(e._s(e.$t("trading-assistant.form.sectionStrategyMarketDesc")))])]),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.strategyType")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["cs_strategy_type",{initialValue:"single"}],expression:"['cs_strategy_type', { initialValue: 'single' }]"}],on:{change:e.handleStrategyTypeChange}},[a("a-radio",{attrs:{value:"single"}},[e._v(e._s(e.$t("trading-assistant.form.strategyTypeSingle")))]),a("a-radio",{attrs:{value:"cross_sectional"}},[e._v(e._s(e.$t("trading-assistant.form.strategyTypeCrossSectional")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.strategyTypeHint"))+" ")])],1)],1),"cross_sectional"===e.form.getFieldValue("cs_strategy_type")?[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.symbolList")}},[a("a-select",{attrs:{mode:"multiple",placeholder:e.$t("trading-assistant.placeholders.selectSymbols"),"show-search":"","filter-option":e.filterWatchlistOptionWithAdd,loading:e.loadingWatchlist,getPopupContainer:function(t){return t.parentNode},maxTagCount:5},on:{change:e.handleCrossSectionalSymbolChange},model:{value:e.crossSectionalSymbols,callback:function(t){e.crossSectionalSymbols=t},expression:"crossSectionalSymbols"}},[e._l(e.watchlist,function(t){return a("a-select-option",{key:"".concat(t.market,":").concat(t.symbol),attrs:{value:"".concat(t.market,":").concat(t.symbol)}},[a("div",{staticClass:"symbol-option"},[a("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:e.getMarketColor(t.market)}},[e._v(" "+e._s(t.market)+" ")]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.symbol))]),t.name?a("span",{staticClass:"symbol-name-extra"},[e._v(e._s(t.name))]):e._e()],1)])}),a("a-select-option",{key:"__add_symbol_option__",staticClass:"add-symbol-option",attrs:{value:"__add_symbol_option__"}},[a("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.addSymbol")))])],1)])],2),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.symbolListHint"))+" ")])],1),a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.portfolioSize")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["portfolio_size",{initialValue:10,rules:[{required:!0,message:e.$t("trading-assistant.validation.portfolioSizeRequired")}]}],expression:"['portfolio_size', { initialValue: 10, rules: [{ required: true, message: $t('trading-assistant.validation.portfolioSizeRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:100,step:1}}),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.portfolioSizeHint"))+" ")])],1)],1),a("a-col",{attrs:{xs:24,sm:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.longRatio")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["long_ratio",{initialValue:.5,rules:[{required:!0,message:e.$t("trading-assistant.validation.longRatioRequired")}]}],expression:"['long_ratio', { initialValue: 0.5, rules: [{ required: true, message: $t('trading-assistant.validation.longRatioRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:1,step:.1,precision:2}}),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.longRatioHint"))+" ")])],1)],1)],1),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.rebalanceFrequency")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["rebalance_frequency",{initialValue:"daily"}],expression:"['rebalance_frequency', { initialValue: 'daily' }]"}],staticStyle:{width:"100%"}},[a("a-select-option",{attrs:{value:"daily"}},[e._v(e._s(e.$t("trading-assistant.form.rebalanceDaily")))]),a("a-select-option",{attrs:{value:"weekly"}},[e._v(e._s(e.$t("trading-assistant.form.rebalanceWeekly")))]),a("a-select-option",{attrs:{value:"monthly"}},[e._v(e._s(e.$t("trading-assistant.form.rebalanceMonthly")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.rebalanceFrequencyHint"))+" ")])],1)]:e._e(),"cross_sectional"!==e.form.getFieldValue("cs_strategy_type")?a("a-form-item",{attrs:{label:e.isEditMode?e.$t("trading-assistant.form.symbol"):e.$t("trading-assistant.form.symbols")}},[e.isEditMode?a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol",{rules:[{required:!0,message:e.$t("trading-assistant.validation.symbolRequired")}]}],expression:"['symbol', { rules: [{ required: true, message: $t('trading-assistant.validation.symbolRequired') }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectSymbol"),"show-search":"","filter-option":e.filterWatchlistOption,loading:e.loadingWatchlist,getPopupContainer:function(t){return t.parentNode}},on:{change:e.handleWatchlistSymbolChange}},[e._l(e.watchlist,function(t){return a("a-select-option",{key:"".concat(t.market,":").concat(t.symbol),attrs:{value:"".concat(t.market,":").concat(t.symbol)}},[a("div",{staticClass:"symbol-option"},[a("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:e.getMarketColor(t.market)}},[e._v(" "+e._s(t.market)+" ")]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.symbol))]),t.name?a("span",{staticClass:"symbol-name-extra"},[e._v(e._s(t.name))]):e._e()],1)])}),a("a-select-option",{key:"__add_symbol_option__",staticClass:"add-symbol-option",attrs:{value:"__add_symbol_option__"}},[a("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.addSymbol")))])],1)])],2):a("a-select",{attrs:{mode:"multiple",placeholder:e.$t("trading-assistant.placeholders.selectSymbols"),"show-search":"","filter-option":e.filterWatchlistOptionWithAdd,loading:e.loadingWatchlist,getPopupContainer:function(t){return t.parentNode},maxTagCount:3},on:{change:e.handleMultiSymbolChangeWithAdd},model:{value:e.selectedSymbols,callback:function(t){e.selectedSymbols=t},expression:"selectedSymbols"}},[e._l(e.watchlist,function(t){return a("a-select-option",{key:"".concat(t.market,":").concat(t.symbol),attrs:{value:"".concat(t.market,":").concat(t.symbol)}},[a("div",{staticClass:"symbol-option"},[a("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:e.getMarketColor(t.market)}},[e._v(" "+e._s(t.market)+" ")]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.symbol))]),t.name?a("span",{staticClass:"symbol-name-extra"},[e._v(e._s(t.name))]):e._e()],1)])}),a("a-select-option",{key:"__add_symbol_option__",staticClass:"add-symbol-option",attrs:{value:"__add_symbol_option__"}},[a("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.addSymbol")))])],1)])],2),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.isEditMode?e.$t("trading-assistant.form.symbolHintCrypto"):e.$t("trading-assistant.form.symbolsHint"))+" ")])],1):e._e(),a("div",[a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.initialCapital")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["initial_capital",{rules:[{required:!0,message:e.$t("trading-assistant.validation.initialCapitalRequired")}],initialValue:1e3}],expression:"['initial_capital', { rules: [{ required: true, message: $t('trading-assistant.validation.initialCapitalRequired') }], initialValue: 1000 }]"}],staticStyle:{width:"100%"},attrs:{min:10,step:100,precision:2}})],1)],1),a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.marketType")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["market_type",{initialValue:"swap"}],expression:"['market_type', { initialValue: 'swap' }]"}],on:{change:e.handleMarketTypeChange}},[a("a-radio",{attrs:{value:"swap"}},[e._v(e._s(e.$t("trading-assistant.form.marketTypeFutures")))]),a("a-radio",{attrs:{value:"spot"}},[e._v(e._s(e.$t("trading-assistant.form.marketTypeSpot")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.marketTypeHint"))+" ")])],1)],1)],1),a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:"".concat(e.$t("trading-assistant.form.leverage")," (x)")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["leverage",{initialValue:5,rules:[{required:!0,message:e.$t("trading-assistant.validation.leverageRequired")}]}],expression:"['leverage', { initialValue: 5, rules: [{ required: true, message: $t('trading-assistant.validation.leverageRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:"spot"===e.form.getFieldValue("market_type")?1:125,step:1,disabled:"spot"===e.form.getFieldValue("market_type")}}),a("div",{staticClass:"form-item-hint"},["spot"===e.form.getFieldValue("market_type")?a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.spotLeverageFixed"))+" ")]):a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.leverageHint"))+" ")])])],1)],1),a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.tradeDirection")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["trade_direction",{initialValue:"long"}],expression:"['trade_direction', { initialValue: 'long' }]"}],attrs:{disabled:"spot"===e.form.getFieldValue("market_type")}},[a("a-radio",{attrs:{value:"long"}},[e._v(e._s(e.$t("trading-assistant.form.tradeDirectionLong")))]),a("a-radio",{attrs:{value:"short",disabled:"spot"===e.form.getFieldValue("market_type")}},[e._v(" "+e._s(e.$t("trading-assistant.form.tradeDirectionShort"))+" ")]),a("a-radio",{attrs:{value:"both",disabled:"spot"===e.form.getFieldValue("market_type")}},[e._v(" "+e._s(e.$t("trading-assistant.form.tradeDirectionBoth"))+" ")])],1),"spot"===e.form.getFieldValue("market_type")?a("div",{staticClass:"form-item-hint",staticStyle:{color:"#ff9800"}},[e._v(" "+e._s(e.$t("trading-assistant.form.spotOnlyLongHint"))+" ")]):e._e()],1)],1)],1),a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.klinePeriod")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["timeframe",{initialValue:"15m",rules:[{required:!0}]}],expression:"['timeframe', { initialValue: '15m', rules: [{ required: true }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectKlinePeriod"),getPopupContainer:function(t){return t.parentNode}}},[a("a-select-option",{attrs:{value:"1m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1m")))]),a("a-select-option",{attrs:{value:"5m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe5m")))]),a("a-select-option",{attrs:{value:"15m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe15m")))]),a("a-select-option",{attrs:{value:"30m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe30m")))]),a("a-select-option",{attrs:{value:"1H"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1H")))]),a("a-select-option",{attrs:{value:"4H"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe4H")))]),a("a-select-option",{attrs:{value:"1D"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1D")))])],1)],1)],1),a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}})],1)],1),a("a-divider"),a("div",{staticClass:"section-block-title",staticStyle:{"margin-top":"4px"}},[a("span",[e._v(e._s(e.$t("trading-assistant.form.sectionRiskExecutionParams")))]),a("span",{staticClass:"section-block-desc"},[e._v(e._s(e.$t("trading-assistant.form.sectionRiskExecutionParamsDesc")))])]),a("a-collapse",{staticClass:"strategy-params-collapse",attrs:{bordered:!1},model:{value:e.backtestCollapseKeys,callback:function(t){e.backtestCollapseKeys=t},expression:"backtestCollapseKeys"}},[a("a-collapse-panel",{key:"risk",attrs:{header:e.$t("dashboard.indicator.backtest.panel.risk")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.stopLossPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["stop_loss_pct",{initialValue:3}],expression:"['stop_loss_pct', { initialValue: 3 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.takeProfitPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["take_profit_pct",{initialValue:6}],expression:"['take_profit_pct', { initialValue: 6 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trailingEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailing_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['trailing_enabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onTrailingToggle}})],1)],1),a("a-col",{attrs:{span:12}})],1),e.trailingEnabledUi?[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trailingStopPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailing_stop_pct",{initialValue:0}],expression:"['trailing_stop_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trailingActivationPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailing_activation_pct",{initialValue:0}],expression:"['trailing_activation_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1)]:e._e()],2),a("a-collapse-panel",{key:"scale",attrs:{header:e.$t("dashboard.indicator.backtest.panel.scale")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['trend_add_enabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onTrendAddToggle}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['dca_add_enabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onDcaAddToggle}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_step_pct",{initialValue:0}],expression:"['trend_add_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:e.onScaleParamsChange}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_step_pct",{initialValue:0}],expression:"['dca_add_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:e.onScaleParamsChange}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_size_pct",{initialValue:0}],expression:"['trend_add_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:e.onScaleParamsChange}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_size_pct",{initialValue:0}],expression:"['dca_add_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:e.onScaleParamsChange}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_max_times",{initialValue:0}],expression:"['trend_add_max_times', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:e.onScaleParamsChange}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_max_times",{initialValue:0}],expression:"['dca_add_max_times', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:e.onScaleParamsChange}})],1)],1)],1)],1),a("a-collapse-panel",{key:"reduce",attrs:{header:e.$t("dashboard.indicator.backtest.panel.reduce")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['trend_reduce_enabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['adverse_reduce_enabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_step_pct",{initialValue:0}],expression:"['trend_reduce_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_step_pct",{initialValue:0}],expression:"['adverse_reduce_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_size_pct",{initialValue:0}],expression:"['trend_reduce_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_size_pct",{initialValue:0}],expression:"['adverse_reduce_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_max_times",{initialValue:0}],expression:"['trend_reduce_max_times', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_max_times",{initialValue:0}],expression:"['adverse_reduce_max_times', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1)],1)],1),a("a-collapse-panel",{key:"position",attrs:{header:e.$t("dashboard.indicator.backtest.panel.position")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.entryPct"),help:e.$t("dashboard.indicator.backtest.hint.entryPctMax",{maxPct:Number(e.entryPctMaxUi||0).toFixed(0)})}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entry_pct",{initialValue:100}],expression:"['entry_pct', { initialValue: 100 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:e.entryPctMaxUi,step:.1,precision:4},on:{change:e.onEntryPctChange}})],1)],1),a("a-col",{attrs:{span:12}})],1)],1)],1),a("div",{staticClass:"ai-filter-box"},[a("div",{staticClass:"ai-filter-header"},[a("div",{staticClass:"ai-filter-title"},[a("a-icon",{attrs:{type:"robot"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.enableAiFilter")))])],1),a("a-switch",{attrs:{checked:e.aiFilterEnabledUi},on:{change:e.onAiFilterToggle}})],1),a("div",{staticClass:"ai-filter-hint"},[e._v(e._s(e.$t("trading-assistant.form.enableAiFilterHint")))])])],2)],1):e._e(),"script"===e.strategyMode?a("div",[a("a-form",{attrs:{form:e.form,layout:"vertical"}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.strategyName")}},[a("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["strategy_name",{rules:[{required:!0,message:e.$t("trading-assistant.validation.strategyNameRequired")}]}],expression:"['strategy_name', { rules: [{ required: true, message: $t('trading-assistant.validation.strategyNameRequired') }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.inputStrategyName")}})],1),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.symbol")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol",{rules:[{required:!0,message:e.$t("trading-assistant.validation.symbolRequired")}]}],expression:"['symbol', { rules: [{ required: true, message: $t('trading-assistant.validation.symbolRequired') }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectSymbol"),"show-search":"","filter-option":e.filterWatchlistOption,loading:e.loadingWatchlist,getPopupContainer:function(t){return t.parentNode}},on:{change:e.handleWatchlistSymbolChange}},e._l(e.watchlist,function(t){return a("a-select-option",{key:"".concat(t.market,":").concat(t.symbol),attrs:{value:"".concat(t.market,":").concat(t.symbol)}},[a("div",{staticClass:"symbol-option"},[a("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:e.getMarketColor(t.market)}},[e._v(" "+e._s(t.market)+" ")]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.symbol))]),t.name?a("span",{staticClass:"symbol-name-extra"},[e._v(e._s(t.name))]):e._e()],1)])}),1)],1),a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.initialCapital")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["initial_capital",{initialValue:1e3,rules:[{required:!0}]}],expression:"['initial_capital', { initialValue: 1000, rules: [{ required: true }] }]"}],staticStyle:{width:"100%"},attrs:{min:10,step:100,precision:2}})],1)],1),a("a-col",{attrs:{xs:24,sm:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.klinePeriod")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["timeframe",{initialValue:"15m",rules:[{required:!0}]}],expression:"['timeframe', { initialValue: '15m', rules: [{ required: true }] }]"}],attrs:{getPopupContainer:function(t){return t.parentNode}}},[a("a-select-option",{attrs:{value:"1m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1m")))]),a("a-select-option",{attrs:{value:"5m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe5m")))]),a("a-select-option",{attrs:{value:"15m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe15m")))]),a("a-select-option",{attrs:{value:"30m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe30m")))]),a("a-select-option",{attrs:{value:"1H"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1H")))]),a("a-select-option",{attrs:{value:"4H"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe4H")))]),a("a-select-option",{attrs:{value:"1D"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1D")))])],1)],1)],1)],1),a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.marketType")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["market_type",{initialValue:"swap"}],expression:"['market_type', { initialValue: 'swap' }]"}]},[a("a-radio",{attrs:{value:"swap"}},[e._v(e._s(e.$t("trading-assistant.form.marketTypeFutures")))]),a("a-radio",{attrs:{value:"spot"}},[e._v(e._s(e.$t("trading-assistant.form.marketTypeSpot")))])],1)],1)],1),a("a-col",{attrs:{xs:24,sm:12}},[a("a-form-item",{attrs:{label:"".concat(e.$t("trading-assistant.form.leverage")," (x)")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["leverage",{initialValue:5}],expression:"['leverage', { initialValue: 5 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:125,step:1}})],1)],1)],1),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.tradeDirection")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["trade_direction",{initialValue:"both"}],expression:"['trade_direction', { initialValue: 'both' }]"}],attrs:{getPopupContainer:function(t){return t.parentNode}}},[a("a-select-option",{attrs:{value:"long"}},[e._v(e._s(e.$t("trading-assistant.form.tradeDirectionLong")))]),a("a-select-option",{attrs:{value:"short"}},[e._v(e._s(e.$t("trading-assistant.form.tradeDirectionShort")))]),a("a-select-option",{attrs:{value:"both"}},[e._v(e._s(e.$t("trading-assistant.form.tradeDirectionBoth")))])],1)],1)],1)],1):e._e()]),"script"===e.strategyMode?a("div",{directives:[{name:"show",rawName:"v-show",value:1===e.currentStep,expression:"currentStep === 1"}],staticClass:"step-content"},[a("strategy-editor",{ref:"strategyEditor",attrs:{"is-dark":e.isDarkTheme,"user-id":1,visible:e.showFormModal&&"script"===e.strategyMode&&1===e.currentStep,"initial-template-key":e.pendingScriptTemplateKey},on:{"template-change":e.onScriptTemplateChange},model:{value:e.strategyCode,callback:function(t){e.strategyCode=t},expression:"strategyCode"}})],1):e._e(),a("div",{directives:[{name:"show",rawName:"v-show",value:"script"===e.strategyMode&&2===e.currentStep||"script"!==e.strategyMode&&1===e.currentStep,expression:"(strategyMode === 'script' && currentStep === 2) || (strategyMode !== 'script' && currentStep === 1)"}],staticClass:"step-content"},[a("a-form",{attrs:{form:e.form,layout:"vertical",autocomplete:"off"}},[a("div",{staticClass:"execution-step-layout"},[a("div",{staticClass:"execution-step-hero"},[a("div",{staticClass:"simple-mode-kicker"},[e._v(e._s(e.$t("trading-assistant.form.step2HeroTitle")))]),a("div",{staticClass:"execution-step-hero-desc"},[e._v(e._s(e.$t("trading-assistant.form.step2HeroDesc")))])]),a("div",{staticClass:"execution-section-card"},[a("div",{staticClass:"section-block-title"},[a("span",[e._v(e._s(e.$t("trading-assistant.form.executionSectionTitle")))]),a("span",{staticClass:"section-block-desc"},[e._v(e._s(e.$t("trading-assistant.form.executionSectionDesc")))])]),a("a-form-item",{staticClass:"compact-form-item",attrs:{label:e.$t("trading-assistant.form.executionMode")}},[a("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["execution_mode",{initialValue:"signal"}],expression:"['execution_mode', { initialValue: 'signal' }]"}],staticStyle:{display:"none"}}),a("div",{staticClass:"execution-mode-cards"},[a("div",{class:["execution-mode-card",{active:"signal"===e.executionModeUi}],on:{click:function(t){return e.setExecutionModeUi("signal")}}},[a("div",{staticClass:"execution-mode-card-icon signal"},[a("a-icon",{attrs:{type:"notification"}})],1),a("div",{staticClass:"execution-mode-card-body"},[a("div",{staticClass:"execution-mode-card-title"},[e._v(e._s(e.$t("trading-assistant.form.executionModeSignal")))]),a("div",{staticClass:"execution-mode-card-desc"},[e._v(e._s(e.$t("trading-assistant.form.executionModeSignalDesc")))])]),"signal"===e.executionModeUi?a("a-icon",{staticClass:"execution-mode-card-check",attrs:{type:"check-circle",theme:"filled"}}):e._e()],1),a("div",{class:["execution-mode-card","live-card",{active:"live"===e.executionModeUi,disabled:!e.canUseLiveTrading}],on:{click:function(t){e.canUseLiveTrading&&e.setExecutionModeUi("live")}}},[a("div",{staticClass:"execution-mode-card-icon live"},[a("a-icon",{attrs:{type:"thunderbolt"}})],1),a("div",{staticClass:"execution-mode-card-body"},[a("div",{staticClass:"execution-mode-card-title"},[e._v(e._s(e.$t("trading-assistant.form.executionModeLive")))]),a("div",{staticClass:"execution-mode-card-desc"},[e._v(" "+e._s(e.canUseLiveTrading?e.$t("trading-assistant.form.executionModeLiveDesc"):e.$t("trading-assistant.form.liveTradingNotSupportedHint"))+" ")])]),"live"===e.executionModeUi&&e.canUseLiveTrading?a("a-icon",{staticClass:"execution-mode-card-check",attrs:{type:"check-circle",theme:"filled"}}):e._e()],1)]),e.canUseLiveTrading?e._e():a("div",{staticClass:"form-item-hint execution-warn-text"},[e._v(" "+e._s(e.$t("trading-assistant.form.liveTradingNotSupportedHint"))+" ")])],1),"live"===e.executionModeUi&&e.canUseLiveTrading?a("a-alert",{staticClass:"section-inline-alert",attrs:{type:"warning",showIcon:"",message:e.$t("trading-assistant.liveDisclaimer.title"),description:e.$t("trading-assistant.liveDisclaimer.content")}}):e._e()],1),a("div",{staticClass:"execution-section-card"},[a("div",{staticClass:"section-block-title"},[a("span",[e._v(e._s(e.$t("trading-assistant.form.notificationSectionTitle")))]),a("span",{staticClass:"section-block-desc"},[e._v(e._s(e.$t("trading-assistant.form.notificationSectionDesc")))])]),a("a-form-item",{staticClass:"compact-form-item",attrs:{label:e.$t("trading-assistant.form.notifyChannels")}},[a("a-checkbox-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["notify_channels",{initialValue:["browser"]}],expression:"['notify_channels', { initialValue: ['browser'] }]"}],staticClass:"notify-channel-grid",on:{change:e.onNotifyChannelsChange}},[a("a-checkbox",{attrs:{value:"browser"}},[e._v(e._s(e.$t("trading-assistant.notify.browser")))]),a("a-checkbox",{attrs:{value:"email"}},[e._v(e._s(e.$t("trading-assistant.notify.email")))]),a("a-checkbox",{attrs:{value:"telegram"}},[e._v(e._s(e.$t("trading-assistant.notify.telegram")))]),a("a-checkbox",{attrs:{value:"discord"}},[e._v(e._s(e.$t("trading-assistant.notify.discord")))]),a("a-checkbox",{attrs:{value:"webhook"}},[e._v(e._s(e.$t("trading-assistant.notify.webhook")))]),a("a-checkbox",{attrs:{value:"phone"}},[e._v(e._s(e.$t("trading-assistant.notify.phone")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(e._s(e.$t("trading-assistant.form.notifyChannelsHint")))])],1),e.unconfiguredChannels.length>0?a("a-alert",{staticClass:"section-inline-alert",attrs:{type:"warning",showIcon:""},scopedSlots:e._u([{key:"message",fn:function(){return[a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.notificationConfigMissing",{channels:e.unconfiguredChannels.join(", ")}))+" "),a("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[a("a-icon",{attrs:{type:"setting"}}),e._v(" "+e._s(e.$t("trading-assistant.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,2930252607)}):e.notifyChannelsUi.length>0&&!e.notifyChannelsUi.includes("browser")||e.notifyChannelsUi.length>1?a("a-alert",{staticClass:"section-inline-alert",attrs:{type:"info",showIcon:""},scopedSlots:e._u([{key:"message",fn:function(){return[a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.notificationFromProfile"))+" "),a("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[a("a-icon",{attrs:{type:"setting"}}),e._v(" "+e._s(e.$t("trading-assistant.form.goToProfile"))+" ")],1)],1)]},proxy:!0}])}):e._e()],1),"live"===e.executionModeUi&&e.canUseLiveTrading?a("div",{staticClass:"execution-section-card"},[a("div",{staticClass:"section-block-title"},[a("span",[e._v(e._s(e.$t("trading-assistant.form.liveConnectionSectionTitle")))]),a("span",{staticClass:"section-block-desc"},[e._v(e._s(e.$t("trading-assistant.form.liveConnectionSectionDesc")))])]),a("a-alert",{staticClass:"section-inline-alert",staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning","show-icon":"",message:e.$t("trading-assistant.form.liveTradingConfigTitle"),description:e.$t("trading-assistant.form.liveTradingConfigHint")}}),a("a-form-item",{staticClass:"compact-form-item",attrs:{label:e.$t("trading-assistant.form.savedCredential")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["credential_id",{rules:[{required:!0,message:e.$t("profile.exchange.noCredentialHint")}],getValueFromEvent:function(t){return t||void 0}}],expression:"['credential_id', {\n rules: [{ required: true, message: $t('profile.exchange.noCredentialHint') }],\n getValueFromEvent: (val) => val || undefined\n }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectSavedCredential"),"allow-clear":"","show-search":"","option-filter-prop":"children",loading:e.loadingExchangeCredentials},on:{change:e.handleCredentialSelectChange}},e._l(e.filteredExchangeCredentials,function(t){return a("a-select-option",{key:t.id,attrs:{value:t.id}},[e._v(" "+e._s(e.formatCredentialLabel(t))+" ")])}),1),a("div",{staticClass:"form-item-hint ta-credential-actions",staticStyle:{"margin-top":"6px"}},[a("a-button",{staticClass:"ta-add-cred-btn",attrs:{type:"link",size:"small"},on:{click:function(t){e.showExchangeAccountModal=!0}}},[a("a-icon",{attrs:{type:"plus-circle"}}),e._v(" "+e._s(e.$t("quickTrade.addAccountInline"))+" ")],1),a("span",{staticClass:"ta-credential-actions-sep"},[e._v("·")]),a("router-link",{attrs:{to:"/profile?tab=exchange"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"setting"}}),e._v(e._s(e.$t("profile.exchange.goToManage"))+" ")],1)],1),"live"===e.executionModeUi&&e.canUseLiveTrading&&!e.loadingExchangeCredentials&&0===e.filteredExchangeCredentials.length?a("a-alert",{staticStyle:{"margin-top":"10px"},attrs:{type:"warning","show-icon":"",message:e.$t("trading-assistant.noCredentialForLive.title")}},[a("template",{slot:"description"},[a("span",[e._v(e._s(e.$t("trading-assistant.noCredentialForLive.desc")))]),a("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",size:"small"},on:{click:function(t){e.showExchangeAccountModal=!0}}},[e._v(" "+e._s(e.$t("quickTrade.addAccountInline"))+" ")])],1)],2):e._e()],1)],1):e._e()])])],1)])],1),a("template",{slot:"footer"},[a("a-button",{on:{click:e.handleCloseModal}},[e._v(e._s(e.$t("trading-assistant.form.cancel")))]),a("a-button",{directives:[{name:"show",rawName:"v-show",value:e.currentStep>0,expression:"currentStep > 0"}],on:{click:e.handlePrev}},[e._v(" "+e._s(e.$t("trading-assistant.form.prev"))+" ")]),a("a-button",{directives:[{name:"show",rawName:"v-show",value:e.showStrategyFormNext,expression:"showStrategyFormNext"}],attrs:{type:"primary",loading:e.saving},on:{click:e.handleNext}},[e._v(" "+e._s(e.$t("trading-assistant.form.next"))+" ")]),a("a-button",{directives:[{name:"show",rawName:"v-show",value:e.showStrategyFormSubmit,expression:"showStrategyFormSubmit"}],attrs:{type:"primary",loading:e.saving},on:{click:e.handleSubmit}},[e._v(" "+e._s(e.editingStrategy?e.$t("trading-assistant.form.confirmEdit"):e.$t("trading-assistant.form.confirmCreate"))+" ")])],1)],2),a("a-modal",{attrs:{title:e.$t("trading-assistant.form.addSymbolTitle"),visible:e.showAddSymbolModal,confirmLoading:e.addingSymbol,width:"600px",okText:e.$t("trading-assistant.form.confirmAdd"),cancelText:e.$t("trading-assistant.form.cancel"),maskClosable:!1,keyboard:!1},on:{ok:e.handleConfirmAddSymbol,cancel:e.handleCloseAddSymbolModal}},[a("div",{staticClass:"add-symbol-modal-content"},[a("a-tabs",{staticClass:"market-tabs",on:{change:e.handleAddSymbolMarketChange},model:{value:e.addSymbolMarket,callback:function(t){e.addSymbolMarket=t},expression:"addSymbolMarket"}},e._l(e.addSymbolMarketTypes,function(t){return a("a-tab-pane",{key:t.value,attrs:{tab:e.$t(t.i18nKey||"dashboard.analysis.market.".concat(t.value))}})}),1),a("div",{staticClass:"symbol-search-section"},[a("a-input-search",{attrs:{placeholder:e.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:e.searchingSymbol,size:"large","allow-clear":""},on:{search:e.handleSearchSymbol,change:e.handleSymbolSearchInputChange},model:{value:e.addSymbolKeyword,callback:function(t){e.addSymbolKeyword=t},expression:"addSymbolKeyword"}},[a("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),e.symbolSearchResults.length>0?a("div",{staticClass:"search-results-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),a("a-list",{staticClass:"symbol-list",attrs:{"data-source":e.symbolSearchResults,loading:e.searchingSymbol,size:"small"},scopedSlots:e._u([{key:"renderItem",fn:function(t){return a("a-list-item",{staticClass:"symbol-list-item",on:{click:function(a){return e.handleSelectAddSymbol(t)}}},[a("a-list-item-meta",[a("template",{slot:"title"},[a("div",{staticClass:"symbol-item-content"},[a("span",{staticClass:"symbol-code"},[e._v(e._s(t.symbol))]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.name))]),t.exchange?a("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[e._v(" "+e._s(t.exchange)+" ")]):e._e()],1)])],2)],1)}}],null,!1,2801225082)})],1):e._e(),a("div",{staticClass:"hot-symbols-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),a("a-spin",{attrs:{spinning:e.loadingHotSymbols}},[e.hotSymbols.length>0?a("a-list",{staticClass:"symbol-list",attrs:{"data-source":e.hotSymbols,size:"small"},scopedSlots:e._u([{key:"renderItem",fn:function(t){return a("a-list-item",{staticClass:"symbol-list-item",on:{click:function(a){return e.handleSelectAddSymbol(t)}}},[a("a-list-item-meta",[a("template",{slot:"title"},[a("div",{staticClass:"symbol-item-content"},[a("span",{staticClass:"symbol-code"},[e._v(e._s(t.symbol))]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.name))]),t.exchange?a("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[e._v(" "+e._s(t.exchange)+" ")]):e._e()],1)])],2)],1)}}],null,!1,3959834868)}):a("a-empty",{attrs:{description:e.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),e.selectedAddSymbol?a("div",{staticClass:"selected-symbol-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{color:"#52c41a","margin-right":"4px"},attrs:{type:"check-circle"}}),e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.selectedSymbol"))+" ")],1),a("div",{staticClass:"selected-symbol-info"},[a("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:e.getMarketColor(e.addSymbolMarket)}},[e._v(e._s(e.addSymbolMarket))]),a("span",{staticClass:"symbol-code"},[e._v(e._s(e.selectedAddSymbol.symbol))]),e.selectedAddSymbol.name?a("span",{staticClass:"symbol-name"},[e._v(e._s(e.selectedAddSymbol.name))]):e._e()],1)]):e._e()],1)])],1)],1),a("exchange-account-modal",{attrs:{visible:e.showExchangeAccountModal},on:{"update:visible":function(t){e.showExchangeAccountModal=t},success:e.handleExchangeAccountCreated}})],1)},i=[],r=a(15863),n=a(44735),o=a(81127),l=a(56252),c=a(2403),d=a(57532),u=a(76338),p=a(36911),m=a(35038),g=a(42430),h=a(84841),_=a(55434),y=a(75769),f=function(){var t=this,e=t._self._c;return e("div",{staticClass:"trading-records strategy-tab-pane-inner",class:{"theme-dark":t.isDark}},[0!==t.records.length||t.loading?e("a-table",{attrs:{columns:t.columns,"data-source":t.records,loading:t.loading,pagination:{pageSize:10},size:"small",rowKey:"id",scroll:{x:800}},scopedSlots:t._u([{key:"type",fn:function(a){return[e("a-tag",{attrs:{color:t.getTradeTypeColor(a)}},[t._v(" "+t._s(t.getTradeTypeText(a))+" ")])]}},{key:"price",fn:function(e){return[t._v(" $"+t._s(parseFloat(e).toFixed(4))+" ")]}},{key:"amount",fn:function(e){return[t._v(" "+t._s(parseFloat(e).toFixed(4))+" ")]}},{key:"value",fn:function(e){return[t._v(" $"+t._s(parseFloat(e).toFixed(2))+" ")]}},{key:"profit",fn:function(a,s){return[e("span",{style:{color:a>0?"#52c41a":a<0?"#f5222d":"#666"}},[t._v(" "+t._s(t.formatProfit(a,s))+" ")])]}},{key:"commission",fn:function(e){return[t._v(" "+t._s(t.formatCommission(e))+" ")]}},{key:"time",fn:function(e,a){return[t._v(" "+t._s(t.formatTime(a.created_at||e))+" ")]}}])}):e("div",{staticClass:"empty-state strategy-tab-empty"},[e("a-empty",{attrs:{description:t.$t("trading-assistant.table.noPositions")}})],1)],1)},v=[];function b(t,e){if(null==t)return{};var a={};for(var s in t)if({}.hasOwnProperty.call(t,s)){if(-1!==e.indexOf(s))continue;a[s]=t[s]}return a}function x(t,e){if(null==t)return{};var a,s,i=b(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(s=0;s<r.length;s++)a=r[s],-1===e.indexOf(a)&&{}.propertyIsEnumerable.call(t,a)&&(i[a]=t[a])}return i}var k=a(74053),C=a.n(k),S=a(75314),w=["timeZone"];function $(){try{var t=C().get(S.nc)||{},e=t.timezone;return e&&String(e).trim()||""}catch(a){return""}}function A(t){if(null==t||""===t)return null;if(t instanceof Date)return isNaN(t.getTime())?null:t;if("number"===typeof t){var e=t<1e12?1e3*t:t,a=new Date(e);return isNaN(a.getTime())?null:a}if("string"===typeof t){var s=t.trim();if(/^\d+$/.test(s)){var i=parseInt(s,10),r=i<1e12?1e3*i:i,n=new Date(r);return isNaN(n.getTime())?null:n}var o=new Date(s);return isNaN(o.getTime())?null:o}return null}function T(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=A(t);if(!a)return null!=e.fallback?e.fallback:"-";var s=e.locale||"undefined"!==typeof navigator&&navigator.language||"zh-CN",i=$(),r={year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1};i&&(r.timeZone=i);try{return a.toLocaleString(s,r)}catch(o){try{r.timeZone;var n=x(r,w);return a.toLocaleString(s,n)}catch(l){return a.toLocaleString()}}}var P={name:"TradingRecords",props:{strategyId:{type:Number,required:!0},loading:{type:Boolean,default:!1},isDark:{type:Boolean,default:!1}},computed:{columns:function(){return[{title:this.$t("trading-assistant.table.time"),dataIndex:"created_at",key:"created_at",width:180,scopedSlots:{customRender:"time"}},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:140,scopedSlots:{customRender:"type"}},{title:this.$t("trading-assistant.table.price"),dataIndex:"price",key:"price",width:120,scopedSlots:{customRender:"price"}},{title:this.$t("trading-assistant.table.amount"),dataIndex:"amount",key:"amount",width:120,scopedSlots:{customRender:"amount"}},{title:this.$t("trading-assistant.table.value"),dataIndex:"value",key:"value",width:120,scopedSlots:{customRender:"value"}},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:120,scopedSlots:{customRender:"profit"}},{title:this.$t("trading-assistant.table.commission"),dataIndex:"commission",key:"commission",width:100,scopedSlots:{customRender:"commission"}}]}},data:function(){return{records:[]}},watch:{strategyId:{handler:function(t){t&&this.loadRecords()},immediate:!0}},methods:{loadRecords:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.strategyId){e.n=1;break}return e.a(2);case 1:return e.p=1,e.n=2,(0,p.tq)(t.strategyId);case 2:a=e.v,1===a.code?t.records=(a.data.trades||[]).map(function(t){return(0,u.A)((0,u.A)({},t),{},{time:t.created_at||t.time})}):t.$message.error(a.msg||t.$t("trading-assistant.messages.loadTradesFailed")),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}))()},formatTime:function(t){if(!t)return"--";var e=this.$i18n.locale||"zh-CN";return T(t,{locale:e,fallback:"--"})},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan"};return e[t]||"default"},getTradeTypeText:function(t){var e={buy:this.$t("dashboard.indicator.backtest.buy"),sell:this.$t("dashboard.indicator.backtest.sell"),liquidation:this.$t("dashboard.indicator.backtest.liquidation"),open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit")};return e[t]||t},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},formatProfit:function(t,e){if(null===t||void 0===t)return"--";var a=parseFloat(t),s=["open_long","open_short","add_long","add_short"];return 0===a&&e&&s.includes(e.type)?"--":Math.abs(a)<1e-6?e&&s.includes(e.type)?"--":"$0.00":this.formatMoney(a)},formatCommission:function(t){if(null===t||void 0===t)return"--";var e=parseFloat(t);return isNaN(e)||Math.abs(e)<1e-6?"--":"$".concat(e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:6}))}}},M=P,F=a(845),I=(0,F.A)(M,f,v,!1,null,"46c92dab",null),N=I.exports,D=function(){var t=this,e=t._self._c;return e("div",{staticClass:"position-records strategy-tab-pane-inner",class:{"theme-dark":t.isDark}},[0!==t.positions.length||t.loading?e("a-table",{attrs:{columns:t.columns,"data-source":t.positions,loading:t.loading,pagination:!1,size:"small",rowKey:"id",scroll:{x:800}},scopedSlots:t._u([{key:"symbol",fn:function(a,s){return[e("strong",[t._v(t._s(s.symbol||a))])]}},{key:"side",fn:function(a,s){return[e("a-tag",{attrs:{color:"long"===(s.side||a)?"green":"red"}},[t._v(" "+t._s("long"===(s.side||a)?t.$t("trading-assistant.table.long"):t.$t("trading-assistant.table.short"))+" ")])]}},{key:"entryPrice",fn:function(a,s){return[t.hasValidPrice(s.entry_price||a)?e("span",[t._v(" $"+t._s(parseFloat(s.entry_price||a).toFixed(4))+" ")]):e("span",[t._v("--")])]}},{key:"currentPrice",fn:function(e,a){return[t._v(" $"+t._s(parseFloat(a.current_price||e||0).toFixed(4))+" ")]}},{key:"size",fn:function(e,a){return[t._v(" "+t._s(parseFloat(a.size||e||0).toFixed(4))+" ")]}},{key:"unrealizedPnl",fn:function(a,s){return[e("span",{class:{profit:parseFloat(s.unrealized_pnl||a||0)>0,loss:parseFloat(s.unrealized_pnl||a||0)<0}},[t._v(" $"+t._s(parseFloat(s.unrealized_pnl||a||0).toFixed(2))+" ")])]}},{key:"pnlPercent",fn:function(a,s){return[e("span",{class:{profit:parseFloat(s.pnl_percent||a||0)>0,loss:parseFloat(s.pnl_percent||a||0)<0}},[t._v(" "+t._s(parseFloat(s.pnl_percent||a||0).toFixed(2))+"% ")])]}}])}):e("div",{staticClass:"empty-state strategy-tab-empty"},[e("a-empty",{attrs:{description:t.$t("trading-assistant.table.noPositions")}})],1)],1)},V=[],E={name:"PositionRecords",props:{strategyId:{type:Number,required:!0},marketType:{type:String,default:"swap"},leverage:{type:[Number,String],default:1},loading:{type:Boolean,default:!1},isDark:{type:Boolean,default:!1}},data:function(){return{positions:[]}},computed:{columns:function(){return[{title:this.$t("trading-assistant.table.symbol"),dataIndex:"symbol",key:"symbol",width:120,scopedSlots:{customRender:"symbol"}},{title:this.$t("trading-assistant.table.side"),dataIndex:"side",key:"side",width:80,scopedSlots:{customRender:"side"}},{title:this.$t("trading-assistant.table.size"),dataIndex:"size",key:"size",width:120,scopedSlots:{customRender:"size"}},{title:this.$t("trading-assistant.table.entryPrice"),dataIndex:"entry_price",key:"entry_price",width:120,scopedSlots:{customRender:"entryPrice"}},{title:this.$t("trading-assistant.table.currentPrice"),dataIndex:"current_price",key:"current_price",width:120,scopedSlots:{customRender:"currentPrice"}},{title:this.$t("trading-assistant.table.unrealizedPnl"),dataIndex:"unrealized_pnl",key:"unrealized_pnl",width:120,scopedSlots:{customRender:"unrealizedPnl"}},{title:this.$t("trading-assistant.table.pnlPercent"),dataIndex:"pnl_percent",key:"pnl_percent",width:100,scopedSlots:{customRender:"pnlPercent"}}]}},watch:{strategyId:{handler:function(t){t?(this.loadPositions(),this.startPolling()):this.stopPolling()},immediate:!0}},beforeDestroy:function(){this.stopPolling()},methods:{loadPositions:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,s;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.strategyId){e.n=1;break}return e.a(2);case 1:return e.p=1,e.n=2,(0,p.oK)(t.strategyId);case 2:a=e.v,1===a.code?(s=a.data.positions||[],t.positions=s.map(function(e,a){var s=String(t.marketType||"swap").toLowerCase(),i=parseFloat(t.leverage);(!isFinite(i)||i<=0)&&(i=1),"spot"===s&&(i=1);var r=parseFloat(e.entry_price||e.entryPrice||0),n=parseFloat(e.size||"0")||0,o=parseFloat(e.unrealized_pnl||e.unrealizedPnl||"0")||0,l=parseFloat(e.pnl_percent||e.pnlPercent||"0")||0;r>0&&n>0?l=o/(r*n)*100*i:"spot"!==s&&(l*=i);var c={id:e.id||a,symbol:e.symbol||"",side:e.side||"long",size:n>0?n.toString():"0",entry_price:r>0?r.toString():"0",current_price:e.current_price||e.currentPrice||"0",unrealized_pnl:e.unrealized_pnl||e.unrealizedPnl||"0",pnl_percent:l,updated_at:e.updated_at||e.updatedAt||""};return c})):t.positions=[],e.n=4;break;case 3:e.p=3,e.v,t.positions=[];case 4:return e.a(2)}},e,null,[[1,3]])}))()},hasValidPrice:function(t){var e=parseFloat(t);return Number.isFinite(e)&&e>0},startPolling:function(){var t=this;this.stopPolling(),this.pollingTimer=setInterval(function(){t.loadPositions()},5e3)},stopPolling:function(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null)}}},R=E,z=(0,F.A)(R,D,V,!1,null,"6ba7d922",null),L=z.exports,U=function(){var t=this,e=t._self._c;return e("div",{staticClass:"strategy-type-selector",class:{"theme-dark":t.isDark}},[e("div",{staticClass:"selector-header"},[e("h3",[t._v(t._s(t.$t("trading-assistant.selectMode")))]),e("p",{staticClass:"selector-hint"},[t._v(t._s(t.$t("trading-assistant.selectModeHint")))])]),e("div",{staticClass:"mode-cards"},[e("div",{staticClass:"mode-card",class:{selected:"signal"===t.selected},on:{click:function(e){return t.$emit("select","signal")}}},[e("div",{staticClass:"card-icon signal-icon"},[e("a-icon",{attrs:{type:"line-chart"}})],1),e("div",{staticClass:"card-body"},[e("div",{staticClass:"card-badge-row"},[e("span",{staticClass:"card-badge"},[t._v(t._s(t.$t("trading-assistant.strategyMode.signalBadge")))])]),e("h4",[t._v(t._s(t.$t("trading-assistant.strategyMode.signal")))]),e("p",{staticClass:"card-desc"},[t._v(t._s(t.$t("trading-assistant.strategyMode.signalDesc")))]),e("ul",{staticClass:"card-features"},[e("li",[e("a-icon",{attrs:{type:"check"}}),t._v(" "+t._s(t.$t("trading-assistant.strategyMode.signalFeature1")))],1),e("li",[e("a-icon",{attrs:{type:"check"}}),t._v(" "+t._s(t.$t("trading-assistant.strategyMode.signalFeature2")))],1),e("li",[e("a-icon",{attrs:{type:"check"}}),t._v(" "+t._s(t.$t("trading-assistant.strategyMode.signalFeature3")))],1)])]),e("a-button",{staticClass:"card-btn",attrs:{type:"primary",ghost:""},on:{click:function(e){return e.stopPropagation(),t.$emit("select","signal")}}},[t._v(" "+t._s(t.$t("trading-assistant.useThisMode"))+" ")])],1),e("div",{staticClass:"mode-card",class:{selected:"script"===t.selected},on:{click:function(e){return t.$emit("select","script")}}},[e("div",{staticClass:"card-icon script-icon"},[e("a-icon",{attrs:{type:"code"}})],1),e("div",{staticClass:"card-body"},[e("div",{staticClass:"card-badge-row"},[e("span",{staticClass:"card-badge card-badge--script"},[t._v(t._s(t.$t("trading-assistant.strategyMode.scriptBadge")))])]),e("h4",[t._v(t._s(t.$t("trading-assistant.strategyMode.script")))]),e("p",{staticClass:"card-desc"},[t._v(t._s(t.$t("trading-assistant.strategyMode.scriptDesc")))]),e("ul",{staticClass:"card-features"},[e("li",[e("a-icon",{attrs:{type:"check"}}),t._v(" "+t._s(t.$t("trading-assistant.strategyMode.scriptFeature1")))],1),e("li",[e("a-icon",{attrs:{type:"check"}}),t._v(" "+t._s(t.$t("trading-assistant.strategyMode.scriptFeature2")))],1),e("li",[e("a-icon",{attrs:{type:"check"}}),t._v(" "+t._s(t.$t("trading-assistant.strategyMode.scriptFeature3")))],1)])]),e("a-button",{staticClass:"card-btn",attrs:{type:"primary",ghost:""},on:{click:function(e){return e.stopPropagation(),t.$emit("select","script")}}},[t._v(" "+t._s(t.$t("trading-assistant.useThisMode"))+" ")])],1)]),e("div",{staticClass:"template-quick-start"},[e("a-divider",[e("span",{staticClass:"divider-text"},[t._v(t._s(t.$t("trading-assistant.fromTemplate")))])]),e("div",{staticClass:"template-tags"},t._l(t.templates,function(a){return e("a-tag",{key:a.key,staticClass:"template-tag",on:{click:function(e){return t.$emit("use-template",a.key)}}},[e("span",{staticClass:"tpl-icon"},[t._v(t._s(a.icon))]),t._v(" "+t._s(t.$t("trading-assistant.template.".concat(a.key)))+" ")])}),1)],1)])},q=[],K=[{key:"trendFollowing",icon:"📈",code:"\"\"\"\nTrend Following Strategy\nUses EMA crossover with dynamic stop-loss / take-profit.\n\"\"\"\n\ndef on_init(ctx):\n ctx.fast_period = ctx.param('fast_period', 12)\n ctx.slow_period = ctx.param('slow_period', 26)\n ctx.position_pct = ctx.param('position_pct', 0.95)\n ctx.stop_pct = ctx.param('stop_pct', 0.03)\n ctx.take_profit_pct = ctx.param('take_profit_pct', 0.08)\n\ndef on_bar(ctx, bar):\n bars = ctx.bars(ctx.slow_period + 5)\n if len(bars) < ctx.slow_period:\n return\n\n closes = [b['close'] for b in bars]\n fast_ema = _ema(closes, ctx.fast_period)\n slow_ema = _ema(closes, ctx.slow_period)\n price = bar['close']\n\n if fast_ema > slow_ema and not ctx.position:\n qty = (ctx.equity * ctx.position_pct) / price\n ctx.buy(price, qty)\n ctx.log(f\"BUY at {price:.2f}\")\n\n elif fast_ema < slow_ema and ctx.position and ctx.position['side'] == 'long':\n ctx.close_position()\n ctx.log(f\"SELL at {price:.2f}\")\n\n if ctx.position and ctx.position['side'] == 'long':\n entry = ctx.position['entry_price']\n pnl_pct = (price - entry) / entry\n if pnl_pct <= -ctx.stop_pct:\n ctx.close_position()\n ctx.log(f\"STOP LOSS at {price:.2f}\")\n elif pnl_pct >= ctx.take_profit_pct:\n ctx.close_position()\n ctx.log(f\"TAKE PROFIT at {price:.2f}\")\n\ndef _ema(data, period):\n k = 2 / (period + 1)\n ema = data[0]\n for price in data[1:]:\n ema = price * k + ema * (1 - k)\n return ema\n",params:[{name:"fast_period",type:"integer",default:12,min:2,max:120,step:1},{name:"slow_period",type:"integer",default:26,min:5,max:240,step:1},{name:"position_pct",type:"percent",default:.95,min:.05,max:1,step:.01},{name:"stop_pct",type:"percent",default:.03,min:.001,max:.5,step:.001},{name:"take_profit_pct",type:"percent",default:.08,min:.001,max:1,step:.001}]},{key:"martingale",icon:"🔥",code:"\"\"\"\nMartingale Strategy\nDouble position on each loss, with max layer control.\n\"\"\"\n\ndef on_init(ctx):\n ctx.base_amount = ctx.param('base_amount', 100)\n ctx.max_layers = ctx.param('max_layers', 5)\n ctx.multiplier = ctx.param('multiplier', 2.0)\n ctx.take_profit_pct = ctx.param('take_profit_pct', 0.02)\n ctx.stop_loss_pct = ctx.param('stop_loss_pct', 0.04)\n ctx.cooldown_bars = ctx.param('cooldown_bars', 1)\n ctx.current_layer = 0\n ctx.cooldown = 0\n\ndef on_bar(ctx, bar):\n if ctx.cooldown > 0:\n ctx.cooldown -= 1\n return\n\n price = bar['close']\n if not ctx.position:\n amount = ctx.base_amount * (ctx.multiplier ** ctx.current_layer)\n if amount <= ctx.balance:\n qty = amount / price\n ctx.buy(price, qty)\n ctx.log(f\"Layer {ctx.current_layer}: BUY {qty:.4f} at {price:.2f}\")\n else:\n entry = ctx.position['entry_price']\n pnl_pct = (price - entry) / entry\n\n if pnl_pct >= ctx.take_profit_pct:\n ctx.close_position()\n ctx.current_layer = 0\n ctx.cooldown = ctx.cooldown_bars\n ctx.log(f\"TAKE PROFIT at {price:.2f}, reset layers\")\n\n elif pnl_pct <= -ctx.stop_loss_pct:\n ctx.close_position()\n ctx.cooldown = ctx.cooldown_bars\n if ctx.current_layer < ctx.max_layers:\n ctx.current_layer += 1\n ctx.log(f\"LOSS, escalate to layer {ctx.current_layer}\")\n else:\n ctx.current_layer = 0\n ctx.log(\"Max layers reached, reset\")\n",params:[{name:"base_amount",type:"number",default:100,min:10,max:1e6,step:10},{name:"max_layers",type:"integer",default:5,min:1,max:20,step:1},{name:"multiplier",type:"number",default:2,min:1,max:5,step:.1},{name:"take_profit_pct",type:"percent",default:.02,min:.001,max:1,step:.001},{name:"stop_loss_pct",type:"percent",default:.04,min:.001,max:1,step:.001},{name:"cooldown_bars",type:"integer",default:1,min:0,max:500,step:1}]},{key:"grid",icon:"📐",code:"\"\"\"\nGrid-style strategy (K-line / bar simulation).\n\nUnlike an exchange-native grid that pre-places many limit orders on the book, this template\nevaluates once per CLOSED bar: if the close crosses a grid cell edge, it emits buy/sell actions.\nLive behavior still depends on trade_direction (long / short / both) and spot vs futures.\n\ngrid_mode:\n- neutral: buy on dips into a cell, sell when price moves up out of a filled cell (futures+both may open shorts after flat)\n- long: long-biased grid; prefer trade_direction=long (spot is always long-only)\n- short: short-biased grid (sell to open on rallies, buy to cover on dips); prefer trade_direction=short or both\n\"\"\"\n\ndef on_init(ctx):\n ctx.grid_mode = ctx.param('grid_mode', 'neutral')\n ctx.grid_upper = ctx.param('grid_upper', 70000)\n ctx.grid_lower = ctx.param('grid_lower', 60000)\n ctx.grid_levels = ctx.param('grid_levels', 10)\n ctx.order_amount = ctx.param('order_amount', 100)\n ctx.take_profit_pct = ctx.param('take_profit_pct', 0.05)\n ctx.stop_loss_pct = ctx.param('stop_loss_pct', 0.03)\n ctx.filled_grids = set()\n\n spacing = (ctx.grid_upper - ctx.grid_lower) / ctx.grid_levels\n ctx.grid_prices = [ctx.grid_lower + i * spacing for i in range(ctx.grid_levels + 1)]\n\ndef on_bar(ctx, bar):\n price = bar['close']\n mode = str(ctx.grid_mode or 'neutral').lower()\n if mode not in ('neutral', 'long', 'short'):\n mode = 'neutral'\n\n if price < ctx.grid_lower or price > ctx.grid_upper:\n return\n\n if ctx.position:\n side = ctx.position.get('side') or ''\n entry = float(ctx.position.get('entry_price') or 0)\n if side == 'long' and entry > 0:\n pnl_pct = (price - entry) / entry\n elif side == 'short' and entry > 0:\n pnl_pct = (entry - price) / entry\n else:\n pnl_pct = 0.0\n if side in ('long', 'short') and (pnl_pct >= ctx.take_profit_pct or pnl_pct <= -ctx.stop_loss_pct):\n ctx.close_position()\n ctx.filled_grids.clear()\n ctx.log(f\"Grid risk exit at {price:.2f}, pnl={pnl_pct:.2%}\")\n return\n\n if mode == 'short':\n for i, gp in enumerate(ctx.grid_prices[:-1]):\n upper_gp = ctx.grid_prices[i + 1]\n grid_id = f\"grid_{i}\"\n if price >= upper_gp and grid_id not in ctx.filled_grids:\n qty = ctx.order_amount / price\n ctx.sell(price, qty)\n ctx.filled_grids.add(grid_id)\n ctx.log(f\"Grid SHORT add at {price:.2f} (level {i})\")\n elif price <= gp and grid_id in ctx.filled_grids:\n qty = ctx.order_amount / price\n ctx.buy(price, qty)\n ctx.filled_grids.discard(grid_id)\n ctx.log(f\"Grid SHORT cover at {price:.2f} (level {i})\")\n return\n\n for i, gp in enumerate(ctx.grid_prices[:-1]):\n upper_gp = ctx.grid_prices[i + 1]\n grid_id = f\"grid_{i}\"\n if price <= gp and grid_id not in ctx.filled_grids:\n qty = ctx.order_amount / price\n ctx.buy(price, qty)\n ctx.filled_grids.add(grid_id)\n ctx.log(f\"Grid BUY at {price:.2f} (level {i})\")\n elif price >= upper_gp and grid_id in ctx.filled_grids:\n qty = ctx.order_amount / price\n ctx.sell(price, qty)\n ctx.filled_grids.discard(grid_id)\n ctx.log(f\"Grid SELL at {price:.2f} (level {i})\")\n",params:[{name:"grid_mode",type:"select",default:"neutral",options:[{value:"neutral",labelKey:"trading-assistant.templateParam.grid_mode.optionNeutral"},{value:"long",labelKey:"trading-assistant.templateParam.grid_mode.optionLong"},{value:"short",labelKey:"trading-assistant.templateParam.grid_mode.optionShort"}]},{name:"grid_upper",type:"number",default:7e4,min:1,max:1e8,step:10},{name:"grid_lower",type:"number",default:6e4,min:1,max:1e8,step:10},{name:"grid_levels",type:"integer",default:10,min:2,max:200,step:1},{name:"order_amount",type:"number",default:100,min:1,max:1e6,step:1},{name:"take_profit_pct",type:"percent",default:.05,min:.001,max:1,step:.001},{name:"stop_loss_pct",type:"percent",default:.03,min:.001,max:1,step:.001}]},{key:"dca",icon:"💰",code:"\"\"\"\nDCA (Dollar Cost Averaging) Strategy\nPeriodic purchases with optional dip-buying.\n\"\"\"\n\ndef on_init(ctx):\n ctx.buy_amount = ctx.param('buy_amount', 100)\n ctx.dip_threshold = ctx.param('dip_threshold', 0.05)\n ctx.dip_multiplier = ctx.param('dip_multiplier', 2.0)\n ctx.buy_interval = ctx.param('buy_interval', 24)\n ctx.max_orders = ctx.param('max_orders', 999)\n ctx.bar_count = 0\n ctx.order_count = 0\n ctx.last_buy_price = None\n\ndef on_bar(ctx, bar):\n ctx.bar_count += 1\n price = bar['close']\n\n if ctx.order_count >= ctx.max_orders:\n return\n\n is_dip = False\n if ctx.last_buy_price and price < ctx.last_buy_price * (1 - ctx.dip_threshold):\n is_dip = True\n\n if ctx.bar_count % ctx.buy_interval == 0 or is_dip:\n amount = ctx.buy_amount * (ctx.dip_multiplier if is_dip else 1.0)\n if amount <= ctx.balance:\n qty = amount / price\n ctx.buy(price, qty)\n ctx.last_buy_price = price\n ctx.order_count += 1\n tag = \" (DIP BUY)\" if is_dip else \"\"\n ctx.log(f\"DCA BUY {qty:.6f} at {price:.2f}{tag}\")\n",params:[{name:"buy_amount",type:"number",default:100,min:1,max:1e6,step:1},{name:"buy_interval",type:"integer",default:24,min:1,max:1e3,step:1},{name:"dip_threshold",type:"percent",default:.05,min:.001,max:1,step:.001},{name:"dip_multiplier",type:"number",default:2,min:1,max:10,step:.1},{name:"max_orders",type:"integer",default:999,min:1,max:9999,step:1}]},{key:"meanReversion",icon:"🔄",code:"\"\"\"\nMean Reversion Strategy\nBollinger Bands based: buy at lower band, sell at upper band.\n\"\"\"\n\ndef on_init(ctx):\n ctx.period = ctx.param('period', 20)\n ctx.std_mult = ctx.param('std_mult', 2.0)\n ctx.position_pct = ctx.param('position_pct', 0.5)\n ctx.take_profit_pct = ctx.param('take_profit_pct', 0.03)\n ctx.stop_loss_pct = ctx.param('stop_loss_pct', 0.02)\n\ndef on_bar(ctx, bar):\n bars = ctx.bars(ctx.period + 5)\n if len(bars) < ctx.period:\n return\n\n closes = [b['close'] for b in bars[-ctx.period:]]\n mean = sum(closes) / len(closes)\n std = (sum((c - mean) ** 2 for c in closes) / len(closes)) ** 0.5\n\n upper = mean + ctx.std_mult * std\n lower = mean - ctx.std_mult * std\n price = bar['close']\n\n if price <= lower and not ctx.position:\n qty = (ctx.equity * ctx.position_pct) / price\n ctx.buy(price, qty)\n ctx.log(f\"BUY at {price:.2f} (below lower band {lower:.2f})\")\n\n elif price >= upper and ctx.position and ctx.position['side'] == 'long':\n ctx.close_position()\n ctx.log(f\"SELL at {price:.2f} (above upper band {upper:.2f})\")\n\n elif ctx.position and ctx.position['side'] == 'long':\n entry = ctx.position['entry_price']\n pnl_pct = (price - entry) / entry\n if pnl_pct >= ctx.take_profit_pct or pnl_pct <= -ctx.stop_loss_pct:\n ctx.close_position()\n ctx.log(f\"Risk exit at {price:.2f}, pnl={pnl_pct:.2%}\")\n",params:[{name:"period",type:"integer",default:20,min:2,max:300,step:1},{name:"std_mult",type:"number",default:2,min:.5,max:6,step:.1},{name:"position_pct",type:"percent",default:.5,min:.05,max:1,step:.01},{name:"take_profit_pct",type:"percent",default:.03,min:.001,max:1,step:.001},{name:"stop_loss_pct",type:"percent",default:.02,min:.001,max:1,step:.001}]},{key:"breakout",icon:"⚡",code:"\"\"\"\nBreakout Strategy\nEnter when price breaks key resistance/support with volume confirmation.\n\"\"\"\n\ndef on_init(ctx):\n ctx.lookback = ctx.param('lookback', 20)\n ctx.volume_mult = ctx.param('volume_mult', 1.5)\n ctx.position_pct = ctx.param('position_pct', 0.9)\n ctx.stop_pct = ctx.param('stop_pct', 0.02)\n ctx.take_profit_pct = ctx.param('take_profit_pct', 0.05)\n\ndef on_bar(ctx, bar):\n bars = ctx.bars(ctx.lookback + 5)\n if len(bars) < ctx.lookback:\n return\n\n recent = bars[-ctx.lookback:]\n high = max(b['high'] for b in recent[:-1])\n low = min(b['low'] for b in recent[:-1])\n avg_vol = sum(b['volume'] for b in recent[:-1]) / (len(recent) - 1)\n price = bar['close']\n vol = bar['volume']\n\n if price > high and vol > avg_vol * ctx.volume_mult and not ctx.position:\n qty = (ctx.equity * ctx.position_pct) / price\n ctx.buy(price, qty)\n ctx.log(f\"BREAKOUT BUY at {price:.2f} (prev high: {high:.2f})\")\n\n elif price < low and ctx.position and ctx.position['side'] == 'long':\n ctx.close_position()\n ctx.log(f\"BREAK DOWN, close at {price:.2f}\")\n\n if ctx.position and ctx.position['side'] == 'long':\n entry = ctx.position['entry_price']\n pnl_pct = (price - entry) / entry\n if pnl_pct <= -ctx.stop_pct:\n ctx.close_position()\n ctx.log(f\"STOP LOSS at {price:.2f}\")\n elif pnl_pct >= ctx.take_profit_pct:\n ctx.close_position()\n ctx.log(f\"TAKE PROFIT at {price:.2f}\")\n",params:[{name:"lookback",type:"integer",default:20,min:2,max:300,step:1},{name:"volume_mult",type:"number",default:1.5,min:.5,max:10,step:.1},{name:"position_pct",type:"percent",default:.9,min:.05,max:1,step:.01},{name:"stop_pct",type:"percent",default:.02,min:.001,max:1,step:.001},{name:"take_profit_pct",type:"percent",default:.05,min:.001,max:1,step:.001}]},{key:"rsiMeanReversion",icon:"📉",code:"\"\"\"\nRSI mean reversion (long-focused)\nBuys when RSI is oversold; exits long when RSI is overbought.\n\"\"\"\n\ndef on_init(ctx):\n ctx.rsi_period = ctx.param('rsi_period', 14)\n ctx.oversold = ctx.param('oversold', 30)\n ctx.overbought = ctx.param('overbought', 70)\n ctx.position_pct = ctx.param('position_pct', 0.5)\n\ndef _rsi_simple(closes, period):\n n = len(closes)\n if n < period + 1:\n return None\n gains = 0.0\n losses = 0.0\n for i in range(n - period, n):\n diff = closes[i] - closes[i - 1]\n if diff > 0:\n gains += diff\n else:\n losses -= diff\n if losses == 0:\n return 100.0 if gains > 0 else 50.0\n rs = gains / losses\n return 100.0 - (100.0 / (1.0 + rs))\n\ndef on_bar(ctx, bar):\n need = ctx.rsi_period + 3\n bars = ctx.bars(need)\n if len(bars) < need:\n return\n closes = [b['close'] for b in bars]\n r = _rsi_simple(closes, ctx.rsi_period)\n if r is None:\n return\n price = bar['close']\n if r <= ctx.oversold and not ctx.position:\n qty = (ctx.equity * ctx.position_pct) / price\n ctx.buy(price, qty)\n ctx.log(f\"RSI BUY r={r:.1f} at {price:.2f}\")\n elif r >= ctx.overbought and ctx.position and ctx.position['side'] == 'long':\n ctx.close_position()\n ctx.log(f\"RSI SELL r={r:.1f} at {price:.2f}\")\n",params:[{name:"rsi_period",type:"integer",default:14,min:2,max:100,step:1},{name:"oversold",type:"number",default:30,min:1,max:50,step:1},{name:"overbought",type:"number",default:70,min:50,max:99,step:1},{name:"position_pct",type:"percent",default:.5,min:.05,max:1,step:.01}]},{key:"macdCross",icon:"📊",code:"\"\"\"\nMACD histogram crossover\nEnters long when MACD histogram crosses above zero; exits when it crosses below.\n\"\"\"\n\ndef on_init(ctx):\n ctx.macd_fast = ctx.param('macd_fast', 12)\n ctx.macd_slow = ctx.param('macd_slow', 26)\n ctx.macd_signal = ctx.param('macd_signal', 9)\n ctx.position_pct = ctx.param('position_pct', 0.6)\n\ndef _ema_series(vals, period):\n k = 2.0 / (period + 1)\n out = []\n e = float(vals[0])\n out.append(e)\n for v in vals[1:]:\n v = float(v)\n e = v * k + e * (1 - k)\n out.append(e)\n return out\n\ndef _macd_hist_last_two(closes, fast, slow, sig):\n n = len(closes)\n if n < slow + sig + 2:\n return None, None\n ef = _ema_series(closes, fast)\n es = _ema_series(closes, slow)\n macd = [ef[i] - es[i] for i in range(n)]\n sg = _ema_series(macd, sig)\n hist = [macd[i] - sg[i] for i in range(n)]\n return hist[-2], hist[-1]\n\ndef on_bar(ctx, bar):\n need = ctx.macd_slow + ctx.macd_signal + 30\n bars = ctx.bars(need)\n if len(bars) < need:\n return\n closes = [b['close'] for b in bars]\n h0, h1 = _macd_hist_last_two(closes, ctx.macd_fast, ctx.macd_slow, ctx.macd_signal)\n if h0 is None:\n return\n price = bar['close']\n if h0 <= 0 and h1 > 0 and not ctx.position:\n qty = (ctx.equity * ctx.position_pct) / price\n ctx.buy(price, qty)\n ctx.log(f\"MACD cross up at {price:.2f}\")\n elif h0 >= 0 and h1 < 0 and ctx.position and ctx.position['side'] == 'long':\n ctx.close_position()\n ctx.log(f\"MACD cross down at {price:.2f}\")\n",params:[{name:"macd_fast",type:"integer",default:12,min:2,max:50,step:1},{name:"macd_slow",type:"integer",default:26,min:5,max:120,step:1},{name:"macd_signal",type:"integer",default:9,min:2,max:50,step:1},{name:"position_pct",type:"percent",default:.6,min:.05,max:1,step:.01}]}];function O(t){return String(t).replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function B(t){return"boolean"===typeof t?t?"True":"False":"number"===typeof t?Number.isFinite(t)?String(t):"0":null===t||void 0===t?"None":"'".concat(String(t).replace(/\\/g,"\\\\").replace(/'/g,"\\'"),"'")}var G=K;function H(t){return K.find(function(e){return e.key===t})||null}function W(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a="string"===typeof t?H(t):t;return a?a.params.reduce(function(t,a){return t[a.name]=Object.prototype.hasOwnProperty.call(e,a.name)?e[a.name]:a.default,t},{}):{}}function j(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a="string"===typeof t?H(t):t;if(!a)return"";var s=W(a,e);return a.params.reduce(function(t,e){var a=B(s[e.name]),i=new RegExp("(ctx\\.param\\(['\"]".concat(O(e.name),"['\"],\\s*)([^\\)]+)(\\))"));return t.replace(i,"$1".concat(a,"$3"))},a.code)}var Y={name:"StrategyTypeSelector",props:{selected:{type:String,default:""},isDark:{type:Boolean,default:!1}},data:function(){return{templates:G.map(function(t){return{key:t.key,icon:t.icon}})}}},J=Y,X=(0,F.A)(J,U,q,!1,null,"8ec7ab14",null),Z=X.exports,Q=function(){var t=this,e=t._self._c;return e("div",{staticClass:"strategy-editor",class:{"theme-dark":t.isDark}},[e("a-row",{staticClass:"editor-layout",attrs:{gutter:16}},[e("a-col",{staticClass:"code-col",attrs:{xs:24,md:16}},[e("div",{staticClass:"code-section"},[e("div",{staticClass:"section-header"},[e("div",{staticClass:"section-title-wrap"},[e("span",{staticClass:"section-title"},[e("a-icon",{attrs:{type:"code"}}),t._v(" "+t._s(t.$t("trading-assistant.editor.title"))+" ")],1),t.selectedTemplate?e("a-tag",{staticClass:"current-template-tag",attrs:{color:"blue"}},[t._v(" "+t._s(t.$t("trading-assistant.template.".concat(t.selectedTemplate.key)))+" ")]):t._e()],1),e("div",{staticClass:"section-actions"},[e("a-button",{staticClass:"verify-btn",attrs:{type:"link",size:"small",loading:t.verifying},on:{click:t.handleVerify}},[e("a-icon",{attrs:{type:"check-circle"}}),t._v(" "+t._s(t.$t("trading-assistant.editor.verify"))+" ")],1)],1)]),e("div",{ref:"editorContainer",staticClass:"code-editor-container"})])]),e("a-col",{staticClass:"side-col",attrs:{xs:24,md:8}},[e("a-tabs",{staticClass:"side-tabs",attrs:{size:"small",animated:!1},model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[e("a-tab-pane",{key:"templates",attrs:{tab:t.$t("trading-assistant.editor.templateTab"),"force-render":!0}},[e("div",{staticClass:"panel-intro"},[e("div",{staticClass:"panel-intro__title"},[t._v(t._s(t.$t("trading-assistant.editor.templateIntroTitle")))]),e("div",{staticClass:"panel-intro__desc"},[t._v(t._s(t.$t("trading-assistant.editor.templateIntroDesc")))])]),e("div",{staticClass:"template-list"},t._l(t.templates,function(a){return e("div",{key:a.key,staticClass:"template-item",class:{active:t.selectedTemplateKey===a.key},on:{click:function(e){return t.loadTemplate(a.key,{focusParams:!0,resetParams:!0})}}},[e("div",{staticClass:"tpl-header"},[e("span",{staticClass:"tpl-icon"},[t._v(t._s(a.icon))]),e("span",{staticClass:"tpl-name"},[t._v(t._s(t.$t("trading-assistant.template.".concat(a.key))))])]),e("p",{staticClass:"tpl-desc"},[t._v(t._s(t.$t("trading-assistant.template.".concat(a.key,"Desc"))))]),e("a-button",{staticClass:"tpl-use-btn",attrs:{type:"link",size:"small"}},[t._v(" "+t._s(t.$t("trading-assistant.template.useTemplate"))+" "),e("a-icon",{attrs:{type:"arrow-right"}})],1)],1)}),0)]),e("a-tab-pane",{key:"params",attrs:{tab:t.$t("trading-assistant.editor.paramsTab"),"force-render":!0}},[t.selectedTemplate?e("div",{staticClass:"params-panel"},[e("div",{staticClass:"panel-intro"},[e("div",{staticClass:"panel-intro__title"},[t._v(" "+t._s(t.$t("trading-assistant.template.".concat(t.selectedTemplate.key)))+" ")]),e("div",{staticClass:"panel-intro__desc"},[t._v(" "+t._s(t.$t("trading-assistant.template.".concat(t.selectedTemplate.key,"Desc")))+" ")])]),e("a-alert",{staticClass:"params-tip",attrs:{type:"info","show-icon":"",message:t.$t("trading-assistant.editor.paramsHint")}}),e("div",{staticClass:"param-list"},t._l(t.selectedTemplate.params,function(a){return e("div",{key:a.name,staticClass:"param-item"},[e("div",{staticClass:"param-item__label-row"},[e("span",{staticClass:"param-item__label"},[t._v(t._s(t.getParamLabel(a)))]),e("span",{staticClass:"param-item__type"},[t._v(t._s(t.getParamTypeLabel(a.type)))])]),t.getParamDescription(a)?e("div",{staticClass:"param-item__desc"},[t._v(t._s(t.getParamDescription(a)))]):t._e(),"number"===a.type||"integer"===a.type||"percent"===a.type?e("a-input-number",{staticStyle:{width:"100%"},attrs:{value:t.templateParamValues[a.name],min:a.min,max:a.max,step:a.step||1,precision:"integer"===a.type?0:t.getParamPrecision(a)},on:{change:function(e){return t.handleNumericParamChange(a,e)}}}):"select"===a.type?e("a-select",{staticStyle:{width:"100%"},attrs:{value:t.templateParamValues[a.name]},on:{change:function(e){return t.handleSelectParamChange(a,e)}}},t._l(a.options||[],function(a){return e("a-select-option",{key:a.value,attrs:{value:a.value}},[t._v(" "+t._s(t.getOptionLabel(a))+" ")])}),1):"boolean"===a.type?e("div",{staticClass:"param-item__switch"},[e("a-switch",{attrs:{checked:!!t.templateParamValues[a.name]},on:{change:function(e){return t.handleBooleanParamChange(a,e)}}}),e("span",[t._v(t._s(t.templateParamValues[a.name]?t.$t("common.yes"):t.$t("common.no")))])],1):e("a-input",{attrs:{value:t.templateParamValues[a.name]},on:{input:function(e){return t.handleTextParamChange(a,e.target.value)}}})],1)}),0),e("div",{staticClass:"params-actions"},[e("a-button",{on:{click:t.resetTemplateParams}},[t._v(" "+t._s(t.$t("trading-assistant.editor.resetTemplateParams"))+" ")]),e("a-button",{attrs:{type:"primary",disabled:!t.templateDirty},on:{click:t.applySelectedTemplateToCode}},[t._v(" "+t._s(t.$t("trading-assistant.editor.applyTemplateParams"))+" ")])],1)],1):e("div",{staticClass:"params-empty-guide"},[e("a-empty",{attrs:{description:t.$t("trading-assistant.editor.paramsEmpty")}},[e("a-button",{attrs:{type:"primary",size:"small",ghost:""},on:{click:function(e){t.activeTab="templates"}}},[e("a-icon",{attrs:{type:"appstore"}}),t._v(" "+t._s(t.$t("trading-assistant.editor.templateTab"))+" ")],1)],1)],1)]),e("a-tab-pane",{key:"ai",attrs:{tab:t.$t("trading-assistant.editor.aiTab"),"force-render":!0}},[e("div",{staticClass:"ai-panel"},[e("div",{staticClass:"panel-intro"},[e("div",{staticClass:"panel-intro__title"},[e("a-icon",{attrs:{type:"robot"}}),e("span",[t._v(t._s(t.$t("trading-assistant.editor.aiGenerate")))])],1),e("div",{staticClass:"panel-intro__desc"},[t._v(t._s(t.$t("trading-assistant.editor.aiHint")))])]),e("div",{staticClass:"ai-suggestions"},t._l(t.aiPromptSuggestions,function(a){return e("a-tag",{key:a.id,staticClass:"prompt-tag",on:{click:function(e){return t.applyPromptSuggestion(a.value)}}},[t._v(" "+t._s(a.label)+" ")])}),1),e("a-textarea",{attrs:{placeholder:t.$t("trading-assistant.editor.aiPromptPlaceholder"),rows:10,"auto-size":{minRows:8,maxRows:16}},model:{value:t.aiPrompt,callback:function(e){t.aiPrompt=e},expression:"aiPrompt"}}),e("div",{staticClass:"ai-actions"},[e("a-button",{attrs:{type:"primary",block:"",loading:t.aiAdjustingParams,disabled:t.aiGenerating,size:"large"},on:{click:t.handleAIAdjustParams}},[e("a-icon",{attrs:{type:"setting"}}),t._v(" "+t._s(t.$t("trading-assistant.editor.aiAdjustParamsBtn"))+" ")],1),e("a-button",{staticStyle:{"margin-top":"8px"},attrs:{block:"",loading:t.aiGenerating,disabled:t.aiAdjustingParams,size:"large"},on:{click:t.handleAIGenerate}},[e("a-icon",{attrs:{type:"code"}}),t._v(" "+t._s(t.$t("trading-assistant.editor.aiGenerateFullCodeBtn"))+" ")],1)],1),t.aiGenerating||t.aiAdjustingParams?e("div",{staticClass:"ai-status"},[e("a-icon",{attrs:{type:"loading",spin:""}}),t._v(" "+t._s(t.aiAdjustingParams?t.$t("trading-assistant.editor.aiAdjustingParams"):t.$t("trading-assistant.editor.generating"))+" ")],1):t._e()],1)])],1)],1)],1)],1)},tt=[],et=(a(6011),a(18787)),at=a(15237),st=a.n(at),it=(a(74806),a(55218),a(97923),a(50436),{name:"StrategyEditor",props:{value:{type:String,default:""},isDark:{type:Boolean,default:!1},userId:{type:[Number,String],default:1},visible:{type:Boolean,default:!1},initialTemplateKey:{type:String,default:""}},data:function(){return{activeTab:"templates",aiPrompt:"",aiGenerating:!1,aiAdjustingParams:!1,verifying:!1,editor:null,templates:G,selectedTemplateKey:"",templateParamValues:{},templateDirty:!1,refreshTimer:null}},computed:{selectedTemplate:function(){return H(this.selectedTemplateKey)},aiPromptSuggestions:function(){return[{id:"improve",label:this.$t("trading-assistant.editor.aiSuggestionImprove"),value:this.$t("trading-assistant.editor.aiSuggestionImprovePrompt")},{id:"risk",label:this.$t("trading-assistant.editor.aiSuggestionRisk"),value:this.$t("trading-assistant.editor.aiSuggestionRiskPrompt")},{id:"explain",label:this.$t("trading-assistant.editor.aiSuggestionExplain"),value:this.$t("trading-assistant.editor.aiSuggestionExplainPrompt")}]}},mounted:function(){var t=this;this.$nextTick(function(){t.initEditor(),t.initialTemplateKey?t.loadTemplate(t.initialTemplateKey,{focusParams:!0,resetParams:!0}):t.value||t.$emit("input",t._getDefaultCode())}),window.addEventListener("resize",this.scheduleEditorRefresh)},beforeDestroy:function(){window.removeEventListener("resize",this.scheduleEditorRefresh),this.refreshTimer&&(clearTimeout(this.refreshTimer),this.refreshTimer=null),this.editor&&("function"===typeof this.editor.toTextArea&&this.editor.toTextArea(),this.editor=null)},watch:{value:function(t){this.editor&&this.editor.getValue()!==t&&(this.editor.setValue(t||""),this.scheduleEditorRefresh())},isDark:function(){this.editor&&this.editor.setOption("theme",this.isDark?"monokai":"eclipse"),this.scheduleEditorRefresh()},visible:function(t){var e=this;t&&this.$nextTick(function(){e.scheduleEditorRefresh();try{window.dispatchEvent(new Event("resize"))}catch(t){}})},initialTemplateKey:function(t){t&&t!==this.selectedTemplateKey&&this.loadTemplate(t,{focusParams:!0,resetParams:!0})}},methods:{initEditor:function(){var t=this;this.$refs.editorContainer&&(this.editor=st()(this.$refs.editorContainer,{value:this.value||this._getDefaultCode(),mode:"python",theme:this.isDark?"monokai":"eclipse",lineNumbers:!0,autoCloseBrackets:!0,matchBrackets:!0,styleActiveLine:!0,tabSize:4,indentUnit:4,indentWithTabs:!1,lineWrapping:!1,viewportMargin:1/0,gutters:["CodeMirror-linenumbers"]}),this.editor.on("change",function(){t.$emit("input",t.editor.getValue())}),this.scheduleEditorRefresh())},scheduleEditorRefresh:function(){var t=this;this.refreshTimer&&clearTimeout(this.refreshTimer),this.refreshTimer=setTimeout(function(){t.editor&&t.editor.refresh()},60)},_getDefaultCode:function(){return'"""\nMy Custom Strategy\n"""\n\ndef on_init(ctx):\n # Initialize strategy parameters\n pass\n\ndef on_bar(ctx, bar):\n # Core trading logic, called on each K-line bar\n # bar: { open, high, low, close, volume, timestamp }\n price = bar[\'close\']\n\n bars = ctx.bars(20)\n if len(bars) < 20:\n return\n\n avg = sum(b[\'close\'] for b in bars) / len(bars)\n\n if price > avg and not ctx.position:\n ctx.buy(price, ctx.equity * 0.9 / price)\n ctx.log(f"BUY at {price}")\n\n elif price < avg and ctx.position:\n ctx.close_position()\n ctx.log(f"SELL at {price}")\n'},loadTemplate:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=e.focusParams,s=void 0!==a&&a,i=e.resetParams,r=void 0===i||i,n=H(t);n&&(this.selectedTemplateKey=t,!r&&this.templateParamValues&&0!==Object.keys(this.templateParamValues).length||(this.templateParamValues=W(n)),this.templateDirty=!0,this.applySelectedTemplateToCode({silent:!0}),s&&(this.activeTab="params"),this.aiPrompt.trim()||(this.aiPrompt=this.$t("trading-assistant.editor.aiPromptTemplateHint")+" "+this.$t("trading-assistant.template.".concat(n.key))),this.scheduleEditorRefresh())},getCode:function(){return this.editor?this.editor.getValue():this.value},setCode:function(t){this.editor&&this.editor.getValue()!==t?this.editor.setValue(t):this.$emit("input",t),this.scheduleEditorRefresh()},applySelectedTemplateToCode:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.silent,a=void 0!==e&&e;if(this.selectedTemplate){var s=j(this.selectedTemplate,this.templateParamValues);this.setCode(s),this.templateDirty=!1,this.$emit("template-change",{key:this.selectedTemplateKey,params:(0,u.A)({},this.templateParamValues)}),a||et.A.success(this.$t("trading-assistant.editor.templateApplied"))}},resetTemplateParams:function(){this.selectedTemplate&&(this.templateParamValues=W(this.selectedTemplate),this.templateDirty=!0,this.applySelectedTemplateToCode({silent:!1}))},getParamLabel:function(t){var e="trading-assistant.templateParam.".concat(t.name,".label"),a=this.$t(e);return a===e?t.name:a},getParamDescription:function(t){var e="trading-assistant.templateParam.".concat(t.name,".desc"),a=this.$t(e);return a===e?"":a},getParamTypeLabel:function(t){return this.$t("trading-assistant.editor.paramType.".concat(t))},getOptionLabel:function(t){if(!t)return"";if(t.labelKey){var e=this.$t(t.labelKey);if(e!==t.labelKey)return e}return t.label||t.value},getParamPrecision:function(t){if("integer"===t.type)return 0;var e=t.step;if(!e||Number.isInteger(e))return 0;var a=String(e),s=a.split(".");return s[1]?s[1].length:0},handleNumericParamChange:function(t,e){var a=""===e||null===e||void 0===e?t.default:"integer"===t.type?parseInt(e,10):Number(e);this.$set(this.templateParamValues,t.name,a),this.templateDirty=!0},handleSelectParamChange:function(t,e){this.$set(this.templateParamValues,t.name,e),this.templateDirty=!0},handleBooleanParamChange:function(t,e){this.$set(this.templateParamValues,t.name,!!e),this.templateDirty=!0},handleTextParamChange:function(t,e){this.$set(this.templateParamValues,t.name,e),this.templateDirty=!0},applyPromptSuggestion:function(t){this.aiPrompt=t},handleVerify:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,s,i;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.verifying=!0,e.p=1,a=t.getCode(),e.n=2,(0,y.Ay)({url:"/api/strategies/verify-code",method:"post",data:{code:a,user_id:t.userId}});case 2:s=e.v,s&&s.success?et.A.success(t.$t("trading-assistant.editor.verifySuccess")):et.A.error(s&&(s.msg||s.message)||t.$t("trading-assistant.editor.verifyFailed")),e.n=4;break;case 3:e.p=3,i=e.v,et.A.error(t.$t("trading-assistant.editor.verifyFailed")+": "+(i.message||""));case 4:return e.p=4,t.verifying=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},_coerceParamValue:function(t,e){if(null!==e&&void 0!==e){var a=t.type;if("boolean"===a)return"boolean"===typeof e?e:"true"===e||1===e||"1"===e||"false"!==e&&0!==e&&"0"!==e&&void 0;if("integer"===a){var s=parseInt(String(e),10);if(!Number.isFinite(s))return;var i=s;return null!=t.min&&(i=Math.max(t.min,i)),null!=t.max&&(i=Math.min(t.max,i)),i}if("number"===a||"percent"===a){var r=Number(e);if(!Number.isFinite(r))return;var n=r;return null!=t.min&&(n=Math.max(t.min,n)),null!=t.max&&(n=Math.min(t.max,n)),n}if("select"===a){var o=t.options||[],l=new Set(o.map(function(t){return t.value}));if(l.has(e))return e;var c=String(e);return l.has(c)?c:void 0}return String(e)}},applyAIParamUpdates:function(t){var e=this;if(!this.selectedTemplate||!t||"object"!==(0,n.A)(t))return!1;var a=new Set(this.selectedTemplate.params.map(function(t){return t.name})),s=!1;return Object.keys(t).forEach(function(i){if(a.has(i)){var r=e.selectedTemplate.params.find(function(t){return t.name===i}),n=e._coerceParamValue(r,t[i]);void 0!==n&&(e.$set(e.templateParamValues,i,n),s=!0)}}),s},handleAIAdjustParams:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,s,i;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.aiPrompt.trim()){e.n=1;break}return et.A.warning(t.$t("trading-assistant.editor.aiPromptRequired")),e.a(2);case 1:if(t.selectedTemplate){e.n=2;break}return et.A.warning(t.$t("trading-assistant.editor.aiAdjustParamsNeedTemplate")),e.a(2);case 2:return t.aiAdjustingParams=!0,e.p=3,e.n=4,(0,y.Ay)({url:"/api/strategies/ai-generate",method:"post",data:{prompt:t.aiPrompt,user_id:t.userId,intent:"adjust_params",template_key:t.selectedTemplateKey,params:(0,u.A)({},t.templateParamValues),code:t.getCode()}});case 4:a=e.v,a&&a.params&&"object"===(0,n.A)(a.params)?(s=t.applyAIParamUpdates(a.params),s?(t.templateDirty=!0,t.applySelectedTemplateToCode({silent:!0}),et.A.success(t.$t("trading-assistant.editor.aiAdjustParamsSuccess"))):et.A.warning(t.$t("trading-assistant.editor.aiAdjustParamsNoChanges"))):et.A.error(a&&(a.msg||a.message)||t.$t("trading-assistant.editor.aiAdjustParamsFailed")),e.n=6;break;case 5:e.p=5,i=e.v,et.A.error(i&&i.message||t.$t("trading-assistant.editor.aiAdjustParamsFailed"));case 6:return e.p=6,t.aiAdjustingParams=!1,e.f(6);case 7:return e.a(2)}},e,null,[[3,5,6,7]])}))()},handleAIGenerate:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,s,i;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.aiPrompt.trim()){e.n=1;break}return et.A.warning(t.$t("trading-assistant.editor.aiPromptRequired")),e.a(2);case 1:return t.aiGenerating=!0,e.p=2,e.n=3,(0,y.Ay)({url:"/api/strategies/ai-generate",method:"post",data:{prompt:t.aiPrompt,user_id:t.userId,intent:"generate_code",template_key:t.selectedTemplateKey||void 0,params:t.selectedTemplate?(0,u.A)({},t.templateParamValues):void 0,code:t.getCode()}});case 3:a=e.v,s=a&&"string"===typeof a.code?a.code:"",s?(t.setCode(s),et.A.success(t.$t("trading-assistant.editor.aiGenerateSuccess"))):et.A.error(a&&(a.msg||a.message)||t.$t("trading-assistant.editor.aiGenerateFailed")),e.n=5;break;case 4:e.p=4,i=e.v,et.A.error(i&&i.message||t.$t("trading-assistant.editor.aiGenerateFailed"));case 5:return e.p=5,t.aiGenerating=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}))()}}}),rt=it,nt=(0,F.A)(rt,Q,tt,!1,null,"35a0a386",null),ot=nt.exports,lt=function(){var t=this,e=t._self._c;return e("div",{staticClass:"performance-analysis strategy-tab-pane-inner",class:{"theme-dark":t.isDark}},[e("a-spin",{attrs:{spinning:t.loading}},[t.hasData?e("div",[e("div",{staticClass:"metrics-grid"},[e("div",{staticClass:"metric-card",class:t.getMetricClass(t.metrics.totalReturn)},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("trading-assistant.performance.totalReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.metrics.totalReturn)))])]),e("div",{staticClass:"metric-card",class:t.getMetricClass(t.metrics.annualReturn)},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("trading-assistant.performance.annualReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.metrics.annualReturn)))])]),e("div",{staticClass:"metric-card negative"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("trading-assistant.performance.maxDrawdown")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.metrics.maxDrawdown)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("trading-assistant.performance.sharpe")))]),e("div",{staticClass:"metric-value"},[t._v(t._s((t.metrics.sharpe||0).toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("trading-assistant.performance.winRate")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.metrics.winRate)))])]),e("div",{staticClass:"metric-card",class:t.getMetricClass((t.metrics.profitFactor||0)-1)},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("trading-assistant.performance.profitFactor")))]),e("div",{staticClass:"metric-value"},[t._v(t._s((t.metrics.profitFactor||0).toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("trading-assistant.performance.totalTrades")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.metrics.totalTrades||0))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("trading-assistant.performance.runningDays")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.metrics.runningDays||0))])])]),e("div",{staticClass:"chart-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("trading-assistant.performance.equityCurve")))]),e("div",{ref:"equityChart",staticClass:"chart-container"})]),e("div",{staticClass:"chart-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("trading-assistant.performance.dailyReturns")))]),e("div",{ref:"dailyChart",staticClass:"chart-container",staticStyle:{height:"250px"}})])]):t.loading?t._e():e("a-empty",{staticClass:"strategy-tab-empty",attrs:{description:t.$t("trading-assistant.performance.noData")}})],1)],1)},ct=[],dt={name:"PerformanceAnalysis",props:{strategyId:{type:[Number,String],default:null},isDark:{type:Boolean,default:!1}},data:function(){return{loading:!1,metrics:{},equityData:[],dailyReturns:[],equityChartInstance:null,dailyChartInstance:null}},computed:{hasData:function(){return this.equityData.length>0}},watch:{strategyId:{handler:function(t){t&&this.loadData()},immediate:!0},isDark:function(){var t=this;this.disposeCharts(),this.$nextTick(function(){return t.renderCharts()})}},beforeDestroy:function(){this.disposeCharts()},methods:{loadData:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.strategyId){e.n=1;break}return e.a(2);case 1:return t.loading=!0,e.p=2,e.n=3,(0,p.Yx)(t.strategyId);case 3:a=e.v,a&&a.data&&(t.equityData=a.data.equity_curve||a.data||[],t.computeMetrics(),t.$nextTick(function(){return t.renderCharts()})),e.n=5;break;case 4:e.p=4,e.v;case 5:return e.p=5,t.loading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}))()},computeMetrics:function(){var t=this.equityData;if(t.length){for(var e=t.map(function(t){return t.equity||t.value||t.y||0}),a=e[0]||1,s=e[e.length-1]||a,i=(s-a)/a,r=e[0],n=0,o=[],l=1;l<e.length;l++){e[l]>r&&(r=e[l]);var c=(e[l]-r)/r;c<n&&(n=c),o.push((e[l]-e[l-1])/e[l-1])}this.dailyReturns=o;var d=t.length,u=365/Math.max(d,1),p=o.length?o.reduce(function(t,e){return t+e},0)/o.length:0,m=o.length>1?Math.sqrt(o.reduce(function(t,e){return t+Math.pow(e-p,2)},0)/(o.length-1)):0,g=t.filter(function(t){return t.trade_count}).reduce(function(t,e){return t+e.trade_count},0)||0,h=t.filter(function(t){return t.win_count}).reduce(function(t,e){return t+e.win_count},0)||0,_=t.filter(function(t){return t.gross_profit}).reduce(function(t,e){return t+e.gross_profit},0),y=Math.abs(t.filter(function(t){return t.gross_loss}).reduce(function(t,e){return t+e.gross_loss},0));this.metrics={totalReturn:i,annualReturn:Math.pow(1+i,u)-1,maxDrawdown:n,sharpe:m>0?p/m*Math.sqrt(252):0,winRate:g>0?h/g:0,profitFactor:y>0?_/y:_>0?999:0,totalTrades:g,runningDays:d}}else this.metrics={}},renderCharts:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,t.getEcharts();case 1:if(a=e.v,a){e.n=2;break}return e.a(2);case 2:t.renderEquityChart(a),t.renderDailyChart(a);case 3:return e.a(2)}},e)}))()},getEcharts:function(){return(0,l.A)((0,o.A)().m(function t(){var e;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!window.echarts){t.n=1;break}return t.a(2,window.echarts);case 1:return t.p=1,t.n=2,Promise.resolve().then(a.bind(a,29362));case 2:return e=t.v,window.echarts=e.default||e,t.a(2,window.echarts);case 3:return t.p=3,t.v,t.a(2,null)}},t,null,[[1,3]])}))()},renderEquityChart:function(t){if(this.$refs.equityChart){this.equityChartInstance=t.init(this.$refs.equityChart,this.isDark?"dark":null);var e=this.equityData.map(function(t){return t.date||t.timestamp||t.x||""}),a=this.equityData.map(function(t){return t.equity||t.value||t.y||0});this.equityChartInstance.setOption({tooltip:{trigger:"axis"},grid:{left:60,right:20,top:20,bottom:30},xAxis:{type:"category",data:e,axisLabel:{fontSize:10}},yAxis:{type:"value",axisLabel:{fontSize:10}},series:[{type:"line",data:a,smooth:!0,lineStyle:{width:2,color:"#1890ff"},areaStyle:{color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:"rgba(24,144,255,0.3)"},{offset:1,color:"rgba(24,144,255,0.02)"}]}},itemStyle:{color:"#1890ff"},showSymbol:!1}]})}},renderDailyChart:function(t){this.$refs.dailyChart&&this.dailyReturns.length&&(this.dailyChartInstance=t.init(this.$refs.dailyChart,this.isDark?"dark":null),this.dailyChartInstance.setOption({tooltip:{trigger:"axis",formatter:function(t){return"".concat((100*t[0].value).toFixed(2),"%")}},grid:{left:60,right:20,top:10,bottom:30},xAxis:{type:"category",data:this.dailyReturns.map(function(t,e){return e+1}),show:!1},yAxis:{type:"value",axisLabel:{formatter:function(t){return(100*t).toFixed(1)+"%"},fontSize:10}},series:[{type:"bar",data:this.dailyReturns.map(function(t){return{value:t,itemStyle:{color:t>=0?"#52c41a":"#ff4d4f"}}}),barMaxWidth:6}]}))},disposeCharts:function(){this.equityChartInstance&&(this.equityChartInstance.dispose(),this.equityChartInstance=null),this.dailyChartInstance&&(this.dailyChartInstance.dispose(),this.dailyChartInstance=null)},formatPercent:function(t){return void 0===t||null===t?"--":(t>=0?"+":"")+(100*t).toFixed(2)+"%"},getMetricClass:function(t){return t?t>0?"positive":t<0?"negative":"":""}}},ut=dt,pt=(0,F.A)(ut,lt,ct,!1,null,"01ff5f5a",null),mt=pt.exports,gt=function(){var t=this,e=t._self._c;return e("div",{staticClass:"strategy-logs strategy-tab-pane-inner",class:{"theme-dark":t.isDark}},[e("div",{staticClass:"logs-toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-radio-group",{attrs:{size:"small","button-style":"solid"},model:{value:t.filterLevel,callback:function(e){t.filterLevel=e},expression:"filterLevel"}},[e("a-radio-button",{attrs:{value:"all"}},[t._v("All")]),e("a-radio-button",{attrs:{value:"trade"}},[e("a-badge",{attrs:{count:t.countByLevel("trade"),"overflow-count":99,offset:[6,-2]}},[t._v(" "+t._s(t.$t("trading-assistant.logs.level.trade"))+" ")])],1),e("a-radio-button",{attrs:{value:"signal"}},[t._v(t._s(t.$t("trading-assistant.logs.level.signal")))]),e("a-radio-button",{attrs:{value:"error"}},[t._v(t._s(t.$t("trading-assistant.logs.level.error")))])],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-switch",{attrs:{checked:t.autoRefresh,size:"small"},on:{change:t.toggleAutoRefresh}}),e("span",{staticClass:"auto-refresh-label"},[t._v(t._s(t.$t("trading-assistant.logs.autoRefresh")))])],1)]),e("div",{ref:"logsContainer",staticClass:"logs-container custom-scrollbar"},[0===t.filteredLogs.length?e("div",{staticClass:"logs-empty"},[e("a-icon",{staticStyle:{"font-size":"32px",color:"#ccc"},attrs:{type:"file-text"}}),e("p",[t._v(t._s(t.$t("trading-assistant.logs.noLogs")))])],1):t._e(),t._l(t.filteredLogs,function(a,s){return e("div",{key:s,staticClass:"log-entry",class:"level-"+a.level},[e("span",{staticClass:"log-time"},[t._v(t._s(t.formatTime(a.timestamp)))]),e("a-tag",{staticClass:"log-level",attrs:{color:t.getLevelColor(a.level),size:"small"}},[t._v(" "+t._s(t.getLevelText(a.level))+" ")]),e("span",{staticClass:"log-message"},[t._v(t._s(a.message))])],1)})],2)])},ht=[],_t={name:"StrategyLogs",props:{strategyId:{type:[Number,String],default:null},isDark:{type:Boolean,default:!1}},data:function(){return{logs:[],filterLevel:"all",autoRefresh:!1,refreshTimer:null,loading:!1}},computed:{filteredLogs:function(){var t=this;return"all"===this.filterLevel?this.logs:this.logs.filter(function(e){return e.level===t.filterLevel})}},watch:{strategyId:{handler:function(t){t&&this.loadLogs()},immediate:!0}},beforeDestroy:function(){this.stopAutoRefresh()},methods:{loadLogs:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.strategyId){e.n=1;break}return e.a(2);case 1:return t.loading=!0,e.p=2,e.n=3,(0,y.Ay)({url:"/api/strategies/logs",method:"get",params:{id:t.strategyId,limit:200}});case 3:a=e.v,a&&a.data&&(t.logs=a.data,t.$nextTick(function(){return t.scrollToBottom()})),e.n=5;break;case 4:e.p=4,e.v;case 5:return e.p=5,t.loading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}))()},toggleAutoRefresh:function(t){var e=this;this.autoRefresh=t,t?this.refreshTimer=setInterval(function(){return e.loadLogs()},5e3):this.stopAutoRefresh()},stopAutoRefresh:function(){this.refreshTimer&&(clearInterval(this.refreshTimer),this.refreshTimer=null)},scrollToBottom:function(){var t=this.$refs.logsContainer;t&&(t.scrollTop=t.scrollHeight)},countByLevel:function(t){return this.logs.filter(function(e){return e.level===t}).length},formatTime:function(t){if(!t)return"";var e=this.$i18n.locale||"zh-CN";return T(t,{locale:e,fallback:String(t)})},getLevelColor:function(t){var e={info:"blue",warn:"orange",error:"red",trade:"green",signal:"purple"};return e[t]||"default"},getLevelText:function(t){var e="trading-assistant.logs.level.".concat(t),a=this.$t(e);return a!==e?a:t}}},yt=_t,ft=(0,F.A)(yt,gt,ht,!1,null,"5ea7be7d",null),vt=ft.exports,bt=function(){var t=this,e=t._self._c;return e("div",{staticClass:"dashboard-pro",class:{"theme-dark":t.isDarkTheme}},[e("div",{staticClass:"kpi-grid"},[e("div",{staticClass:"kpi-card kpi-primary"},[e("div",{staticClass:"kpi-glow"}),e("div",{staticClass:"kpi-content"},[e("div",{staticClass:"kpi-header"},[e("span",{staticClass:"kpi-icon"},[e("a-icon",{attrs:{type:"wallet"}})],1),e("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.totalEquity")))])]),e("div",{staticClass:"kpi-value"},[e("span",{staticClass:"currency"},[t._v("$")]),e("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.summary.total_equity)))])]),e("div",{staticClass:"kpi-sub"},[e("span",{class:t.summary.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.total_pnl>=0?"+":"")+t._s(t.formatNumber(t.summary.total_pnl))+" ")]),e("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.totalPnl")))])])])]),e("div",{staticClass:"kpi-card kpi-win-rate"},[e("div",{staticClass:"kpi-content"},[e("div",{staticClass:"kpi-header"},[e("span",{staticClass:"kpi-icon"},[e("a-icon",{attrs:{type:"trophy"}})],1),e("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.winRate")||"胜率"))])]),e("div",{staticClass:"kpi-value"},[e("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.win_rate,1)))]),e("span",{staticClass:"unit"},[t._v("%")])]),e("div",{staticClass:"kpi-sub"},[e("span",{staticClass:"positive"},[t._v(t._s(t.performance.winning_trades))]),e("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.win")))]),e("span",{staticClass:"divider"},[t._v("/")]),e("span",{staticClass:"negative"},[t._v(t._s(t.performance.losing_trades))]),e("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.lose")))])])]),e("div",{staticClass:"kpi-ring"},[e("svg",{attrs:{viewBox:"0 0 36 36"}},[e("path",{staticClass:"ring-bg",attrs:{d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}}),e("path",{staticClass:"ring-progress",attrs:{"stroke-dasharray":"".concat(t.performance.win_rate||0,", 100"),d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}})])])]),e("div",{staticClass:"kpi-card kpi-profit-factor"},[e("div",{staticClass:"kpi-content"},[e("div",{staticClass:"kpi-header"},[e("span",{staticClass:"kpi-icon"},[e("a-icon",{attrs:{type:"rise"}})],1),e("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.profitFactor")||"盈亏比"))])]),e("div",{staticClass:"kpi-value"},[e("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.profit_factor,2)))]),e("span",{staticClass:"unit"},[t._v(":1")])]),e("div",{staticClass:"kpi-sub"},[e("span",[t._v(t._s(t.$t("dashboard.label.avgProfit"))+" ")]),e("span",{staticClass:"positive"},[t._v("$"+t._s(t.formatNumber(t.performance.avg_win)))])])])]),e("div",{staticClass:"kpi-card kpi-drawdown"},[e("div",{staticClass:"kpi-content"},[e("div",{staticClass:"kpi-header"},[e("span",{staticClass:"kpi-icon"},[e("a-icon",{attrs:{type:"fall"}})],1),e("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.maxDrawdown")||"最大回撤"))])]),e("div",{staticClass:"kpi-value"},[e("span",{staticClass:"amount negative"},[t._v(t._s(t.formatNumber(t.performance.max_drawdown_pct,1)))]),e("span",{staticClass:"unit"},[t._v("%")])]),e("div",{staticClass:"kpi-sub"},[e("span",[t._v("$"+t._s(t.formatNumber(t.performance.max_drawdown)))])])])]),e("div",{staticClass:"kpi-card kpi-trades"},[e("div",{staticClass:"kpi-content"},[e("div",{staticClass:"kpi-header"},[e("span",{staticClass:"kpi-icon"},[e("a-icon",{attrs:{type:"swap"}})],1),e("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.totalTrades")||"总交易"))])]),e("div",{staticClass:"kpi-value"},[e("span",{staticClass:"amount"},[t._v(t._s(t.performance.total_trades))]),e("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.trades")))])]),e("div",{staticClass:"kpi-sub"},[e("span",[t._v(t._s(t.$t("dashboard.label.avgDaily"))+" ")]),e("span",[t._v(t._s(t.avgTradesPerDay))]),e("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.unit.trades")))])])])]),e("div",{staticClass:"kpi-card kpi-strategies clickable",on:{click:t.goToStrategyManagement}},[e("div",{staticClass:"kpi-content"},[e("div",{staticClass:"kpi-header"},[e("span",{staticClass:"kpi-icon"},[e("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1),e("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.runningStrategies")||"运行中策略"))])]),e("div",{staticClass:"kpi-value"},[e("span",{staticClass:"amount"},[t._v(t._s(t.summary.indicator_strategy_count))]),e("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.strategies")))])]),e("div",{staticClass:"kpi-sub"},[e("span",{staticClass:"highlight"},[t._v(t._s(t.summary.indicator_strategy_count))]),e("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.label.indicator")))])])]),e("div",{staticClass:"card-arrow"},[e("a-icon",{attrs:{type:"right"}})],1)])]),t.showSetupGuide&&!t.hideSetupGuide?e("div",{staticClass:"setup-guide-card"},[e("div",{staticClass:"setup-guide-copy"},[e("div",{staticClass:"setup-guide-title"},[t._v(t._s(t.$t("dashboard.setupGuide.title")))]),e("div",{staticClass:"setup-guide-desc"},[t._v(t._s(t.$t("dashboard.setupGuide.desc")))]),e("div",{staticClass:"setup-guide-path"},[t._v(t._s(t.$t("dashboard.setupGuide.path")))])]),e("div",{staticClass:"setup-guide-actions"},[e("a-button",{on:{click:t.goToStrategyManagement}},[e("a-icon",{attrs:{type:"appstore"}}),t._v(" "+t._s(t.$t("dashboard.setupGuide.secondary"))+" ")],1),e("a-button",{attrs:{type:"primary"},on:{click:t.goToStrategyCreate}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("dashboard.setupGuide.primary"))+" ")],1)],1)]):t._e(),e("div",{staticClass:"chart-row"},[e("div",{staticClass:"chart-panel chart-main"},[e("div",{staticClass:"panel-header"},[e("div",{staticClass:"panel-title"},[e("a-icon",{attrs:{type:"calendar"}}),e("span",[t._v(t._s(t.$t("dashboard.profitCalendar")||"收益日曆"))])],1),e("div",{staticClass:"calendar-nav"},[e("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex>=t.calendarMonths.length-1},on:{click:t.prevMonth}},[e("a-icon",{attrs:{type:"left"}})],1),e("span",{staticClass:"current-month"},[t._v(t._s(t.currentMonthLabel))]),e("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex<=0},on:{click:t.nextMonth}},[e("a-icon",{attrs:{type:"right"}})],1)],1)]),e("div",{staticClass:"profit-calendar"},[t.currentCalendarMonth?[e("div",{staticClass:"month-summary"},[e("div",{staticClass:"summary-item"},[e("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),e("span",{staticClass:"summary-value",class:t.currentCalendarMonth.total>=0?"positive":"negative"},[t._v(" "+t._s(t.currentCalendarMonth.total>=0?"+":"")+"$"+t._s(t.formatNumber(t.currentCalendarMonth.total))+" ")])]),e("div",{staticClass:"summary-item"},[e("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.win")))]),e("span",{staticClass:"summary-value positive"},[t._v(t._s(t.currentCalendarMonth.win_days))])]),e("div",{staticClass:"summary-item"},[e("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.lose")))]),e("span",{staticClass:"summary-value negative"},[t._v(t._s(t.currentCalendarMonth.lose_days))])])]),e("div",{staticClass:"calendar-weekdays"},t._l(t.weekdays,function(a){return e("div",{key:a,staticClass:"weekday"},[t._v(t._s(a))])}),0),e("div",{staticClass:"calendar-grid"},[t._l(t.calendarFirstDayOffset,function(t){return e("div",{key:"empty-"+t,staticClass:"calendar-cell empty"})}),t._l(t.currentCalendarMonth.days_in_month,function(a){return e("div",{key:a,staticClass:"calendar-cell",class:t.getDayClass(a)},[e("span",{staticClass:"day-number"},[t._v(t._s(a))]),null!==t.getDayProfit(a)?e("span",{staticClass:"day-profit",class:t.getDayProfit(a)>=0?"positive":"negative"},[t._v(" "+t._s(t.getDayProfit(a)>=0?"+":"")+t._s(t.formatCompactNumber(t.getDayProfit(a)))+" ")]):t._e()])})],2)]:e("div",{staticClass:"calendar-empty"},[e("a-icon",{attrs:{type:"inbox"}}),e("span",[t._v(t._s(t.$t("dashboard.noData")))])],1)],2)]),e("div",{staticClass:"chart-panel chart-side"},[e("div",{staticClass:"panel-header"},[e("div",{staticClass:"panel-title"},[e("a-icon",{attrs:{type:"pie-chart"}}),e("span",[t._v(t._s(t.$t("dashboard.strategyAllocation")||"策略分布"))])],1)]),e("div",{ref:"pieChart",staticClass:"chart-body"})])]),e("div",{staticClass:"chart-row"},[e("div",{staticClass:"chart-panel chart-half"},[e("div",{staticClass:"panel-header"},[e("div",{staticClass:"panel-title"},[e("a-icon",{attrs:{type:"area-chart"}}),e("span",[t._v(t._s(t.$t("dashboard.drawdownCurve")||"回撤曲线"))])],1)]),e("div",{ref:"drawdownChart",staticClass:"chart-body chart-sm"})]),e("div",{staticClass:"chart-panel chart-half"},[e("div",{staticClass:"panel-header"},[e("div",{staticClass:"panel-title"},[e("a-icon",{attrs:{type:"clock-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.hourlyDistribution")||"交易时段"))])],1)]),e("div",{ref:"hourlyChart",staticClass:"chart-body chart-sm"})])]),e("div",{staticClass:"chart-panel"},[e("div",{staticClass:"panel-header"},[e("div",{staticClass:"panel-title"},[e("a-icon",{attrs:{type:"ordered-list"}}),e("span",[t._v(t._s(t.$t("dashboard.strategyRanking")||"策略排行榜"))])],1)]),e("div",{staticClass:"strategy-ranking"},[0===t.strategyStats.length?e("div",{staticClass:"empty-state"},[e("a-icon",{attrs:{type:"inbox"}}),e("span",[t._v(t._s(t.$t("dashboard.noStrategyData")))])],1):e("div",{staticClass:"ranking-grid"},t._l(t.strategyStats.slice(0,6),function(a,s){return e("div",{key:a.strategy_id,staticClass:"ranking-card",class:{"rank-top":s<3}},[e("div",{staticClass:"rank-badge",class:"rank-".concat(s+1)},[t._v(t._s(s+1))]),e("div",{staticClass:"rank-info"},[e("div",{staticClass:"rank-name"},[t._v(t._s(a.strategy_name))]),e("div",{staticClass:"rank-stats"},[e("span",{staticClass:"stat"},[e("label",[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),e("span",{class:a.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(a.total_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(a.total_pnl))+" ")])]),e("span",{staticClass:"stat"},[e("label",[t._v(t._s(t.$t("dashboard.winRate")))]),e("span",[t._v(t._s(t.formatNumber(a.win_rate,1))+"%")])]),e("span",{staticClass:"stat"},[e("label",[t._v(t._s(t.$t("dashboard.profitFactor")))]),e("span",[t._v(t._s(t.formatNumber(a.profit_factor,2)))])]),e("span",{staticClass:"stat"},[e("label",[t._v(t._s(t.$t("dashboard.ranking.trades")))]),e("span",[t._v(t._s(a.total_trades))])])])]),e("div",{staticClass:"rank-pnl-bar"},[e("div",{staticClass:"bar-fill",class:a.total_pnl>=0?"positive":"negative",style:{width:"".concat(Math.min(100,Math.abs(a.total_pnl)/t.maxStrategyPnl*100),"%")}})])])}),0)])]),e("div",{staticClass:"table-row"},[e("div",{staticClass:"table-panel"},[e("div",{staticClass:"panel-header"},[e("div",{staticClass:"panel-title"},[e("a-icon",{attrs:{type:"stock"}}),e("span",[t._v(t._s(t.$t("dashboard.currentPositions")))])],1),e("div",{staticClass:"panel-badge"},[t._v(t._s((t.summary.current_positions||[]).length))])]),e("a-table",{staticClass:"pro-table",attrs:{columns:t.positionColumns,"data-source":t.summary.current_positions,rowKey:"id",pagination:!1,size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"symbol",fn:function(a,s){return[e("div",{staticClass:"symbol-cell"},[e("span",{staticClass:"symbol-name"},[t._v(t._s(a))]),e("span",{staticClass:"symbol-strategy"},[t._v(t._s(s.strategy_name))])])]}},{key:"side",fn:function(a){return[e("span",{staticClass:"side-tag",class:"long"===a?"long":"short"},[t._v(" "+t._s("long"===a?"LONG":"SHORT")+" ")])]}},{key:"unrealized_pnl",fn:function(a,s){return[e("div",{staticClass:"pnl-cell"},[e("span",{class:a>=0?"positive":"negative"},[t._v(" "+t._s(a>=0?"+":"")+"$"+t._s(t.formatNumber(a))+" ")]),e("span",{staticClass:"pnl-percent",class:s.pnl_percent>=0?"positive":"negative"},[t._v(" "+t._s(s.pnl_percent>=0?"+":"")+t._s(t.formatNumber(s.pnl_percent))+"% ")])])]}}])})],1),e("div",{staticClass:"table-panel"},[e("div",{staticClass:"panel-header"},[e("div",{staticClass:"panel-title"},[e("a-icon",{attrs:{type:"history"}}),e("span",[t._v(t._s(t.$t("dashboard.recentTrades")))])],1)]),e("a-table",{staticClass:"pro-table",attrs:{columns:t.columns,"data-source":t.summary.recent_trades,rowKey:"id",pagination:{pageSize:8,size:"small"},size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"type",fn:function(a){return[e("span",{staticClass:"type-tag",class:t.getTypeClass(a)},[t._v(" "+t._s(t.getSignalTypeText(a))+" ")])]}},{key:"profit",fn:function(a,s){return[e("span",{class:"--"!==t.formatProfitValue(a,s)?a>=0?"positive":"negative":""},[t._v(" "+t._s(t.formatProfitValue(a,s))+" ")])]}},{key:"time",fn:function(a){return[e("span",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(a)))])]}}])})],1)]),e("div",{staticClass:"chart-panel orders-panel"},[e("div",{staticClass:"panel-header"},[e("div",{staticClass:"panel-title"},[e("a-icon",{attrs:{type:"unordered-list"}}),e("span",[t._v(t._s(t.$t("dashboard.pendingOrders")))]),e("a-tooltip",{attrs:{title:t.soundEnabled?t.$t("dashboard.clickToMute"):t.$t("dashboard.clickToUnmute")}},[e("a-icon",{staticClass:"sound-toggle",class:{"sound-off":!t.soundEnabled},attrs:{type:t.soundEnabled?"sound":"audio-muted"},on:{click:t.toggleSound}})],1)],1),e("div",{staticClass:"panel-badge"},[t._v(t._s(t.ordersPagination.total))])]),e("a-table",{staticClass:"pro-table",attrs:{columns:t.orderColumns,"data-source":t.pendingOrders,rowKey:"id",pagination:{current:t.ordersPagination.current,pageSize:t.ordersPagination.pageSize,total:t.ordersPagination.total,showSizeChanger:!0,size:"small",showTotal:function(e){return t.$t("dashboard.totalOrders",{total:e})}},size:"small",loading:t.ordersLoading,scroll:{x:1200}},on:{change:t.handleOrdersTableChange},scopedSlots:t._u([{key:"strategy_name",fn:function(a,s){return[e("div",{staticClass:"symbol-cell"},[e("span",{staticClass:"symbol-name"},[t._v(t._s(a||"-"))]),e("span",{staticClass:"symbol-strategy"},[t._v("ID: "+t._s(s.strategy_id))])])]}},{key:"symbol",fn:function(a){return[e("span",{staticClass:"symbol-tag"},[t._v(t._s(a))])]}},{key:"signal_type",fn:function(a){return[e("span",{staticClass:"type-tag",class:t.getTypeClass(a)},[t._v(" "+t._s(t.getSignalTypeText(a))+" ")])]}},{key:"exchange",fn:function(a,s){return[s&&(s.exchange_display||s.exchange_id||a)?e("span",{staticClass:"exchange-tag",class:(s.exchange_display||s.exchange_id||a).toLowerCase()},[t._v(" "+t._s(String(s.exchange_display||s.exchange_id||a).toUpperCase())+" ")]):e("span",{staticClass:"text-muted"},[t._v("-")]),s&&s.market_type?e("div",{staticClass:"market-type"},[t._v(" "+t._s(String(s.market_type).toUpperCase())+" ")]):t._e()]}},{key:"notify",fn:function(a,s){return[e("div",{staticClass:"notify-icons"},[t._l(s&&s.notify_channels?s.notify_channels:[],function(a){return e("a-tooltip",{key:"".concat(s.id,"-").concat(a),attrs:{title:String(a)}},[e("a-icon",{staticClass:"notify-icon",attrs:{type:t.getNotifyIconType(a)}})],1)}),s&&s.notify_channels&&0!==s.notify_channels.length?t._e():e("span",{staticClass:"text-muted"},[t._v("-")])],2)]}},{key:"status",fn:function(a,s){return[e("span",{staticClass:"status-tag",class:a},[t._v(" "+t._s(t.getStatusText(a))+" ")]),"failed"===a&&s.error_message?e("div",{staticClass:"error-hint"},[e("a-tooltip",{attrs:{title:s.error_message}},[e("a-icon",{attrs:{type:"exclamation-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.viewError")))])],1)],1):t._e()]}},{key:"amount",fn:function(a,s){return[e("div",[t._v(t._s(t.formatNumber(a,8)))]),s.filled_amount?e("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.$t("dashboard.filled"))+": "+t._s(t.formatNumber(s.filled_amount,8))+" ")]):t._e()]}},{key:"price",fn:function(a,s){return[s.filled_price?e("div",[t._v(t._s(t.formatNumber(s.filled_price)))]):e("div",{staticClass:"text-muted"},[t._v("-")])]}},{key:"time_info",fn:function(a,s){return[e("div",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(s.created_at)))]),s.executed_at?e("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.formatTime(s.executed_at))+" ")]):t._e()]}}])})],1)])},xt=[],kt=a(29362),Ct={summary:"/api/dashboard/summary",pendingOrders:"/api/dashboard/pendingOrders"};function St(){return(0,y.Ay)({url:Ct.summary,method:"get"})}function wt(t){return(0,y.Ay)({url:Ct.pendingOrders,method:"get",params:t})}var $t=a(95353),At={name:"Dashboard",props:{hideSetupGuide:{type:Boolean,default:!1}},data:function(){return{summary:{ai_strategy_count:0,indicator_strategy_count:0,total_equity:0,total_pnl:0,total_realized_pnl:0,total_unrealized_pnl:0,performance:{},strategy_stats:[],daily_pnl_chart:[],strategy_pnl_chart:[],monthly_returns:[],hourly_distribution:[],calendar_months:[],recent_trades:[],current_positions:[]},currentCalendarIndex:0,pieChart:null,drawdownChart:null,hourlyChart:null,pendingOrders:[],ordersLoading:!1,ordersPagination:{current:1,pageSize:20,total:0},orderPollTimer:null,lastOrderId:0,orderPollIntervalMs:5e3,soundEnabled:!0,beepCtx:null}},computed:(0,u.A)((0,u.A)({},(0,$t.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},performance:function(){return this.summary.performance||{}},strategyStats:function(){return this.summary.strategy_stats||[]},showSetupGuide:function(){var t=Number(this.summary.indicator_strategy_count||0),e=Array.isArray(this.summary.current_positions)&&this.summary.current_positions.length>0,a=Array.isArray(this.summary.recent_trades)&&this.summary.recent_trades.length>0;return 0===t||!e&&!a},maxStrategyPnl:function(){var t=this.strategyStats;return t.length?Math.max.apply(Math,(0,c.A)(t.map(function(t){return Math.abs(t.total_pnl||0)})).concat([1])):1},avgTradesPerDay:function(){var t=this.summary.daily_pnl_chart||[],e=t.length||1,a=this.performance.total_trades||0;return(a/e).toFixed(1)},calendarMonths:function(){return this.summary.calendar_months||[]},currentCalendarMonth:function(){var t=this.calendarMonths;return t.length&&t[this.currentCalendarIndex]||null},currentMonthLabel:function(){var t=this.currentCalendarMonth;if(!t)return"-";var e=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];return"".concat(e[t.month-1]," ").concat(t.year)},weekdays:function(){return["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]},calendarFirstDayOffset:function(){var t=this.currentCalendarMonth;return t?t.first_weekday:0},orderStrategyFilters:function(){var t,e=Array.isArray(this.pendingOrders)?this.pendingOrders:[],a=new Map,s=(0,d.A)(e);try{for(s.s();!(t=s.n()).done;){var i=t.value,r=i&&i.strategy_id;if(void 0!==r&&null!==r&&!a.has(String(r))){var n=i&&i.strategy_name?String(i.strategy_name):"",o=n?"".concat(n," (ID: ").concat(r,")"):"ID: ".concat(r);a.set(String(r),{text:o,value:String(r)})}}}catch(l){s.e(l)}finally{s.f()}return Array.from(a.values()).sort(function(t,e){return String(t.text).localeCompare(String(e.text))})},columns:function(){var t=this;return[{title:this.$t("dashboard.table.time"),dataIndex:"created_at",scopedSlots:{customRender:"time"},width:150},{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",width:100},{title:this.$t("dashboard.table.type"),dataIndex:"type",scopedSlots:{customRender:"type"},width:90},{title:this.$t("dashboard.table.price"),dataIndex:"price",customRender:function(e){return t.formatNumber(e)},width:100},{title:this.$t("dashboard.table.profit"),dataIndex:"profit",scopedSlots:{customRender:"profit"},align:"right",width:100}]},positionColumns:function(){var t=this;return[{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"}},{title:this.$t("dashboard.table.side"),dataIndex:"side",scopedSlots:{customRender:"side"}},{title:this.$t("dashboard.table.size"),dataIndex:"size",customRender:function(e){return t.formatNumber(e,4)}},{title:this.$t("dashboard.table.entryPrice"),dataIndex:"entry_price",customRender:function(e){return t.formatNumber(e)}},{title:this.$t("dashboard.table.pnl"),dataIndex:"unrealized_pnl",scopedSlots:{customRender:"unrealized_pnl"},align:"right"}]},orderColumns:function(){return[{title:this.$t("dashboard.orderTable.strategy"),dataIndex:"strategy_name",scopedSlots:{customRender:"strategy_name"},filters:this.orderStrategyFilters,filterMultiple:!0,onFilter:function(t,e){return String(e&&e.strategy_id)===String(t)},width:150},{title:this.$t("dashboard.orderTable.exchange"),dataIndex:"exchange_id",scopedSlots:{customRender:"exchange"},width:120},{title:this.$t("dashboard.orderTable.notify"),dataIndex:"notify_channels",scopedSlots:{customRender:"notify"},width:100},{title:this.$t("dashboard.orderTable.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"},width:110},{title:this.$t("dashboard.orderTable.signalType"),dataIndex:"signal_type",scopedSlots:{customRender:"signal_type"},width:100},{title:this.$t("dashboard.orderTable.amount"),dataIndex:"amount",scopedSlots:{customRender:"amount"},width:130},{title:this.$t("dashboard.orderTable.price"),dataIndex:"filled_price",scopedSlots:{customRender:"price"},width:100},{title:this.$t("dashboard.orderTable.status"),dataIndex:"status",scopedSlots:{customRender:"status"},width:130},{title:this.$t("dashboard.orderTable.timeInfo"),dataIndex:"created_at",scopedSlots:{customRender:"time_info"},width:160}]}}),mounted:function(){this.fetchData(),this.fetchPendingOrders(),this.startOrderPolling(),window.addEventListener("resize",this.handleResize)},beforeDestroy:function(){this.stopOrderPolling(),window.removeEventListener("resize",this.handleResize),this.pieChart&&this.pieChart.dispose(),this.drawdownChart&&this.drawdownChart.dispose(),this.hourlyChart&&this.hourlyChart.dispose()},methods:{goToStrategyManagement:function(){this.$router.push("/trading-assistant?tab=strategy")},goToStrategyCreate:function(){this.$router.push("/trading-assistant?tab=strategy&mode=create")},fetchData:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,St();case 1:a=e.v,1===a.code&&(t.summary=(0,u.A)((0,u.A)({},t.summary),a.data),t.$nextTick(function(){t.initCharts()})),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},fetchPendingOrders:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function s(){var i,r,n,l;return(0,o.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return a.ordersLoading=!0,s.p=1,i=t||a.ordersPagination.current||1,r=e||a.ordersPagination.pageSize||20,s.n=2,wt({page:i,pageSize:r});case 2:n=s.v,1===n.code&&(l=n.data||{},a.pendingOrders=l.list||[],a.ordersPagination.current=Number(l.page||i||1),a.ordersPagination.pageSize=Number(l.pageSize||r||20),a.ordersPagination.total=Number(l.total||0)),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,a.ordersLoading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},playOrderBeep:function(){if(this.soundEnabled)try{var t=window.AudioContext||window.webkitAudioContext;if(!t)return;this.beepCtx||(this.beepCtx=new t);var e=this.beepCtx;"suspended"===e.state&&"function"===typeof e.resume&&e.resume().catch(function(){});var a=function(t,a){var s=e.createOscillator(),i=e.createGain();s.type="sine",s.frequency.value=a,i.gain.value=.08,s.connect(i),i.connect(e.destination),s.start(t),s.stop(t+.12)},s=e.currentTime;a(s,880),a(s+.18,1100)}catch(i){}},startOrderPolling:function(){var t=this;this.stopOrderPolling(),this.initLastOrderId(),this.orderPollTimer=setInterval(function(){t.pollNewOrders()},this.orderPollIntervalMs)},stopOrderPolling:function(){this.orderPollTimer&&(clearInterval(this.orderPollTimer),this.orderPollTimer=null)},initLastOrderId:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,wt({page:1,pageSize:1});case 1:a=e.v,1===a.code&&a.data&&a.data.list&&a.data.list.length>0&&(t.lastOrderId=a.data.list[0].id||0),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},pollNewOrders:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,s,i,r,n,l,c,u;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,wt({page:1,pageSize:10});case 1:if(a=e.v,1===a.code&&a.data&&a.data.list){e.n=2;break}return e.a(2);case 2:if(s=a.data.list||[],0!==s.length){e.n=3;break}return e.a(2);case 3:i=!1,r=t.lastOrderId,n=(0,d.A)(s);try{for(n.s();!(l=n.n()).done;)c=l.value,u=c.id||0,u>t.lastOrderId&&(i=!0,u>r&&(r=u))}catch(o){n.e(o)}finally{n.f()}i&&(t.lastOrderId=r,t.playOrderBeep(),t.fetchPendingOrders(),t.$notification.info({message:t.$t("dashboard.newOrderNotify"),description:t.$t("dashboard.newOrderDesc"),duration:4})),e.n=5;break;case 4:e.p=4,e.v;case 5:return e.a(2)}},e,null,[[0,4]])}))()},toggleSound:function(){this.soundEnabled=!this.soundEnabled,this.soundEnabled?this.$message.success(this.$t("dashboard.soundEnabled")):this.$message.info(this.$t("dashboard.soundDisabled"))},handleOrdersTableChange:function(t){var e=t&&t.current?t.current:1,a=t&&t.pageSize?t.pageSize:this.ordersPagination.pageSize||20;this.ordersPagination.current=e,this.ordersPagination.pageSize=a,this.fetchPendingOrders(e,a)},getTypeClass:function(t){if(!t)return"";var e=t.toLowerCase();return e.includes("open_long")||e.includes("add_long")?"long":e.includes("open_short")||e.includes("add_short")?"short":e.includes("close_long")?"close-long":e.includes("close_short")?"close-short":""},getSignalTypeColor:function(t){return t?(t=t.toLowerCase(),t.includes("open_long")||t.includes("add_long")?"green":t.includes("open_short")||t.includes("add_short")?"red":t.includes("close_long")?"orange":t.includes("close_short")?"purple":"blue"):"default"},getSignalTypeText:function(t){if(!t)return"-";var e={open_long:this.$t("dashboard.signalType.openLong"),open_short:this.$t("dashboard.signalType.openShort"),close_long:this.$t("dashboard.signalType.closeLong"),close_short:this.$t("dashboard.signalType.closeShort"),add_long:this.$t("dashboard.signalType.addLong"),add_short:this.$t("dashboard.signalType.addShort")};return e[t.toLowerCase()]||t.toUpperCase()},getStatusColor:function(t){var e={pending:"orange",processing:"blue",completed:"green",failed:"red",cancelled:"default"};return e[t]||"default"},getStatusText:function(t){if(!t)return"-";var e={pending:this.$t("dashboard.status.pending"),processing:this.$t("dashboard.status.processing"),completed:this.$t("dashboard.status.completed"),failed:this.$t("dashboard.status.failed"),cancelled:this.$t("dashboard.status.cancelled")};return e[t.toLowerCase()]||t.toUpperCase()},getNotifyIconType:function(t){var e=String(t||"").trim().toLowerCase(),a={browser:"bell",webhook:"link",discord:"comment",telegram:"message",tg:"message",tele:"message",email:"mail",phone:"phone"};return a[e]||"notification"},getExchangeTagColor:function(t){var e=String(t||"").trim().toLowerCase(),a={binance:"gold",okx:"purple",bitget:"cyan",signal:"geekblue"};return a[e]||"blue"},formatNumber:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t?"0.00":Number(t).toLocaleString("en-US",{minimumFractionDigits:e,maximumFractionDigits:e})},formatProfitValue:function(t,e){if(null===t||void 0===t)return"--";var a=parseFloat(t),s=["open_long","open_short","add_long","add_short"];if(0===a&&e&&s.includes(e.type))return"--";if(Math.abs(a)<1e-6)return e&&s.includes(e.type)?"--":"$0.00";var i=a>=0?"+":"";return"".concat(i,"$").concat(this.formatNumber(a))},formatCompactNumber:function(t){if(void 0===t||null===t)return"0";var e=Math.abs(t);return e>=1e6?(t/1e6).toFixed(1)+"M":e>=1e3?(t/1e3).toFixed(1)+"k":e>=100?Math.round(t):t.toFixed(0)},prevMonth:function(){this.currentCalendarIndex<this.calendarMonths.length-1&&this.currentCalendarIndex++},nextMonth:function(){this.currentCalendarIndex>0&&this.currentCalendarIndex--},getDayProfit:function(t){var e=this.currentCalendarMonth;if(!e||!e.days)return null;var a=String(t).padStart(2,"0");return void 0!==e.days[a]?e.days[a]:null},getDayClass:function(t){var e=this.getDayProfit(t);return null===e?"no-data":e>0?"profit":e<0?"loss":"zero"},formatTime:function(t){if(!t)return"-";var e=this.$i18n&&this.$i18n.locale?this.$i18n.locale:"zh-CN",a=T(t,{locale:e,fallback:"-"});return a||"-"},initCharts:function(){this.initPieChart(),this.initDrawdownChart(),this.initHourlyChart()},initPieChart:function(){var t=this,e=this.$refs.pieChart;if(e){this.pieChart=kt.init(e);var a=Array.isArray(this.summary.strategy_stats)?this.summary.strategy_stats:[],s=Array.isArray(this.summary.strategy_pnl_chart)?this.summary.strategy_pnl_chart:[],i=[];i=a.length>0?a.map(function(t){var e=t&&t.strategy_name?String(t.strategy_name):"-",a=Number(t&&t.total_pnl?t.total_pnl:0),s=Number(t&&t.total_trades?t.total_trades:0),i=0!==a?Math.abs(a):s;return{name:e,value:i,signedValue:a,trades:s}}).filter(function(t){return t.value>0}):s.map(function(t){var e=t&&t.name?String(t.name):"-",a=Number(t&&t.value?t.value:0);return{name:e,value:Math.abs(a),signedValue:a}}).filter(function(t){return t.value>0});var r=this.isDarkTheme,n=r?"#9ca3af":"#6b7280",o=[new kt.graphic.LinearGradient(0,0,1,1,[{offset:0,color:"#3b82f6"},{offset:1,color:"#1d4ed8"}]),new kt.graphic.LinearGradient(0,0,1,1,[{offset:0,color:"#8b5cf6"},{offset:1,color:"#6d28d9"}]),new kt.graphic.LinearGradient(0,0,1,1,[{offset:0,color:"#10b981"},{offset:1,color:"#059669"}]),new kt.graphic.LinearGradient(0,0,1,1,[{offset:0,color:"#f59e0b"},{offset:1,color:"#d97706"}]),new kt.graphic.LinearGradient(0,0,1,1,[{offset:0,color:"#ec4899"},{offset:1,color:"#be185d"}]),new kt.graphic.LinearGradient(0,0,1,1,[{offset:0,color:"#06b6d4"},{offset:1,color:"#0891b2"}])],l={backgroundColor:"transparent",tooltip:{trigger:"item",backgroundColor:r?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:r?"#374151":"#e5e7eb",textStyle:{color:r?"#f3f4f6":"#1f2937"},formatter:function(e){var a=e&&e.data&&"number"===typeof e.data.signedValue?e.data.signedValue:0,s=(a>=0?"+":"")+t.formatNumber(a,2),i=a>=0?"#10b981":"#ef4444";return'\n <div style="padding: 4px 0;">\n <div style="font-weight:600;margin-bottom:6px;">'.concat(e.name,'</div>\n <div style="color:').concat(n,'">占比 <span style="font-weight:600;color:').concat(r?"#f3f4f6":"#1f2937",'">').concat(e.percent,'%</span></div>\n <div style="color:').concat(n,'">PNL <span style="font-weight:600;color:').concat(i,'">$').concat(s,"</span></div>\n </div>\n ")}},legend:{bottom:10,left:"center",itemWidth:12,itemHeight:12,itemGap:16,textStyle:{color:n,fontSize:11}},color:o,series:[{name:"策略分布",type:"pie",radius:["50%","75%"],center:["50%","45%"],avoidLabelOverlap:!1,itemStyle:{borderRadius:6,borderColor:r?"#1f2937":"#ffffff",borderWidth:3},label:{show:!1},emphasis:{label:{show:!0,fontSize:14,fontWeight:"bold",color:r?"#f3f4f6":"#1f2937"},scaleSize:8},labelLine:{show:!1},data:i.length>0?i:[{value:1,name:this.$t("dashboard.noData"),signedValue:0}]}]};this.pieChart.setOption(l)}},initDrawdownChart:function(){var t=this,e=this.$refs.drawdownChart;if(e){this.drawdownChart=kt.init(e);var a,s=(this.summary.daily_pnl_chart||[]).map(function(t){return t.date}),i=(this.summary.daily_pnl_chart||[]).map(function(t){return Number(t.profit||0)}),r=[],n=0,o=(0,d.A)(i);try{for(o.s();!(a=o.n()).done;){var l=a.value;n+=Number(l||0),r.push(n)}}catch(f){o.e(f)}finally{o.f()}var c=-1/0,u=0,p=0,m=r.map(function(t,e){c=Math.max(c,t);var a=Number((t-c).toFixed(2));return a<u&&(u=a,p=e),a}),g=this.isDarkTheme,h=g?"#a1a1aa":"#52525b",_=g?"rgba(63, 63, 70, 0.5)":"rgba(228, 228, 231, 0.8)",y={backgroundColor:"transparent",animation:!0,animationDuration:800,animationEasing:"cubicOut",tooltip:{trigger:"axis",backgroundColor:g?"rgba(24, 24, 27, 0.96)":"rgba(255, 255, 255, 0.96)",borderColor:g?"rgba(63, 63, 70, 0.8)":"rgba(228, 228, 231, 0.8)",borderWidth:1,padding:[12,16],textStyle:{color:g?"#fafafa":"#18181b",fontSize:13},extraCssText:"box-shadow: 0 8px 32px rgba(0,0,0,0.12); border-radius: 12px;",axisPointer:{type:"line",lineStyle:{color:"rgba(239, 68, 68, 0.4)",type:"dashed"}},formatter:function(e){var a=Array.isArray(e)?e[0]:null,s=a?a.axisValue:"",i=a?Number(a.data||0):0,r=t.formatNumber(Math.abs(i),2),n=0!==u?Math.abs(i/u*100).toFixed(0):0;return'\n <div style="min-width: 140px;">\n <div style="font-weight:600;margin-bottom:10px;font-size:14px;color:'.concat(g?"#fafafa":"#18181b",'">').concat(s,'</div>\n <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;">\n <span style="display:flex;align-items:center;gap:8px;">\n <span style="width:10px;height:10px;border-radius:2px;background:linear-gradient(180deg,#f87171,#dc2626);"></span>\n <span style="color:').concat(h,'">').concat(t.$t("dashboard.drawdown")||"Drawdown",'</span>\n </span>\n <span style="font-weight:700;color:#ef4444;font-family:monospace;">-$').concat(r,'</span>\n </div>\n <div style="background:').concat(g?"rgba(63,63,70,0.5)":"rgba(228,228,231,0.5)",';height:6px;border-radius:3px;overflow:hidden;">\n <div style="width:').concat(n,'%;height:100%;background:linear-gradient(90deg,#f87171,#ef4444);border-radius:3px;"></div>\n </div>\n </div>\n ')}},grid:{left:55,right:20,bottom:35,top:20,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:h,fontSize:10,formatter:function(t){return t.slice(5)}}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:h,fontSize:10,formatter:function(t){return Math.abs(t)>=1e3?"-$"+(Math.abs(t)/1e3).toFixed(1)+"k":0===t?"0":"-$"+Math.abs(t)}},splitLine:{lineStyle:{color:_,type:[4,4]}},max:0},series:[{name:this.$t("dashboard.drawdown")||"Drawdown",type:"line",data:m,smooth:.3,showSymbol:!1,lineStyle:{width:2.5,color:new kt.graphic.LinearGradient(0,0,1,0,[{offset:0,color:"#ef4444"},{offset:.5,color:"#f87171"},{offset:1,color:"#fca5a5"}]),shadowColor:"rgba(239, 68, 68, 0.4)",shadowBlur:8,shadowOffsetY:4},areaStyle:{color:new kt.graphic.LinearGradient(0,0,0,1,[{offset:0,color:g?"rgba(239, 68, 68, 0.4)":"rgba(239, 68, 68, 0.25)"},{offset:.5,color:g?"rgba(248, 113, 113, 0.15)":"rgba(248, 113, 113, 0.1)"},{offset:1,color:"transparent"}])},markPoint:u<0?{symbol:"pin",symbolSize:45,itemStyle:{color:new kt.graphic.LinearGradient(0,0,0,1,[{offset:0,color:"#f87171"},{offset:1,color:"#dc2626"}]),shadowColor:"rgba(239, 68, 68, 0.5)",shadowBlur:10},label:{show:!0,color:"#fff",fontSize:10,fontWeight:"bold",formatter:function(){return t.$t("dashboard.label.maxDrawdownPoint")||"MAX"}},data:[{name:this.$t("dashboard.maxDrawdown")||"Max Drawdown",coord:[p,u]}]}:void 0,markLine:{silent:!0,symbol:"none",lineStyle:{color:g?"#52525b":"#a1a1aa",type:"dashed",width:1},data:[{yAxis:0}],label:{show:!1}}}]};this.drawdownChart.setOption(y)}},initHourlyChart:function(){var t=this,e=this.$refs.hourlyChart;if(e){this.hourlyChart=kt.init(e);var a=this.summary.hourly_distribution||[],s=a.map(function(t){return"".concat(String(t.hour).padStart(2,"0"),":00")}),i=a.map(function(t){return t.count||0}),r=a.map(function(t){return t.profit||0}),n=this.isDarkTheme,o=n?"#9ca3af":"#6b7280",l=n?"rgba(75, 85, 99, 0.3)":"rgba(229, 231, 235, 0.8)",c={backgroundColor:"transparent",tooltip:{trigger:"axis",backgroundColor:n?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:n?"#374151":"#e5e7eb",textStyle:{color:n?"#f3f4f6":"#1f2937"},formatter:function(e){var a,s=Array.isArray(e)?e:[],i=s[0]&&s[0].axisValue?s[0].axisValue:"",r=0,l=0,c=t.$t("dashboard.tradeCount")||"Trade Count",u=t.$t("dashboard.profit")||"Profit",p=t.$t("dashboard.unit.trades")||"",m=(0,d.A)(s);try{for(m.s();!(a=m.n()).done;){var g=a.value;g.seriesName===c&&(r=g.data||0),g.seriesName===u&&(l=g.data||0)}}catch(y){m.e(y)}finally{m.f()}var h=l>=0?"#10b981":"#ef4444",_=(l>=0?"+":"")+t.formatNumber(l,2);return'\n <div style="padding: 4px 0;">\n <div style="font-weight:600;margin-bottom:6px;">'.concat(i,'</div>\n <div style="color:').concat(o,'">').concat(c,' <span style="font-weight:600;color:').concat(n?"#f3f4f6":"#1f2937",'">').concat(r," ").concat(p,'</span></div>\n <div style="color:').concat(o,'">').concat(u,' <span style="font-weight:600;color:').concat(h,'">$').concat(_,"</span></div>\n </div>\n ")}},grid:{left:50,right:20,bottom:30,top:10,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:o,fontSize:10,interval:3}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:o,fontSize:10},splitLine:{lineStyle:{color:l,type:"dashed"}}},series:[{name:this.$t("dashboard.tradeCount")||"Trade Count",type:"bar",data:i,barMaxWidth:16,itemStyle:{borderRadius:[3,3,0,0],color:new kt.graphic.LinearGradient(0,0,0,1,[{offset:0,color:"#60a5fa"},{offset:1,color:"#3b82f6"}])}},{name:this.$t("dashboard.profit")||"Profit",type:"line",data:r,smooth:!0,showSymbol:!1,lineStyle:{width:2,color:"#a855f7"}}]};this.hourlyChart.setOption(c)}},handleResize:function(){this.pieChart&&this.pieChart.resize(),this.drawdownChart&&this.drawdownChart.resize(),this.hourlyChart&&this.hourlyChart.resize()}}},Tt=At,Pt=(0,F.A)(Tt,bt,xt,!1,null,"23d6ebe6",null),Mt=Pt.exports,Ft=a(40011),It=["BTC/USDT","ETH/USDT","BNB/USDT","SOL/USDT","ADA/USDT","XRP/USDT","DOGE/USDT","DOT/USDT","MATIC/USDT","AVAX/USDT","LINK/USDT","UNI/USDT","LTC/USDT","ATOM/USDT","ETC/USDT"],Nt=[{value:"binance",labelKey:"binance"},{value:"okx",labelKey:"okx"},{value:"bitget",labelKey:"bitget"},{value:"bybit",labelKey:"bybit"},{value:"coinbaseexchange",labelKey:"coinbaseexchange"},{value:"kraken",labelKey:"kraken"},{value:"kucoin",labelKey:"kucoin"},{value:"gate",labelKey:"gate"},{value:"bitfinex",labelKey:"bitfinex"},{value:"deepcoin",labelKey:"deepcoin"}],Dt=[{value:"ibkr",labelKey:"ibkr",name:"Interactive Brokers"}],Vt=[{value:"mt5",labelKey:"mt5",name:"MetaTrader 5"}],Et={name:"TradingAssistant",mixins:[_.t],components:{TradingRecords:N,PositionRecords:L,StrategyTypeSelector:Z,StrategyEditor:ot,PerformanceAnalysis:mt,StrategyLogs:vt,DashboardOverview:Mt,ExchangeAccountModal:Ft.A},computed:{showAssistantGuide:function(){return!this.assistantGuideDismissed},assistantGuideStorageKey:function(){var t,e=(null===(t=this.$store.getters.userInfo)||void 0===t?void 0:t.id)||"guest";return"trading-assistant-guide-dismissed:".concat(e)},strategyFormWrapClass:function(){var t=["strategy-form-modal"];return this.isMobile&&t.push("mobile-modal"),this.isDarkTheme&&t.push("strategy-form-modal-dark"),t.join(" ")},displayCurrentStep:function(){return this.currentStep},strategyFormLastStepIndex:function(){return"script"===this.strategyMode?2:1},showStrategyFormNext:function(){return this.currentStep<this.strategyFormLastStepIndex},showStrategyFormSubmit:function(){return this.currentStep===this.strategyFormLastStepIndex},isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},needsPassphrase:function(){return["okx","okex","coinbaseexchange","kucoin","bitget","deepcoin"].includes(this.currentExchangeId)},isIBKRMarket:function(){return"USStock"===this.selectedMarketCategory},isMT5Market:function(){return"Forex"===this.selectedMarketCategory},isBrokerMarket:function(){return this.isIBKRMarket||this.isMT5Market},filteredExchangeCredentials:function(){var t=this;return this.exchangeCredentials&&Array.isArray(this.exchangeCredentials)?this.exchangeCredentials.filter(function(e){return t.isCredentialCompatible(e)}):[]},formattedExchangeOptions:function(){var t=this;return Nt.map(function(e){var a="";try{if(e.labelKey){var s="trading-assistant.exchangeNames.".concat(e.labelKey),i=t.$t(s);i!==s&&(a=i)}}catch(r){}return a||(a=e.value.charAt(0).toUpperCase()+e.value.slice(1)),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},totalPnl:function(){return null!==this.currentEquity&&this.selectedStrategy&&this.selectedStrategy.initial_capital?this.currentEquity-(this.selectedStrategy.initial_capital||0):null},totalPnlPercent:function(){return null!==this.totalPnl&&this.selectedStrategy&&this.selectedStrategy.initial_capital?0===this.selectedStrategy.initial_capital?0:this.totalPnl/this.selectedStrategy.initial_capital*100:null},getEquityColorClass:function(){return null===this.totalPnl?"":this.totalPnl>=0?"text-success":"text-danger"},getPnlColorClass:function(){return null===this.totalPnl?"":this.totalPnl>=0?"text-success":"text-danger"},isCryptoMarket:function(){var t=this.selectedMarketCategory||"Crypto";return"crypto"===String(t).toLowerCase()},canUseLiveTrading:function(){var t=this.selectedMarketCategory||"Crypto";return"crypto"===String(t).toLowerCase()||("USStock"===t||"Forex"===t)},isLiveTradingAvailable:function(){var t=this.selectedMarketCategory||"Crypto",e=this.currentExchangeId||"";return"crypto"===String(t).toLowerCase()?["binance","okx","bitget","bybit","coinbaseexchange","kraken","kucoin","gate","bitfinex"].includes(e):"USStock"===t?"ibkr"===this.currentBrokerId:"Forex"===t&&"mt5"===this.currentBrokerId},showDemoTradingSwitch:function(){return this.currentExchangeId&&"binance"===this.currentExchangeId.toLowerCase()},brokerOptions:function(){var t=this;return Dt.map(function(e){var a="";try{var s="trading-assistant.brokerNames.".concat(e.labelKey),i=t.$t(s);i!==s&&(a=i)}catch(r){}return a||(a=e.name||e.value.toUpperCase()),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},forexBrokerOptions:function(){var t=this;return Vt.map(function(e){var a="";try{var s="trading-assistant.brokerNames.".concat(e.labelKey),i=t.$t(s);i!==s&&(a=i)}catch(r){}return a||(a=e.name||e.value.toUpperCase()),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},cryptoExchangeOptions:function(){var t=this;return Nt.map(function(e){var a="";try{if(e.labelKey){var s="trading-assistant.exchangeNames.".concat(e.labelKey),i=t.$t(s);i!==s&&(a=i)}}catch(r){}return a||(a=e.value.charAt(0).toUpperCase()+e.value.slice(1)),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},groupedStrategies:function(){return"symbol"===this.groupByMode?this.groupedBySymbol:this.groupedByStrategy},groupedByStrategy:function(){var t,e={},a=[],s=(0,d.A)(this.strategies);try{for(s.s();!(t=s.n()).done;){var i=t.value,r=i.strategy_group_id;r&&r.trim()?(e[r]||(e[r]={id:r,baseName:i.group_base_name||i.strategy_name.split("-")[0],strategies:[],runningCount:0,stoppedCount:0}),e[r].strategies.push(i),"running"===i.status?e[r].runningCount++:e[r].stoppedCount++):a.push(i)}}catch(o){s.e(o)}finally{s.f()}var n=Object.values(e).sort(function(t,e){var a=Math.max.apply(Math,(0,c.A)(t.strategies.map(function(t){return t.created_at||0}))),s=Math.max.apply(Math,(0,c.A)(e.strategies.map(function(t){return t.created_at||0})));return s-a});return{groups:n,ungrouped:a}},groupedBySymbol:function(){var t,e={},a=[],s=(0,d.A)(this.strategies);try{for(s.s();!(t=s.n()).done;){var i=t.value,r=i.trading_config||{},n=r.symbol;if(n&&n.trim()){e[n]||(e[n]={id:"symbol_".concat(n),baseName:n,strategies:[],runningCount:0,stoppedCount:0});var o=(0,u.A)((0,u.A)({},i),{},{displayInfo:{strategyName:i.strategy_name||i.group_base_name||"Unnamed",timeframe:r.timeframe||"-",indicatorName:i.indicator_name||i.indicator_config&&i.indicator_config.name||"-"}});e[n].strategies.push(o),"running"===i.status?e[n].runningCount++:e[n].stoppedCount++}else a.push(i)}}catch(c){s.e(c)}finally{s.f()}var l=Object.values(e).sort(function(t,e){return t.baseName.localeCompare(e.baseName)});return{groups:l,ungrouped:a}},unconfiguredChannels:function(){var t=[];return this.notifyChannelsUi.includes("telegram")&&(this.userNotificationSettings.telegram_bot_token||this.userNotificationSettings.telegram_chat_id||t.push("Telegram")),this.notifyChannelsUi.includes("email")&&(this.userNotificationSettings.email||t.push("Email")),this.notifyChannelsUi.includes("discord")&&(this.userNotificationSettings.discord_webhook||t.push("Discord")),this.notifyChannelsUi.includes("webhook")&&(this.userNotificationSettings.webhook_url||t.push("Webhook")),t}},data:function(){return{topTab:"overview",loading:!1,loadingRecords:!1,strategies:[],selectedStrategy:null,showFormModal:!1,pendingRouteIndicatorId:"",lastAutoStrategyName:"",lastAutoScriptStrategyName:"",scriptTemplateKeyForPayload:"",strategyMode:"",strategyCode:"",pendingScriptTemplateKey:"",showModeSelector:!1,strategyType:"indicator",selectedMarketCategory:"Crypto",currentStep:0,saving:!1,loadingIndicators:!1,availableIndicators:[],selectedIndicator:null,indicatorParams:[],indicatorParamValues:{},cryptoSymbols:It,loadingWatchlist:!1,watchlist:[],exchangeOptions:Nt,currentExchangeId:"",currentBrokerId:"ibkr",connectionTestResult:null,indicatorsLoaded:!1,editingStrategy:null,currentEquity:null,equityPollingTimer:null,backtestCollapseKeys:["risk"],trailingEnabledUi:!1,entryPctMaxUi:100,aiFilterEnabledUi:!1,isEditMode:!1,supportedIPs:[],executionModeUi:"signal",liveDisclaimerAckUi:!1,notifyChannelsUi:["browser"],userNotificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""},loadingExchangeCredentials:!1,exchangeCredentials:[],showExchangeAccountModal:!1,saveCredentialUi:!1,suppressApiClearOnce:!1,selectedSymbols:[],crossSectionalSymbols:[],collapsedGroups:{},groupByMode:"strategy",showAddSymbolModal:!1,addSymbolMarket:"Crypto",addSymbolMarketTypes:[{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],addSymbolKeyword:"",searchingSymbol:!1,symbolSearchResults:[],selectedAddSymbol:null,hasSearchedSymbol:!1,addingSymbol:!1,hotSymbols:[],loadingHotSymbols:!1,searchTimer:null,assistantGuideDismissed:!1}},beforeCreate:function(){this.form=this.$form.createForm(this)},mounted:function(){var t=this;this.restoreAssistantGuidePreference(),"strategy"!==this.$route.query.tab&&"create"!==this.$route.query.mode||(this.topTab="strategy"),this.loadStrategies(),this.loadUserNotificationSettings(),"create"===this.$route.query.mode&&this.$nextTick(function(){var e=t.$route.query.indicator_id;e?(t.strategyMode="signal",t.pendingRouteIndicatorId=String(e),t._openCreateModal()):t.handleCreateStrategy()})},beforeDestroy:function(){this.stopEquityPolling()},methods:{restoreAssistantGuidePreference:function(){try{this.assistantGuideDismissed="1"===window.localStorage.getItem(this.assistantGuideStorageKey)}catch(t){this.assistantGuideDismissed=!1}},dismissAssistantGuide:function(){this.assistantGuideDismissed=!0;try{window.localStorage.setItem(this.assistantGuideStorageKey,"1")}catch(t){}},goToStrategyTab:function(){this.topTab="strategy"},openCreateStrategyFromGuide:function(){var t=this;this.topTab="strategy",this.$nextTick(function(){t.handleCreateStrategy()})},loadUserNotificationSettings:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,h.vF)();case 1:a=e.v,1===a.code&&a.data&&(t.userNotificationSettings={default_channels:a.data.default_channels||["browser"],telegram_bot_token:a.data.telegram_bot_token||"",telegram_chat_id:a.data.telegram_chat_id||"",email:a.data.email||"",phone:a.data.phone||"",discord_webhook:a.data.discord_webhook||"",webhook_url:a.data.webhook_url||"",webhook_token:a.data.webhook_token||""}),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadWatchlist:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingWatchlist=!0,e.p=1,e.n=2,(0,m.Qo)({userid:1});case 2:a=e.v,a&&1===a.code?t.watchlist=Array.isArray(a.data)?a.data:[]:t.watchlist=[],e.n=4;break;case 3:e.p=3,e.v,t.watchlist=[];case 4:return e.p=4,t.loadingWatchlist=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleCloseAddSymbolModal:function(){this.showAddSymbolModal=!1,this.addSymbolKeyword="",this.symbolSearchResults=[],this.selectedAddSymbol=null,this.hasSearchedSymbol=!1},handleAddSymbolMarketChange:function(t){this.addSymbolMarket=t,this.addSymbolKeyword="",this.symbolSearchResults=[],this.selectedAddSymbol=null,this.hasSearchedSymbol=!1,this.loadHotSymbols(t)},handleSymbolSearchInputChange:function(t){var e=this,a=t.target.value;if(this.addSymbolKeyword=a,this.searchTimer&&clearTimeout(this.searchTimer),!a||""===a.trim())return this.symbolSearchResults=[],this.hasSearchedSymbol=!1,void(this.selectedAddSymbol=null);this.searchTimer=setTimeout(function(){e.searchSymbolsInModal(a)},500)},handleSearchSymbol:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:if(t&&t.trim()){a.n=1;break}return a.a(2);case 1:if(e.addSymbolMarket){a.n=2;break}return e.$message.warning(e.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),a.a(2);case 2:if(!(e.symbolSearchResults.length>0)){a.n=3;break}return a.a(2);case 3:e.hasSearchedSymbol&&0===e.symbolSearchResults.length?e.handleDirectAdd():e.searchSymbolsInModal(t);case 4:return a.a(2)}},a)}))()},searchSymbolsInModal:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var s;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t&&""!==t.trim()){a.n=1;break}return e.symbolSearchResults=[],e.hasSearchedSymbol=!1,a.a(2);case 1:if(e.addSymbolMarket){a.n=2;break}return a.a(2);case 2:return e.searchingSymbol=!0,e.hasSearchedSymbol=!0,a.p=3,a.n=4,(0,m._3)({market:e.addSymbolMarket,keyword:t.trim()});case 4:s=a.v,s&&1===s.code&&Array.isArray(s.data)?e.symbolSearchResults=s.data:e.symbolSearchResults=[],a.n=6;break;case 5:a.p=5,a.v,e.symbolSearchResults=[];case 6:return a.p=6,e.searchingSymbol=!1,a.f(6);case 7:return a.a(2)}},a,null,[[3,5,6,7]])}))()},handleDirectAdd:function(){this.addSymbolKeyword&&this.addSymbolKeyword.trim()?this.addSymbolMarket?this.selectedAddSymbol={market:this.addSymbolMarket,symbol:this.addSymbolKeyword.trim().toUpperCase(),name:""}:this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},handleSelectAddSymbol:function(t){this.selectedAddSymbol={market:this.addSymbolMarket,symbol:t.symbol,name:t.name||""}},loadHotSymbols:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var s;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t||(t=e.addSymbolMarket||"Crypto"),t){a.n=1;break}return a.a(2);case 1:return e.loadingHotSymbols=!0,a.p=2,a.n=3,(0,m.z6)({market:t,limit:10});case 3:s=a.v,s&&1===s.code&&s.data?e.hotSymbols=s.data:e.hotSymbols=[],a.n=5;break;case 4:a.p=4,a.v,e.hotSymbols=[];case 5:return a.p=5,e.loadingHotSymbols=!1,a.f(5);case 6:return a.a(2)}},a,null,[[2,4,5,6]])}))()},handleConfirmAddSymbol:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,s,i,r,n,l,d;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a="",s="",!t.selectedAddSymbol){e.n=1;break}a=t.selectedAddSymbol.market,s=t.selectedAddSymbol.symbol.toUpperCase(),e.n=4;break;case 1:if(!t.addSymbolKeyword||!t.addSymbolKeyword.trim()){e.n=3;break}if(t.addSymbolMarket){e.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),e.a(2);case 2:a=t.addSymbolMarket,s=t.addSymbolKeyword.trim().toUpperCase(),e.n=4;break;case 3:return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),e.a(2);case 4:return t.addingSymbol=!0,e.p=5,e.n=6,(0,m.dp)({userid:1,market:a,symbol:s});case 6:if(i=e.v,!i||1!==i.code){e.n=8;break}return t.$message.success(t.$t("dashboard.analysis.message.addStockSuccess")),e.n=7,t.loadWatchlist();case 7:r="".concat(a,":").concat(s),t.isEditMode?(t.form.setFieldsValue({symbol:r}),t.handleWatchlistSymbolChange(r)):(t.selectedSymbols.includes(r)||(t.selectedSymbols=[].concat((0,c.A)(t.selectedSymbols),[r])),t.handleMultiSymbolChange(t.selectedSymbols)),t.handleCloseAddSymbolModal(),e.n=9;break;case 8:t.$message.error((null===i||void 0===i?void 0:i.msg)||t.$t("dashboard.analysis.message.addStockFailed"));case 9:e.n=11;break;case 10:e.p=10,d=e.v,l=(null===d||void 0===d||null===(n=d.response)||void 0===n||null===(n=n.data)||void 0===n?void 0:n.msg)||(null===d||void 0===d?void 0:d.message)||t.$t("dashboard.analysis.message.addStockFailed"),t.$message.error(l);case 11:return e.p=11,t.addingSymbol=!1,e.f(11);case 12:return e.a(2)}},e,null,[[5,10,11,12]])}))()},filterWatchlistOption:function(t,e){var a,s=(null===(a=e.componentOptions)||void 0===a||null===(a=a.propsData)||void 0===a?void 0:a.value)||"";return"__add_symbol_option__"===s||String(s).toLowerCase().includes(String(t||"").toLowerCase())},filterWatchlistOptionWithAdd:function(t,e){var a,s=(null===(a=e.componentOptions)||void 0===a||null===(a=a.propsData)||void 0===a?void 0:a.value)||"";return"__add_symbol_option__"===s||String(s).toLowerCase().includes(String(t||"").toLowerCase())},handleMultiSymbolChangeWithAdd:function(t){if(t&&t.includes("__add_symbol_option__"))return this.selectedSymbols=t.filter(function(t){return"__add_symbol_option__"!==t}),this.showAddSymbolModal=!0,void this.loadHotSymbols(this.addSymbolMarket);this.handleMultiSymbolChange(t)},handleStrategyTypeChange:function(t){var e=t.target.value;"single"===e&&(this.crossSectionalSymbols=[])},handleCrossSectionalSymbolChange:function(t){if(t&&t.includes("__add_symbol_option__"))return this.crossSectionalSymbols=t.filter(function(t){return"__add_symbol_option__"!==t}),this.showAddSymbolModal=!0,void this.loadHotSymbols(this.addSymbolMarket);if(this.crossSectionalSymbols=t||[],t&&t.length>0){var e=t[0];if("string"===typeof e&&e.includes(":")){var a=e.indexOf(":"),s=e.slice(0,a);this.selectedMarketCategory=s||"Crypto"}}},getMarketColor:function(t){var e={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return e[t]||"default"},handleWatchlistSymbolChange:function(t){var e=this;if("__add_symbol_option__"===t)return this.$nextTick(function(){e.form.setFieldsValue({symbol:void 0})}),this.showAddSymbolModal=!0,void this.loadHotSymbols(this.addSymbolMarket);if(t&&"string"===typeof t&&t.includes(":")){var a=t.indexOf(":"),s=t.slice(0,a);if(this.selectedMarketCategory=s||"Crypto","Forex"===this.selectedMarketCategory){this.currentBrokerId="mt5";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({forex_broker_id:"mt5"})}catch(r){}}else if("USStock"===this.selectedMarketCategory){this.currentBrokerId="ibkr";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({broker_id:"ibkr"})}catch(r){}}var i=["Crypto","USStock","Forex"].includes(this.selectedMarketCategory);if(!i){this.executionModeUi="signal";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({execution_mode:"signal"})}catch(r){}}this.currentExchangeId="";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({exchange_id:void 0})}catch(r){}}},handleSimpleSymbolChange:function(t){if("__add_symbol_option__"===t)return this.showAddSymbolModal=!0,void this.loadHotSymbols(this.addSymbolMarket);var e=t?[t]:[];this.handleMultiSymbolChange(e)},handleMultiSymbolChange:function(t){if(this.selectedSymbols=t||[],t&&t.length>0){var e=t[0];if("string"===typeof e&&e.includes(":")){var a=e.indexOf(":"),s=e.slice(0,a);this.selectedMarketCategory=s||"Crypto"}}if("Forex"===this.selectedMarketCategory){this.currentBrokerId="mt5";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({forex_broker_id:"mt5"})}catch(r){}}else if("USStock"===this.selectedMarketCategory){this.currentBrokerId="ibkr";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({broker_id:"ibkr"})}catch(r){}}var i=["Crypto","USStock","Forex"].includes(this.selectedMarketCategory);if(!i){this.executionModeUi="signal";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({execution_mode:"signal"})}catch(r){}}this.currentExchangeId="";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({exchange_id:void 0})}catch(r){}},loadExchangeCredentials:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingExchangeCredentials=!0,e.p=1,e.n=2,(0,g.IA)({user_id:1});case 2:a=e.v,a&&1===a.code?t.exchangeCredentials=a.data&&a.data.items||[]:(t.exchangeCredentials=[],t.$message.warning((null===a||void 0===a?void 0:a.msg)||t.$t("trading-assistant.messages.loadFailed"))),e.n=4;break;case 3:e.p=3,e.v,t.exchangeCredentials=[],t.$message.warning(t.$t("trading-assistant.exchange.testFailed"));case 4:return e.p=4,t.loadingExchangeCredentials=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},goToIndicatorAnalysisCreate:function(){this.$router.push("/indicator-analysis")},handleExchangeAccountCreated:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var s,i;return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:return a.n=1,e.loadExchangeCredentials();case 1:if(s=t&&(t.id||t.credential_id),!s){a.n=3;break}try{e.form&&e.form.setFieldsValue&&e.form.setFieldsValue({credential_id:s})}catch(r){}return a.n=2,e.handleCredentialSelectChange(s);case 2:a.n=4;break;case 3:if(1!==e.exchangeCredentials.length){a.n=4;break}i=e.exchangeCredentials[0].id;try{e.form&&e.form.setFieldsValue&&e.form.setFieldsValue({credential_id:i})}catch(r){}return a.n=4,e.handleCredentialSelectChange(i);case 4:return a.a(2)}},a)}))()},formatCredentialLabel:function(t){if(!t)return"";var e=(t.name||"").trim(),a=t.exchange_id||"",s=t.api_key_hint||"";return e?"".concat(a.toUpperCase()," - ").concat(e," (").concat(s,")"):"".concat(a.toUpperCase()," (").concat(s,")")},isCredentialCompatible:function(t){if(!t||!t.exchange_id)return!0;var e=(t.exchange_id||"").toLowerCase(),a=this.selectedMarketCategory||"Crypto";if("mt5"===e)return"Forex"===a;if("ibkr"===e)return"USStock"===a;var s=["binance","okx","bitget","bybit","coinbaseexchange","kraken","kucoin","gate","bitfinex","deepcoin"];return!s.includes(e)||"Crypto"===a},handleCredentialSelectChange:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var s,i,r;return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:if(t){a.n=1;break}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 1:if(s=e.exchangeCredentials.find(function(e){return String(e.id)===String(t)}),!s){a.n=5;break}if(i=(s.exchange_id||"").toLowerCase(),"mt5"!==i||"Forex"===e.selectedMarketCategory){a.n=2;break}e.$message.error(e.$t("trading-assistant.validation.mt5OnlyForForex"));try{e.form&&e.form.setFieldsValue&&e.form.setFieldsValue({credential_id:void 0})}catch(n){}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 2:if("ibkr"!==i||"USStock"===e.selectedMarketCategory){a.n=3;break}e.$message.error(e.$t("trading-assistant.validation.ibkrOnlyForUSStock"));try{e.form&&e.form.setFieldsValue&&e.form.setFieldsValue({credential_id:void 0})}catch(n){}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 3:if(r=["binance","okx","bitget","bybit","coinbaseexchange","kraken","kucoin","gate","bitfinex"],!r.includes(i)||"Crypto"===e.selectedMarketCategory){a.n=4;break}e.$message.error(e.$t("trading-assistant.validation.cryptoExchangeOnlyForCrypto"));try{e.form&&e.form.setFieldsValue&&e.form.setFieldsValue({credential_id:void 0})}catch(n){}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 4:e.currentExchangeId=s.exchange_id||"";case 5:e.connectionTestResult=null;case 6:return a.a(2)}},a)}))()},onSaveCredentialChange:function(t){var e=!!(t&&t.target&&t.target.checked);this.saveCredentialUi=e;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({save_credential:e})}catch(a){}},onExecutionModeChange:function(t){var e=t&&t.target?t.target.value:t;if(this.executionModeUi=e||"signal",!this.canUseLiveTrading&&"signal"!==this.executionModeUi){this.executionModeUi="signal";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({execution_mode:"signal"})}catch(a){}}},setExecutionModeUi:function(t){var e=t||"signal";this.onExecutionModeChange(e);try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({execution_mode:e})}catch(a){}},onLiveDisclaimerAckChange:function(t){var e=!!(t&&t.target&&t.target.checked);this.liveDisclaimerAckUi=e;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({live_disclaimer_ack:e})}catch(a){}},onNotifyChannelsChange:function(t){this.notifyChannelsUi=Array.isArray(t)?t:[]},formatCurrency:function(t){return null===t||void 0===t?"-":"$"+t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatPnl:function(t){if(null===t||void 0===t)return"-";var e=t>=0?"+":"";return e+"$"+Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatPnlPercent:function(t){if(null===t||void 0===t)return"-";var e=t>=0?"+":"";return e+Math.abs(t).toFixed(2)+"%"},loadStrategies:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,s,i;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loading=!0,e.p=1,e.n=2,(0,p.EM)();case 2:a=e.v,1===a.code?(s=a.data.strategies||[],t.strategies=s,t.selectedStrategy&&(i=t.strategies.find(function(e){return e.id===t.selectedStrategy.id}),t.selectedStrategy=i||null)):t.$message.error(a.msg||t.$t("trading-assistant.messages.loadFailed")),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("trading-assistant.messages.loadFailed"));case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleCreateStrategy:function(){this.isEditMode=!1,this.editingStrategy=null,this.strategyMode="",this.strategyCode="",this.pendingScriptTemplateKey="",this.showModeSelector=!0,this.showFormModal=!1},handleModeSelect:function(t){this.strategyMode=t,this.pendingScriptTemplateKey="",this.showModeSelector=!1,this._openCreateModal()},handleUseTemplate:function(t){this.strategyMode="script",this.pendingScriptTemplateKey=t,this.showModeSelector=!1,this._openCreateModal()},_openCreateModal:function(){var t=this;this.strategyType="indicator",this.currentStep=0,this.currentExchangeId="",this.currentBrokerId="ibkr",this.selectedIndicator=null,this.connectionTestResult=null,this.executionModeUi="signal",this.notifyChannelsUi=["browser"],this.saveCredentialUi=!1,this.backtestCollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.aiFilterEnabledUi=!1,this.selectedMarketCategory="Crypto",this.selectedSymbols=[];var e="script"===this.strategyMode,a=e?this.buildScriptStrategyDefaultName(this.pendingScriptTemplateKey||null):this.buildStrategyDefaultName();this.lastAutoStrategyName=a,this.lastAutoScriptStrategyName=e?a:"",this.scriptTemplateKeyForPayload=e&&this.pendingScriptTemplateKey||"",this.form.resetFields(),this.form.setFieldsValue({strategy_name:a,execution_mode:"signal",notify_channels:["browser"],save_credential:!1,live_disclaimer_ack:!1,initial_capital:1e3,market_type:"swap",leverage:5,trade_direction:"long",timeframe:"15m",cs_strategy_type:"single"}),this.liveDisclaimerAckUi=!1,this.showFormModal=!0,this.$nextTick((0,l.A)((0,o.A)().m(function e(){return(0,o.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,t.loadWatchlist();case 1:return e.n=2,t.loadIndicators();case 2:t.applyPendingRouteIndicatorSelection(),t.loadExchangeCredentials();case 3:return e.a(2)}},e)})))},handleEditStrategy:function(t){var e=this;"running"!==t.status?(this.strategyType="indicator",this.strategyMode=t.strategy_mode||"signal",this.strategyCode=t.strategy_code||"",this.pendingScriptTemplateKey="",this.isEditMode=!0,this.editingStrategy=t,this.currentStep=0,this.currentExchangeId="",this.selectedIndicator=null,this.connectionTestResult=null,this.form.resetFields(),this.backtestCollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.aiFilterEnabledUi=!1,this.showFormModal=!0,this.$nextTick((0,l.A)((0,o.A)().m(function a(){return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:return e.loadWatchlist(),e.loadIndicators(),e.loadExchangeCredentials(),a.n=1,e.loadStrategyDataToForm(t);case 1:return a.a(2)}},a)})))):this.$message.warning(this.$t("trading-assistant.messages.runningWarning"))},loadStrategyDataToForm:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var s,i,r,l,c,d,u,p,m,g,h,_,y,f,v,b,x,k,C,S,w,$,A,T,P,M,F,I,N,D,V,E,R,z,L,U,q,K,O,B,G,H,W,j,Y,J,X,Z;return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:if(e.indicatorsLoaded){a.n=1;break}return a.n=1,e.loadIndicators();case 1:return a.n=2,e.$nextTick();case 2:return e.selectedMarketCategory=t.market_category||"Crypto",d=t.execution_mode||"signal",e.executionModeUi=d,e.liveDisclaimerAckUi="live"===d,u=t.notification_config&&t.notification_config.channels||["browser"],e.notifyChannelsUi=Array.isArray(u)?u:["browser"],p=!1,m=!1,t.trading_config&&(f=t.trading_config||{},v=f.trailing&&"object"===(0,n.A)(f.trailing)?f.trailing:null,p=void 0!==f.trailing_enabled?!!f.trailing_enabled:!(!v||!v.enabled),b=f.enable_ai_filter,m=!0===b||"true"===b||1===b||"1"===b,x=f.scale&&"object"===(0,n.A)(f.scale)?f.scale:null,k=f.position&&"object"===(0,n.A)(f.position)?f.position:null,C=new Set(["risk"]),(f.trend_add_enabled||f.dca_add_enabled||x&&(null!==(g=x.trendAdd)&&void 0!==g&&g.enabled||null!==(h=x.dcaAdd)&&void 0!==h&&h.enabled))&&C.add("scale"),(f.trend_reduce_enabled||f.adverse_reduce_enabled||x&&(null!==(_=x.trendReduce)&&void 0!==_&&_.enabled||null!==(y=x.adverseReduce)&&void 0!==y&&y.enabled))&&C.add("reduce"),(void 0!==f.entry_pct||k&&void 0!==k.entryPct)&&C.add("position"),e.backtestCollapseKeys=Array.from(C)),e.trailingEnabledUi=p,e.aiFilterEnabledUi=m,a.n=3,e.$nextTick();case 3:return e.form.setFieldsValue({enable_ai_filter:m}),a.n=4,e.$nextTick();case 4:if(e.form.setFieldsValue({execution_mode:e.executionModeUi,live_disclaimer_ack:e.liveDisclaimerAckUi,notify_channels:e.notifyChannelsUi,notify_email:(null===(s=t.notification_config)||void 0===s||null===(s=s.targets)||void 0===s?void 0:s.email)||"",notify_phone:(null===(i=t.notification_config)||void 0===i||null===(i=i.targets)||void 0===i?void 0:i.phone)||"",notify_telegram:(null===(r=t.notification_config)||void 0===r||null===(r=r.targets)||void 0===r?void 0:r.telegram)||"",notify_discord:(null===(l=t.notification_config)||void 0===l||null===(l=l.targets)||void 0===l?void 0:l.discord)||"",notify_webhook:(null===(c=t.notification_config)||void 0===c||null===(c=c.targets)||void 0===c?void 0:c.webhook)||""}),S="script"===t.strategy_mode||"ScriptStrategy"===t.strategy_type,!S){a.n=5;break}return w=t.trading_config||{},$=w.symbol||t.symbol||"",A="string"===typeof $&&$.includes(":")?$:"".concat(e.selectedMarketCategory,":").concat($),T=w.script_template_key?String(w.script_template_key):"",e.scriptTemplateKeyForPayload=T,e.pendingScriptTemplateKey=T,e.lastAutoScriptStrategyName=t.strategy_name||"",e.lastAutoStrategyName=t.strategy_name||"",P="futures"===w.market_type?"swap":w.market_type||"swap",e.form.setFieldsValue({strategy_name:t.strategy_name,symbol:A,initial_capital:null!=w.initial_capital?w.initial_capital:t.initial_capital||1e3,leverage:null!=w.leverage?w.leverage:t.leverage||5,trade_direction:w.trade_direction||"long",timeframe:w.timeframe||t.timeframe||"15m",market_type:P}),a.a(2);case 5:if(!t.indicator_config||!t.indicator_config.indicator_id){a.n=8;break}if(M=t.indicator_config.indicator_id,F=e.availableIndicators.find(function(t){return String(t.id)===String(M)}),!F){a.n=7;break}return N=String(F.id),e.form.setFieldsValue({indicator_id:N}),a.n=6,e.handleIndicatorChange(N);case 6:D=null===(I=t.trading_config)||void 0===I?void 0:I.indicator_params,D&&"object"===(0,n.A)(D)&&Object.keys(D).forEach(function(t){t in e.indicatorParamValues&&e.$set(e.indicatorParamValues,t,D[t])}),a.n=8;break;case 7:e.form.setFieldsValue({indicator_id:String(M)});case 8:if(!t.exchange_config){a.n=12;break}if(V=t.exchange_config.exchange_id||"",E="live"===e.executionModeUi,R=["Crypto","USStock","Forex"].includes(e.selectedMarketCategory),z="USStock"===e.selectedMarketCategory,L="Forex"===e.selectedMarketCategory,!E||!R){a.n=11;break}if(!z){a.n=9;break}e.currentBrokerId=V||"ibkr",e.form.setFieldsValue({broker_id:V||"ibkr",ibkr_host:t.exchange_config.ibkr_host||"127.0.0.1",ibkr_port:t.exchange_config.ibkr_port||7497,ibkr_client_id:t.exchange_config.ibkr_client_id||1,ibkr_account:t.exchange_config.ibkr_account||""}),a.n=11;break;case 9:if(!L){a.n=10;break}e.currentBrokerId=V||"mt5",e.form.setFieldsValue({forex_broker_id:V||"mt5",mt5_server:t.exchange_config.mt5_server||"",mt5_login:t.exchange_config.mt5_login||"",mt5_password:t.exchange_config.mt5_password||"",mt5_terminal_path:t.exchange_config.mt5_terminal_path||""}),a.n=11;break;case 10:if(e.currentExchangeId=V||t.exchange_config.exchange_id||"",U=t.exchange_config.credential_id,!U){a.n=11;break}return e.form.setFieldsValue({credential_id:U}),a.n=11,e.handleCredentialSelectChange(U);case 11:z||L?e.currentBrokerId=V||(L?"mt5":"ibkr"):e.currentExchangeId=V;case 12:if(t.trading_config){if(q=t.trading_config||{},K=q.trailing&&"object"===(0,n.A)(q.trailing)?q.trailing:null,O=q.scale&&"object"===(0,n.A)(q.scale)?q.scale:null,B=q.position&&"object"===(0,n.A)(q.position)?q.position:null,G=q.strategy_type||t.strategy_type||"single","cross_sectional"===G)if(e.form.setFieldsValue({cs_strategy_type:"cross_sectional",portfolio_size:q.portfolio_size||10,long_ratio:q.long_ratio||.5,rebalance_frequency:q.rebalance_frequency||"daily"}),q.symbol_list&&Array.isArray(q.symbol_list))e.crossSectionalSymbols=q.symbol_list;else if(t.symbol_list)try{H="string"===typeof t.symbol_list?JSON.parse(t.symbol_list):t.symbol_list,Array.isArray(H)&&(e.crossSectionalSymbols=H)}catch(o){e.crossSectionalSymbols=[]}else e.crossSectionalSymbols=[];else e.form.setFieldsValue({cs_strategy_type:"single"}),e.crossSectionalSymbols=[];W=O&&O.trendAdd?O.trendAdd:null,j=O&&O.dcaAdd?O.dcaAdd:null,Y=O&&O.trendReduce?O.trendReduce:null,J=O&&O.adverseReduce?O.adverseReduce:null,X=q.symbol,Z="string"===typeof X&&X.includes(":")?X:"".concat(e.selectedMarketCategory,":").concat(X),e.form.setFieldsValue({strategy_name:t.strategy_name,symbol:Z,initial_capital:q.initial_capital,leverage:q.leverage,trade_direction:q.trade_direction||"long",timeframe:q.timeframe||"1H",market_type:"futures"===q.market_type?"swap":q.market_type||"swap",take_profit_pct:q.take_profit_pct||0,stop_loss_pct:q.stop_loss_pct||0,trailing_enabled:p,trailing_stop_pct:void 0!==q.trailing_stop_pct?q.trailing_stop_pct||0:K&&K.pct||0,trailing_activation_pct:void 0!==q.trailing_activation_pct?q.trailing_activation_pct||0:K&&K.activationPct||0,trend_add_enabled:void 0!==q.trend_add_enabled?!!q.trend_add_enabled:!(!W||!W.enabled),trend_add_step_pct:void 0!==q.trend_add_step_pct?q.trend_add_step_pct||0:W&&W.stepPct||0,trend_add_size_pct:void 0!==q.trend_add_size_pct?q.trend_add_size_pct||0:W&&W.sizePct||0,trend_add_max_times:void 0!==q.trend_add_max_times?q.trend_add_max_times||0:W&&W.maxTimes||0,dca_add_enabled:void 0!==q.dca_add_enabled?!!q.dca_add_enabled:!(!j||!j.enabled),dca_add_step_pct:void 0!==q.dca_add_step_pct?q.dca_add_step_pct||0:j&&j.stepPct||0,dca_add_size_pct:void 0!==q.dca_add_size_pct?q.dca_add_size_pct||0:j&&j.sizePct||0,dca_add_max_times:void 0!==q.dca_add_max_times?q.dca_add_max_times||0:j&&j.maxTimes||0,trend_reduce_enabled:void 0!==q.trend_reduce_enabled?!!q.trend_reduce_enabled:!(!Y||!Y.enabled),trend_reduce_step_pct:void 0!==q.trend_reduce_step_pct?q.trend_reduce_step_pct||0:Y&&Y.stepPct||0,trend_reduce_size_pct:void 0!==q.trend_reduce_size_pct?q.trend_reduce_size_pct||0:Y&&Y.sizePct||0,trend_reduce_max_times:void 0!==q.trend_reduce_max_times?q.trend_reduce_max_times||0:Y&&Y.maxTimes||0,adverse_reduce_enabled:void 0!==q.adverse_reduce_enabled?!!q.adverse_reduce_enabled:!(!J||!J.enabled),adverse_reduce_step_pct:void 0!==q.adverse_reduce_step_pct?q.adverse_reduce_step_pct||0:J&&J.stepPct||0,adverse_reduce_size_pct:void 0!==q.adverse_reduce_size_pct?q.adverse_reduce_size_pct||0:J&&J.sizePct||0,adverse_reduce_max_times:void 0!==q.adverse_reduce_max_times?q.adverse_reduce_max_times||0:J&&J.maxTimes||0,entry_pct:0===q.entry_pct||q.entry_pct?q.entry_pct:B&&B.entryPct?B.entryPct:100,enable_ai_filter:m}),e.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()})}case 13:return a.a(2)}},a)}))()},handleSelectStrategy:function(t){this.selectedStrategy=t,this.currentEquity=null,this.loadStrategyDetails(),this.startEquityPolling()},loadStrategyDetails:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,s,i,n,l,c,u,m,g,h,_,y,f;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.selectedStrategy){e.n=1;break}return e.a(2,Promise.resolve());case 1:return e.p=1,e.n=2,Promise.all([(0,p.Yx)(t.selectedStrategy.id),(0,p.oK)(t.selectedStrategy.id)]);case 2:if(a=e.v,s=(0,r.A)(a,2),i=s[0],n=s[1],l=null,1===i.code&&i.data&&(Array.isArray(i.data)&&i.data.length>0?(c=i.data[i.data.length-1],l=c.equity):(m=(null===(u=t.selectedStrategy.trading_config)||void 0===u?void 0:u.initial_capital)||t.selectedStrategy.initial_capital,l=m||null)),g=0,1===n.code&&n.data){h=n.data.positions||n.data.items||[],_=(0,d.A)(h);try{for(_.s();!(y=_.n()).done;)f=y.value,g+=parseFloat(f.unrealized_pnl||f.unrealizedPnl||0)}catch(o){_.e(o)}finally{_.f()}}t.currentEquity=null!==l?l+g:null,e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}))()},startEquityPolling:function(){var t=this;this.stopEquityPolling(),this.selectedStrategy&&(this.loadStrategyDetails(),this.equityPollingTimer=setInterval(function(){t.loadStrategyDetails()},1e4))},stopEquityPolling:function(){this.equityPollingTimer&&(clearInterval(this.equityPollingTimer),this.equityPollingTimer=null)},handleCloseModal:function(){this.showFormModal=!1,this.editingStrategy=null,this.isEditMode=!1,this.strategyType="indicator",this.strategyMode="",this.strategyCode="",this.pendingScriptTemplateKey="",this.currentStep=0,this.currentExchangeId="",this.selectedIndicator=null,this.connectionTestResult=null,this.indicatorsLoaded=!1,this.availableIndicators=[],this.pendingRouteIndicatorId="",this.lastAutoStrategyName="",this.lastAutoScriptStrategyName="",this.scriptTemplateKeyForPayload="",this.backtestCollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.aiFilterEnabledUi=!1,this.executionModeUi="signal",this.liveDisclaimerAckUi=!1,this.form.resetFields()},handleRefresh:function(){this.loadStrategies(),this.showFormModal=!1},handleMenuClick:function(t,e){switch(t){case"start":this.handleStartStrategy(e.id);break;case"stop":this.handleStopStrategy(e.id);break;case"edit":this.handleEditStrategy(e);break;case"backtest":this.handleBacktestStrategy(e);break;case"delete":this.handleDeleteStrategy(e);break}},toggleGroup:function(t){this.$set(this.collapsedGroups,t,!this.collapsedGroups[t])},handleBacktestStrategy:function(t){t&&t.id&&this.$router.push({path:"/backtest-center",query:{tab:"strategy",strategy_id:String(t.id)}})},handleGroupMenuClick:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function s(){var i,r;return(0,o.A)().w(function(s){while(1)switch(s.n){case 0:i=e.strategies.map(function(t){return t.id}),r=t,s.n="startAll"===r?1:"stopAll"===r?3:"deleteAll"===r?5:7;break;case 1:return s.n=2,a.handleBatchStartStrategies(i,e.baseName);case 2:return s.a(3,7);case 3:return s.n=4,a.handleBatchStopStrategies(i,e.baseName);case 4:return s.a(3,7);case 5:return s.n=6,a.handleBatchDeleteStrategies(i,e.baseName);case 6:return s.a(3,7);case 7:return s.a(2)}},s)}))()},handleBatchStartStrategies:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function e(){var s,i,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,p.UH)({strategy_ids:t});case 1:s=e.v,1===s.code?(r=(null===(i=s.data)||void 0===i||null===(i=i.success_ids)||void 0===i?void 0:i.length)||t.length,a.$message.success(a.$t("trading-assistant.messages.batchStartSuccess",{count:r})),a.loadStrategies()):a.$message.error(s.msg||a.$t("trading-assistant.messages.batchStartFailed")),e.n=3;break;case 2:e.p=2,e.v,a.$message.error(a.$t("trading-assistant.messages.batchStartFailed"));case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleBatchStopStrategies:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function e(){var s,i,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,p.GF)({strategy_ids:t});case 1:s=e.v,1===s.code?(r=(null===(i=s.data)||void 0===i||null===(i=i.success_ids)||void 0===i?void 0:i.length)||t.length,a.$message.success(a.$t("trading-assistant.messages.batchStopSuccess",{count:r})),a.loadStrategies()):a.$message.error(s.msg||a.$t("trading-assistant.messages.batchStopFailed")),e.n=3;break;case 2:e.p=2,e.v,a.$message.error(a.$t("trading-assistant.messages.batchStopFailed"));case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleBatchDeleteStrategies:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function s(){var i;return(0,o.A)().w(function(s){while(1)switch(s.n){case 0:i=a.$t("trading-assistant.messages.batchDeleteConfirm",{count:t.length,name:e}),a.$confirm({class:a.isDarkTheme?"ta-strategy-confirm-modal":"",title:a.$t("trading-assistant.deleteAll"),content:i,okText:a.$t("trading-assistant.deleteAll"),okType:"danger",cancelText:a.$t("trading-assistant.form.cancel"),onOk:function(){var e=(0,l.A)((0,o.A)().m(function e(){var s,i,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,p.xQ)({strategy_ids:t});case 1:s=e.v,1===s.code?(r=(null===(i=s.data)||void 0===i||null===(i=i.success_ids)||void 0===i?void 0:i.length)||t.length,a.$message.success(a.$t("trading-assistant.messages.batchDeleteSuccess",{count:r})),a.selectedStrategy&&t.includes(a.selectedStrategy.id)&&(a.selectedStrategy=null,a.stopEquityPolling()),a.loadStrategies()):a.$message.error(s.msg||a.$t("trading-assistant.messages.batchDeleteFailed")),e.n=3;break;case 2:e.p=2,e.v,a.$message.error(a.$t("trading-assistant.messages.batchDeleteFailed"));case 3:return e.a(2)}},e,null,[[0,2]])}));function s(){return e.apply(this,arguments)}return s}()});case 1:return s.a(2)}},s)}))()},handleStartStrategy:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var s;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,p.mV)(t);case 1:s=a.v,1===s.code?(e.$message.success(e.$t("trading-assistant.messages.startSuccess")),e.loadStrategies(),e.selectedStrategy&&e.selectedStrategy.id===t&&(e.selectedStrategy.status="running")):e.$message.error(s.msg||e.$t("trading-assistant.messages.startFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("trading-assistant.messages.startFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleStopStrategy:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var s;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,p.Ke)(t);case 1:s=a.v,1===s.code?(e.$message.success(e.$t("trading-assistant.messages.stopSuccess")),e.loadStrategies(),e.selectedStrategy&&e.selectedStrategy.id===t&&(e.selectedStrategy.status="stopped")):e.$message.error(s.msg||e.$t("trading-assistant.messages.stopFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("trading-assistant.messages.stopFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleDeleteStrategy:function(t){var e=this,a=this.$t("trading-assistant.messages.deleteConfirmWithName",{name:t.strategy_name});this.$confirm({class:this.isDarkTheme?"ta-strategy-confirm-modal":"",title:this.$t("trading-assistant.deleteStrategy"),content:a,okText:this.$t("trading-assistant.deleteStrategy"),okType:"danger",cancelText:this.$t("trading-assistant.form.cancel"),onOk:function(){var a=(0,l.A)((0,o.A)().m(function a(){var s;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,p.v_)(t.id);case 1:s=a.v,1===s.code?(e.$message.success(e.$t("trading-assistant.messages.deleteSuccess")),e.selectedStrategy&&e.selectedStrategy.id===t.id&&(e.selectedStrategy=null,e.stopEquityPolling()),e.loadStrategies()):e.$message.error(s.msg||e.$t("trading-assistant.messages.deleteFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("trading-assistant.messages.deleteFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}));function s(){return a.apply(this,arguments)}return s}()})},getStatusColor:function(t){var e={running:"green",stopped:"default",error:"red"};return e[t]||"default"},getStatusText:function(t){return this.$t("trading-assistant.status.".concat(t))||t},getStrategyTypeText:function(t){return this.$t("trading-assistant.strategyType.".concat(t))||t},getTradeDirectionText:function(t){if(!t)return"";var e={long:this.$t("trading-assistant.form.tradeDirectionLong")||"做多",short:this.$t("trading-assistant.form.tradeDirectionShort")||"做空",both:this.$t("trading-assistant.form.tradeDirectionBoth")||"双向"};return e[t]||t},handleIndicatorSelectFocus:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){return(0,o.A)().w(function(e){while(1)switch(e.n){case 0:if(t.indicatorsLoaded||t.loadingIndicators){e.n=1;break}return e.n=1,t.loadIndicators();case 1:return e.a(2)}},e)}))()},loadIndicators:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,s,i,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t.loadingIndicators){e.n=1;break}return e.a(2,new Promise(function(e){var a=setInterval(function(){t.loadingIndicators||(clearInterval(a),e())},100)}));case 1:if(!t.indicatorsLoaded){e.n=2;break}return e.a(2,Promise.resolve());case 2:return a=t.$store.getters.userInfo||{},s=a.id||1,t.loadingIndicators=!0,e.p=3,e.n=4,(0,y.Ay)({url:"/api/indicator/getIndicators",method:"get",params:{userid:s}});case 4:i=e.v,1===i.code&&i.data?(r=i.data.map(function(t){return{id:t.id,name:t.name,description:t.description,type:t.indicator_type||t.indicatorType||"python",code:t.code,is_buy:t.is_buy,source:1===t.is_buy?"bought":"custom"}}),t.availableIndicators=r,t.indicatorsLoaded=!0,t.applyPendingRouteIndicatorSelection()):(t.availableIndicators=[],t.$message.warning(i.msg||t.$t("trading-assistant.messages.loadIndicatorsFailed"))),e.n=6;break;case 5:e.p=5,e.v,t.availableIndicators=[],t.$message.warning(t.$t("trading-assistant.messages.loadIndicatorsFailed"));case 6:return e.p=6,t.loadingIndicators=!1,e.f(6);case 7:return e.a(2)}},e,null,[[3,5,6,7]])}))()},handleIndicatorChange:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var s,i,r;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(s=String(t),e.selectedIndicator=e.availableIndicators.find(function(t){return String(t.id)===s}),e.applyAutoStrategyName(e.selectedIndicator),e.indicatorParams=[],e.indicatorParamValues={},!t){a.n=4;break}return a.p=1,a.n=2,e.$http.get("/api/indicator/getIndicatorParams",{params:{indicator_id:t}});case 2:i=a.v,i&&1===i.code&&Array.isArray(i.data)&&(e.indicatorParams=i.data,r={},i.data.forEach(function(t){r[t.name]=t.default}),e.indicatorParamValues=r),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.a(2)}},a,null,[[1,3]])}))()},handleMarketTypeChange:function(t){var e=t.target.value;"spot"===e&&this.form.setFieldsValue({trade_direction:"long",leverage:1})},recalcEntryPctMaxUi:function(){if(this.form){var t=!!this.form.getFieldValue("trend_add_enabled"),e=!!this.form.getFieldValue("dca_add_enabled"),a=Number(this.form.getFieldValue("trend_add_max_times")||0),s=Number(this.form.getFieldValue("dca_add_max_times")||0),i=Number(this.form.getFieldValue("trend_add_size_pct")||0),r=Number(this.form.getFieldValue("dca_add_size_pct")||0),n=(t?a*i:0)+(e?s*r:0),o=Math.max(0,Math.min(100,100-n));this.entryPctMaxUi=o}else this.entryPctMaxUi=100},normalizeEntryPct:function(){if(this.form){var t=Number(this.form.getFieldValue("entry_pct")||0),e=Number(this.entryPctMaxUi||100);t>e&&this.form.setFieldsValue({entry_pct:e})}},onTrendAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({dca_add_enabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onDcaAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({trend_add_enabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onScaleParamsChange:function(){var t=this;this.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()})},onEntryPctChange:function(){var t=this;this.$nextTick(function(){return t.normalizeEntryPct()})},onTrailingToggle:function(t){this.form&&(this.trailingEnabledUi=!!t,t||this.form.setFieldsValue({trailing_stop_pct:0,trailing_activation_pct:0}))},onAiFilterToggle:function(t){this.aiFilterEnabledUi=!!t;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({enable_ai_filter:!!t})}catch(e){}},filterIndicatorOption:function(t,e){var a,s=(null===(a=e.componentOptions)||void 0===a||null===(a=a.propsData)||void 0===a?void 0:a.label)||"";return s.toLowerCase().indexOf(t.toLowerCase())>=0},getIndicatorOptionLabel:function(t){return t?t.description?"".concat(t.name," - ").concat(t.description):t.name:""},buildStrategyDefaultName:function(t){var e=t&&t.name?t.name:this.$t("trading-assistant.form.defaultStrategyName"),a=this.$t("trading-assistant.form.defaultStrategySuffix");return"".concat(e).concat(a)},buildScriptStrategyDefaultName:function(t){var e=this.$t("trading-assistant.form.defaultStrategySuffix"),a=t&&String(t).trim();if(a){var s="trading-assistant.template.".concat(a),i=this.$t(s),r=i!==s?i:a;return"".concat(r).concat(e)}var n=this.$t("trading-assistant.form.defaultScriptStrategyName");return"".concat(n).concat(e)},scriptTemplateKeyOf:function(t){if(!t||!t.trading_config)return"";var e=t.trading_config.script_template_key;return e?String(e):""},scriptTemplateLabel:function(t){if(!t)return"";var e="trading-assistant.template.".concat(t),a=this.$t(e);return a!==e?a:String(t)},onScriptTemplateChange:function(t){var e=t&&t.key?String(t.key):"";if(this.scriptTemplateKeyForPayload=e,"script"===this.strategyMode&&this.form){var a=this.buildScriptStrategyDefaultName(e||null),s=this.form.getFieldValue("strategy_name");s&&s!==this.lastAutoScriptStrategyName&&s!==this.lastAutoStrategyName||(this.form.setFieldsValue({strategy_name:a}),this.lastAutoScriptStrategyName=a,this.lastAutoStrategyName=a)}},applyAutoStrategyName:function(t){if(!this.editingStrategy&&this.form&&"script"!==this.strategyMode){var e=this.buildStrategyDefaultName(t),a=this.form.getFieldValue("strategy_name");a&&a!==this.lastAutoStrategyName||(this.form.setFieldsValue({strategy_name:e}),this.lastAutoStrategyName=e)}},applyPendingRouteIndicatorSelection:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,s;return(0,o.A)().w(function(e){while(1)switch(e.n){case 0:if(t.pendingRouteIndicatorId&&t.form&&!t.loadingIndicators){e.n=1;break}return e.a(2);case 1:if(a=String(t.pendingRouteIndicatorId),s=t.availableIndicators.find(function(t){return String(t.id)===a}),s){e.n=2;break}return e.a(2);case 2:return t.form.setFieldsValue({indicator_id:a}),e.n=3,t.handleIndicatorChange(a);case 3:t.pendingRouteIndicatorId="";case 4:return e.a(2)}},e)}))()},filterSymbolOption:function(t,e){return e.componentOptions.children[0].text.toLowerCase().indexOf(t.toLowerCase())>=0},getIndicatorTypeColor:function(t){var e={trend:"blue",momentum:"green",volatility:"orange",volume:"purple",custom:"cyan",python:"geekblue",pine:"magenta"};return e[t]||"cyan"},getIndicatorTypeName:function(t){var e="trading-assistant.indicatorType.".concat(t),a=this.$t(e);return a!==e?a:t},getExchangeName:function(t){if(t.labelKey){var e="trading-assistant.exchangeNames.".concat(t.labelKey),a=this.$t(e);return a===e?t.value.charAt(0).toUpperCase()+t.value.slice(1):a}return t.label||t.value},getExchangeDisplayName:function(t){if(!t)return"";var e=this.exchangeOptions.find(function(e){return e.value===t});return e?this.getExchangeName(e):t.charAt(0).toUpperCase()+t.slice(1)},getExchangeTagColor:function(t){var e={binance:"gold",okx:"blue",coinbaseexchange:"cyan",kraken:"purple",bitfinex:"geekblue",huobi:"orange",gate:"green",mexc:"lime",kucoin:"volcano",bybit:"red",bitget:"magenta",bitmex:"red",deribit:"blue",phemex:"cyan",bitmart:"geekblue",bitstamp:"purple",bittrex:"orange",poloniex:"green",gemini:"lime",cryptocom:"volcano",blockchaincom:"magenta",bitflyer:"red",upbit:"blue",bithumb:"cyan",coinone:"purple",zb:"geekblue",lbank:"orange",bibox:"green",bigone:"lime",bitrue:"volcano",coinex:"magenta",ftx:"red",ftxus:"blue",binanceus:"gold",binancecoinm:"gold",binanceusdm:"gold",ibkr:"green"};return e[t]||"default"},handleApiConfigChange:function(){this.connectionTestResult=null},getModalPopupContainer:function(){return window.document.body},handleBrokerSelectChange:function(t){this.currentBrokerId=t||"ibkr",this.connectionTestResult=null},handleForexBrokerSelectChange:function(t){this.currentBrokerId=t||"mt5",this.connectionTestResult=null},handleExchangeSelectChange:function(t){var e=this;this.currentExchangeId=t||"",this.connectionTestResult=null,this.suppressApiClearOnce?this.suppressApiClearOnce=!1:this.$nextTick(function(){var t={api_key:void 0,secret_key:void 0,passphrase:void 0,enable_demo_trading:!1};setTimeout(function(){e.form.setFieldsValue(t)},100)})},getPlaceholder:function(t){var e={okx:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase(创建API时设置)"},okex:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase(创建API时设置)"},binance:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},coinbaseexchange:{api_key:"请输入API Key(或Key Name",secret_key:"请输入API Secret(或Private Key",passphrase:"请输入PassphraseLegacy Pro API需要)"},kucoin:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase"},gate:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},mexc:{api_key:"请输入Access Key",secret_key:"请输入Secret Key"},kraken:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},bitfinex:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},bybit:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},bitget:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入PassphraseLegacy Pro API需要)"}},a=e[this.currentExchangeId]||{};if(a[t])return a[t];var s={api_key:this.$t("trading-assistant.placeholders.inputApiKey"),secret_key:this.$t("trading-assistant.placeholders.inputSecretKey"),passphrase:this.$t("trading-assistant.placeholders.inputPassphrase")};return s[t]||this.$t("trading-assistant.placeholders.inputApiKey")},handleNext:function(){var t=this;if("script"!==this.strategyMode){if(0===this.currentStep){var e=["indicator_id","strategy_name"];e.push("initial_capital","market_type","leverage","trade_direction","timeframe"),this.isEditMode&&e.push("symbol"),this.form.validateFields(e,function(e,a){if(!e){if(!t.isEditMode){var s=t.form.getFieldValue("cs_strategy_type")||"single";if("cross_sectional"===s){if(!t.crossSectionalSymbols||0===t.crossSectionalSymbols.length)return void t.$message.warning(t.$t("trading-assistant.validation.symbolsRequired"))}else if(!t.selectedSymbols||0===t.selectedSymbols.length)return void t.$message.warning(t.$t("trading-assistant.validation.symbolsRequired"))}try{var i=a&&a.market_type||t.form.getFieldValue("market_type");"spot"===i&&t.form.setFieldsValue({leverage:1,trade_direction:"long"})}catch(o){}t.backtestCollapseKeys=["risk"];try{t.trailingEnabledUi=!!t.form.getFieldValue("trailing_enabled")}catch(o){t.trailingEnabledUi=!1}t.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()});try{var r=t.form.getFieldValue("execution_mode")||"signal";t.executionModeUi=r;var n=t.form.getFieldValue("notify_channels")||["browser"];t.notifyChannelsUi=Array.isArray(n)?n:["browser"]}catch(o){}t.currentStep=1}})}}else if(0===this.currentStep){var a=["strategy_name","symbol","initial_capital","timeframe"];this.form.validateFields(a,function(e){e||(t.currentStep=1)})}else if(1===this.currentStep){if(!this.strategyCode||this.strategyCode.trim().length<20)return void this.$message.warning(this.$t("trading-assistant.editor.codeHint"));try{var s=this.form.getFieldValue("execution_mode")||"signal";this.executionModeUi=s;var i=this.form.getFieldValue("notify_channels")||["browser"];this.notifyChannelsUi=Array.isArray(i)?i:["browser"]}catch(r){}this.currentStep=2}},handlePrev:function(){this.currentStep>0&&this.currentStep--},handleSubmit:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){return(0,o.A)().w(function(e){while(1)switch(e.n){case 0:if(t.currentStep===t.strategyFormLastStepIndex){e.n=1;break}return e.a(2);case 1:t.form.validateFields(function(){var e=(0,l.A)((0,o.A)().m(function e(a,s){var i,r,l,c,d,m,g,h,_,y,f,v,b,x,k,C,S,w,$,A,T,P,M,F,I,N,D,V,E;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a){e.n=19;break}if(e.p=1,t.saving=!0,"script"!==t.strategyMode){e.n=7;break}if(i={channels:s.notify_channels||["browser"],targets:{email:t.userNotificationSettings.email||"",phone:t.userNotificationSettings.phone||"",telegram:t.userNotificationSettings.telegram_chat_id||"",telegram_bot_token:t.userNotificationSettings.telegram_bot_token||"",discord:t.userNotificationSettings.discord_webhook||"",webhook:t.userNotificationSettings.webhook_url||"",webhook_token:t.userNotificationSettings.webhook_token||""}},i.channels&&0!==i.channels.length){e.n=2;break}return t.$message.warning(t.$t("trading-assistant.validation.notifyChannelRequired")),t.saving=!1,e.a(2);case 2:if(r=s.symbol||"",l="Crypto","string"===typeof r&&r.includes(":")&&(c=r.indexOf(":"),l=r.slice(0,c)||"Crypto",r=r.slice(c+1)),d="futures"===s.market_type?"swap":s.market_type||"swap",m=null!=s.leverage?s.leverage:5,g=s.trade_direction||"both","spot"===d?(m=1,g="long"):(m<1&&(m=1),m>125&&(m=125)),h=t.editingStrategy&&t.editingStrategy.trading_config,_=h&&"object"===(0,n.A)(h)&&!Array.isArray(h)?(0,u.A)({},h):{},y=(0,u.A)((0,u.A)({},_),{},{initial_capital:s.initial_capital||1e3,leverage:m,trade_direction:g,timeframe:s.timeframe||"15m",market_type:d,symbol:r}),t.scriptTemplateKeyForPayload?y.script_template_key=t.scriptTemplateKeyForPayload:delete y.script_template_key,f={strategy_name:s.strategy_name,strategy_type:"ScriptStrategy",strategy_mode:"script",strategy_code:t.strategyCode,market_category:l,execution_mode:s.execution_mode||"signal",notification_config:i,trading_config:y},!t.editingStrategy){e.n=4;break}return e.n=3,(0,p.P7)(t.editingStrategy.id,f);case 3:v=e.v,e.n=6;break;case 4:return f.user_id=1,e.n=5,(0,p.WM)(f);case 5:v=e.v;case 6:return 1===v.code?(t.$message.success(t.editingStrategy?t.$t("trading-assistant.messages.updateSuccess"):t.$t("trading-assistant.messages.createSuccess")),t.handleRefresh()):t.$message.error(v.msg||(t.editingStrategy?t.$t("trading-assistant.messages.updateFailed"):t.$t("trading-assistant.messages.createFailed"))),t.saving=!1,t.showFormModal=!1,e.a(2);case 7:if(b=t.canUseLiveTrading&&"live"===s.execution_mode,!b){e.n=8;break}if(x=s.credential_id,x){e.n=8;break}return t.$message.warning(t.$t("trading-assistant.validation.credentialRequired")),t.saving=!1,e.a(2);case 8:if(k={channels:s.notify_channels||[],targets:{email:t.userNotificationSettings.email||"",phone:t.userNotificationSettings.phone||"",telegram:t.userNotificationSettings.telegram_chat_id||"",telegram_bot_token:t.userNotificationSettings.telegram_bot_token||"",discord:t.userNotificationSettings.discord_webhook||"",webhook:t.userNotificationSettings.webhook_url||"",webhook_token:t.userNotificationSettings.webhook_token||""}},k.channels&&0!==k.channels.length){e.n=9;break}return t.$message.warning(t.$t("trading-assistant.validation.notifyChannelRequired")),t.saving=!1,e.a(2);case 9:if(C=String(s.indicator_id),S=t.availableIndicators.find(function(t){return String(t.id)===C}),S){e.n=10;break}return t.$message.error(t.$t("trading-assistant.validation.indicatorRequired")),t.saving=!1,e.a(2);case 10:if(w=!!t.aiFilterEnabledUi,$="futures"===s.market_type?"swap":s.market_type||"swap",A=s.leverage||1,T=s.trade_direction||"long","spot"===$?(A=1,T="long",t.$message.info(t.$t("trading-assistant.messages.spotLimitations"))):(A<1&&(A=1),A>125&&(A=125)),P={strategy_name:s.strategy_name,market_category:t.selectedMarketCategory||"Crypto",execution_mode:s.execution_mode||"signal",notification_config:k,indicator_config:{indicator_id:S.id,indicator_name:S.name,indicator_code:S.code||""},exchange_config:b?t.isIBKRMarket?{exchange_id:s.broker_id||t.currentBrokerId||"ibkr",ibkr_host:s.ibkr_host||"127.0.0.1",ibkr_port:s.ibkr_port||7497,ibkr_client_id:s.ibkr_client_id||1,ibkr_account:s.ibkr_account||""}:t.isMT5Market?{exchange_id:s.forex_broker_id||t.currentBrokerId||"mt5",mt5_server:s.mt5_server||"",mt5_login:s.mt5_login||"",mt5_password:s.mt5_password||"",mt5_terminal_path:s.mt5_terminal_path||""}:{credential_id:s.credential_id,exchange_id:t.currentExchangeId||void 0}:void 0,trading_config:{initial_capital:s.initial_capital,leverage:A,trade_direction:T,timeframe:s.timeframe,market_type:$,margin_mode:"cross",signal_mode:"confirmed",take_profit_pct:s.take_profit_pct||0,stop_loss_pct:s.stop_loss_pct||0,trailing_enabled:!!s.trailing_enabled,trailing_stop_pct:s.trailing_stop_pct||0,trailing_activation_pct:s.trailing_activation_pct||0,trend_add_enabled:!!s.trend_add_enabled,trend_add_step_pct:s.trend_add_step_pct||0,trend_add_size_pct:s.trend_add_size_pct||0,trend_add_max_times:s.trend_add_max_times||0,dca_add_enabled:!!s.dca_add_enabled,dca_add_step_pct:s.dca_add_step_pct||0,dca_add_size_pct:s.dca_add_size_pct||0,dca_add_max_times:s.dca_add_max_times||0,trend_reduce_enabled:!!s.trend_reduce_enabled,trend_reduce_step_pct:s.trend_reduce_step_pct||0,trend_reduce_size_pct:s.trend_reduce_size_pct||0,trend_reduce_max_times:s.trend_reduce_max_times||0,adverse_reduce_enabled:!!s.adverse_reduce_enabled,adverse_reduce_step_pct:s.adverse_reduce_step_pct||0,adverse_reduce_size_pct:s.adverse_reduce_size_pct||0,adverse_reduce_max_times:s.adverse_reduce_max_times||0,entry_pct:0===s.entry_pct||s.entry_pct?s.entry_pct:100,commission:s.commission||0,slippage:s.slippage||0,enable_ai_filter:w,indicator_params:t.indicatorParamValues,strategy_type:s.cs_strategy_type||"single",symbol_list:"cross_sectional"===s.cs_strategy_type?t.crossSectionalSymbols:void 0,portfolio_size:"cross_sectional"===s.cs_strategy_type?s.portfolio_size||10:void 0,long_ratio:"cross_sectional"===s.cs_strategy_type?s.long_ratio||.5:void 0,rebalance_frequency:"cross_sectional"===s.cs_strategy_type?s.rebalance_frequency||"daily":void 0}},!t.editingStrategy){e.n=12;break}return F=s.symbol,"string"===typeof F&&F.includes(":")&&(I=F.indexOf(":"),P.market_category=F.slice(0,I)||P.market_category,F=F.slice(I+1)),P.trading_config.symbol=F,e.n=11,(0,p.P7)(t.editingStrategy.id,P);case 11:M=e.v,e.n=16;break;case 12:if(P.user_id=1,P.strategy_type="IndicatorStrategy","cross_sectional"!==s.cs_strategy_type){e.n=14;break}return P.strategy_type="IndicatorStrategy",P.trading_config.symbol=null,e.n=13,(0,p.WM)(P);case 13:M=e.v,e.n=16;break;case 14:return P.symbols=t.selectedSymbols,e.n=15,(0,p.Ox)(P);case 15:M=e.v;case 16:1===M.code?(t.isEditMode?t.$message.success(t.$t("trading-assistant.messages.updateSuccess")):(D=s.cs_strategy_type||"single",V="cross_sectional"===D?t.crossSectionalSymbols.length:t.selectedSymbols.length,E=(null===(N=M.data)||void 0===N?void 0:N.total_created)||V,t.$message.success(t.$t("trading-assistant.messages.batchCreateSuccess",{count:E}))),t.handleRefresh()):t.$message.error(M.msg||(t.isEditMode?t.$t("trading-assistant.messages.updateFailed"):t.$t("trading-assistant.messages.createFailed"))),e.n=18;break;case 17:e.p=17,e.v,t.$message.error(t.isEditMode?t.$t("trading-assistant.messages.updateFailed"):t.$t("trading-assistant.messages.createFailed"));case 18:return e.p=18,t.saving=!1,e.f(18);case 19:return e.a(2)}},e,null,[[1,17,18,19]])}));return function(t,a){return e.apply(this,arguments)}}());case 2:return e.a(2)}},e)}))()},getFormValues:function(){var t=this;return new Promise(function(e,a){t.form.validateFields(function(t,s){t?a(t):e(s)})})},getDropdownContainer:function(t){return document.body}}},Rt=Et,zt=(0,F.A)(Rt,s,i,!1,null,"7a5d79cc",null),Lt=zt.exports},84841:function(t,e,a){a.d(e,{DK:function(){return v},E$:function(){return d},Gl:function(){return m},O0:function(){return c},TK:function(){return n},aU:function(){return i},cw:function(){return l},d$:function(){return x},hG:function(){return o},hl:function(){return g},kg:function(){return r},nY:function(){return f},r7:function(){return u},rx:function(){return _},v9:function(){return h},vF:function(){return p},vi:function(){return b},wq:function(){return y}});var s=a(75769);function i(t){return(0,s.Ay)({url:"/api/users/list",method:"get",params:t})}function r(t){return(0,s.Ay)({url:"/api/users/create",method:"post",data:t})}function n(t,e){return(0,s.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function o(t){return(0,s.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,s.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function c(){return(0,s.Ay)({url:"/api/users/roles",method:"get"})}function d(){return(0,s.Ay)({url:"/api/users/profile",method:"get"})}function u(t){return(0,s.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function p(){return(0,s.Ay)({url:"/api/users/notification-settings",method:"get"})}function m(t){return(0,s.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function g(){return(0,s.Ay)({url:"/api/users/notification-settings/test",method:"post",data:{}})}function h(t){return(0,s.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function _(t){return(0,s.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function y(t){return(0,s.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function f(t){return(0,s.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function v(t){return(0,s.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function b(t){return(0,s.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function x(t){return(0,s.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]);