@dwlf/mcp-server 0.14.0 → 0.16.0
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backtests.d.ts","sourceRoot":"","sources":["../../src/tools/backtests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAC;AAE3D,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"backtests.d.ts","sourceRoot":"","sources":["../../src/tools/backtests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAC;AAE3D,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,UAAU,QAwMnB"}
|
package/dist/tools/backtests.js
CHANGED
|
@@ -2,7 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
import { normalizeSymbol } from '../client.js';
|
|
3
3
|
export function registerBacktestTools(server, client) {
|
|
4
4
|
// 1. Run a backtest
|
|
5
|
-
server.tool('dwlf_run_backtest', '⚠️ Run a strategy backtest (async). Returns requestId → poll with dwlf_get_backtest_results. PREREQUISITES: 1) Strategy MUST have symbols activated (dwlf_activate_strategy_symbols) or backtest returns 0 trades. 2) Requires 200+ daily candles: startDate must be 10+ months before endDate. If backtest returns 0 trades, check: a) Are symbols activated? b) Is date range long enough? c) Do event conditions actually match historical data? Optional capital/risk params (initialCapital, riskPerTrade, maxConcurrentTrades, portfolioMode, allowSymbolPyramiding) override backend defaults — set portfolioMode=true together with maxConcurrentTrades to model shared-capital concurrency across symbols; set allowSymbolPyramiding=true to permit more than one concurrent open position per symbol, and maxPositionsPerSymbol to bound that (e.g. 3) so per-symbol concentration stays capped.', {
|
|
5
|
+
server.tool('dwlf_run_backtest', '⚠️ Run a strategy backtest (async). Returns requestId → poll with dwlf_get_backtest_results. PREREQUISITES: 1) Strategy MUST have symbols activated (dwlf_activate_strategy_symbols) or backtest returns 0 trades. 2) Requires 200+ daily candles: startDate must be 10+ months before endDate. If backtest returns 0 trades, check: a) Are symbols activated? b) Is date range long enough? c) Do event conditions actually match historical data? Optional capital/risk params (initialCapital, riskPerTrade, maxConcurrentTrades, portfolioMode, allowSymbolPyramiding) override backend defaults — set portfolioMode=true together with maxConcurrentTrades to model shared-capital concurrency across symbols; set allowSymbolPyramiding=true to permit more than one concurrent open position per symbol, and maxPositionsPerSymbol to bound that (e.g. 3) so per-symbol concentration stays capped. Set disableTakeProfit=true for exit-signal-only strategies (no tp node) so the backend does NOT force a fallback take-profit that would exit early.', {
|
|
6
6
|
strategyId: z.string().describe('Strategy ID to backtest'),
|
|
7
7
|
symbols: z.array(z.string()).optional().describe('Symbols to backtest against (e.g. ["BTC", "TSLA"]). Defaults to strategy assets.'),
|
|
8
8
|
symbol: z.string().optional().describe('Single symbol shorthand (e.g. BTC, TSLA). Use "symbols" for multiple.'),
|
|
@@ -14,7 +14,8 @@ export function registerBacktestTools(server, client) {
|
|
|
14
14
|
portfolioMode: z.boolean().optional().describe('Opt into shared-capital simulation across symbols (default false). Combine with maxConcurrentTrades to cap simultaneous open positions.'),
|
|
15
15
|
allowSymbolPyramiding: z.boolean().optional().describe('Opt into >1 concurrent open position per symbol in portfolio mode (default false = one position per symbol). Note: global maxConcurrentTrades still caps total positions, but per-symbol concentration is unbounded unless maxPositionsPerSymbol is set.'),
|
|
16
16
|
maxPositionsPerSymbol: z.number().int().positive().optional().describe('Bound concurrent open positions per symbol when allowSymbolPyramiding=true (e.g. 3). Default unlimited. No effect when allowSymbolPyramiding is false (cap is 1 then).'),
|
|
17
|
-
|
|
17
|
+
disableTakeProfit: z.boolean().optional().describe('Suppress the implicit fallback take-profit (default false). When a strategy has NO take-profit node the backend otherwise force-applies a 3xATR fallback TP, which exits exit-signal-only strategies early. Set true to truly ride the exit graph (e.g. exit on cycle high / trendline break).'),
|
|
18
|
+
}, async ({ strategyId, symbols, symbol, startDate, endDate, initialCapital, riskPerTrade, maxConcurrentTrades, portfolioMode, allowSymbolPyramiding, maxPositionsPerSymbol, disableTakeProfit }) => {
|
|
18
19
|
try {
|
|
19
20
|
const body = { strategyId };
|
|
20
21
|
if (symbols && symbols.length > 0) {
|
|
@@ -39,6 +40,8 @@ export function registerBacktestTools(server, client) {
|
|
|
39
40
|
body.allowSymbolPyramiding = allowSymbolPyramiding;
|
|
40
41
|
if (maxPositionsPerSymbol !== undefined)
|
|
41
42
|
body.maxPositionsPerSymbol = maxPositionsPerSymbol;
|
|
43
|
+
if (disableTakeProfit !== undefined)
|
|
44
|
+
body.disableTakeProfit = disableTakeProfit;
|
|
42
45
|
const data = await client.post('/backtests', body);
|
|
43
46
|
return {
|
|
44
47
|
content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backtests.js","sourceRoot":"","sources":["../../src/tools/backtests.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAc,eAAe,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,qBAAqB,CACnC,MAAiB,EACjB,MAAkB;IAElB,oBAAoB;IACpB,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"backtests.js","sourceRoot":"","sources":["../../src/tools/backtests.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluations.d.ts","sourceRoot":"","sources":["../../src/tools/evaluations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"evaluations.d.ts","sourceRoot":"","sources":["../../src/tools/evaluations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,UAAU,QAqHnB"}
|
|
@@ -3,16 +3,19 @@ export function registerEvaluationTools(server, client) {
|
|
|
3
3
|
// 1. Trigger evaluation for a custom event (the missing step in the
|
|
4
4
|
// create → compile → activate → evaluate → results workflow). Without
|
|
5
5
|
// this, custom events only evaluate on the daily cron schedule.
|
|
6
|
-
server.tool('dwlf_evaluate_custom_event', '⚠️ Trigger an on-demand evaluation run for a specific custom event. This is the workflow step BETWEEN activating symbols and querying fires — without it, the custom event only evaluates on the daily cron and historical data is not backfilled until then. Returns { requestId, status: "pending" } — poll dwlf_get_evaluation_status(requestId) until status is "completed", then query fires via dwlf_get_events(type: "custom_event"). Consumes one EVALUATION quota.', {
|
|
6
|
+
server.tool('dwlf_evaluate_custom_event', '⚠️ Trigger an on-demand evaluation run for a specific custom event. This is the workflow step BETWEEN activating symbols and querying fires — without it, the custom event only evaluates on the daily cron and historical data is not backfilled until then. Returns { requestId, status: "pending" } — poll dwlf_get_evaluation_status(requestId) until status is "completed", then query fires via dwlf_get_events(type: "custom_event"). Consumes one EVALUATION quota. IMPORTANT: by default only the most recent ~400 candles (~14 months of daily data) are backfilled; older history produces NO fires and any backtest spanning it silently sees zero entries before that window. To backfill the full history a backtest needs, pass lookbackDays covering the whole backtest range (e.g. 2200 for a ~5-6yr window).', {
|
|
7
7
|
eventId: z.string().describe('Custom event ID to evaluate'),
|
|
8
|
+
lookbackDays: z.number().int().positive().optional().describe('How many days of history to (re)evaluate, overriding the default ~400-candle (~14-month) backfill window. Set this to at least the span of any backtest that gates on this event (e.g. 2200 ≈ 6 years) or its early period will have zero fires. Larger-than-history values are safe — evaluation just starts from the earliest available candle.'),
|
|
8
9
|
idempotencyKey: z.string().optional().describe('Optional client-supplied idempotency key — if a request with this key already exists for this account, the existing requestId is returned instead of creating a new one'),
|
|
9
|
-
}, async ({ eventId, idempotencyKey }) => {
|
|
10
|
+
}, async ({ eventId, lookbackDays, idempotencyKey }) => {
|
|
10
11
|
try {
|
|
11
12
|
const body = {
|
|
12
13
|
type: 'events',
|
|
13
14
|
mode: 'selected',
|
|
14
15
|
selectedItems: [{ type: 'event', id: eventId }],
|
|
15
16
|
};
|
|
17
|
+
if (lookbackDays !== undefined)
|
|
18
|
+
body.lookbackDays = lookbackDays;
|
|
16
19
|
if (idempotencyKey)
|
|
17
20
|
body.idempotencyKey = idempotencyKey;
|
|
18
21
|
const data = await client.post('/evaluations', body);
|
|
@@ -31,16 +34,19 @@ export function registerEvaluationTools(server, client) {
|
|
|
31
34
|
// above, in case the agent wants to backtest a visual strategy by
|
|
32
35
|
// running its evaluation pipeline rather than dwlf_run_backtest. Same
|
|
33
36
|
// shape, different `type` field.
|
|
34
|
-
server.tool('dwlf_evaluate_strategy', 'Trigger an on-demand evaluation run for a specific visual strategy. Parallels dwlf_evaluate_custom_event but for strategies. Returns { requestId, status: "pending" } — poll dwlf_get_evaluation_status until completed. Consumes one EVALUATION quota.', {
|
|
37
|
+
server.tool('dwlf_evaluate_strategy', 'Trigger an on-demand evaluation run for a specific visual strategy. Parallels dwlf_evaluate_custom_event but for strategies. Returns { requestId, status: "pending" } — poll dwlf_get_evaluation_status until completed. Consumes one EVALUATION quota. Same backfill caveat as dwlf_evaluate_custom_event: defaults to ~400 candles (~14 months); pass lookbackDays to cover a longer history.', {
|
|
35
38
|
strategyId: z.string().describe('Visual strategy ID to evaluate'),
|
|
39
|
+
lookbackDays: z.number().int().positive().optional().describe('How many days of history to (re)evaluate, overriding the default ~400-candle (~14-month) window. Set to at least the span of any dependent backtest. Larger-than-history values are safe.'),
|
|
36
40
|
idempotencyKey: z.string().optional().describe('Optional client-supplied idempotency key'),
|
|
37
|
-
}, async ({ strategyId, idempotencyKey }) => {
|
|
41
|
+
}, async ({ strategyId, lookbackDays, idempotencyKey }) => {
|
|
38
42
|
try {
|
|
39
43
|
const body = {
|
|
40
44
|
type: 'strategies',
|
|
41
45
|
mode: 'selected',
|
|
42
46
|
selectedItems: [{ type: 'strategy', id: strategyId }],
|
|
43
47
|
};
|
|
48
|
+
if (lookbackDays !== undefined)
|
|
49
|
+
body.lookbackDays = lookbackDays;
|
|
44
50
|
if (idempotencyKey)
|
|
45
51
|
body.idempotencyKey = idempotencyKey;
|
|
46
52
|
const data = await client.post('/evaluations', body);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluations.js","sourceRoot":"","sources":["../../src/tools/evaluations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,uBAAuB,CACrC,MAAiB,EACjB,MAAkB;IAElB,oEAAoE;IACpE,sEAAsE;IACtE,gEAAgE;IAChE,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,
|
|
1
|
+
{"version":3,"file":"evaluations.js","sourceRoot":"","sources":["../../src/tools/evaluations.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dwlf/mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.0",
|
|
4
4
|
"description": "MCP server for DWLF market analysis platform — exposes market data, indicators, signals, strategies, backtests, portfolio, trade journal, and more as AI-accessible tools",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|