bfxsentry-agent 0.2.0 → 0.3.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.
Files changed (36) hide show
  1. package/dist/bin/sentry.js +26 -0
  2. package/dist/bin/sentry.js.map +1 -1
  3. package/dist/src/backtest/fill-simulator.d.ts.map +1 -1
  4. package/dist/src/backtest/fill-simulator.js +4 -1
  5. package/dist/src/backtest/fill-simulator.js.map +1 -1
  6. package/dist/src/backtest/historical-fetcher.d.ts +8 -0
  7. package/dist/src/backtest/historical-fetcher.d.ts.map +1 -0
  8. package/dist/src/backtest/historical-fetcher.js +390 -0
  9. package/dist/src/backtest/historical-fetcher.js.map +1 -0
  10. package/dist/src/backtest/optimizer.d.ts +18 -0
  11. package/dist/src/backtest/optimizer.d.ts.map +1 -0
  12. package/dist/src/backtest/optimizer.js +264 -0
  13. package/dist/src/backtest/optimizer.js.map +1 -0
  14. package/dist/src/backtest/report.d.ts +2 -0
  15. package/dist/src/backtest/report.d.ts.map +1 -1
  16. package/dist/src/backtest/report.js +59 -6
  17. package/dist/src/backtest/report.js.map +1 -1
  18. package/dist/src/backtest/runner.d.ts.map +1 -1
  19. package/dist/src/backtest/runner.js +73 -25
  20. package/dist/src/backtest/runner.js.map +1 -1
  21. package/dist/src/collector/bitfinex-rest.d.ts +1 -0
  22. package/dist/src/collector/bitfinex-rest.d.ts.map +1 -1
  23. package/dist/src/collector/bitfinex-rest.js +1 -1
  24. package/dist/src/collector/bitfinex-rest.js.map +1 -1
  25. package/dist/src/risk/position-manager.d.ts +2 -0
  26. package/dist/src/risk/position-manager.d.ts.map +1 -1
  27. package/dist/src/risk/position-manager.js +18 -3
  28. package/dist/src/risk/position-manager.js.map +1 -1
  29. package/dist/src/skill/backtest.d.ts.map +1 -1
  30. package/dist/src/skill/backtest.js +11 -5
  31. package/dist/src/skill/backtest.js.map +1 -1
  32. package/dist/src/skill/registry.d.ts +12 -0
  33. package/dist/src/skill/registry.d.ts.map +1 -0
  34. package/dist/src/skill/registry.js +128 -0
  35. package/dist/src/skill/registry.js.map +1 -0
  36. package/package.json +1 -1
@@ -13,6 +13,7 @@ import { tradeCommand } from '../src/skill/trade.js';
13
13
  import { backtestCommand } from '../src/skill/backtest.js';
14
14
  import { configCommand } from '../src/skill/config.js';
15
15
  import { logsCommand } from '../src/skill/logs.js';
16
+ import { getSkillsByCategory } from '../src/skill/registry.js';
16
17
  const PID_FILE = getPidPath();
17
18
  function writePidFile() {
18
19
  try {
@@ -49,6 +50,31 @@ program
49
50
  .name('sentry')
50
51
  .description('BfxSentry Agent CLI — Bitfinex 信号驱动交易代理')
51
52
  .version('0.2.0');
53
+ // ── sentry skills ──
54
+ program
55
+ .command('skills')
56
+ .description('列出所有可用 Skill')
57
+ .action(() => {
58
+ console.log('\n BfxSentry Agent · Skill 注册表\n');
59
+ const categories = ['signal', 'strategy', 'trade', 'system'];
60
+ const labels = {
61
+ signal: '📡 信号',
62
+ strategy: '🧠 策略',
63
+ trade: '💰 交易',
64
+ system: '⚙️ 系统',
65
+ };
66
+ for (const cat of categories) {
67
+ const items = getSkillsByCategory(cat);
68
+ if (items.length === 0)
69
+ continue;
70
+ console.log(` ${labels[cat]}`);
71
+ for (const s of items) {
72
+ console.log(` ${s.id.padEnd(12)} ${s.name.padEnd(10)} ${s.desc}`);
73
+ console.log(` ${''.padEnd(12)} ${s.usage}`);
74
+ }
75
+ console.log('');
76
+ }
77
+ });
52
78
  // ── sentry scan ──
53
79
  program
54
80
  .command('scan')
@@ -1 +1 @@
1
- {"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../bin/sentry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../bin/sentry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fill-simulator.d.ts","sourceRoot":"","sources":["../../../src/backtest/fill-simulator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAG3D,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,GAAG,eAAe,CAgC3F;AAGD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAAG,OAAO,EAC3B,YAAY,EAAE,cAAc,GAC3B,OAAO,CAQT"}
1
+ {"version":3,"file":"fill-simulator.d.ts","sourceRoot":"","sources":["../../../src/backtest/fill-simulator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAG3D,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,GAAG,eAAe,CAmC3F;AAGD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAAG,OAAO,EAC3B,YAAY,EAAE,cAAc,GAC3B,OAAO,CAQT"}
@@ -18,7 +18,10 @@ export function simulateFill(intent, snapshot) {
18
18
  fillPrice = bestBid * (1 - slippage);
19
19
  }
20
20
  const capitalUsd = 5000;
21
- const sizeUsd = capitalUsd * (intent.sizePct / 100);
21
+ // Support both percent-based and fixed-stake sizing
22
+ const sizeUsd = intent.sizePct > 0
23
+ ? capitalUsd * (intent.sizePct / 100)
24
+ : intent.meta?.stakeUsdc || (intent.meta?.hedgeBtc ? intent.meta.hedgeBtc * fillPrice : 100);
22
25
  const fillSize = sizeUsd / fillPrice;
23
26
  return {
24
27
  success: true,
@@ -1 +1 @@
1
- {"version":3,"file":"fill-simulator.js","sourceRoot":"","sources":["../../../src/backtest/fill-simulator.ts"],"names":[],"mappings":"AAGA,oEAAoE;AACpE,MAAM,UAAU,YAAY,CAAC,MAAmB,EAAE,QAAwB;IACxE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAA;IAEtC,mDAAmD;IACnD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,SAAS,CAAA;IAC5D,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,SAAS,CAAA;IAE5D,IAAI,SAAiB,CAAA;IACrB,IAAI,MAAM,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QAChC,sDAAsD;QACtD,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAA;QAClC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QAClE,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAA;IACtC,CAAC;SAAM,CAAC;QACN,4CAA4C;QAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAA;QAClC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QAClE,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAA;IACtC,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAA;IACvB,MAAM,OAAO,GAAG,UAAU,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,CAAA;IACnD,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAA;IAEpC,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,MAAM,MAAM,CAAC,EAAE,EAAE;QAC1B,SAAS;QACT,QAAQ;QACR,GAAG,EAAE,OAAO,GAAG,KAAK;QACpB,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC9B,CAAA;AACH,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,SAA2B,EAC3B,YAA4B;IAE5B,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,mDAAmD;QACnD,OAAO,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAA;IACzC,CAAC;SAAM,CAAC;QACN,oDAAoD;QACpD,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAA;IAC1C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"fill-simulator.js","sourceRoot":"","sources":["../../../src/backtest/fill-simulator.ts"],"names":[],"mappings":"AAGA,oEAAoE;AACpE,MAAM,UAAU,YAAY,CAAC,MAAmB,EAAE,QAAwB;IACxE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAA;IAEtC,mDAAmD;IACnD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,SAAS,CAAA;IAC5D,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,SAAS,CAAA;IAE5D,IAAI,SAAiB,CAAA;IACrB,IAAI,MAAM,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QAChC,sDAAsD;QACtD,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAA;QAClC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QAClE,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAA;IACtC,CAAC;SAAM,CAAC;QACN,4CAA4C;QAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAA;QAClC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QAClE,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAA;IACtC,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAA;IACvB,oDAAoD;IACpD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG,CAAC;QAChC,CAAC,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC;QACrC,CAAC,CAAE,MAAM,CAAC,IAAI,EAAE,SAAoB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAE,MAAM,CAAC,IAAI,CAAC,QAAmB,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACtH,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAA;IAEpC,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,MAAM,MAAM,CAAC,EAAE,EAAE;QAC1B,SAAS;QACT,QAAQ;QACR,GAAG,EAAE,OAAO,GAAG,KAAK;QACpB,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC9B,CAAA;AACH,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,SAA2B,EAC3B,YAA4B;IAE5B,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,mDAAmD;QACnD,OAAO,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAA;IACzC,CAAC;SAAM,CAAC;QACN,oDAAoD;QACpD,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAA;IAC1C,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AgentConfig } from '../core/config.js';
2
+ import type { MarketSnapshot } from '../collector/types.js';
3
+ export interface FetchProgress {
4
+ phase: string;
5
+ detail: string;
6
+ }
7
+ export declare function fetchHistoricalSnapshots(cfg: AgentConfig, days: number, onProgress?: (p: FetchProgress) => void): Promise<MarketSnapshot[]>;
8
+ //# sourceMappingURL=historical-fetcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"historical-fetcher.d.ts","sourceRoot":"","sources":["../../../src/backtest/historical-fetcher.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,uBAAuB,CAAA;AAia9B,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,GACtC,OAAO,CAAC,cAAc,EAAE,CAAC,CAwD3B"}
@@ -0,0 +1,390 @@
1
+ /**
2
+ * 从 Bitfinex REST API 拉取历史数据,构建 MarketSnapshot 序列用于回测。
3
+ * 不再依赖 SQLite 预录数据,用户即装即用。
4
+ */
5
+ import { fetchJson } from '../collector/bitfinex-rest.js';
6
+ async function fetchCandles(cfg, timeframe, startMs, endMs) {
7
+ const base = cfg.collector.bitfinex.base_url;
8
+ const sym = cfg.collector.bitfinex.symbol;
9
+ const all = [];
10
+ let curStart = startMs;
11
+ // Paginate with sort=1 (ascending), move start forward
12
+ while (true) {
13
+ const url = `${base}/v2/candles/trade:${timeframe}:${sym}/hist?limit=10000&start=${curStart}&end=${endMs}&sort=1`;
14
+ const raw = await fetchJson(url);
15
+ if (!raw || raw.length === 0)
16
+ break;
17
+ for (const c of raw) {
18
+ all.push({ ts: c[0], open: c[1], close: c[2], high: c[3], low: c[4], volume: c[5] });
19
+ }
20
+ if (raw.length < 10000)
21
+ break;
22
+ curStart = raw[raw.length - 1][0] + 1;
23
+ await sleep(300);
24
+ }
25
+ return all.sort((a, b) => a.ts - b.ts);
26
+ }
27
+ // ── Historical Trades (time-windowed pagination) ──
28
+ async function fetchHistoricalTrades(cfg, startMs, endMs) {
29
+ const base = cfg.collector.bitfinex.base_url;
30
+ const sym = cfg.collector.bitfinex.symbol;
31
+ const all = [];
32
+ // Fetch in 6-hour chunks to distribute trades evenly
33
+ const chunkMs = 6 * 3600_000;
34
+ for (let chunkStart = startMs; chunkStart < endMs; chunkStart += chunkMs) {
35
+ const chunkEnd = Math.min(chunkStart + chunkMs, endMs);
36
+ const url = `${base}/v2/trades/${sym}/hist?limit=1000&start=${chunkStart}&end=${chunkEnd}&sort=1`;
37
+ try {
38
+ const raw = await fetchJson(url);
39
+ if (raw && raw.length > 0) {
40
+ for (const r of raw) {
41
+ all.push({
42
+ id: r[0],
43
+ timestamp: r[1],
44
+ amount: Math.abs(r[2]),
45
+ price: r[3],
46
+ side: r[2] > 0 ? 'buy' : 'sell',
47
+ });
48
+ }
49
+ }
50
+ }
51
+ catch { /* skip chunk on error */ }
52
+ await sleep(300);
53
+ }
54
+ return all.sort((a, b) => a.timestamp - b.timestamp);
55
+ }
56
+ // ── Historical Liquidations ──
57
+ async function fetchHistoricalLiquidations(cfg, startMs, endMs) {
58
+ const base = cfg.collector.bitfinex.base_url;
59
+ const all = [];
60
+ let curStart = startMs;
61
+ while (true) {
62
+ const url = `${base}/v2/liquidations/hist?limit=500&start=${curStart}&end=${endMs}&sort=1`;
63
+ const raw = await fetchJson(url);
64
+ if (!raw || raw.length === 0)
65
+ break;
66
+ for (const outer of raw) {
67
+ const item = outer[0];
68
+ if (!item || !Array.isArray(item))
69
+ continue;
70
+ const amount = Math.abs(item[5] || 0);
71
+ const price = item[6] || 0;
72
+ if (amount === 0 || price === 0)
73
+ continue;
74
+ all.push({
75
+ id: item[1],
76
+ timestamp: item[2],
77
+ symbol: item[4] || '',
78
+ amount,
79
+ price,
80
+ side: item[5] > 0 ? 'short' : 'long',
81
+ usdValue: amount * price,
82
+ });
83
+ }
84
+ if (raw.length < 500)
85
+ break;
86
+ const lastItem = raw[raw.length - 1][0];
87
+ curStart = lastItem[2] + 1;
88
+ await sleep(300);
89
+ }
90
+ return all.sort((a, b) => a.timestamp - b.timestamp);
91
+ }
92
+ // ── Historical Funding Stats ──
93
+ async function fetchHistoricalFunding(cfg, startMs, endMs) {
94
+ const base = cfg.collector.bitfinex.base_url;
95
+ const sym = cfg.collector.bitfinex.funding_symbol;
96
+ const url = `${base}/v2/funding/stats/${sym}/hist?limit=10000&start=${startMs}&end=${endMs}&sort=1`;
97
+ const raw = await fetchJson(url);
98
+ return raw.map(item => {
99
+ const total = item[7] || 0;
100
+ const used = item[8] || 0;
101
+ return {
102
+ timestamp: item[0],
103
+ frr: item[3],
104
+ avgPeriod: item[4],
105
+ totalAmount: total,
106
+ usedAmount: used,
107
+ utilization: total > 0 ? used / total : 0,
108
+ };
109
+ });
110
+ }
111
+ // ── Build MarketSnapshot from candle + context ──
112
+ function buildSnapshotFromCandle(candle, prevCandles, trades, liqs, funding) {
113
+ const price = candle.close;
114
+ // Candle directional bias: how bullish/bearish is this candle?
115
+ const candleReturn = candle.open > 0 ? (candle.close - candle.open) / candle.open : 0;
116
+ const isBullish = candleReturn > 0.002; // > 0.2% move
117
+ const isBearish = candleReturn < -0.002;
118
+ const isStrongMove = Math.abs(candleReturn) > 0.01; // > 1% move
119
+ // Multi-candle momentum (last 3 candles)
120
+ const recentReturns = prevCandles.slice(-3).map(c => c.open > 0 ? (c.close - c.open) / c.open : 0);
121
+ const avgMomentum = recentReturns.length > 0 ? recentReturns.reduce((a, b) => a + b, 0) / recentReturns.length : 0;
122
+ // Ticker from candle OHLCV
123
+ const ticker = {
124
+ bid: price * 0.9999,
125
+ bidSize: candle.volume * 0.3,
126
+ ask: price * 1.0001,
127
+ askSize: candle.volume * 0.3,
128
+ dailyChange: candle.close - candle.open,
129
+ dailyChangePct: candleReturn,
130
+ lastPrice: price,
131
+ volume: candle.volume,
132
+ high: candle.high,
133
+ low: candle.low,
134
+ };
135
+ // Filter trades in this candle's 1h window
136
+ const windowStart = candle.ts;
137
+ const windowEnd = candle.ts + 3600_000;
138
+ const windowTrades = trades.filter(t => t.timestamp >= windowStart && t.timestamp < windowEnd);
139
+ // TradeFlow — use actual trades if available, otherwise derive from candle
140
+ const tradeFlow = windowTrades.length > 10
141
+ ? buildTradeFlow(windowTrades)
142
+ : deriveTradeFlowFromCandle(candle);
143
+ // Synthetic orderbook — biased by candle direction and trade flow
144
+ const buyRatio = tradeFlow.buyRatio60s;
145
+ // Stronger directional candles → more imbalanced orderbook
146
+ const bidMultiplier = isBullish ? (1 + Math.abs(candleReturn) * 50) : isBearish ? (1 - Math.abs(candleReturn) * 25) : 1;
147
+ const askMultiplier = isBearish ? (1 + Math.abs(candleReturn) * 50) : isBullish ? (1 - Math.abs(candleReturn) * 25) : 1;
148
+ const baseBidDepth = candle.volume * 0.25;
149
+ const baseAskDepth = candle.volume * 0.25;
150
+ const bidDepth05 = baseBidDepth * bidMultiplier;
151
+ const askDepth05 = baseAskDepth * askMultiplier;
152
+ const range = candle.high - candle.low;
153
+ const bidAskSpread = Math.max(range * 0.01, price * 0.0001);
154
+ const orderbook = {
155
+ bids: [
156
+ { price: price - bidAskSpread, count: 10, amount: candle.volume * 0.05 * bidMultiplier },
157
+ { price: price - bidAskSpread * 3, count: 15, amount: candle.volume * 0.08 * bidMultiplier },
158
+ { price: price - bidAskSpread * 8, count: 20, amount: candle.volume * 0.12 * bidMultiplier },
159
+ ],
160
+ asks: [
161
+ { price: price + bidAskSpread, count: 10, amount: candle.volume * 0.05 * askMultiplier },
162
+ { price: price + bidAskSpread * 3, count: 15, amount: candle.volume * 0.08 * askMultiplier },
163
+ { price: price + bidAskSpread * 8, count: 20, amount: candle.volume * 0.12 * askMultiplier },
164
+ ],
165
+ bidDepth02: candle.volume * 0.13 * bidMultiplier,
166
+ bidDepth05,
167
+ bidDepth10: bidDepth05,
168
+ askDepth02: candle.volume * 0.13 * askMultiplier,
169
+ askDepth05,
170
+ askDepth10: askDepth05,
171
+ walls: [], // Walls detected from strong price levels below
172
+ };
173
+ // Detect synthetic walls from extreme candle patterns
174
+ // A strong move that reverses (long wick) suggests a wall
175
+ const upperWick = candle.high - Math.max(candle.open, candle.close);
176
+ const lowerWick = Math.min(candle.open, candle.close) - candle.low;
177
+ const body = Math.abs(candle.close - candle.open);
178
+ if (upperWick > body * 2 && range > 0) {
179
+ // Strong upper wick = ask wall near the high
180
+ orderbook.walls.push({
181
+ side: 'ask',
182
+ price: candle.high,
183
+ amount: candle.volume * 0.5,
184
+ multiplier: 6,
185
+ });
186
+ }
187
+ if (lowerWick > body * 2 && range > 0) {
188
+ // Strong lower wick = bid wall near the low
189
+ orderbook.walls.push({
190
+ side: 'bid',
191
+ price: candle.low,
192
+ amount: candle.volume * 0.5,
193
+ multiplier: 6,
194
+ });
195
+ }
196
+ // Filter liquidations in window
197
+ const windowLiqs = liqs.filter(l => l.timestamp >= candle.ts - 3600_000 && l.timestamp < windowEnd);
198
+ // Liq aggregation
199
+ const liqAgg = buildLiqAgg(liqs, candle.ts);
200
+ // Liq intensity
201
+ const liqIntensityPct = calcLiqIntensityFromHistory(liqs.filter(l => l.timestamp <= windowEnd), candle.ts);
202
+ // Funding: all data points up to this candle
203
+ const relevantFunding = funding.filter(f => f.timestamp <= windowEnd);
204
+ const recentFunding = relevantFunding.slice(-12); // need ≥10 for funding signal
205
+ // Derive whale-like data from sustained momentum
206
+ let whaleScore = 50; // neutral default
207
+ let whaleDirection = '中性';
208
+ const whales = [];
209
+ if (prevCandles.length >= 3) {
210
+ // If 3+ candles in same direction with increasing volume, simulate whale activity
211
+ const last3 = prevCandles.slice(-3);
212
+ const allBullish = last3.every(c => c.close > c.open);
213
+ const allBearish = last3.every(c => c.close < c.open);
214
+ const volIncreasing = last3.length >= 2 && last3[last3.length - 1].volume > last3[0].volume * 1.2;
215
+ if (allBullish && volIncreasing) {
216
+ whaleScore = 65 + Math.min(20, Math.abs(avgMomentum) * 1000);
217
+ whaleDirection = whaleScore >= 70 ? '强烈看多' : '偏多';
218
+ // Simulate aligned whales
219
+ for (let w = 0; w < 6; w++) {
220
+ whales.push({
221
+ username: `whale_${w}`,
222
+ rank: w + 1,
223
+ pnl: Math.abs(avgMomentum) * 100000 * (w + 1),
224
+ direction: 'long',
225
+ correlation: 0.7 + Math.random() * 0.2,
226
+ confidence: 0.6 + Math.random() * 0.3,
227
+ });
228
+ }
229
+ }
230
+ else if (allBearish && volIncreasing) {
231
+ whaleScore = 35 - Math.min(20, Math.abs(avgMomentum) * 1000);
232
+ whaleDirection = whaleScore <= 30 ? '强烈看空' : '偏空';
233
+ for (let w = 0; w < 6; w++) {
234
+ whales.push({
235
+ username: `whale_${w}`,
236
+ rank: w + 1,
237
+ pnl: Math.abs(avgMomentum) * 100000 * (w + 1),
238
+ direction: 'short',
239
+ correlation: -(0.7 + Math.random() * 0.2),
240
+ confidence: 0.6 + Math.random() * 0.3,
241
+ });
242
+ }
243
+ }
244
+ }
245
+ return {
246
+ timestamp: candle.ts,
247
+ ticker,
248
+ orderbook,
249
+ trades: windowTrades,
250
+ tradeFlow,
251
+ liquidations: windowLiqs,
252
+ liqAgg,
253
+ liqIntensityPct,
254
+ funding: recentFunding,
255
+ fundingCurrent: recentFunding.length > 0 ? recentFunding[recentFunding.length - 1] : null,
256
+ deriv: null,
257
+ whales,
258
+ whaleScore,
259
+ whaleDirection,
260
+ };
261
+ }
262
+ function deriveTradeFlowFromCandle(candle) {
263
+ // Infer buy/sell ratio from candle direction
264
+ const ret = candle.open > 0 ? (candle.close - candle.open) / candle.open : 0;
265
+ // Bullish candle → more buy volume, bearish → more sell volume
266
+ const buyRatio = 0.5 + Math.min(0.35, Math.max(-0.35, ret * 30));
267
+ const totalVol = candle.volume;
268
+ const buyVol = totalVol * buyRatio;
269
+ const sellVol = totalVol * (1 - buyRatio);
270
+ return {
271
+ buyVol30s: buyVol * 0.008,
272
+ sellVol30s: sellVol * 0.008,
273
+ buyVol60s: buyVol * 0.017,
274
+ sellVol60s: sellVol * 0.017,
275
+ buyVol5m: buyVol * 0.083,
276
+ sellVol5m: sellVol * 0.083,
277
+ buyCount60s: Math.max(1, Math.round(50 * buyRatio)),
278
+ sellCount60s: Math.max(1, Math.round(50 * (1 - buyRatio))),
279
+ netFlow60s: (buyVol - sellVol) * 0.017,
280
+ buyRatio60s: buyRatio,
281
+ };
282
+ }
283
+ function buildTradeFlow(trades) {
284
+ const buyTrades = trades.filter(t => t.side === 'buy');
285
+ const sellTrades = trades.filter(t => t.side === 'sell');
286
+ const buyVol = buyTrades.reduce((s, t) => s + t.amount, 0);
287
+ const sellVol = sellTrades.reduce((s, t) => s + t.amount, 0);
288
+ const total = buyVol + sellVol;
289
+ // Scale sub-windows proportionally
290
+ return {
291
+ buyVol30s: buyVol * 0.008,
292
+ sellVol30s: sellVol * 0.008,
293
+ buyVol60s: buyVol * 0.017,
294
+ sellVol60s: sellVol * 0.017,
295
+ buyVol5m: buyVol * 0.083,
296
+ sellVol5m: sellVol * 0.083,
297
+ buyCount60s: Math.max(1, Math.round(buyTrades.length * 0.017)),
298
+ sellCount60s: Math.max(1, Math.round(sellTrades.length * 0.017)),
299
+ netFlow60s: (buyVol - sellVol) * 0.017,
300
+ buyRatio60s: total > 0 ? buyVol / total : 0.5,
301
+ };
302
+ }
303
+ function buildLiqAgg(liqs, refTs) {
304
+ const agg = (sec) => {
305
+ const window = liqs.filter(l => l.timestamp >= refTs - sec * 1000 && l.timestamp <= refTs);
306
+ const longUsd = window.filter(l => l.side === 'long').reduce((s, l) => s + l.usdValue, 0);
307
+ const shortUsd = window.filter(l => l.side === 'short').reduce((s, l) => s + l.usdValue, 0);
308
+ return { longUsd, shortUsd, total: longUsd + shortUsd, count: window.length };
309
+ };
310
+ return { w1m: agg(60), w5m: agg(300), w15m: agg(900), w1h: agg(3600), w24h: agg(86400) };
311
+ }
312
+ function calcLiqIntensityFromHistory(liqs, refTs) {
313
+ if (liqs.length === 0)
314
+ return 0;
315
+ // Use last 24h of liqs for percentile calculation
316
+ const window24h = liqs.filter(l => l.timestamp >= refTs - 86400_000);
317
+ if (window24h.length === 0)
318
+ return 0;
319
+ const buckets = [];
320
+ const start = window24h[0].timestamp;
321
+ for (let t = start; t < refTs; t += 60_000) {
322
+ const bucket = window24h.filter(l => l.timestamp >= t && l.timestamp < t + 60_000);
323
+ buckets.push(bucket.reduce((s, l) => s + l.usdValue, 0));
324
+ }
325
+ if (buckets.length === 0)
326
+ return 0;
327
+ const currentBucket = window24h
328
+ .filter(l => l.timestamp >= refTs - 60_000 && l.timestamp <= refTs)
329
+ .reduce((s, l) => s + l.usdValue, 0);
330
+ const sorted = [...buckets].sort((a, b) => a - b);
331
+ const idx = sorted.findIndex(v => v >= currentBucket);
332
+ return idx >= 0 ? idx / sorted.length : 1;
333
+ }
334
+ function sleep(ms) {
335
+ return new Promise(r => setTimeout(r, ms));
336
+ }
337
+ export async function fetchHistoricalSnapshots(cfg, days, onProgress) {
338
+ const endMs = Date.now();
339
+ const startMs = endMs - days * 86400_000;
340
+ const progress = (phase, detail) => {
341
+ onProgress?.({ phase, detail });
342
+ };
343
+ // Step 1: Fetch 1h candles as price backbone
344
+ progress('candles', `拉取 ${days} 天 K 线数据...`);
345
+ const candles = await fetchCandles(cfg, '1h', startMs, endMs);
346
+ if (candles.length === 0) {
347
+ throw new Error(`无法获取 K 线数据,请检查网络连接`);
348
+ }
349
+ progress('candles', `获取 ${candles.length} 根 1h K 线`);
350
+ // Step 2: Fetch historical trades (time-chunked for even distribution)
351
+ progress('trades', '拉取历史成交数据...');
352
+ let trades = [];
353
+ try {
354
+ trades = await fetchHistoricalTrades(cfg, startMs, endMs);
355
+ progress('trades', `获取 ${trades.length} 条成交记录`);
356
+ }
357
+ catch {
358
+ progress('trades', '成交数据不可用,使用 K 线推算');
359
+ }
360
+ // Step 3: Fetch historical liquidations
361
+ progress('liquidations', '拉取历史爆仓数据...');
362
+ let liqs = [];
363
+ try {
364
+ liqs = await fetchHistoricalLiquidations(cfg, startMs, endMs);
365
+ progress('liquidations', `获取 ${liqs.length} 条爆仓记录`);
366
+ }
367
+ catch {
368
+ progress('liquidations', '爆仓数据不可用');
369
+ }
370
+ // Step 4: Fetch historical funding stats
371
+ progress('funding', '拉取历史融资数据...');
372
+ let funding = [];
373
+ try {
374
+ funding = await fetchHistoricalFunding(cfg, startMs, endMs);
375
+ progress('funding', `获取 ${funding.length} 条融资记录`);
376
+ }
377
+ catch {
378
+ progress('funding', '融资数据不可用');
379
+ }
380
+ // Step 5: Build snapshot for each candle (with look-back context)
381
+ progress('build', `构建 ${candles.length} 个市场快照...`);
382
+ const snapshots = [];
383
+ for (let i = 0; i < candles.length; i++) {
384
+ const prevCandles = candles.slice(Math.max(0, i - 5), i);
385
+ snapshots.push(buildSnapshotFromCandle(candles[i], prevCandles, trades, liqs, funding));
386
+ }
387
+ progress('done', `完成!共 ${snapshots.length} 个快照,覆盖 ${days} 天`);
388
+ return snapshots;
389
+ }
390
+ //# sourceMappingURL=historical-fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"historical-fetcher.js","sourceRoot":"","sources":["../../../src/backtest/historical-fetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { AgentConfig } from '../core/config.js';
2
+ import type { BacktestResult } from './runner.js';
3
+ export interface OptimizeResult {
4
+ best: BacktestResult;
5
+ bestParams: string;
6
+ default: BacktestResult;
7
+ totalCombinations: number;
8
+ topResults: {
9
+ params: string;
10
+ pnl: number;
11
+ winRate: number;
12
+ trades: number;
13
+ sharpe: number;
14
+ score: number;
15
+ }[];
16
+ }
17
+ export declare function runOptimizedBacktest(baseConfig: AgentConfig, strategyFilter_: string | undefined, days: number, onProgress?: (msg: string) => void): Promise<OptimizeResult>;
18
+ //# sourceMappingURL=optimizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimizer.d.ts","sourceRoot":"","sources":["../../../src/backtest/optimizer.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAgPjD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,cAAc,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,cAAc,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;IACzB,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAC9G;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,WAAW,EACvB,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GACjC,OAAO,CAAC,cAAc,CAAC,CAyEzB"}