@dshtrading/client-ui-strategies 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/client/contract.d.ts +1 -1
- package/lib/client/locales.js +86 -0
- package/lib/client.js +2739 -986
- package/lib/client.js.map +1 -1
- package/package.json +2 -2
package/lib/client/contract.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* (P5 拆包后文案随视图包走,不再寄生 shell 的 dshtrading.market 词典——
|
|
5
5
|
* 同 NS 双包注册会整表覆盖)。key 前缀 sv.*(stage view strategies)。
|
|
6
6
|
*/
|
|
7
|
-
type StrategyLocaleKey = 'sv.section.screener' | 'sv.section.quant' | 'sv.error.noKlines' | 'sv.error.failed' | 'sv.horizon.short' | 'sv.horizon.swing' | 'sv.horizon.long' | 'sv.symbolLabel' | 'sv.intervalDaily' | 'sv.run' | 'sv.running' | 'sv.metrics.totalReturn' | 'sv.metrics.cagr' | 'sv.metrics.maxDrawdown' | 'sv.metrics.sharpe' | 'sv.metrics.winRate' | 'sv.metrics.profitFactor' | 'sv.metrics.tradeCount' | 'sv.metrics.tradeUnit' | 'sv.metrics.exposure' | 'sv.trades.title' | 'sv.trades.empty' | 'sv.trades.entryTime' | 'sv.trades.exitTime' | 'sv.trades.entryPrice' | 'sv.trades.exitPrice' | 'sv.trades.holdingBars' | 'sv.trades.netReturn' | 'sv.trades.exitReason' | 'sv.empty.hint' | 'sv.screener.run' | 'sv.screener.stop' | 'sv.screener.scanLimit' | 'sv.screener.universePrefix' | 'sv.screener.scanned' | 'sv.screener.hits' | 'sv.screener.failed' | 'sv.screener.noUniverse' | 'sv.screener.noHits' | 'sv.screener.scanning' | 'sv.screener.emptyHint' | 'sv.screener.col.symbol' | 'sv.screener.col.name' | 'sv.screener.col.price' | 'sv.screener.col.reason' | 'sv.author.failed' | 'strat.donchian-breakout' | 'strat.donchian-breakout.summary' | 'strat.donchian-breakout.param.lookbackEntry' | 'strat.donchian-breakout.param.lookbackExit' | 'strat.donchian-breakout.reason.entry' | 'strat.donchian-breakout.reason.exit' | 'strat.rsi-reversion' | 'strat.rsi-reversion.summary' | 'strat.rsi-reversion.param.rsiPeriod' | 'strat.rsi-reversion.param.entryThreshold' | 'strat.rsi-reversion.param.exitThreshold' | 'strat.rsi-reversion.reason.entry' | 'strat.rsi-reversion.reason.exit' | 'strat.ema-crossover' | 'strat.ema-crossover.summary' | 'strat.ema-crossover.param.fastPeriod' | 'strat.ema-crossover.param.slowPeriod' | 'strat.ema-crossover.reason.entry' | 'strat.ema-crossover.reason.exit' | 'strat.bollinger-reversion' | 'strat.bollinger-reversion.summary' | 'strat.bollinger-reversion.param.period' | 'strat.bollinger-reversion.param.multiplier' | 'strat.bollinger-reversion.reason.entry' | 'strat.bollinger-reversion.reason.exit' | 'strat.sma-baseline' | 'strat.sma-baseline.summary' | 'strat.sma-baseline.param.period' | 'strat.sma-baseline.reason.entry' | 'strat.sma-baseline.reason.exit' | 'strat.momentum-12m' | 'strat.momentum-12m.summary' | 'strat.momentum-12m.param.lookbackBars' | 'strat.momentum-12m.reason.entry' | 'strat.momentum-12m.reason.exit' | 'scr.ma-bull-align' | 'scr.ma-bull-align.summary' | 'scr.ma-bull-align.param.n1' | 'scr.ma-bull-align.param.n2' | 'scr.ma-bull-align.param.n3' | 'scr.ma-bull-align.col.distLongPct' | 'scr.ma-bull-align.reason' | 'scr.volume-breakout' | 'scr.volume-breakout.summary' | 'scr.volume-breakout.param.lookback' | 'scr.volume-breakout.param.volMultiple' | 'scr.volume-breakout.col.volRatio' | 'scr.volume-breakout.col.breakoutPct' | 'scr.volume-breakout.reason' | 'scr.rsi-oversold' | 'scr.rsi-oversold.summary' | 'scr.rsi-oversold.param.period' | 'scr.rsi-oversold.param.threshold' | 'scr.rsi-oversold.col.rsi' | 'scr.rsi-oversold.reason' | 'scr.near-high' | 'scr.near-high.summary' | 'scr.near-high.param.window' | 'scr.near-high.param.withinPct' | 'scr.near-high.col.offHighPct' | 'scr.near-high.reason' | 'scr.above-ma' | 'scr.above-ma.summary' | 'scr.above-ma.param.period' | 'scr.above-ma.param.slopeBars' | 'scr.above-ma.col.aboveMaPct' | 'scr.above-ma.col.maSlopePct' | 'scr.above-ma.reason' | 'strat.momentum-12m.cause.momentumNegative' | 'strat.momentum-12m.cause.belowBaseline';
|
|
7
|
+
type StrategyLocaleKey = 'sv.section.screener' | 'sv.section.quant' | 'sv.error.noKlines' | 'sv.error.failed' | 'sv.horizon.short' | 'sv.horizon.swing' | 'sv.horizon.long' | 'sv.symbolLabel' | 'sv.intervalDaily' | 'sv.run' | 'sv.running' | 'sv.metrics.totalReturn' | 'sv.metrics.cagr' | 'sv.metrics.maxDrawdown' | 'sv.metrics.sharpe' | 'sv.metrics.winRate' | 'sv.metrics.profitFactor' | 'sv.metrics.tradeCount' | 'sv.metrics.tradeUnit' | 'sv.metrics.exposure' | 'sv.trades.title' | 'sv.trades.empty' | 'sv.trades.entryTime' | 'sv.trades.exitTime' | 'sv.trades.entryPrice' | 'sv.trades.exitPrice' | 'sv.trades.holdingBars' | 'sv.trades.netReturn' | 'sv.trades.exitReason' | 'sv.empty.hint' | 'sv.screener.run' | 'sv.screener.stop' | 'sv.screener.scanLimit' | 'sv.screener.universePrefix' | 'sv.screener.scanned' | 'sv.screener.hits' | 'sv.screener.failed' | 'sv.screener.noUniverse' | 'sv.screener.noHits' | 'sv.screener.scanning' | 'sv.screener.emptyHint' | 'sv.screener.col.symbol' | 'sv.screener.col.name' | 'sv.screener.col.price' | 'sv.screener.col.reason' | 'sv.author.failed' | 'sv.mgmt.new' | 'sv.mgmt.edit' | 'sv.mgmt.delete' | 'sv.mgmt.restore' | 'sv.mgmt.deleted' | 'sv.mgmt.badge.builtin' | 'sv.mgmt.badge.modified' | 'sv.mgmt.badge.custom' | 'sv.mgmt.confirmDelete' | 'sv.mgmt.confirmOverride' | 'sv.mgmt.confirmRestore' | 'sv.mgmt.editorTitle' | 'sv.mgmt.field.id' | 'sv.mgmt.field.title' | 'sv.mgmt.field.horizon' | 'sv.mgmt.field.summary' | 'sv.mgmt.field.params' | 'sv.mgmt.field.source' | 'sv.mgmt.fieldRequired' | 'sv.mgmt.param.key' | 'sv.mgmt.param.label' | 'sv.mgmt.param.default' | 'sv.mgmt.param.min' | 'sv.mgmt.param.max' | 'sv.mgmt.param.step' | 'sv.mgmt.addParam' | 'sv.mgmt.removeParam' | 'sv.mgmt.validate' | 'sv.mgmt.validating' | 'sv.mgmt.validationOk' | 'sv.mgmt.save' | 'sv.mgmt.cancel' | 'sv.mgmt.saveFailed' | 'sv.mgmt.rosterEmpty' | 'sv.mgmt.newScreener' | 'sv.mgmt.editorTitleScreener' | 'sv.mgmt.field.columns' | 'sv.mgmt.field.evaluate' | 'sv.mgmt.column.format' | 'sv.mgmt.addColumn' | 'sv.mgmt.confirmOverrideScreener' | 'sv.mgmt.validationOkScreener' | 'sv.screener.rosterEmpty' | 'strat.donchian-breakout' | 'strat.donchian-breakout.summary' | 'strat.donchian-breakout.param.lookbackEntry' | 'strat.donchian-breakout.param.lookbackExit' | 'strat.donchian-breakout.reason.entry' | 'strat.donchian-breakout.reason.exit' | 'strat.rsi-reversion' | 'strat.rsi-reversion.summary' | 'strat.rsi-reversion.param.rsiPeriod' | 'strat.rsi-reversion.param.entryThreshold' | 'strat.rsi-reversion.param.exitThreshold' | 'strat.rsi-reversion.reason.entry' | 'strat.rsi-reversion.reason.exit' | 'strat.ema-crossover' | 'strat.ema-crossover.summary' | 'strat.ema-crossover.param.fastPeriod' | 'strat.ema-crossover.param.slowPeriod' | 'strat.ema-crossover.reason.entry' | 'strat.ema-crossover.reason.exit' | 'strat.bollinger-reversion' | 'strat.bollinger-reversion.summary' | 'strat.bollinger-reversion.param.period' | 'strat.bollinger-reversion.param.multiplier' | 'strat.bollinger-reversion.reason.entry' | 'strat.bollinger-reversion.reason.exit' | 'strat.sma-baseline' | 'strat.sma-baseline.summary' | 'strat.sma-baseline.param.period' | 'strat.sma-baseline.reason.entry' | 'strat.sma-baseline.reason.exit' | 'strat.momentum-12m' | 'strat.momentum-12m.summary' | 'strat.momentum-12m.param.lookbackBars' | 'strat.momentum-12m.reason.entry' | 'strat.momentum-12m.reason.exit' | 'scr.ma-bull-align' | 'scr.ma-bull-align.summary' | 'scr.ma-bull-align.param.n1' | 'scr.ma-bull-align.param.n2' | 'scr.ma-bull-align.param.n3' | 'scr.ma-bull-align.col.distLongPct' | 'scr.ma-bull-align.reason' | 'scr.volume-breakout' | 'scr.volume-breakout.summary' | 'scr.volume-breakout.param.lookback' | 'scr.volume-breakout.param.volMultiple' | 'scr.volume-breakout.col.volRatio' | 'scr.volume-breakout.col.breakoutPct' | 'scr.volume-breakout.reason' | 'scr.rsi-oversold' | 'scr.rsi-oversold.summary' | 'scr.rsi-oversold.param.period' | 'scr.rsi-oversold.param.threshold' | 'scr.rsi-oversold.col.rsi' | 'scr.rsi-oversold.reason' | 'scr.near-high' | 'scr.near-high.summary' | 'scr.near-high.param.window' | 'scr.near-high.param.withinPct' | 'scr.near-high.col.offHighPct' | 'scr.near-high.reason' | 'scr.above-ma' | 'scr.above-ma.summary' | 'scr.above-ma.param.period' | 'scr.above-ma.param.slopeBars' | 'scr.above-ma.col.aboveMaPct' | 'scr.above-ma.col.maSlopePct' | 'scr.above-ma.reason' | 'strat.momentum-12m.cause.momentumNegative' | 'strat.momentum-12m.cause.belowBaseline';
|
|
8
8
|
declare module '@deepseek-ai/dsh-client-locale/client' {
|
|
9
9
|
interface LocaleNamespaceMap {
|
|
10
10
|
/** 策略视图词典(client-ui-strategies 包私有)。 */
|
package/lib/client/locales.js
CHANGED
|
@@ -46,6 +46,49 @@ const zh = {
|
|
|
46
46
|
"sv.screener.col.price": "现价",
|
|
47
47
|
"sv.screener.col.reason": "信号说明",
|
|
48
48
|
"sv.author.failed": "策略校验未通过",
|
|
49
|
+
"sv.mgmt.new": "新建策略",
|
|
50
|
+
"sv.mgmt.edit": "编辑",
|
|
51
|
+
"sv.mgmt.delete": "删除",
|
|
52
|
+
"sv.mgmt.restore": "恢复默认",
|
|
53
|
+
"sv.mgmt.deleted": "已删除",
|
|
54
|
+
"sv.mgmt.badge.builtin": "内置",
|
|
55
|
+
"sv.mgmt.badge.modified": "已修改",
|
|
56
|
+
"sv.mgmt.badge.custom": "自定义",
|
|
57
|
+
"sv.mgmt.confirmDelete": "确定删除该策略?内置策略删除后可「恢复默认」找回出厂代码;你对内置策略的修改和自定义策略的删除不可恢复。",
|
|
58
|
+
"sv.mgmt.confirmOverride": "该 ID 与内置策略同名,保存将覆盖内置策略(可随时恢复出厂代码;本次修改保存后删除/恢复将不可找回)。继续?",
|
|
59
|
+
"sv.mgmt.confirmRestore": "恢复出厂将清除该内置策略的全部修改(不可恢复),出厂代码会找回。继续?",
|
|
60
|
+
"sv.mgmt.editorTitle": "策略编辑器",
|
|
61
|
+
"sv.mgmt.field.id": "ID",
|
|
62
|
+
"sv.mgmt.field.title": "名称",
|
|
63
|
+
"sv.mgmt.field.horizon": "期限",
|
|
64
|
+
"sv.mgmt.field.summary": "一句话思路",
|
|
65
|
+
"sv.mgmt.field.params": "参数规格",
|
|
66
|
+
"sv.mgmt.field.source": "策略源码 compute(bars, params)",
|
|
67
|
+
"sv.mgmt.fieldRequired": "必填字段缺失或数值非法",
|
|
68
|
+
"sv.mgmt.param.key": "键",
|
|
69
|
+
"sv.mgmt.param.label": "名称",
|
|
70
|
+
"sv.mgmt.param.default": "默认",
|
|
71
|
+
"sv.mgmt.param.min": "最小",
|
|
72
|
+
"sv.mgmt.param.max": "最大",
|
|
73
|
+
"sv.mgmt.param.step": "步进",
|
|
74
|
+
"sv.mgmt.addParam": "添加参数",
|
|
75
|
+
"sv.mgmt.removeParam": "移除",
|
|
76
|
+
"sv.mgmt.validate": "校验",
|
|
77
|
+
"sv.mgmt.validating": "计算中…",
|
|
78
|
+
"sv.mgmt.validationOk": "校验通过:5 场景试算 + 信号序列可复算",
|
|
79
|
+
"sv.mgmt.save": "保存",
|
|
80
|
+
"sv.mgmt.cancel": "取消",
|
|
81
|
+
"sv.mgmt.saveFailed": "保存失败",
|
|
82
|
+
"sv.mgmt.rosterEmpty": "名册为空:全部内置策略已删除且无自定义策略,可新建策略或恢复内置默认",
|
|
83
|
+
"sv.mgmt.newScreener": "新建选股器",
|
|
84
|
+
"sv.mgmt.editorTitleScreener": "选股器编辑器",
|
|
85
|
+
"sv.mgmt.field.columns": "结果列",
|
|
86
|
+
"sv.mgmt.field.evaluate": "选股器源码 evaluate(bars, params)",
|
|
87
|
+
"sv.mgmt.column.format": "格式",
|
|
88
|
+
"sv.mgmt.addColumn": "添加列",
|
|
89
|
+
"sv.mgmt.confirmOverrideScreener": "该 ID 与内置选股器同名,保存将覆盖内置选股器(可随时恢复出厂代码;本次修改保存后删除/恢复将不可找回)。继续?",
|
|
90
|
+
"sv.mgmt.validationOkScreener": "校验通过:5 场景试算,命中形状合法",
|
|
91
|
+
"sv.screener.rosterEmpty": "选股器名册为空:全部内置选股器已删除且无自定义选股器,可新建或恢复内置默认",
|
|
49
92
|
"strat.donchian-breakout": "唐奇安通道突破",
|
|
50
93
|
"strat.donchian-breakout.summary": "收盘价突破前 N1 根最高价做多,跌破前 N2 根最低价离场(海龟经典简化版)",
|
|
51
94
|
"strat.donchian-breakout.param.lookbackEntry": "突破周期 (N1)",
|
|
@@ -164,6 +207,49 @@ const en = {
|
|
|
164
207
|
"sv.screener.col.price": "Price",
|
|
165
208
|
"sv.screener.col.reason": "Signal",
|
|
166
209
|
"sv.author.failed": "Validation failed",
|
|
210
|
+
"sv.mgmt.new": "New Strategy",
|
|
211
|
+
"sv.mgmt.edit": "Edit",
|
|
212
|
+
"sv.mgmt.delete": "Delete",
|
|
213
|
+
"sv.mgmt.restore": "Restore",
|
|
214
|
+
"sv.mgmt.deleted": "Deleted",
|
|
215
|
+
"sv.mgmt.badge.builtin": "Built-in",
|
|
216
|
+
"sv.mgmt.badge.modified": "Modified",
|
|
217
|
+
"sv.mgmt.badge.custom": "Custom",
|
|
218
|
+
"sv.mgmt.confirmDelete": "Delete this strategy? Deleted built-ins can be restored to factory code via \"Restore\"; your modifications to a built-in and deleted custom strategies cannot be recovered.",
|
|
219
|
+
"sv.mgmt.confirmOverride": "This ID collides with a built-in strategy. Saving will override it (factory code stays restorable; once saved, this modification is unrecoverable on delete/restore). Continue?",
|
|
220
|
+
"sv.mgmt.confirmRestore": "Restoring factory default will permanently discard all modifications to this built-in strategy (unrecoverable). The factory code will be restored. Continue?",
|
|
221
|
+
"sv.mgmt.editorTitle": "Strategy Editor",
|
|
222
|
+
"sv.mgmt.field.id": "ID",
|
|
223
|
+
"sv.mgmt.field.title": "Title",
|
|
224
|
+
"sv.mgmt.field.horizon": "Horizon",
|
|
225
|
+
"sv.mgmt.field.summary": "Summary",
|
|
226
|
+
"sv.mgmt.field.params": "Parameters",
|
|
227
|
+
"sv.mgmt.field.source": "Strategy source compute(bars, params)",
|
|
228
|
+
"sv.mgmt.fieldRequired": "Required field missing or invalid number",
|
|
229
|
+
"sv.mgmt.param.key": "Key",
|
|
230
|
+
"sv.mgmt.param.label": "Label",
|
|
231
|
+
"sv.mgmt.param.default": "Default",
|
|
232
|
+
"sv.mgmt.param.min": "Min",
|
|
233
|
+
"sv.mgmt.param.max": "Max",
|
|
234
|
+
"sv.mgmt.param.step": "Step",
|
|
235
|
+
"sv.mgmt.addParam": "Add Parameter",
|
|
236
|
+
"sv.mgmt.removeParam": "Remove",
|
|
237
|
+
"sv.mgmt.validate": "Validate",
|
|
238
|
+
"sv.mgmt.validating": "Computing…",
|
|
239
|
+
"sv.mgmt.validationOk": "Validation passed: 5 scenarios + replayable signal sequence",
|
|
240
|
+
"sv.mgmt.save": "Save",
|
|
241
|
+
"sv.mgmt.cancel": "Cancel",
|
|
242
|
+
"sv.mgmt.saveFailed": "Save failed",
|
|
243
|
+
"sv.mgmt.rosterEmpty": "Roster is empty: all built-in strategies deleted and no custom strategies. Create one or restore built-ins.",
|
|
244
|
+
"sv.mgmt.newScreener": "New Screener",
|
|
245
|
+
"sv.mgmt.editorTitleScreener": "Screener Editor",
|
|
246
|
+
"sv.mgmt.field.columns": "Columns",
|
|
247
|
+
"sv.mgmt.field.evaluate": "Screener source evaluate(bars, params)",
|
|
248
|
+
"sv.mgmt.column.format": "Format",
|
|
249
|
+
"sv.mgmt.addColumn": "Add Column",
|
|
250
|
+
"sv.mgmt.confirmOverrideScreener": "This ID collides with a built-in screener. Saving will override it (factory code stays restorable; once saved, this modification is unrecoverable on delete/restore). Continue?",
|
|
251
|
+
"sv.mgmt.validationOkScreener": "Validation passed: 5 scenarios, match shape valid",
|
|
252
|
+
"sv.screener.rosterEmpty": "Screener roster is empty: all built-ins deleted and no custom screeners. Create one or restore built-ins.",
|
|
167
253
|
"strat.donchian-breakout": "Donchian breakout",
|
|
168
254
|
"strat.donchian-breakout.summary": "Go long when close breaks the N1-bar high; exit below the N2-bar low (classic turtle, simplified)",
|
|
169
255
|
"strat.donchian-breakout.param.lookbackEntry": "Breakout lookback (N1)",
|