@timmeck/trading-brain 2.0.3 → 2.2.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.
@@ -0,0 +1,24 @@
1
+ import type { TradeService } from './trade.service.js';
2
+ import type { SignalInput } from '../signals/fingerprint.js';
3
+ export interface ImportTradeRow {
4
+ pair: string;
5
+ botType: string;
6
+ profitPct: number;
7
+ win: boolean;
8
+ signals: SignalInput;
9
+ regime?: string;
10
+ timeframe?: string;
11
+ }
12
+ export interface ImportResult {
13
+ imported: number;
14
+ failed: number;
15
+ errors: string[];
16
+ }
17
+ export declare class ImportService {
18
+ private tradeService;
19
+ private logger;
20
+ constructor(tradeService: TradeService);
21
+ importTrades(trades: ImportTradeRow[]): ImportResult;
22
+ importFromJson(jsonString: string): ImportResult;
23
+ private validateRow;
24
+ }
@@ -0,0 +1,94 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ export class ImportService {
3
+ tradeService;
4
+ logger = getLogger();
5
+ constructor(tradeService) {
6
+ this.tradeService = tradeService;
7
+ }
8
+ importTrades(trades) {
9
+ let imported = 0;
10
+ let failed = 0;
11
+ const errors = [];
12
+ for (let i = 0; i < trades.length; i++) {
13
+ const row = trades[i];
14
+ try {
15
+ const input = {
16
+ pair: row.pair,
17
+ botType: row.botType,
18
+ profitPct: row.profitPct,
19
+ win: row.win,
20
+ signals: row.signals,
21
+ regime: row.regime,
22
+ };
23
+ this.tradeService.recordOutcome(input);
24
+ imported++;
25
+ }
26
+ catch (err) {
27
+ failed++;
28
+ const msg = `Row ${i}: ${err instanceof Error ? err.message : String(err)}`;
29
+ errors.push(msg);
30
+ this.logger.info(`Import error at row ${i}: ${msg}`);
31
+ }
32
+ }
33
+ this.logger.info(`Import complete: ${imported} imported, ${failed} failed`);
34
+ return { imported, failed, errors };
35
+ }
36
+ importFromJson(jsonString) {
37
+ let parsed;
38
+ try {
39
+ parsed = JSON.parse(jsonString);
40
+ }
41
+ catch (err) {
42
+ const msg = `Invalid JSON: ${err instanceof Error ? err.message : String(err)}`;
43
+ this.logger.info(`Import failed: ${msg}`);
44
+ return { imported: 0, failed: 0, errors: [msg] };
45
+ }
46
+ if (!Array.isArray(parsed)) {
47
+ const msg = 'Expected a JSON array of trade objects';
48
+ this.logger.info(`Import failed: ${msg}`);
49
+ return { imported: 0, failed: 0, errors: [msg] };
50
+ }
51
+ const validationErrors = [];
52
+ const validRows = [];
53
+ for (let i = 0; i < parsed.length; i++) {
54
+ const item = parsed[i];
55
+ const rowErrors = this.validateRow(item, i);
56
+ if (rowErrors.length > 0) {
57
+ validationErrors.push(...rowErrors);
58
+ }
59
+ else {
60
+ validRows.push({
61
+ pair: item['pair'],
62
+ botType: item['botType'],
63
+ profitPct: item['profitPct'],
64
+ win: item['win'],
65
+ signals: item['signals'],
66
+ regime: item['regime'],
67
+ timeframe: item['timeframe'],
68
+ });
69
+ }
70
+ }
71
+ if (validRows.length === 0 && validationErrors.length > 0) {
72
+ return { imported: 0, failed: parsed.length, errors: validationErrors };
73
+ }
74
+ const result = this.importTrades(validRows);
75
+ result.failed += validationErrors.length;
76
+ result.errors.push(...validationErrors);
77
+ return result;
78
+ }
79
+ validateRow(item, index) {
80
+ const errors = [];
81
+ if (typeof item['pair'] !== 'string')
82
+ errors.push(`Row ${index}: missing or invalid "pair"`);
83
+ if (typeof item['botType'] !== 'string')
84
+ errors.push(`Row ${index}: missing or invalid "botType"`);
85
+ if (typeof item['profitPct'] !== 'number')
86
+ errors.push(`Row ${index}: missing or invalid "profitPct"`);
87
+ if (typeof item['win'] !== 'boolean')
88
+ errors.push(`Row ${index}: missing or invalid "win"`);
89
+ if (typeof item['signals'] !== 'object' || item['signals'] === null)
90
+ errors.push(`Row ${index}: missing or invalid "signals"`);
91
+ return errors;
92
+ }
93
+ }
94
+ //# sourceMappingURL=import.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.service.js","sourceRoot":"","sources":["../../src/services/import.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { TradeRepository } from '../db/repositories/trade.repository.js';
2
+ import type { SignalService } from './signal.service.js';
3
+ import type { SynapseManager } from '../synapses/synapse-manager.js';
4
+ export interface KellyResult {
5
+ kellyFraction: number;
6
+ halfKelly: number;
7
+ brainAdjusted: number;
8
+ sampleSize: number;
9
+ winRate: number;
10
+ avgWin: number;
11
+ avgLoss: number;
12
+ recommendation: 'aggressive' | 'normal' | 'conservative' | 'avoid';
13
+ }
14
+ export interface PositionSizeResult {
15
+ sizePct: number;
16
+ kellyRaw: number;
17
+ confidence: number;
18
+ reason: string;
19
+ }
20
+ export interface RiskMetrics {
21
+ maxDrawdownPct: number;
22
+ currentDrawdownPct: number;
23
+ consecutiveLosses: number;
24
+ maxConsecutiveLosses: number;
25
+ riskRewardRatio: number;
26
+ expectancy: number;
27
+ }
28
+ export declare class RiskService {
29
+ private tradeRepo;
30
+ private signalService;
31
+ private synapseManager;
32
+ private logger;
33
+ constructor(tradeRepo: TradeRepository, signalService: SignalService, synapseManager: SynapseManager);
34
+ /**
35
+ * Calculate Kelly Criterion fraction for position sizing.
36
+ * K = W - (1-W)/R where W = win rate, R = avg win / avg loss ratio.
37
+ */
38
+ getKellyFraction(pair?: string, regime?: string): KellyResult;
39
+ /**
40
+ * Get a recommended position size based on Kelly Criterion and signal confidence.
41
+ * Caps at 25% of capital per position.
42
+ */
43
+ getPositionSize(capitalPct: number, signals: {
44
+ fingerprint: string;
45
+ confidence?: number;
46
+ }, regime?: string): PositionSizeResult;
47
+ /**
48
+ * Get risk metrics for overall portfolio or a specific pair.
49
+ */
50
+ getRiskMetrics(pair?: string): RiskMetrics;
51
+ private getFilteredTrades;
52
+ }
@@ -0,0 +1,244 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ export class RiskService {
3
+ tradeRepo;
4
+ signalService;
5
+ synapseManager;
6
+ logger = getLogger();
7
+ constructor(tradeRepo, signalService, synapseManager) {
8
+ this.tradeRepo = tradeRepo;
9
+ this.signalService = signalService;
10
+ this.synapseManager = synapseManager;
11
+ }
12
+ /**
13
+ * Calculate Kelly Criterion fraction for position sizing.
14
+ * K = W - (1-W)/R where W = win rate, R = avg win / avg loss ratio.
15
+ */
16
+ getKellyFraction(pair, regime) {
17
+ const trades = this.getFilteredTrades(pair, regime);
18
+ if (trades.length === 0) {
19
+ this.logger.info('Kelly: no trades found for given filters');
20
+ return {
21
+ kellyFraction: 0,
22
+ halfKelly: 0,
23
+ brainAdjusted: 0,
24
+ sampleSize: 0,
25
+ winRate: 0,
26
+ avgWin: 0,
27
+ avgLoss: 0,
28
+ recommendation: 'avoid',
29
+ };
30
+ }
31
+ const wins = trades.filter(t => t.win === 1);
32
+ const losses = trades.filter(t => t.win === 0);
33
+ const winRate = wins.length / trades.length;
34
+ const avgWin = wins.length > 0
35
+ ? wins.reduce((s, t) => s + t.profit_pct, 0) / wins.length
36
+ : 0;
37
+ const avgLoss = losses.length > 0
38
+ ? Math.abs(losses.reduce((s, t) => s + t.profit_pct, 0) / losses.length)
39
+ : 0;
40
+ // Kelly formula: K = W - (1-W)/R
41
+ // R = avgWin / avgLoss (win/loss ratio)
42
+ let kellyFraction = 0;
43
+ if (avgLoss > 0) {
44
+ const R = avgWin / avgLoss;
45
+ kellyFraction = winRate - (1 - winRate) / R;
46
+ }
47
+ else if (winRate > 0) {
48
+ // No losses recorded — Kelly would be 1, but cap it
49
+ kellyFraction = winRate;
50
+ }
51
+ const halfKelly = kellyFraction / 2;
52
+ // Brain-adjusted: use synapse confidence for the most common fingerprint
53
+ let brainConfidence = 0.5;
54
+ if (trades.length > 0) {
55
+ // Find the most frequent fingerprint in the filtered trades
56
+ const fpCounts = new Map();
57
+ for (const t of trades) {
58
+ fpCounts.set(t.fingerprint, (fpCounts.get(t.fingerprint) ?? 0) + 1);
59
+ }
60
+ let topFp = '';
61
+ let topCount = 0;
62
+ for (const [fp, count] of fpCounts) {
63
+ if (count > topCount) {
64
+ topFp = fp;
65
+ topCount = count;
66
+ }
67
+ }
68
+ if (topFp) {
69
+ const synapse = this.synapseManager.getByFingerprint(topFp);
70
+ if (synapse && synapse.activations >= 3) {
71
+ brainConfidence = synapse.weight;
72
+ }
73
+ }
74
+ }
75
+ const brainAdjusted = halfKelly * brainConfidence;
76
+ // Recommendation
77
+ let recommendation;
78
+ if (trades.length < 10 || kellyFraction <= 0) {
79
+ recommendation = 'avoid';
80
+ }
81
+ else if (kellyFraction > 0.25) {
82
+ recommendation = 'aggressive';
83
+ }
84
+ else if (kellyFraction > 0.1) {
85
+ recommendation = 'normal';
86
+ }
87
+ else {
88
+ recommendation = 'conservative';
89
+ }
90
+ this.logger.info(`Kelly: K=${kellyFraction.toFixed(3)} | half=${halfKelly.toFixed(3)} | ` +
91
+ `brainAdj=${brainAdjusted.toFixed(3)} | WR=${(winRate * 100).toFixed(1)}% | ` +
92
+ `n=${trades.length} → ${recommendation}`);
93
+ return {
94
+ kellyFraction,
95
+ halfKelly,
96
+ brainAdjusted,
97
+ sampleSize: trades.length,
98
+ winRate,
99
+ avgWin,
100
+ avgLoss,
101
+ recommendation,
102
+ };
103
+ }
104
+ /**
105
+ * Get a recommended position size based on Kelly Criterion and signal confidence.
106
+ * Caps at 25% of capital per position.
107
+ */
108
+ getPositionSize(capitalPct, signals, regime) {
109
+ const MAX_POSITION_PCT = 25;
110
+ const MIN_POSITION_PCT = 1;
111
+ // Get Kelly for the regime context
112
+ const kelly = this.getKellyFraction(undefined, regime);
113
+ // Signal confidence from synapse
114
+ let confidence = signals.confidence ?? 0.5;
115
+ const synapse = this.synapseManager.getByFingerprint(signals.fingerprint);
116
+ if (synapse && synapse.activations >= 3) {
117
+ confidence = synapse.weight;
118
+ }
119
+ let sizePct;
120
+ let reason;
121
+ if (kelly.recommendation === 'avoid') {
122
+ sizePct = MIN_POSITION_PCT;
123
+ reason = 'minimum size — Kelly suggests avoiding (insufficient data or negative edge)';
124
+ }
125
+ else {
126
+ // Base size from half-Kelly, scaled by confidence and capital percentage
127
+ sizePct = kelly.halfKelly * confidence * capitalPct * 100;
128
+ // Clamp to reasonable limits
129
+ sizePct = Math.max(MIN_POSITION_PCT, Math.min(MAX_POSITION_PCT, sizePct));
130
+ if (kelly.recommendation === 'conservative') {
131
+ sizePct = Math.min(sizePct, 5);
132
+ reason = `conservative — Kelly edge is thin (K=${kelly.kellyFraction.toFixed(3)})`;
133
+ }
134
+ else if (kelly.recommendation === 'aggressive') {
135
+ reason = `aggressive — strong edge detected (K=${kelly.kellyFraction.toFixed(3)}, conf=${confidence.toFixed(2)})`;
136
+ }
137
+ else {
138
+ reason = `normal — solid edge (K=${kelly.kellyFraction.toFixed(3)}, conf=${confidence.toFixed(2)})`;
139
+ }
140
+ }
141
+ this.logger.info(`Position size: ${sizePct.toFixed(1)}% | Kelly raw: ${kelly.kellyFraction.toFixed(3)} | ` +
142
+ `confidence: ${confidence.toFixed(2)} | ${reason}`);
143
+ return {
144
+ sizePct,
145
+ kellyRaw: kelly.kellyFraction,
146
+ confidence,
147
+ reason,
148
+ };
149
+ }
150
+ /**
151
+ * Get risk metrics for overall portfolio or a specific pair.
152
+ */
153
+ getRiskMetrics(pair) {
154
+ const trades = pair ? this.tradeRepo.getByPair(pair) : this.tradeRepo.getAll();
155
+ if (trades.length === 0) {
156
+ return {
157
+ maxDrawdownPct: 0,
158
+ currentDrawdownPct: 0,
159
+ consecutiveLosses: 0,
160
+ maxConsecutiveLosses: 0,
161
+ riskRewardRatio: 0,
162
+ expectancy: 0,
163
+ };
164
+ }
165
+ // Sort ascending by date for sequential analysis
166
+ const sorted = [...trades].sort((a, b) => a.created_at.localeCompare(b.created_at));
167
+ // Max drawdown (peak-to-trough on equity curve)
168
+ let cumulative = 0;
169
+ let peak = 0;
170
+ let maxDrawdown = 0;
171
+ for (const t of sorted) {
172
+ cumulative += t.profit_pct;
173
+ if (cumulative > peak)
174
+ peak = cumulative;
175
+ const drawdown = peak - cumulative;
176
+ if (drawdown > maxDrawdown)
177
+ maxDrawdown = drawdown;
178
+ }
179
+ // Current drawdown
180
+ const currentDrawdown = peak - cumulative;
181
+ // Consecutive losses (current streak + max ever)
182
+ let currentStreak = 0;
183
+ let maxStreak = 0;
184
+ let tempStreak = 0;
185
+ for (const t of sorted) {
186
+ if (t.win === 0) {
187
+ tempStreak++;
188
+ if (tempStreak > maxStreak)
189
+ maxStreak = tempStreak;
190
+ }
191
+ else {
192
+ tempStreak = 0;
193
+ }
194
+ }
195
+ // Current streak: count from the end
196
+ for (let i = sorted.length - 1; i >= 0; i--) {
197
+ if (sorted[i].win === 0) {
198
+ currentStreak++;
199
+ }
200
+ else {
201
+ break;
202
+ }
203
+ }
204
+ // Win/loss stats
205
+ const wins = sorted.filter(t => t.win === 1);
206
+ const losses = sorted.filter(t => t.win === 0);
207
+ const avgWin = wins.length > 0
208
+ ? wins.reduce((s, t) => s + t.profit_pct, 0) / wins.length
209
+ : 0;
210
+ const avgLoss = losses.length > 0
211
+ ? Math.abs(losses.reduce((s, t) => s + t.profit_pct, 0) / losses.length)
212
+ : 0;
213
+ const winRate = wins.length / sorted.length;
214
+ // Risk-reward ratio: avgWin / avgLoss
215
+ const riskRewardRatio = avgLoss > 0 ? avgWin / avgLoss : avgWin > 0 ? Infinity : 0;
216
+ // Expectancy: W * avgWin - (1-W) * avgLoss
217
+ const expectancy = winRate * avgWin - (1 - winRate) * avgLoss;
218
+ this.logger.info(`Risk metrics${pair ? ` (${pair})` : ''}: MaxDD=${maxDrawdown.toFixed(2)}% | ` +
219
+ `CurDD=${currentDrawdown.toFixed(2)}% | ConsLoss=${currentStreak}/${maxStreak} | ` +
220
+ `RR=${riskRewardRatio === Infinity ? '∞' : riskRewardRatio.toFixed(2)} | E=${expectancy.toFixed(3)}`);
221
+ return {
222
+ maxDrawdownPct: maxDrawdown,
223
+ currentDrawdownPct: currentDrawdown,
224
+ consecutiveLosses: currentStreak,
225
+ maxConsecutiveLosses: maxStreak,
226
+ riskRewardRatio,
227
+ expectancy,
228
+ };
229
+ }
230
+ getFilteredTrades(pair, regime) {
231
+ let trades;
232
+ if (pair) {
233
+ trades = this.tradeRepo.getByPair(pair);
234
+ }
235
+ else {
236
+ trades = this.tradeRepo.getAll();
237
+ }
238
+ if (regime) {
239
+ trades = trades.filter(t => t.regime === regime);
240
+ }
241
+ return trades;
242
+ }
243
+ }
244
+ //# sourceMappingURL=risk.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.service.js","sourceRoot":"","sources":["../../src/services/risk.service.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export declare class TradingCore {
8
8
  private crossBrain;
9
9
  private notifier;
10
10
  private subscriptionManager;
11
+ private correlator;
11
12
  private config;
12
13
  private configPath?;
13
14
  private restarting;
@@ -16,6 +16,7 @@ import { InsightRepository } from './db/repositories/insight.repository.js';
16
16
  import { CalibrationRepository } from './db/repositories/calibration.repository.js';
17
17
  import { MemoryRepository } from './db/repositories/memory.repository.js';
18
18
  import { SessionRepository } from './db/repositories/session.repository.js';
19
+ import { AlertRepository } from './db/repositories/alert.repository.js';
19
20
  // Graph
20
21
  import { WeightedGraph } from './graph/weighted-graph.js';
21
22
  // Synapses
@@ -28,6 +29,10 @@ import { SynapseService } from './services/synapse.service.js';
28
29
  import { AnalyticsService } from './services/analytics.service.js';
29
30
  import { InsightService } from './services/insight.service.js';
30
31
  import { MemoryService } from './services/memory.service.js';
32
+ import { BacktestService } from './services/backtest.service.js';
33
+ import { RiskService } from './services/risk.service.js';
34
+ import { AlertService } from './services/alert.service.js';
35
+ import { ImportService } from './services/import.service.js';
31
36
  // Engines
32
37
  import { LearningEngine } from './learning/learning-engine.js';
33
38
  import { ResearchEngine } from './research/research-engine.js';
@@ -38,7 +43,7 @@ import { IpcServer } from '@timmeck/brain-core';
38
43
  import { ApiServer } from './api/server.js';
39
44
  import { McpHttpServer } from './mcp/http-server.js';
40
45
  // Cross-Brain
41
- import { CrossBrainClient, CrossBrainNotifier, CrossBrainSubscriptionManager } from '@timmeck/brain-core';
46
+ import { CrossBrainClient, CrossBrainNotifier, CrossBrainSubscriptionManager, CrossBrainCorrelator } from '@timmeck/brain-core';
42
47
  export class TradingCore {
43
48
  db = null;
44
49
  ipcServer = null;
@@ -49,6 +54,7 @@ export class TradingCore {
49
54
  crossBrain = null;
50
55
  notifier = null;
51
56
  subscriptionManager = null;
57
+ correlator = null;
52
58
  config = null;
53
59
  configPath;
54
60
  restarting = false;
@@ -82,6 +88,7 @@ export class TradingCore {
82
88
  const calibrationRepo = new CalibrationRepository(this.db);
83
89
  const memoryRepo = new MemoryRepository(this.db);
84
90
  const sessionRepo = new SessionRepository(this.db);
91
+ const alertRepo = new AlertRepository(this.db);
85
92
  // 6. Synapse Manager
86
93
  const synapseManager = new SynapseManager(synapseRepo, config.calibration);
87
94
  // 7. Weighted Graph (load from DB)
@@ -100,14 +107,20 @@ export class TradingCore {
100
107
  const tradeCount = () => tradeRepo.count();
101
108
  // 9. Services
102
109
  const memoryService = new MemoryService(memoryRepo, sessionRepo);
110
+ const tradeService = new TradeService(tradeRepo, signalRepo, chainRepo, synapseManager, graph, cal, config.learning);
111
+ const signalService = new SignalService(synapseManager, graph, cal, tradeCount, ruleRepo, tradeRepo);
103
112
  const services = {
104
- trade: new TradeService(tradeRepo, signalRepo, chainRepo, synapseManager, graph, cal, config.learning),
105
- signal: new SignalService(synapseManager, graph, cal, tradeCount, ruleRepo, tradeRepo),
113
+ trade: tradeService,
114
+ signal: signalService,
106
115
  strategy: new StrategyService(synapseManager, graph, cal, tradeCount),
107
116
  synapse: new SynapseService(synapseManager, graph),
108
117
  analytics: new AnalyticsService(tradeRepo, ruleRepo, chainRepo, insightRepo, synapseManager, graph, memoryRepo, sessionRepo),
109
118
  insight: new InsightService(insightRepo),
110
119
  memory: memoryService,
120
+ backtest: new BacktestService(tradeRepo, signalService, synapseManager),
121
+ risk: new RiskService(tradeRepo, signalService, synapseManager),
122
+ alert: new AlertService(alertRepo, signalService),
123
+ import: new ImportService(tradeService),
111
124
  ruleRepo,
112
125
  chainRepo,
113
126
  calRepo: calibrationRepo,
@@ -127,7 +140,9 @@ export class TradingCore {
127
140
  // 12. Cross-Brain Client + Notifier
128
141
  this.crossBrain = new CrossBrainClient('trading-brain');
129
142
  this.notifier = new CrossBrainNotifier(this.crossBrain, 'trading-brain');
130
- // 12b. Cross-Brain Subscription Manager
143
+ // 12b. Cross-Brain Correlator
144
+ this.correlator = new CrossBrainCorrelator();
145
+ // 12c. Cross-Brain Subscription Manager
131
146
  this.subscriptionManager = new CrossBrainSubscriptionManager('trading-brain');
132
147
  // 13. IPC Server
133
148
  const router = new IpcRouter(services);
@@ -199,6 +214,7 @@ export class TradingCore {
199
214
  this.learningEngine = null;
200
215
  this.researchEngine = null;
201
216
  this.subscriptionManager = null;
217
+ this.correlator = null;
202
218
  }
203
219
  restart() {
204
220
  if (this.restarting)
@@ -229,22 +245,33 @@ export class TradingCore {
229
245
  process.exit(0);
230
246
  }
231
247
  setupCrossBrainSubscriptions() {
232
- if (!this.subscriptionManager)
248
+ if (!this.subscriptionManager || !this.correlator)
233
249
  return;
234
250
  const logger = getLogger();
235
- // Subscribe to brain: error:reported events for system problem awareness during trades
251
+ const correlator = this.correlator;
252
+ // Subscribe to brain: error:reported events — flag system instability for trading context
236
253
  this.subscriptionManager.subscribe('brain', ['error:reported'], (event, data) => {
237
- logger.info(`[cross-brain] Received ${event} from brain`, { data });
238
- // TODO: deeper integration — pause or flag trades when system errors spike
254
+ logger.warn(`[cross-brain] System error from brain — flagging active trades for review`, { data });
255
+ correlator.recordEvent('brain', event, data);
256
+ // Check health: if degraded, log warning for trade awareness
257
+ const health = correlator.getHealth();
258
+ if (health.status !== 'healthy') {
259
+ logger.warn(`[cross-brain] Ecosystem health ${health.status} (score: ${health.score}) — trade caution advised`);
260
+ }
261
+ });
262
+ // Subscribe to marketing-brain: post:published for ecosystem awareness
263
+ this.subscriptionManager.subscribe('marketing-brain', ['post:published'], (event, data) => {
264
+ correlator.recordEvent('marketing-brain', event, data);
239
265
  });
240
266
  }
241
267
  setupEventListeners(_synapseManager) {
242
268
  const bus = getEventBus();
243
269
  const notifier = this.notifier;
244
- // Trade recorded → log + notify brain (error correlation)
270
+ // Trade recorded → log + notify brain (error correlation) + feed correlator
245
271
  bus.on('trade:recorded', ({ tradeId, fingerprint, win }) => {
246
272
  getLogger().info(`Trade #${tradeId} recorded: ${fingerprint} (${win ? 'WIN' : 'LOSS'})`);
247
273
  notifier?.notifyPeer('brain', 'trade:outcome', { tradeId, fingerprint, win });
274
+ this.correlator?.recordEvent('trading-brain', 'trade:outcome', { tradeId, fingerprint, win });
248
275
  });
249
276
  // Synapse updated → log at debug level
250
277
  bus.on('synapse:updated', ({ synapseId }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"trading-core.js","sourceRoot":"","sources":["../src/trading-core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trading-core.js","sourceRoot":"","sources":["../src/trading-core.ts"],"names":[],"mappings":"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"}
@@ -52,6 +52,11 @@ export type TradingBrainEvents = {
52
52
  sessionId: number;
53
53
  summary: string;
54
54
  };
55
+ 'alert:triggered': {
56
+ alertId: number;
57
+ name: string;
58
+ conditionType: string;
59
+ };
55
60
  };
56
61
  export type TradingBrainEventName = keyof TradingBrainEvents;
57
62
  export declare class TypedEventBus extends GenericEventBus<TradingBrainEvents> {
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/utils/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAoBvE,MAAM,OAAO,aAAc,SAAQ,eAAmC;CAAG;AAEzE,IAAI,WAAW,GAAyB,IAAI,CAAC;AAE7C,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,IAAI,aAAa,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/utils/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAqBvE,MAAM,OAAO,aAAc,SAAQ,eAAmC;CAAG;AAEzE,IAAI,WAAW,GAAyB,IAAI,CAAC;AAE7C,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,IAAI,aAAa,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@timmeck/trading-brain",
3
- "version": "2.0.3",
3
+ "version": "2.2.0",
4
4
  "description": "Adaptive trading intelligence system with Hebbian synapses, spreading activation, Wilson Score confidence, and adaptive calibration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",