1/**
2 * CoinBot: BTC Quant Strategy Cards
3 * 백테스트를 통과한 전략만 카드가 됩니다.
4 */
5class StrategyCard extends AlphaEngine {
6 readonly grade: Grade // bronze → diamond
7 readonly tier: UniversalTierV6
8 readonly rules: Indicator[]
10 static async discover(pool: CardPool) {
11 const raw = await backtest(pool, { window: '2y' })
12 return raw.filter(c => c.calmar > 0 && c.pnl > 0)
13 }
15 buildDeck(cards: StrategyCard[]): Deck {
16 // 성향이 다른 카드를 섞어 약점을 덮는다
17 return new Deck(cards.slice(0, 3))
18 }
20 async goLive(deck: Deck) {
21 const floor = new LiveFloor(deck)
22 floor.on('signal', s => this.evaluate(s))
23 return floor.start() // 실제 돈은 들어가지 않는다
24 }
26 forecast(models = ['timesfm','kronos','gunsnow']) {
27 return ensemble(models).predict({ horizon: 7 })
28 }
30 register(season: Season): HallOfFameEntry {
31 if (this.score < season.cutoff) return null
32 return season.enshrine(this) // 명예의 전당
33 }
34}
36const card = await StrategyCard.discover(operationalPool)
37console.log(card.name, card.grade, card.sharpe)
38/**
39 * CoinBot: BTC Quant Strategy Cards
40 * 백테스트를 통과한 전략만 카드가 됩니다.
41 */
42class StrategyCard extends AlphaEngine {
43 readonly grade: Grade // bronze → diamond
44 readonly tier: UniversalTierV6
45 readonly rules: Indicator[]
47 static async discover(pool: CardPool) {
48 const raw = await backtest(pool, { window: '2y' })
49 return raw.filter(c => c.calmar > 0 && c.pnl > 0)
50 }
52 buildDeck(cards: StrategyCard[]): Deck {
53 // 성향이 다른 카드를 섞어 약점을 덮는다
54 return new Deck(cards.slice(0, 3))
55 }
57 async goLive(deck: Deck) {
58 const floor = new LiveFloor(deck)
59 floor.on('signal', s => this.evaluate(s))
60 return floor.start() // 실제 돈은 들어가지 않는다
61 }
63 forecast(models = ['timesfm','kronos','gunsnow']) {
64 return ensemble(models).predict({ horizon: 7 })
65 }
67 register(season: Season): HallOfFameEntry {
68 if (this.score < season.cutoff) return null
69 return season.enshrine(this) // 명예의 전당
70 }
71}
73const card = await StrategyCard.discover(operationalPool)
74console.log(card.name, card.grade, card.sharpe)
75/**
76 * CoinBot: BTC Quant Strategy Cards
77 * 백테스트를 통과한 전략만 카드가 됩니다.
78 */
79class StrategyCard extends AlphaEngine {
80 readonly grade: Grade // bronze → diamond
81 readonly tier: UniversalTierV6
82 readonly rules: Indicator[]
84 static async discover(pool: CardPool) {
85 const raw = await backtest(pool, { window: '2y' })
86 return raw.filter(c => c.calmar > 0 && c.pnl > 0)
87 }
89 buildDeck(cards: StrategyCard[]): Deck {
90 // 성향이 다른 카드를 섞어 약점을 덮는다
91 return new Deck(cards.slice(0, 3))
92 }
94 async goLive(deck: Deck) {
95 const floor = new LiveFloor(deck)
96 floor.on('signal', s => this.evaluate(s))
97 return floor.start() // 실제 돈은 들어가지 않는다
98 }
100 forecast(models = ['timesfm','kronos','gunsnow']) {
101 return ensemble(models).predict({ horizon: 7 })
102 }
104 register(season: Season): HallOfFameEntry {
105 if (this.score < season.cutoff) return null
106 return season.enshrine(this) // 명예의 전당
107 }
108}
110const card = await StrategyCard.discover(operationalPool)
111console.log(card.name, card.grade, card.sharpe)