@senpi/trading-recipe 1.0.45 → 1.0.46
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/dist/cli/guide-commands.d.ts.map +1 -1
- package/dist/cli/guide-commands.js +1 -11
- package/dist/cli/guide-commands.js.map +1 -1
- package/dist/constants/dsl/index.d.ts +7 -0
- package/dist/constants/dsl/index.d.ts.map +1 -1
- package/dist/constants/dsl/index.js +7 -0
- package/dist/constants/dsl/index.js.map +1 -1
- package/dist/dsl/config/exit-block.d.ts +1 -3
- package/dist/dsl/config/exit-block.d.ts.map +1 -1
- package/dist/dsl/config/parse-phase.js +5 -5
- package/dist/dsl/config/parse-phase.js.map +1 -1
- package/dist/dsl/config/parse-plugin-config.d.ts.map +1 -1
- package/dist/dsl/config/parse-plugin-config.js +11 -41
- package/dist/dsl/config/parse-plugin-config.js.map +1 -1
- package/dist/dsl/config/parse-preset.js +2 -2
- package/dist/dsl/config/parse-preset.js.map +1 -1
- package/dist/dsl/config/parse-tiers.js +1 -1
- package/dist/dsl/config/parse-tiers.js.map +1 -1
- package/dist/dsl/config/unknown-keys.d.ts +1 -1
- package/dist/dsl/config/unknown-keys.d.ts.map +1 -1
- package/dist/dsl/config/unknown-keys.js +5 -58
- package/dist/dsl/config/unknown-keys.js.map +1 -1
- package/dist/runtime/load-trading-recipe.js +2 -2
- package/dist/runtime/load-trading-recipe.js.map +1 -1
- package/dist/runtime/map-exit-config.d.ts +2 -3
- package/dist/runtime/map-exit-config.d.ts.map +1 -1
- package/dist/runtime/map-exit-config.js +6 -28
- package/dist/runtime/map-exit-config.js.map +1 -1
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +3 -1
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/trading-recipe-schema.d.ts +24 -19416
- package/dist/runtime/trading-recipe-schema.d.ts.map +1 -1
- package/dist/runtime/trading-recipe-schema.js +1 -39
- package/dist/runtime/trading-recipe-schema.js.map +1 -1
- package/examples/strategies/dsl-showcase.yaml +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guide-commands.d.ts","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"guide-commands.d.ts","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqUH,kFAAkF;AAClF,UAAU,gBAAgB;IACxB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC9D,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC;CACxF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,MAAM,GACd,IAAI,CA2CN"}
|
|
@@ -162,7 +162,6 @@ exit:
|
|
|
162
162
|
engine: dsl
|
|
163
163
|
interval_seconds: 30
|
|
164
164
|
|
|
165
|
-
# Recommended: one flat preset (no nested map name).
|
|
166
165
|
dsl_preset:
|
|
167
166
|
hard_timeout: ... # optional; same level as phase1 / phase2
|
|
168
167
|
weak_peak_cut: ...
|
|
@@ -170,12 +169,6 @@ exit:
|
|
|
170
169
|
phase1: ...
|
|
171
170
|
phase2: ...
|
|
172
171
|
|
|
173
|
-
# Alternative: multiple named presets (set exit.preset when 2+ keys).
|
|
174
|
-
# dsl_presets:
|
|
175
|
-
# dsl: { phase1: ..., phase2: ... }
|
|
176
|
-
# aggressive: { ... }
|
|
177
|
-
# preset: dsl
|
|
178
|
-
|
|
179
172
|
──────────────────────────────────────────────────────────────────────────────
|
|
180
173
|
Phase 1 — Fixed floor + high-water trailing
|
|
181
174
|
Floor = max(absolute_floor, trailing_floor). Absolute floor from max_loss_pct
|
|
@@ -270,10 +263,7 @@ actions[]
|
|
|
270
263
|
exit
|
|
271
264
|
engine string No dsl
|
|
272
265
|
interval_seconds number No Default 30; integer 5–3600 (Zod + DSL parse)
|
|
273
|
-
dsl_preset object No Single exit profile (
|
|
274
|
-
preset string No Required when dsl_presets has 2+ keys; with dsl_preset defaults to dsl
|
|
275
|
-
dsl_presets object No Named preset map (advanced; use exit.preset to choose)
|
|
276
|
-
dsl object No Legacy alias for dsl_presets
|
|
266
|
+
dsl_preset object No Single exit profile (required to start DslPlugin)
|
|
277
267
|
sm_flip any No Non-DSL exit hook data (allowed; ignored by DSL parse)
|
|
278
268
|
|
|
279
269
|
Preset: max_loss_pct (or phase1.max_loss_pct), phase1 (optional enabled;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guide-commands.js","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,aAAa,GACjB,0EAA0E,CAAC;AAE7E,+EAA+E;AAE/E,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC;yBAClB,OAAO;;;;;;;;;;;;;;;;;;;CAmB/B,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwErB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCpB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,QAAQ,GAAG
|
|
1
|
+
{"version":3,"file":"guide-commands.js","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,13 @@ export declare const DSL_EVENTS: {
|
|
|
23
23
|
export declare const DEFAULT_STATE_DIR = ".dsl-state";
|
|
24
24
|
/** On-disk DSL state schema version (v1 = DSL engine v2; no migration from older files). */
|
|
25
25
|
export declare const DSL_STATE_VERSION = 1;
|
|
26
|
+
/**
|
|
27
|
+
* Recipe YAML uses a single `exit.dsl_preset` object; after parse it becomes this key in
|
|
28
|
+
* DslPluginConfig.presets. position.opened may set preset to override (must match this name).
|
|
29
|
+
*/
|
|
30
|
+
export declare const CANONICAL_DSL_PRESET_NAME = "default";
|
|
31
|
+
/** Validation / parse error paths for the lone recipe preset. */
|
|
32
|
+
export declare const EXIT_DSL_PRESET_PATH = "exit.dsl_preset";
|
|
26
33
|
/** Close reasons for DSL state (closeReason) and position.closed (reason). */
|
|
27
34
|
export declare const CLOSE_REASON: {
|
|
28
35
|
readonly MANUAL_CLOSE: "manual_close";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/constants/dsl/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,eAAO,MAAM,uBAAuB,EAAG,UAAmB,CAAC;AAE3D,uGAAuG;AACvG,eAAO,MAAM,MAAM;;;;;;CAMT,CAAC;AAEX,eAAO,MAAM,UAAU;;;;;;;;;CASb,CAAC;AAEX,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAC9C,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC,8EAA8E;AAC9E,eAAO,MAAM,YAAY;;;;;;;;;;;;;CAaf,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAC3E,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAC1C,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAChD,mFAAmF;AACnF,eAAO,MAAM,sCAAsC,IAAI,CAAC;AACxD,kFAAkF;AAClF,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,6DAA6D;AAC7D,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAC/C,eAAO,MAAM,eAAe,WAAW,CAAC;AACxC,eAAO,MAAM,cAAc,IAAI,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/constants/dsl/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,eAAO,MAAM,uBAAuB,EAAG,UAAmB,CAAC;AAE3D,uGAAuG;AACvG,eAAO,MAAM,MAAM;;;;;;CAMT,CAAC;AAEX,eAAO,MAAM,UAAU;;;;;;;;;CASb,CAAC;AAEX,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAC9C,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;;;GAGG;AACH,eAAO,MAAM,yBAAyB,YAAY,CAAC;AAEnD,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AAEtD,8EAA8E;AAC9E,eAAO,MAAM,YAAY;;;;;;;;;;;;;CAaf,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAC3E,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAC1C,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAChD,mFAAmF;AACnF,eAAO,MAAM,sCAAsC,IAAI,CAAC;AACxD,kFAAkF;AAClF,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,6DAA6D;AAC7D,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAC/C,eAAO,MAAM,eAAe,WAAW,CAAC;AACxC,eAAO,MAAM,cAAc,IAAI,CAAC"}
|
|
@@ -24,6 +24,13 @@ export const DSL_EVENTS = {
|
|
|
24
24
|
export const DEFAULT_STATE_DIR = ".dsl-state";
|
|
25
25
|
/** On-disk DSL state schema version (v1 = DSL engine v2; no migration from older files). */
|
|
26
26
|
export const DSL_STATE_VERSION = 1;
|
|
27
|
+
/**
|
|
28
|
+
* Recipe YAML uses a single `exit.dsl_preset` object; after parse it becomes this key in
|
|
29
|
+
* DslPluginConfig.presets. position.opened may set preset to override (must match this name).
|
|
30
|
+
*/
|
|
31
|
+
export const CANONICAL_DSL_PRESET_NAME = "default";
|
|
32
|
+
/** Validation / parse error paths for the lone recipe preset. */
|
|
33
|
+
export const EXIT_DSL_PRESET_PATH = "exit.dsl_preset";
|
|
27
34
|
/** Close reasons for DSL state (closeReason) and position.closed (reason). */
|
|
28
35
|
export const CLOSE_REASON = {
|
|
29
36
|
MANUAL_CLOSE: "manual_close",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/constants/dsl/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAmB,CAAC;AAE3D,uGAAuG;AACvG,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,eAAe,EAAE,UAAU,CAAC,kBAAkB;IAC9C,eAAe,EAAE,UAAU,CAAC,kBAAkB;IAC9C,gBAAgB,EAAE,UAAU,CAAC,mBAAmB;IAChD,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;CAChC,CAAC;AAEX,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,OAAO,EAAE,aAAa;IACtB,aAAa,EAAE,mBAAmB;IAClC,aAAa,EAAE,mBAAmB;IAClC,UAAU,EAAE,gBAAgB;IAC5B,MAAM,EAAE,YAAY;IACpB,aAAa,EAAE,mBAAmB;IAClC,gBAAgB,EAAE,sBAAsB;IACxC,OAAO,EAAE,aAAa;CACd,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAC9C,4FAA4F;AAC5F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC,8EAA8E;AAC9E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,YAAY,EAAE,cAAc;IAC5B,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,qBAAqB,EAAE,uBAAuB;IAC9C,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,eAAe,EAAE,iBAAiB;IAClC,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IACxC,WAAW,EAAE,aAAa;CAClB,CAAC;AAGX,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,iEAAiE;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AACzC,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAC1C,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAChD,mFAAmF;AACnF,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAC,CAAC;AACxD,kFAAkF;AAClF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,6DAA6D;AAC7D,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/constants/dsl/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAmB,CAAC;AAE3D,uGAAuG;AACvG,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,eAAe,EAAE,UAAU,CAAC,kBAAkB;IAC9C,eAAe,EAAE,UAAU,CAAC,kBAAkB;IAC9C,gBAAgB,EAAE,UAAU,CAAC,mBAAmB;IAChD,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;CAChC,CAAC;AAEX,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,OAAO,EAAE,aAAa;IACtB,aAAa,EAAE,mBAAmB;IAClC,aAAa,EAAE,mBAAmB;IAClC,UAAU,EAAE,gBAAgB;IAC5B,MAAM,EAAE,YAAY;IACpB,aAAa,EAAE,mBAAmB;IAClC,gBAAgB,EAAE,sBAAsB;IACxC,OAAO,EAAE,aAAa;CACd,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAC9C,4FAA4F;AAC5F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,SAAS,CAAC;AAEnD,iEAAiE;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAEtD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,YAAY,EAAE,cAAc;IAC5B,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,qBAAqB,EAAE,uBAAuB;IAC9C,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,eAAe,EAAE,iBAAiB;IAClC,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IACxC,WAAW,EAAE,aAAa;CAClB,CAAC;AAGX,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,iEAAiE;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AACzC,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAC1C,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAChD,mFAAmF;AACnF,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAC,CAAC;AACxD,kFAAkF;AAClF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,6DAA6D;AAC7D,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC"}
|
|
@@ -5,9 +5,7 @@ import type { RawPreset } from "./raw-types.js";
|
|
|
5
5
|
export interface ExitBlockConfig {
|
|
6
6
|
engine?: string;
|
|
7
7
|
interval_seconds?: number;
|
|
8
|
-
|
|
9
|
-
/** Single preset; normalized to dsl_presets.dsl before parse (mutually exclusive with non-empty dsl_presets). */
|
|
8
|
+
/** Single DSL exit profile (required when starting DslPlugin). */
|
|
10
9
|
dsl_preset?: RawPreset;
|
|
11
|
-
dsl_presets?: Record<string, RawPreset>;
|
|
12
10
|
}
|
|
13
11
|
//# sourceMappingURL=exit-block.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exit-block.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/exit-block.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,
|
|
1
|
+
{"version":3,"file":"exit-block.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/exit-block.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kEAAkE;IAClE,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB"}
|
|
@@ -13,7 +13,7 @@ export function readPhase1(presetName, phase1, presetMaxLossPct) {
|
|
|
13
13
|
throw new DslConfigValidationError([
|
|
14
14
|
dslValidationIssue("INVALID_MAX_LOSS_PCT", !(maxLossPct > 0)
|
|
15
15
|
? "max_loss_pct must be > 0 when phase1.enabled is false"
|
|
16
|
-
: "max_loss_pct must be <= 100",
|
|
16
|
+
: "max_loss_pct must be <= 100", `${presetName}.phase1.max_loss_pct`),
|
|
17
17
|
]);
|
|
18
18
|
}
|
|
19
19
|
return {
|
|
@@ -28,19 +28,19 @@ export function readPhase1(presetName, phase1, presetMaxLossPct) {
|
|
|
28
28
|
throw new DslConfigValidationError([
|
|
29
29
|
dslValidationIssue("INVALID_MAX_LOSS_PCT", !(maxLossPct > 0)
|
|
30
30
|
? "phase1.max_loss_pct is required and must be > 0 (or set preset max_loss_pct)"
|
|
31
|
-
: "phase1.max_loss_pct must be <= 100",
|
|
31
|
+
: "phase1.max_loss_pct must be <= 100", `${presetName}.phase1.max_loss_pct`),
|
|
32
32
|
]);
|
|
33
33
|
}
|
|
34
34
|
const retraceThreshold = Number(phase1.retrace_threshold ?? phase1.retraceThreshold);
|
|
35
35
|
if (!(retraceThreshold > 0)) {
|
|
36
36
|
throw new DslConfigValidationError([
|
|
37
|
-
dslValidationIssue("INVALID_RETRACE_THRESHOLD", "phase1.retrace_threshold is required and must be > 0 (ROE %)",
|
|
37
|
+
dslValidationIssue("INVALID_RETRACE_THRESHOLD", "phase1.retrace_threshold is required and must be > 0 (ROE %)", `${presetName}.phase1.retrace_threshold`),
|
|
38
38
|
]);
|
|
39
39
|
}
|
|
40
40
|
const phase1Breaches = Number(phase1.consecutive_breaches_required ?? phase1.consecutiveBreachesRequired);
|
|
41
41
|
if (!Number.isFinite(phase1Breaches) || phase1Breaches < 1 || !Number.isInteger(phase1Breaches)) {
|
|
42
42
|
throw new DslConfigValidationError([
|
|
43
|
-
dslValidationIssue("INVALID_CONSECUTIVE_BREACHES", "phase1.consecutive_breaches_required must be an integer >= 1",
|
|
43
|
+
dslValidationIssue("INVALID_CONSECUTIVE_BREACHES", "phase1.consecutive_breaches_required must be an integer >= 1", `${presetName}.phase1.consecutive_breaches_required`),
|
|
44
44
|
]);
|
|
45
45
|
}
|
|
46
46
|
return { maxLossPct, retraceThreshold, phase1Breaches, phase1Enabled: true };
|
|
@@ -60,7 +60,7 @@ export function readPhase2Scalars(presetName, phase2, requireTiersArray) {
|
|
|
60
60
|
for (const k of legacyKeys) {
|
|
61
61
|
if (phase2[k] != null) {
|
|
62
62
|
throw new DslConfigValidationError([
|
|
63
|
-
dslValidationIssue("LEGACY_PHASE2_FIELD", `phase2.${k} is no longer supported (phase 2 is exchange-SL driven; remove retrace and breach fields)`,
|
|
63
|
+
dslValidationIssue("LEGACY_PHASE2_FIELD", `phase2.${k} is no longer supported (phase 2 is exchange-SL driven; remove retrace and breach fields)`, `${presetName}.phase2.${k}`),
|
|
64
64
|
]);
|
|
65
65
|
}
|
|
66
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-phase.js","sourceRoot":"","sources":["../../../src/dsl/config/parse-phase.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG/E,MAAM,UAAU,UAAU,CACxB,UAAkB,EAClB,MAA6B,EAC7B,gBAAoC;IAEpC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,WAAW,UAAU,2FAA2F,CACjH,CAAC;IACJ,CAAC;IACD,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC;IAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,IAAI,gBAAgB,IAAI,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;YAC1C,MAAM,IAAI,wBAAwB,CAAC;gBACjC,kBAAkB,CAChB,sBAAsB,EACtB,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;oBACf,CAAC,CAAC,uDAAuD;oBACzD,CAAC,CAAC,6BAA6B,EACjC,
|
|
1
|
+
{"version":3,"file":"parse-phase.js","sourceRoot":"","sources":["../../../src/dsl/config/parse-phase.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-plugin-config.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/parse-plugin-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"parse-plugin-config.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/parse-plugin-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,0BAA0B,CAAC;AASjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIvD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CAiB1E;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
|
|
@@ -1,55 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Parse full exit block into runtime DslPluginConfig.
|
|
3
3
|
*/
|
|
4
|
-
import { MIN_INTERVAL_SECONDS, MAX_INTERVAL_SECONDS, DEFAULT_INTERVAL_MS, } from "../../constants/dsl/index.js";
|
|
4
|
+
import { MIN_INTERVAL_SECONDS, MAX_INTERVAL_SECONDS, DEFAULT_INTERVAL_MS, CANONICAL_DSL_PRESET_NAME, EXIT_DSL_PRESET_PATH, } from "../../constants/dsl/index.js";
|
|
5
5
|
import { validateIntervalSeconds } from "./validation.js";
|
|
6
6
|
import { parsePreset } from "./parse-preset.js";
|
|
7
7
|
import { validateExitBlockConfigUnknownKeys } from "./unknown-keys.js";
|
|
8
|
-
function normalizeExitBlockConfig(raw) {
|
|
9
|
-
const r = raw;
|
|
10
|
-
const single = r.dsl_preset;
|
|
11
|
-
const map = r.dsl_presets;
|
|
12
|
-
if (single != null && typeof single === "object" && !Array.isArray(single)) {
|
|
13
|
-
if (map != null && typeof map === "object" && Object.keys(map).length > 0) {
|
|
14
|
-
throw new Error("exit.dsl_preset and exit.dsl_presets cannot both be set; use one or the other");
|
|
15
|
-
}
|
|
16
|
-
const presetName = typeof raw.preset === "string" && raw.preset.length > 0 ? raw.preset : "dsl";
|
|
17
|
-
const out = {
|
|
18
|
-
...raw,
|
|
19
|
-
dsl_presets: { [presetName]: single },
|
|
20
|
-
preset: presetName,
|
|
21
|
-
};
|
|
22
|
-
delete out.dsl_preset;
|
|
23
|
-
return out;
|
|
24
|
-
}
|
|
25
|
-
return raw;
|
|
26
|
-
}
|
|
27
8
|
export function parseDslPluginConfig(raw) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const intervalSeconds = normalized.interval_seconds ?? 30;
|
|
9
|
+
validateExitBlockConfigUnknownKeys(raw);
|
|
10
|
+
const intervalSeconds = raw.interval_seconds ?? 30;
|
|
31
11
|
validateIntervalSeconds(intervalSeconds, MIN_INTERVAL_SECONDS, MAX_INTERVAL_SECONDS);
|
|
32
12
|
const intervalMs = intervalSeconds * 1000;
|
|
33
13
|
const minIntervalMinutes = intervalMs / 60_000;
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (p && typeof p === "object")
|
|
38
|
-
presets[name] = parsePreset(name, p, minIntervalMinutes);
|
|
39
|
-
}
|
|
40
|
-
const presetKeys = Object.keys(presets);
|
|
41
|
-
if (presetKeys.length === 0) {
|
|
42
|
-
throw new Error("At least one dsl_presets entry is required");
|
|
43
|
-
}
|
|
44
|
-
if (presetKeys.length > 1 && typeof normalized.preset !== "string") {
|
|
45
|
-
throw new Error(`exit.preset is required when dsl_presets has more than one entry (keys: ${presetKeys.join(", ")}). ` +
|
|
46
|
-
`Set preset: "<name>" to select one, or use a single canonical preset key (recommended: dsl).`);
|
|
47
|
-
}
|
|
48
|
-
const preset = typeof normalized.preset === "string" ? normalized.preset : presetKeys[0];
|
|
49
|
-
if (!presets[preset]) {
|
|
50
|
-
throw new Error(`Preset "${preset}" not found in dsl_presets`);
|
|
14
|
+
const single = raw.dsl_preset;
|
|
15
|
+
if (single == null || typeof single !== "object" || Array.isArray(single)) {
|
|
16
|
+
throw new Error("exit.dsl_preset is required and must be an object when configuring DSL");
|
|
51
17
|
}
|
|
52
|
-
|
|
18
|
+
const parsed = parsePreset(EXIT_DSL_PRESET_PATH, single, minIntervalMinutes);
|
|
19
|
+
const presets = {
|
|
20
|
+
[CANONICAL_DSL_PRESET_NAME]: parsed,
|
|
21
|
+
};
|
|
22
|
+
return { intervalMs, preset: CANONICAL_DSL_PRESET_NAME, presets };
|
|
53
23
|
}
|
|
54
24
|
export function getDefaultIntervalMs() {
|
|
55
25
|
return DEFAULT_INTERVAL_MS;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-plugin-config.js","sourceRoot":"","sources":["../../../src/dsl/config/parse-plugin-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"parse-plugin-config.js","sourceRoot":"","sources":["../../../src/dsl/config/parse-plugin-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,kCAAkC,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,UAAU,oBAAoB,CAAC,GAAoB;IACvD,kCAAkC,CAAC,GAA8B,CAAC,CAAC;IACnE,MAAM,eAAe,GAAG,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC;IACnD,uBAAuB,CAAC,eAAe,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;IACrF,MAAM,UAAU,GAAG,eAAe,GAAG,IAAI,CAAC;IAC1C,MAAM,kBAAkB,GAAG,UAAU,GAAG,MAAM,CAAC;IAE/C,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC;IAC9B,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,oBAAoB,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAoC;QAC/C,CAAC,yBAAyB,CAAC,EAAE,MAAM;KACpC,CAAC;IACF,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,yBAAyB,EAAE,OAAO,EAAE,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,mBAAmB,CAAC;AAC7B,CAAC"}
|
|
@@ -8,7 +8,7 @@ import { parseTier } from "./parse-tiers.js";
|
|
|
8
8
|
function assertNoLegacyPresetKeys(presetName, raw) {
|
|
9
9
|
if (raw.phase2_trigger_tier != null) {
|
|
10
10
|
throw new DslConfigValidationError([
|
|
11
|
-
dslValidationIssue("LEGACY_PRESET_FIELD", "phase2_trigger_tier was removed; phase 2 starts at tier 0 (first tier)",
|
|
11
|
+
dslValidationIssue("LEGACY_PRESET_FIELD", "phase2_trigger_tier was removed; phase 2 starts at tier 0 (first tier)", `${presetName}.phase2_trigger_tier`),
|
|
12
12
|
]);
|
|
13
13
|
}
|
|
14
14
|
const p1 = raw.phase1;
|
|
@@ -16,7 +16,7 @@ function assertNoLegacyPresetKeys(presetName, raw) {
|
|
|
16
16
|
for (const k of ["hard_timeout", "weak_peak_cut", "dead_weight_cut"]) {
|
|
17
17
|
if (p1[k] != null) {
|
|
18
18
|
throw new DslConfigValidationError([
|
|
19
|
-
dslValidationIssue("LEGACY_PHASE1_FIELD", `phase1.${k} was removed; define ${k} at the preset root (same shape)`,
|
|
19
|
+
dslValidationIssue("LEGACY_PHASE1_FIELD", `phase1.${k} was removed; define ${k} at the preset root (same shape)`, `${presetName}.phase1.${k}`),
|
|
20
20
|
]);
|
|
21
21
|
}
|
|
22
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-preset.js","sourceRoot":"","sources":["../../../src/dsl/config/parse-preset.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,SAAS,wBAAwB,CAAC,UAAkB,EAAE,GAAc;IAClE,IAAI,GAAG,CAAC,mBAAmB,IAAI,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,wBAAwB,CAAC;YACjC,kBAAkB,CAChB,qBAAqB,EACrB,wEAAwE,EACxE,
|
|
1
|
+
{"version":3,"file":"parse-preset.js","sourceRoot":"","sources":["../../../src/dsl/config/parse-preset.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,SAAS,wBAAwB,CAAC,UAAkB,EAAE,GAAc;IAClE,IAAI,GAAG,CAAC,mBAAmB,IAAI,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,wBAAwB,CAAC;YACjC,kBAAkB,CAChB,qBAAqB,EACrB,wEAAwE,EACxE,GAAG,UAAU,sBAAsB,CACpC;SACF,CAAC,CAAC;IACL,CAAC;IACD,MAAM,EAAE,GAAG,GAAG,CAAC,MAA6C,CAAC;IAC7D,IAAI,EAAE,EAAE,CAAC;QACP,KAAK,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,EAAE,iBAAiB,CAAU,EAAE,CAAC;YAC9E,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;gBAClB,MAAM,IAAI,wBAAwB,CAAC;oBACjC,kBAAkB,CAChB,qBAAqB,EACrB,UAAU,CAAC,wBAAwB,CAAC,kCAAkC,EACtE,GAAG,UAAU,WAAW,CAAC,EAAE,CAC5B;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,UAAkB,EAClB,GAAc,EACd,kBAA0B;IAE1B,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;IAC5E,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;IAClF,OAAO;QACL,GAAG,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,CAAC;QACnC,GAAG,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,CAAC;QACnC,GAAG,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,GAAc,EACd,qBAA6B,CAAC;IAE9B,wBAAwB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACpC,MAAM,cAAc,GAClB,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAEtF,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC;IAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,mCAAmC,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,UAAU,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,kDAAkD,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IACD,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1D,MAAM,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtD,IAAI,CAAC,EAAE,CAAC,aAAa,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,WAAW,IAAI,+FAA+F,CAC/G,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAE5D,OAAO;QACL,KAAK;QACL,UAAU,EAAE,EAAE,CAAC,UAAU;QACzB,aAAa,EAAE,EAAE,CAAC,aAAa;QAC/B,aAAa,EAAE,EAAE,CAAC,aAAa;QAC/B,sBAAsB,EAAE,EAAE,CAAC,gBAAgB;QAC3C,sBAAsB,EAAE,EAAE,CAAC,cAAc;QACzC,GAAG,IAAI;KACR,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAY,EACZ,GAAc,EACd,qBAA6B,CAAC;IAE9B,wBAAwB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1D,MAAM,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,EAAE,CAAC,aAAa,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,WAAW,IAAI,+FAA+F,CAC/G,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAO,CAAC,KAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IACtF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,UAAU,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,yDAAyD,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAE5D,OAAO;QACL,KAAK;QACL,UAAU,EAAE,EAAE,CAAC,UAAU;QACzB,aAAa,EAAE,EAAE,CAAC,aAAa;QAC/B,aAAa,EAAE,EAAE,CAAC,aAAa;QAC/B,sBAAsB,EAAE,EAAE,CAAC,gBAAgB;QAC3C,sBAAsB,EAAE,EAAE,CAAC,cAAc;QACzC,GAAG,IAAI;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { DslConfigValidationError, dslValidationIssue } from "./validation.js";
|
|
5
5
|
export function parseTier(presetName, raw, tierIndex, tiersPathForErrors) {
|
|
6
|
-
const path = (field) =>
|
|
6
|
+
const path = (field) => `${presetName}.${tiersPathForErrors}[${tierIndex}].${field}`;
|
|
7
7
|
if (raw.breaches != null) {
|
|
8
8
|
throw new DslConfigValidationError([
|
|
9
9
|
dslValidationIssue("LEGACY_TIER_FIELD", 'tier.breaches is no longer supported (phase 2 breach counting removed)', path("breaches")),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-tiers.js","sourceRoot":"","sources":["../../../src/dsl/config/parse-tiers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG/E,MAAM,UAAU,SAAS,CACvB,UAAkB,EAClB,GAAY,EACZ,SAAiB,EACjB,kBAA0B;IAE1B,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE,CAC7B,
|
|
1
|
+
{"version":3,"file":"parse-tiers.js","sourceRoot":"","sources":["../../../src/dsl/config/parse-tiers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG/E,MAAM,UAAU,SAAS,CACvB,UAAkB,EAClB,GAAY,EACZ,SAAiB,EACjB,kBAA0B;IAE1B,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE,CAC7B,GAAG,UAAU,IAAI,kBAAkB,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;IAC/D,IAAI,GAAG,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;QACzB,MAAM,IAAI,wBAAwB,CAAC;YACjC,kBAAkB,CAChB,mBAAmB,EACnB,wEAAwE,EACxE,IAAI,CAAC,UAAU,CAAC,CACjB;SACF,CAAC,CAAC;IACL,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,IAAK,GAA+B,CAAC,aAAa,IAAI,IAAI,EAAE,CAAC;QAClF,MAAM,IAAI,wBAAwB,CAAC;YACjC,kBAAkB,CAChB,mBAAmB,EACnB,qCAAqC,EACrC,IAAI,CAAC,SAAS,CAAC,CAChB;SACF,CAAC,CAAC;IACL,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3D,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;QAC1C,MAAM,IAAI,wBAAwB,CAAC;YACjC,kBAAkB,CAChB,qBAAqB,EACrB,oCAAoC,EACpC,IAAI,CAAC,aAAa,CAAC,CACpB;SACF,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC;QACpE,MAAM,IAAI,wBAAwB,CAAC;YACjC,kBAAkB,CAChB,qBAAqB,EACrB,iDAAiD,EACjD,IAAI,CAAC,aAAa,CAAC,CACpB;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
* Reject unknown keys in exit / DSL YAML so typos are not silently ignored.
|
|
3
3
|
*/
|
|
4
4
|
export declare function validateRawExitBlockAndPresetsUnknownKeys(exit: Record<string, unknown>): void;
|
|
5
|
-
/** Validate ExitBlockConfig for parseDslPluginConfig
|
|
5
|
+
/** Validate ExitBlockConfig for parseDslPluginConfig. */
|
|
6
6
|
export declare function validateExitBlockConfigUnknownKeys(raw: Record<string, unknown>): void;
|
|
7
7
|
//# sourceMappingURL=unknown-keys.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unknown-keys.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/unknown-keys.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"unknown-keys.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/unknown-keys.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuIH,wBAAgB,yCAAyC,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAW7F;AAED,yDAAyD;AACzD,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAWrF"}
|
|
@@ -6,21 +6,11 @@ import { DslConfigValidationError, dslValidationIssue, } from "./validation.js";
|
|
|
6
6
|
const EXIT_RECIPE_KEYS = new Set([
|
|
7
7
|
"engine",
|
|
8
8
|
"interval_seconds",
|
|
9
|
-
"preset",
|
|
10
|
-
/** Single preset object (sugar for dsl_presets.dsl + preset dsl). */
|
|
11
9
|
"dsl_preset",
|
|
12
|
-
"dsl_presets",
|
|
13
|
-
"dsl",
|
|
14
10
|
"sm_flip",
|
|
15
11
|
]);
|
|
16
|
-
/** Keys allowed on ExitBlockConfig passed to parseDslPluginConfig
|
|
17
|
-
const EXIT_BLOCK_CONFIG_KEYS = new Set([
|
|
18
|
-
"engine",
|
|
19
|
-
"interval_seconds",
|
|
20
|
-
"preset",
|
|
21
|
-
"dsl_preset",
|
|
22
|
-
"dsl_presets",
|
|
23
|
-
]);
|
|
12
|
+
/** Keys allowed on ExitBlockConfig passed to parseDslPluginConfig. */
|
|
13
|
+
const EXIT_BLOCK_CONFIG_KEYS = new Set(["engine", "interval_seconds", "dsl_preset"]);
|
|
24
14
|
const PRESET_KEYS = new Set([
|
|
25
15
|
"tiers",
|
|
26
16
|
"max_loss_pct",
|
|
@@ -105,66 +95,23 @@ function validatePresetObject(presetPath, raw, issues) {
|
|
|
105
95
|
});
|
|
106
96
|
}
|
|
107
97
|
}
|
|
108
|
-
/**
|
|
109
|
-
* Validate raw `exit:` from the trading recipe (before map strips keys).
|
|
110
|
-
* Validates every preset map present (`dsl_presets` and/or `dsl`) so typos are caught even when one block is shadowed by the other at runtime.
|
|
111
|
-
*/
|
|
112
|
-
function presetMapNonEmpty(v) {
|
|
113
|
-
return isPlainObject(v) && Object.keys(v).length > 0;
|
|
114
|
-
}
|
|
115
98
|
export function validateRawExitBlockAndPresetsUnknownKeys(exit) {
|
|
116
99
|
const issues = [];
|
|
117
100
|
addUnknownKeyIssues(issues, unknownKeyList(exit, EXIT_RECIPE_KEYS), "exit");
|
|
118
|
-
|
|
119
|
-
const hasPresetsMap = presetMapNonEmpty(exit.dsl_presets);
|
|
120
|
-
const hasDslAliasMap = presetMapNonEmpty(exit.dsl);
|
|
121
|
-
if (hasDslPreset && (hasPresetsMap || hasDslAliasMap)) {
|
|
122
|
-
issues.push(dslValidationIssue("DSL_PRESET_SOURCE_CONFLICT", "use only one of exit.dsl_preset (single preset) or exit.dsl_presets / exit.dsl (named map), not both", "exit"));
|
|
123
|
-
}
|
|
124
|
-
if (hasDslPreset && !hasPresetsMap && !hasDslAliasMap) {
|
|
101
|
+
if (exit.dsl_preset != null && isPlainObject(exit.dsl_preset)) {
|
|
125
102
|
validatePresetObject("exit.dsl_preset", exit.dsl_preset, issues);
|
|
126
103
|
}
|
|
127
|
-
if (exit.dsl_presets != null && isPlainObject(exit.dsl_presets)) {
|
|
128
|
-
for (const name of Object.keys(exit.dsl_presets)) {
|
|
129
|
-
const p = exit.dsl_presets[name];
|
|
130
|
-
if (!isPlainObject(p))
|
|
131
|
-
continue;
|
|
132
|
-
validatePresetObject(`exit.dsl_presets.${name}`, p, issues);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
if (exit.dsl != null && isPlainObject(exit.dsl)) {
|
|
136
|
-
for (const name of Object.keys(exit.dsl)) {
|
|
137
|
-
const p = exit.dsl[name];
|
|
138
|
-
if (!isPlainObject(p))
|
|
139
|
-
continue;
|
|
140
|
-
validatePresetObject(`exit.dsl.${name}`, p, issues);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
104
|
if (issues.length > 0) {
|
|
144
105
|
throw new DslConfigValidationError(issues);
|
|
145
106
|
}
|
|
146
107
|
}
|
|
147
|
-
/** Validate ExitBlockConfig for parseDslPluginConfig
|
|
108
|
+
/** Validate ExitBlockConfig for parseDslPluginConfig. */
|
|
148
109
|
export function validateExitBlockConfigUnknownKeys(raw) {
|
|
149
110
|
const issues = [];
|
|
150
111
|
addUnknownKeyIssues(issues, unknownKeyList(raw, EXIT_BLOCK_CONFIG_KEYS), "exit");
|
|
151
|
-
|
|
152
|
-
const hasPresetsMap = presetMapNonEmpty(raw.dsl_presets);
|
|
153
|
-
if (hasDslPreset && hasPresetsMap) {
|
|
154
|
-
issues.push(dslValidationIssue("DSL_PRESET_SOURCE_CONFLICT", "use only one of exit.dsl_preset or exit.dsl_presets, not both", "exit"));
|
|
155
|
-
}
|
|
156
|
-
if (hasDslPreset && !hasPresetsMap) {
|
|
112
|
+
if (raw.dsl_preset != null && isPlainObject(raw.dsl_preset)) {
|
|
157
113
|
validatePresetObject("exit.dsl_preset", raw.dsl_preset, issues);
|
|
158
114
|
}
|
|
159
|
-
const presets = raw.dsl_presets;
|
|
160
|
-
if (presets != null && isPlainObject(presets)) {
|
|
161
|
-
for (const name of Object.keys(presets)) {
|
|
162
|
-
const p = presets[name];
|
|
163
|
-
if (!isPlainObject(p))
|
|
164
|
-
continue;
|
|
165
|
-
validatePresetObject(`exit.dsl_presets.${name}`, p, issues);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
115
|
if (issues.length > 0) {
|
|
169
116
|
throw new DslConfigValidationError(issues);
|
|
170
117
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unknown-keys.js","sourceRoot":"","sources":["../../../src/dsl/config/unknown-keys.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,wBAAwB,EACxB,kBAAkB,GAEnB,MAAM,iBAAiB,CAAC;AAEzB,gEAAgE;AAChE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,QAAQ;IACR,kBAAkB;IAClB,
|
|
1
|
+
{"version":3,"file":"unknown-keys.js","sourceRoot":"","sources":["../../../src/dsl/config/unknown-keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,9 +48,9 @@ const HINTS = [
|
|
|
48
48
|
hint: "Top-level 'name' is required and must be a non-empty string (e.g. name: my-recipe).",
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
|
-
pathMatch: /^exit\.|\.exit\.|
|
|
51
|
+
pathMatch: /^exit\.|\.exit\.|dsl_preset/,
|
|
52
52
|
messageMatch: /required|Expected|derivable/,
|
|
53
|
-
hint: "exit.dsl_preset (
|
|
53
|
+
hint: "exit.dsl_preset (object): max_loss_pct in phase1 or preset root; tiers use lock_hw_pct. Run: openclaw senpi guide exit",
|
|
54
54
|
},
|
|
55
55
|
{
|
|
56
56
|
pathMatch: /^actions\.\d+\./,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-trading-recipe.js","sourceRoot":"","sources":["../../src/runtime/load-trading-recipe.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAiB,MAAM,KAAK,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAA4B,MAAM,4BAA4B,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAMtD;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;CAQzC,CAAC;AAEF,MAAM,KAAK,GAAqE;IAC9E;QACE,SAAS,EAAE,iBAAiB;QAC5B,YAAY,EAAE,oEAAoE;QAClF,IAAI,EAAE,uRAAuR;KAC9R;IACD;QACE,SAAS,EAAE,sDAAsD;QACjE,YAAY,EAAE,8BAA8B;QAC5C,IAAI,EAAE,kGAAkG;KACzG;IACD;QACE,SAAS,EAAE,0BAA0B;QACrC,YAAY,EAAE,yCAAyC;QACvD,IAAI,EAAE,uLAAuL;KAC9L;IACD;QACE,SAAS,EAAE,gBAAgB;QAC3B,YAAY,EAAE,mBAAmB;QACjC,IAAI,EAAE,4PAA4P;KACnQ;IACD;QACE,SAAS,EAAE,gBAAgB;QAC3B,YAAY,EAAE,0BAA0B;QACxC,IAAI,EAAE,qFAAqF;KAC5F;IACD;QACE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"load-trading-recipe.js","sourceRoot":"","sources":["../../src/runtime/load-trading-recipe.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Map trading recipe exit to DSL plugin ExitBlockConfig.
|
|
3
|
-
* `dsl_preset` expands to `dsl_presets.dsl` and `preset: dsl`. Otherwise uses `dsl_presets` or `dsl`.
|
|
2
|
+
* Map trading recipe exit to DSL plugin ExitBlockConfig (single exit.dsl_preset only).
|
|
4
3
|
*/
|
|
5
4
|
import type { ExitBlockConfig } from "../dsl/config/index.js";
|
|
6
5
|
import type { TradingRecipeExit } from "./trading-recipe-schema.js";
|
|
7
6
|
/**
|
|
8
7
|
* Adapt playbook exit to ExitBlockConfig for parseDslPluginConfig.
|
|
9
|
-
*
|
|
8
|
+
* Only `exit.dsl_preset` is supported; passes exit.interval_seconds and exit.engine.
|
|
10
9
|
*/
|
|
11
10
|
export declare function mapTradingRecipeExitToDslConfig(exit: TradingRecipeExit | undefined): ExitBlockConfig;
|
|
12
11
|
//# sourceMappingURL=map-exit-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-exit-config.d.ts","sourceRoot":"","sources":["../../src/runtime/map-exit-config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"map-exit-config.d.ts","sourceRoot":"","sources":["../../src/runtime/map-exit-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AA4FpE;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,iBAAiB,GAAG,SAAS,GAAG,eAAe,CAoBpG"}
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Map trading recipe exit to DSL plugin ExitBlockConfig.
|
|
3
|
-
* `dsl_preset` expands to `dsl_presets.dsl` and `preset: dsl`. Otherwise uses `dsl_presets` or `dsl`.
|
|
2
|
+
* Map trading recipe exit to DSL plugin ExitBlockConfig (single exit.dsl_preset only).
|
|
4
3
|
*/
|
|
5
4
|
import { validateRawExitBlockAndPresetsUnknownKeys } from "../dsl/config/unknown-keys.js";
|
|
6
|
-
function presetErrorPath(source, presetName) {
|
|
7
|
-
return source === "dsl_preset" ? "exit.dsl_preset" : `exit.${source}.${presetName}`;
|
|
8
|
-
}
|
|
9
5
|
function deriveMaxLossPct(preset) {
|
|
10
6
|
const n = preset.max_loss_pct;
|
|
11
7
|
if (typeof n === "number" && n > 0)
|
|
@@ -16,7 +12,7 @@ function deriveMaxLossPct(preset) {
|
|
|
16
12
|
}
|
|
17
13
|
return undefined;
|
|
18
14
|
}
|
|
19
|
-
function buildPreset(
|
|
15
|
+
function buildPreset(rawObj) {
|
|
20
16
|
const preset = {};
|
|
21
17
|
if (Array.isArray(rawObj.tiers)) {
|
|
22
18
|
preset.tiers = rawObj.tiers.map((t) => ({
|
|
@@ -32,7 +28,7 @@ function buildPreset(name, rawObj, source) {
|
|
|
32
28
|
maxLoss = 1;
|
|
33
29
|
}
|
|
34
30
|
if (maxLoss == null || !(maxLoss > 0)) {
|
|
35
|
-
throw new Error(
|
|
31
|
+
throw new Error("exit.dsl_preset: max_loss_pct is required or must be set in dsl_preset.max_loss_pct or dsl_preset.phase1.max_loss_pct. Run: openclaw senpi guide exit");
|
|
36
32
|
}
|
|
37
33
|
preset.max_loss_pct = maxLoss;
|
|
38
34
|
if (rawObj.phase1 && typeof rawObj.phase1 === "object") {
|
|
@@ -66,7 +62,7 @@ function buildPreset(name, rawObj, source) {
|
|
|
66
62
|
}
|
|
67
63
|
/**
|
|
68
64
|
* Adapt playbook exit to ExitBlockConfig for parseDslPluginConfig.
|
|
69
|
-
*
|
|
65
|
+
* Only `exit.dsl_preset` is supported; passes exit.interval_seconds and exit.engine.
|
|
70
66
|
*/
|
|
71
67
|
export function mapTradingRecipeExitToDslConfig(exit) {
|
|
72
68
|
if (exit != null && typeof exit === "object") {
|
|
@@ -75,34 +71,16 @@ export function mapTradingRecipeExitToDslConfig(exit) {
|
|
|
75
71
|
const rawExit = exit;
|
|
76
72
|
const dslPresetSingle = rawExit?.dsl_preset;
|
|
77
73
|
if (dslPresetSingle != null && typeof dslPresetSingle === "object" && !Array.isArray(dslPresetSingle)) {
|
|
78
|
-
const built = buildPreset(
|
|
74
|
+
const built = buildPreset(dslPresetSingle);
|
|
79
75
|
return {
|
|
80
76
|
interval_seconds: exit?.interval_seconds ?? 30,
|
|
81
77
|
...(exit?.engine != null && { engine: exit.engine }),
|
|
82
|
-
|
|
83
|
-
dsl_presets: { dsl: built },
|
|
78
|
+
dsl_preset: built,
|
|
84
79
|
};
|
|
85
80
|
}
|
|
86
|
-
const presetsSource = exit?.dsl_presets ?? exit?.dsl;
|
|
87
|
-
const sourceKey = exit?.dsl_presets != null ? "dsl_presets" : "dsl";
|
|
88
|
-
if (!presetsSource || typeof presetsSource !== "object") {
|
|
89
|
-
return {
|
|
90
|
-
interval_seconds: exit?.interval_seconds ?? 30,
|
|
91
|
-
...(exit?.engine != null && { engine: exit.engine }),
|
|
92
|
-
dsl_presets: {},
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
const dsl_presets = {};
|
|
96
|
-
for (const [name, raw] of Object.entries(presetsSource)) {
|
|
97
|
-
if (!raw || typeof raw !== "object")
|
|
98
|
-
continue;
|
|
99
|
-
dsl_presets[name] = buildPreset(name, raw, sourceKey);
|
|
100
|
-
}
|
|
101
81
|
return {
|
|
102
82
|
interval_seconds: exit?.interval_seconds ?? 30,
|
|
103
83
|
...(exit?.engine != null && { engine: exit.engine }),
|
|
104
|
-
...(typeof exit?.preset === "string" && exit.preset.length > 0 ? { preset: exit.preset } : {}),
|
|
105
|
-
dsl_presets: dsl_presets,
|
|
106
84
|
};
|
|
107
85
|
}
|
|
108
86
|
//# sourceMappingURL=map-exit-config.js.map
|