investing 0.1.0 → 0.1.1

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 (180) hide show
  1. package/README.md +88 -60
  2. package/dist/algo-stategies/tv-scraper.d.ts +2 -0
  3. package/dist/algo-stategies/tv-scraper.d.ts.map +1 -0
  4. package/dist/alpaca/alpaca-mcp-client.d.ts +174 -0
  5. package/dist/alpaca/alpaca-mcp-client.d.ts.map +1 -0
  6. package/dist/alpaca/client.d.ts +21 -0
  7. package/dist/alpaca/client.d.ts.map +1 -0
  8. package/dist/archiver-web.es-BgXzilRH.cjs +1 -0
  9. package/dist/archiver-web.es-EPYdovFt.js +1 -0
  10. package/dist/correlate/metrics.d.ts +40 -0
  11. package/dist/correlate/metrics.d.ts.map +1 -0
  12. package/dist/correlate/model-persistence.d.ts +26 -0
  13. package/dist/correlate/model-persistence.d.ts.map +1 -0
  14. package/dist/correlate/predict-statistics.d.ts +14 -0
  15. package/dist/correlate/predict-statistics.d.ts.map +1 -0
  16. package/dist/correlate/rolling-stats.d.ts +27 -0
  17. package/dist/correlate/rolling-stats.d.ts.map +1 -0
  18. package/dist/correlate/types.d.ts +78 -0
  19. package/dist/correlate/types.d.ts.map +1 -0
  20. package/dist/correlate/xgboost-predictor.d.ts +19 -0
  21. package/dist/correlate/xgboost-predictor.d.ts.map +1 -0
  22. package/dist/correlate/xgboost-trainer.d.ts +112 -0
  23. package/dist/correlate/xgboost-trainer.d.ts.map +1 -0
  24. package/dist/db/client.d.ts +10 -0
  25. package/dist/db/client.d.ts.map +1 -0
  26. package/dist/db/d1-http.d.ts +38 -0
  27. package/dist/db/d1-http.d.ts.map +1 -0
  28. package/dist/db/index.d.ts +8870 -0
  29. package/dist/db/index.d.ts.map +1 -0
  30. package/dist/db/relations.d.ts +21 -0
  31. package/dist/db/relations.d.ts.map +1 -0
  32. package/dist/db/schema.d.ts +8845 -0
  33. package/dist/db/schema.d.ts.map +1 -0
  34. package/dist/debate-research/stock-agents-api.d.ts +129 -0
  35. package/dist/debate-research/stock-agents-api.d.ts.map +1 -0
  36. package/dist/index-C9OpAHBe.js +15 -0
  37. package/dist/index-CLlAnStL-B7EBGdAY.cjs +1 -0
  38. package/dist/index-CLlAnStL-C554ZmGF.js +1 -0
  39. package/dist/index-CcyBsxYm.cjs +13 -0
  40. package/dist/index.d.ts +26 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +1 -0
  43. package/dist/index.mjs +1 -0
  44. package/dist/leaders/nvsty-leaders.d.ts +63 -0
  45. package/dist/leaders/nvsty-leaders.d.ts.map +1 -0
  46. package/dist/leaders/zulu.d.ts +167 -0
  47. package/dist/leaders/zulu.d.ts.map +1 -0
  48. package/dist/live-data/dukascopy-client.d.ts +102 -0
  49. package/dist/live-data/dukascopy-client.d.ts.map +1 -0
  50. package/dist/llm/debate-generator.d.ts +32 -0
  51. package/dist/llm/debate-generator.d.ts.map +1 -0
  52. package/dist/prediction/analysis/categories.d.ts +37 -0
  53. package/dist/prediction/analysis/categories.d.ts.map +1 -0
  54. package/dist/prediction/analysis/detector.d.ts +15 -0
  55. package/dist/prediction/analysis/detector.d.ts.map +1 -0
  56. package/dist/prediction/analysis/greeks.d.ts +11 -0
  57. package/dist/prediction/analysis/greeks.d.ts.map +1 -0
  58. package/dist/prediction/analysis/price-changes.d.ts +12 -0
  59. package/dist/prediction/analysis/price-changes.d.ts.map +1 -0
  60. package/dist/prediction/api/analytics.d.ts +46 -0
  61. package/dist/prediction/api/analytics.d.ts.map +1 -0
  62. package/dist/prediction/api/gamma.d.ts +30 -0
  63. package/dist/prediction/api/gamma.d.ts.map +1 -0
  64. package/dist/prediction/api/leaderboard.d.ts +113 -0
  65. package/dist/prediction/api/leaderboard.d.ts.map +1 -0
  66. package/dist/prediction/api/markets.d.ts +62 -0
  67. package/dist/prediction/api/markets.d.ts.map +1 -0
  68. package/dist/prediction/api/prices.d.ts +32 -0
  69. package/dist/prediction/api/prices.d.ts.map +1 -0
  70. package/dist/prediction/constants.d.ts +7 -0
  71. package/dist/prediction/constants.d.ts.map +1 -0
  72. package/dist/prediction/db/debates.d.ts +41 -0
  73. package/dist/prediction/db/debates.d.ts.map +1 -0
  74. package/dist/prediction/db/leaderboard.d.ts +37 -0
  75. package/dist/prediction/db/leaderboard.d.ts.map +1 -0
  76. package/dist/prediction/db/markets.d.ts +91 -0
  77. package/dist/prediction/db/markets.d.ts.map +1 -0
  78. package/dist/prediction/db/positions.d.ts +73 -0
  79. package/dist/prediction/db/positions.d.ts.map +1 -0
  80. package/dist/prediction/db/prices.d.ts +37 -0
  81. package/dist/prediction/db/prices.d.ts.map +1 -0
  82. package/dist/prediction/db/trade-history.d.ts +108 -0
  83. package/dist/prediction/db/trade-history.d.ts.map +1 -0
  84. package/dist/prediction/index.d.ts +26 -0
  85. package/dist/prediction/index.d.ts.map +1 -0
  86. package/dist/prediction/sync/holders.d.ts +10 -0
  87. package/dist/prediction/sync/holders.d.ts.map +1 -0
  88. package/dist/prediction/sync/incremental-markets.d.ts +18 -0
  89. package/dist/prediction/sync/incremental-markets.d.ts.map +1 -0
  90. package/dist/prediction/sync/leaderboard.d.ts +25 -0
  91. package/dist/prediction/sync/leaderboard.d.ts.map +1 -0
  92. package/dist/prediction/sync/markets.d.ts +25 -0
  93. package/dist/prediction/sync/markets.d.ts.map +1 -0
  94. package/dist/prediction/sync/orchestration.d.ts +12 -0
  95. package/dist/prediction/sync/orchestration.d.ts.map +1 -0
  96. package/dist/prediction/sync/prices.d.ts +25 -0
  97. package/dist/prediction/sync/prices.d.ts.map +1 -0
  98. package/dist/prediction/sync/trade-history.d.ts +96 -0
  99. package/dist/prediction/sync/trade-history.d.ts.map +1 -0
  100. package/dist/prediction/sync.d.ts +4 -0
  101. package/dist/prediction/sync.d.ts.map +1 -0
  102. package/dist/prediction/types.d.ts +131 -0
  103. package/dist/prediction/types.d.ts.map +1 -0
  104. package/dist/prediction/utils/categorizer.d.ts +37 -0
  105. package/dist/prediction/utils/categorizer.d.ts.map +1 -0
  106. package/dist/predictos/index.d.ts +12 -0
  107. package/dist/predictos/index.d.ts.map +1 -0
  108. package/dist/stock-names-data/stock-names.json.d.ts +4 -0
  109. package/dist/stocks/find-wikipedia-urls.d.ts +6 -0
  110. package/dist/stocks/find-wikipedia-urls.d.ts.map +1 -0
  111. package/dist/stocks/finnhub-utils.d.ts +42 -0
  112. package/dist/stocks/finnhub-utils.d.ts.map +1 -0
  113. package/dist/stocks/finnhub-wrapper.d.ts +49 -0
  114. package/dist/stocks/finnhub-wrapper.d.ts.map +1 -0
  115. package/dist/stocks/import-stock-names.d.ts +2 -0
  116. package/dist/stocks/import-stock-names.d.ts.map +1 -0
  117. package/dist/stocks/index.d.ts +12 -0
  118. package/dist/stocks/index.d.ts.map +1 -0
  119. package/dist/stocks/quote-cache-service.d.ts +94 -0
  120. package/dist/stocks/quote-cache-service.d.ts.map +1 -0
  121. package/dist/stocks/sec-filing-api.d.ts +35 -0
  122. package/dist/stocks/sec-filing-api.d.ts.map +1 -0
  123. package/dist/stocks/stock-names-client.d.ts +10 -0
  124. package/dist/stocks/stock-names-client.d.ts.map +1 -0
  125. package/dist/stocks/stock-names.d.ts +26 -0
  126. package/dist/stocks/stock-names.d.ts.map +1 -0
  127. package/dist/stocks/types.d.ts +547 -0
  128. package/dist/stocks/types.d.ts.map +1 -0
  129. package/dist/stocks/unified-quote-example.d.ts +30 -0
  130. package/dist/stocks/unified-quote-example.d.ts.map +1 -0
  131. package/dist/stocks/unified-quote-service.d.ts +111 -0
  132. package/dist/stocks/unified-quote-service.d.ts.map +1 -0
  133. package/dist/stocks/yahoo-finance-wrapper.d.ts +344 -0
  134. package/dist/stocks/yahoo-finance-wrapper.d.ts.map +1 -0
  135. package/dist/stocks/yfinance-wrapper.d.ts +10 -0
  136. package/dist/stocks/yfinance-wrapper.d.ts.map +1 -0
  137. package/dist/trading-agents/agents/debate-facilitator.d.ts +26 -0
  138. package/dist/trading-agents/agents/debate-facilitator.d.ts.map +1 -0
  139. package/dist/trading-agents/agents/fund-manager.d.ts +11 -0
  140. package/dist/trading-agents/agents/fund-manager.d.ts.map +1 -0
  141. package/dist/trading-agents/agents/improved-researchers.d.ts +16 -0
  142. package/dist/trading-agents/agents/improved-researchers.d.ts.map +1 -0
  143. package/dist/trading-agents/agents/market-analyst.d.ts +8 -0
  144. package/dist/trading-agents/agents/market-analyst.d.ts.map +1 -0
  145. package/dist/trading-agents/agents/news-analyst.d.ts +8 -0
  146. package/dist/trading-agents/agents/news-analyst.d.ts.map +1 -0
  147. package/dist/trading-agents/agents/researchers.d.ts +22 -0
  148. package/dist/trading-agents/agents/researchers.d.ts.map +1 -0
  149. package/dist/trading-agents/agents/risk-team.d.ts +22 -0
  150. package/dist/trading-agents/agents/risk-team.d.ts.map +1 -0
  151. package/dist/trading-agents/agents/trader.d.ts +10 -0
  152. package/dist/trading-agents/agents/trader.d.ts.map +1 -0
  153. package/dist/trading-agents/example.d.ts +7 -0
  154. package/dist/trading-agents/example.d.ts.map +1 -0
  155. package/dist/trading-agents/graph/trading-graph.d.ts +59 -0
  156. package/dist/trading-agents/graph/trading-graph.d.ts.map +1 -0
  157. package/dist/trading-agents/index.d.ts +13 -0
  158. package/dist/trading-agents/index.d.ts.map +1 -0
  159. package/dist/trading-agents/tools/alpaca-mcp-tools.d.ts +46 -0
  160. package/dist/trading-agents/tools/alpaca-mcp-tools.d.ts.map +1 -0
  161. package/dist/trading-agents/tools/data-tools.d.ts +18 -0
  162. package/dist/trading-agents/tools/data-tools.d.ts.map +1 -0
  163. package/dist/trading-agents/tools/langchain-tools.d.ts +78 -0
  164. package/dist/trading-agents/tools/langchain-tools.d.ts.map +1 -0
  165. package/dist/trading-agents/types/index.d.ts +171 -0
  166. package/dist/trading-agents/types/index.d.ts.map +1 -0
  167. package/dist/trading-agents/utils/llm-client.d.ts +45 -0
  168. package/dist/trading-agents/utils/llm-client.d.ts.map +1 -0
  169. package/dist/trading-agents/utils/memory.d.ts +38 -0
  170. package/dist/trading-agents/utils/memory.d.ts.map +1 -0
  171. package/dist/trending-topics/wiki-page-views.d.ts +133 -0
  172. package/dist/trending-topics/wiki-page-views.d.ts.map +1 -0
  173. package/dist/utils/logger.d.ts +7 -0
  174. package/dist/utils/logger.d.ts.map +1 -0
  175. package/package.json +47 -17
  176. package/data/globe.json +0 -182
  177. package/data/sector-info.json +0 -1540
  178. package/data/sectors-industries.json +0 -327
  179. package/data/stock-indexes.json +0 -106
  180. package/data/stock-names.json +0 -1
package/README.md CHANGED
@@ -1,4 +1,36 @@
1
- # Investing
1
+ <p align="center">
2
+ <img width="400px" src="https://i.imgur.com/dE5Rfck.jpeg" />
3
+ </p>
4
+ <p align="center">
5
+ <a href="https://discord.gg/SJdBqBz3tV">
6
+ <img src="https://img.shields.io/discord/1110227955554209923.svg?label=Chat&logo=Discord&colorB=7289da&style=flat"
7
+ alt="Join Discord" />
8
+ </a>
9
+ <a href="https://github.com/vtempest/stock-prediction-agent/discussions">
10
+ <img alt="GitHub Stars" src="https://img.shields.io/github/stars/vtempest/stock-prediction-agent" /></a>
11
+ <a href="https://github.com/vtempest/stock-prediction-agent/discussions">
12
+ <img alt="GitHub Discussions"
13
+ src="https://img.shields.io/github/discussions/vtempest/stock-prediction-agent" />
14
+ </a>
15
+ <!-- <a href="https://npmjs.org/package/stock-prediction-agent"><img src="https://img.shields.io/npm/v/stock-prediction-agent"/></a> -->
16
+ <a href="https://github.com/vtempest/stock-prediction-agent/pulse" alt="Activity">
17
+ <img src="https://img.shields.io/github/commit-activity/m/vtempest/stock-prediction-agent" />
18
+ </a>
19
+ <img src="https://img.shields.io/github/last-commit/vtempest/stock-prediction-agent.svg" alt="GitHub last commit" />
20
+ <img src="https://img.shields.io/badge/Next.js-16.0-black" alt="Next.js" />
21
+
22
+ </p>
23
+ <p align="center">
24
+ <a href="https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request">
25
+ <img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg"
26
+ alt="PRs Welcome" />
27
+ </a>
28
+ <a href="https://codespaces.new/vtempest/stock-prediction-agent">
29
+ <img src="https://github.com/codespaces/badge.svg" width="150" height="20" />
30
+ </a>
31
+ </p>
32
+
33
+ # Investing Library
2
34
 
3
35
  A comprehensive TypeScript/JavaScript library for investment analysis, trading automation, and financial data processing. This package provides reusable utilities for building investment applications, trading bots, and financial analysis tools.
4
36
 
@@ -16,9 +48,9 @@ A comprehensive TypeScript/JavaScript library for investment analysis, trading a
16
48
  ## Installation
17
49
 
18
50
  ```bash
19
- npm install investing
51
+ npm i investing
20
52
  # or
21
- yarn add investing
53
+ bun i investing
22
54
  # or
23
55
  pnpm add investing
24
56
  ```
@@ -28,7 +60,7 @@ pnpm add investing
28
60
  ### Alpaca Trading Client
29
61
 
30
62
  ```typescript
31
- import { createAlpacaClient } from 'investing';
63
+ import { createAlpacaClient } from "investing";
32
64
 
33
65
  // Create client with environment variables
34
66
  const alpaca = createAlpacaClient({
@@ -43,44 +75,44 @@ console.log(`Portfolio value: $${account.portfolio_value}`);
43
75
 
44
76
  // Place an order
45
77
  const order = await alpaca.createOrder({
46
- symbol: 'AAPL',
78
+ symbol: "AAPL",
47
79
  qty: 10,
48
- side: 'buy',
49
- type: 'market',
50
- time_in_force: 'day',
80
+ side: "buy",
81
+ type: "market",
82
+ time_in_force: "day",
51
83
  });
52
84
  ```
53
85
 
54
86
  ### Fetch Stock Data
55
87
 
56
88
  ```typescript
57
- import { getStockQuote, getHistoricalData } from 'investing';
89
+ import { getStockQuote, getHistoricalData } from "investing";
58
90
 
59
91
  // Get real-time quote
60
- const quote = await getStockQuote('AAPL');
92
+ const quote = await getStockQuote("AAPL");
61
93
  console.log(`AAPL: $${quote.regularMarketPrice}`);
62
94
 
63
95
  // Get historical data
64
- const history = await getHistoricalData('AAPL', {
65
- period1: '2024-01-01',
66
- period2: '2024-12-31',
67
- interval: '1d',
96
+ const history = await getHistoricalData("AAPL", {
97
+ period1: "2024-01-01",
98
+ period2: "2024-12-31",
99
+ interval: "1d",
68
100
  });
69
101
  ```
70
102
 
71
103
  ### Polymarket Prediction Markets
72
104
 
73
105
  ```typescript
74
- import { fetchMarkets, fetchLeaderboard } from 'investing';
106
+ import { fetchMarkets, fetchLeaderboard } from "investing";
75
107
 
76
108
  // Get active prediction markets
77
- const markets = await fetchMarkets(50, 'volume24hr');
109
+ const markets = await fetchMarkets(50, "volume24hr");
78
110
  console.log(`Top market: ${markets[0].question}`);
79
111
 
80
112
  // Get top traders
81
113
  const leaders = await fetchLeaderboard({
82
- timePeriod: '7d',
83
- orderBy: 'PNL',
114
+ timePeriod: "7d",
115
+ orderBy: "PNL",
84
116
  limit: 10,
85
117
  });
86
118
  ```
@@ -88,7 +120,7 @@ const leaders = await fetchLeaderboard({
88
120
  ### Trading Agents Framework
89
121
 
90
122
  ```typescript
91
- import { createTradingGraph, MarketAnalyst } from 'investing';
123
+ import { createTradingGraph, MarketAnalyst } from "investing";
92
124
 
93
125
  // Create a trading agent system
94
126
  const tradingSystem = createTradingGraph({
@@ -99,15 +131,15 @@ const tradingSystem = createTradingGraph({
99
131
  new Trader(),
100
132
  ],
101
133
  config: {
102
- ticker: 'AAPL',
134
+ ticker: "AAPL",
103
135
  budget: 10000,
104
136
  },
105
137
  });
106
138
 
107
139
  // Run analysis
108
140
  const result = await tradingSystem.invoke({
109
- ticker: 'AAPL',
110
- question: 'Should I buy AAPL stock?',
141
+ ticker: "AAPL",
142
+ question: "Should I buy AAPL stock?",
111
143
  });
112
144
  ```
113
145
 
@@ -116,7 +148,7 @@ const result = await tradingSystem.invoke({
116
148
  ### Alpaca Trading
117
149
 
118
150
  ```typescript
119
- import { createAlpacaClient, AlpacaConfig } from 'investing/alpaca';
151
+ import { createAlpacaClient, AlpacaConfig } from "investing/alpaca";
120
152
  ```
121
153
 
122
154
  #### `createAlpacaClient(config?: AlpacaConfig)`
@@ -124,12 +156,14 @@ import { createAlpacaClient, AlpacaConfig } from 'investing/alpaca';
124
156
  Creates an Alpaca API client for trading operations.
125
157
 
126
158
  **Parameters:**
159
+
127
160
  - `config.paper` - Use paper trading (default: true)
128
161
  - `config.keyId` - Alpaca API key ID
129
162
  - `config.secretKey` - Alpaca secret key
130
163
  - `config.baseUrl` - Custom base URL (optional)
131
164
 
132
165
  **Environment Variables:**
166
+
133
167
  - `ALPACA_API_KEY` or `APCA_API_KEY_ID`
134
168
  - `ALPACA_SECRET` or `APCA_API_SECRET_KEY`
135
169
  - `ALPACA_BASE_URL` (optional)
@@ -142,7 +176,7 @@ import {
142
176
  getHistoricalData,
143
177
  getSECFilings,
144
178
  StockQuote,
145
- } from 'investing/stocks';
179
+ } from "investing/stocks";
146
180
  ```
147
181
 
148
182
  #### `getStockQuote(symbol: string): Promise<StockQuote>`
@@ -164,7 +198,7 @@ import {
164
198
  fetchMarkets,
165
199
  fetchLeaderboard,
166
200
  PolymarketMarket,
167
- } from 'investing/prediction';
201
+ } from "investing/prediction";
168
202
  ```
169
203
 
170
204
  #### `fetchMarkets(limit?: number, sortBy?: string)`
@@ -172,6 +206,7 @@ import {
172
206
  Fetch active prediction markets from Polymarket.
173
207
 
174
208
  **Parameters:**
209
+
175
210
  - `limit` - Number of markets to fetch (default: 50)
176
211
  - `sortBy` - Sort field: 'volume24hr', 'liquidity', etc.
177
212
 
@@ -180,6 +215,7 @@ Fetch active prediction markets from Polymarket.
180
215
  Get Polymarket leaderboard of top traders.
181
216
 
182
217
  **Options:**
218
+
183
219
  - `timePeriod` - '1d' | '7d' | '30d' | 'all'
184
220
  - `orderBy` - 'VOL' | 'PNL'
185
221
  - `limit` - Number of results (default: 20)
@@ -194,7 +230,7 @@ import {
194
230
  BullResearcher,
195
231
  BearResearcher,
196
232
  Trader,
197
- } from 'investing/trading-agents';
233
+ } from "investing/trading-agents";
198
234
  ```
199
235
 
200
236
  #### `createTradingGraph(config)`
@@ -202,6 +238,7 @@ import {
202
238
  Creates a multi-agent trading system using LangGraph.
203
239
 
204
240
  **Agents:**
241
+
205
242
  - `MarketAnalyst` - Analyzes market conditions and trends
206
243
  - `BullResearcher` - Researches bullish arguments
207
244
  - `BearResearcher` - Researches bearish arguments
@@ -210,10 +247,11 @@ Creates a multi-agent trading system using LangGraph.
210
247
  ### Constants & Data
211
248
 
212
249
  ```typescript
213
- import { STOCK_INDEXES, SECTORS, CATEGORIES } from 'investing/constants';
250
+ import { STOCK_INDEXES, SECTORS, CATEGORIES } from "investing/constants";
214
251
  ```
215
252
 
216
253
  Pre-loaded data files available:
254
+
217
255
  - `data/stock-indexes.json` - Major stock indexes (S&P 500, NASDAQ, etc.)
218
256
  - `data/sectors-industries.json` - Industry classifications
219
257
  - `data/sector-info.json` - Sector descriptions and metrics
@@ -223,7 +261,7 @@ Pre-loaded data files available:
223
261
  ### Utilities
224
262
 
225
263
  ```typescript
226
- import { cn, setStateInURL } from 'investing/utils';
264
+ import { cn, setStateInURL } from "investing/utils";
227
265
  ```
228
266
 
229
267
  #### `cn(...inputs: ClassValue[])`
@@ -239,12 +277,12 @@ Sync application state to URL parameters for shareable links.
239
277
  Access pre-packaged data files:
240
278
 
241
279
  ```typescript
242
- import stockIndexes from 'investing/data/stock-indexes.json';
243
- import sectors from 'investing/data/sectors-industries.json';
244
- import stockNames from 'investing/data/stock-names.json';
280
+ import stockIndexes from "investing/data/stock-indexes.json";
281
+ import sectors from "investing/data/sectors-industries.json";
282
+ import stockNames from "investing/data/stock-names.json";
245
283
 
246
284
  console.log(`Total stocks: ${stockNames.length}`);
247
- console.log(`S&P 500 stocks: ${stockIndexes['S&P 500'].length}`);
285
+ console.log(`S&P 500 stocks: ${stockIndexes["S&P 500"].length}`);
248
286
  ```
249
287
 
250
288
  ## Environment Variables
@@ -278,7 +316,7 @@ import type {
278
316
  StockQuote,
279
317
  PolymarketMarket,
280
318
  TradingAgent,
281
- } from 'investing';
319
+ } from "investing";
282
320
  ```
283
321
 
284
322
  ## Advanced Usage
@@ -286,10 +324,10 @@ import type {
286
324
  ### Custom Trading Strategy
287
325
 
288
326
  ```typescript
289
- import { createTradingGraph, BaseTradingAgent } from 'investing';
327
+ import { createTradingGraph, BaseTradingAgent } from "investing";
290
328
 
291
329
  class MomentumTrader extends BaseTradingAgent {
292
- name = 'momentum-trader';
330
+ name = "momentum-trader";
293
331
 
294
332
  async analyze(state: TradingState) {
295
333
  // Implement your strategy
@@ -297,24 +335,24 @@ class MomentumTrader extends BaseTradingAgent {
297
335
  const momentum = this.calculateMomentum(data);
298
336
 
299
337
  return {
300
- signal: momentum > 0.5 ? 'buy' : 'sell',
338
+ signal: momentum > 0.5 ? "buy" : "sell",
301
339
  confidence: Math.abs(momentum),
302
340
  };
303
341
  }
304
342
  }
305
343
 
306
344
  const strategy = new MomentumTrader();
307
- const result = await strategy.analyze({ ticker: 'TSLA' });
345
+ const result = await strategy.analyze({ ticker: "TSLA" });
308
346
  ```
309
347
 
310
348
  ### Multi-Agent Debate System
311
349
 
312
350
  ```typescript
313
- import { createDebateSystem } from 'investing';
351
+ import { createDebateSystem } from "investing";
314
352
 
315
353
  const debate = await createDebateSystem({
316
- ticker: 'NVDA',
317
- agents: ['bull_researcher', 'bear_researcher', 'neutral_analyst'],
354
+ ticker: "NVDA",
355
+ agents: ["bull_researcher", "bear_researcher", "neutral_analyst"],
318
356
  rounds: 3,
319
357
  });
320
358
 
@@ -326,9 +364,9 @@ console.log(decision.reasoning);
326
364
  ### Batch Stock Analysis
327
365
 
328
366
  ```typescript
329
- import { getStockQuote } from 'investing';
367
+ import { getStockQuote } from "investing";
330
368
 
331
- const tickers = ['AAPL', 'GOOGL', 'MSFT', 'AMZN'];
369
+ const tickers = ["AAPL", "GOOGL", "MSFT", "AMZN"];
332
370
  const quotes = await Promise.all(tickers.map(getStockQuote));
333
371
 
334
372
  const summary = quotes.map((q, i) => ({
@@ -340,16 +378,21 @@ const summary = quotes.map((q, i) => ({
340
378
 
341
379
  ## Database Integration (Optional)
342
380
 
343
- If using the database features, install the peer dependency:
381
+ Database features target **Cloudflare D1 only**. Install the peer dependency:
344
382
 
345
383
  ```bash
346
- npm install drizzle-orm @libsql/client
384
+ npm install drizzle-orm
347
385
  ```
348
386
 
387
+ On Cloudflare Workers the connection uses the `DB` binding. Outside Workers
388
+ (scripts, CI) it reaches the same D1 database over Cloudflare's REST API, which
389
+ needs `CLOUDFLARE_ACCOUNT_ID`, `CLOUDFLARE_D1_TOKEN`, and optionally
390
+ `CLOUDFLARE_DATABASE_ID`.
391
+
349
392
  Then import database schemas:
350
393
 
351
394
  ```typescript
352
- import { db, stocksTable, positionsTable } from 'investing/db';
395
+ import { db, stocksTable, positionsTable } from "investing/db";
353
396
 
354
397
  // Query your database
355
398
  const stocks = await db.select().from(stocksTable).limit(10);
@@ -365,26 +408,11 @@ See the `/examples` directory for complete working examples:
365
408
  - `examples/trading-bot.ts` - Automated trading bot
366
409
  - `examples/multi-agent-research.ts` - AI research agents
367
410
 
368
- ## Contributing
369
-
370
- Contributions are welcome! Please read the contributing guidelines before submitting PRs.
371
-
372
- ## License
373
-
374
- rights.institute/prosper
375
-
376
411
  ## Links
377
412
 
378
413
  - [GitHub Repository](https://github.com/vtempest/ai-broker-investment-agent)
379
414
  - [Documentation](https://invest.vtempest.com/docs)
380
415
  - [Examples](./examples)
381
416
 
382
- ## Support
383
-
384
- For issues and questions:
385
417
  - [GitHub Issues](https://github.com/vtempest/ai-broker-investment-agent/issues)
386
418
  - [Documentation](https://invest.vtempest.com/docs)
387
-
388
- ---
389
-
390
- Built with ❤️ for the investment and trading community.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tv-scraper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tv-scraper.d.ts","sourceRoot":"","sources":["../../src/algo-stategies/tv-scraper.ts"],"names":[],"mappings":""}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Alpaca MCP Client
3
+ * Client for interacting with Alpaca Model Context Protocol server
4
+ * Provides trading, market data, and strategy tools
5
+ */
6
+ export interface TradingStrategy {
7
+ id?: string;
8
+ name: string;
9
+ description: string;
10
+ rules: StrategyRule[];
11
+ riskManagement: RiskManagement;
12
+ symbols: string[];
13
+ active: boolean;
14
+ createdAt?: string;
15
+ updatedAt?: string;
16
+ }
17
+ export interface StrategyRule {
18
+ id: string;
19
+ type: 'entry' | 'exit' | 'position_sizing';
20
+ condition: RuleCondition;
21
+ action: RuleAction;
22
+ }
23
+ export interface RuleCondition {
24
+ indicator: string;
25
+ operator: 'greater_than' | 'less_than' | 'crosses_above' | 'crosses_below' | 'equals';
26
+ value: number | string;
27
+ timeframe?: string;
28
+ }
29
+ export interface RuleAction {
30
+ type: 'buy' | 'sell' | 'close' | 'hold';
31
+ quantity?: number;
32
+ orderType: 'market' | 'limit' | 'stop' | 'stop_limit';
33
+ limitPrice?: number;
34
+ stopPrice?: number;
35
+ }
36
+ export interface RiskManagement {
37
+ maxPositionSize: number;
38
+ stopLoss: number;
39
+ takeProfit: number;
40
+ maxDailyLoss: number;
41
+ trailingStop?: number;
42
+ }
43
+ export interface ChatMessage {
44
+ role: 'user' | 'assistant' | 'system';
45
+ content: string;
46
+ timestamp: Date;
47
+ suggestions?: string[];
48
+ }
49
+ export interface MCPToolCall {
50
+ tool: string;
51
+ arguments: Record<string, any>;
52
+ }
53
+ export interface MCPToolResponse {
54
+ success: boolean;
55
+ data?: any;
56
+ error?: string;
57
+ isText?: boolean;
58
+ }
59
+ /**
60
+ * Alpaca MCP Client Class
61
+ */
62
+ export declare class AlpacaMCPClient {
63
+ private baseURL;
64
+ private apiKey?;
65
+ private apiSecret?;
66
+ constructor(config?: {
67
+ baseURL?: string;
68
+ apiKey?: string;
69
+ apiSecret?: string;
70
+ });
71
+ private callTool;
72
+ getAccount(): Promise<unknown>;
73
+ getPositions(): Promise<unknown>;
74
+ getPosition(symbol: string): Promise<unknown>;
75
+ getPortfolioHistory(params?: {
76
+ period?: string;
77
+ timeframe?: string;
78
+ start?: string;
79
+ end?: string;
80
+ }): Promise<unknown>;
81
+ placeOrder(params: {
82
+ symbol: string;
83
+ qty?: number;
84
+ notional?: number;
85
+ side: 'buy' | 'sell';
86
+ type: 'market' | 'limit' | 'stop' | 'stop_limit' | 'trailing_stop';
87
+ time_in_force?: 'day' | 'gtc' | 'ioc' | 'fok';
88
+ limit_price?: number;
89
+ stop_price?: number;
90
+ trail_percent?: number;
91
+ }): Promise<unknown>;
92
+ getOrders(params?: {
93
+ status?: 'open' | 'closed' | 'all';
94
+ limit?: number;
95
+ symbols?: string;
96
+ }): Promise<unknown>;
97
+ getOrder(orderId: string): Promise<unknown>;
98
+ cancelOrder(orderId: string): Promise<unknown>;
99
+ closePosition(symbol: string, qty?: number): Promise<unknown>;
100
+ closeAllPositions(): Promise<unknown>;
101
+ getQuote(symbol: string): Promise<unknown>;
102
+ getBars(params: {
103
+ symbol: string;
104
+ timeframe: string;
105
+ start?: string;
106
+ end?: string;
107
+ limit?: number;
108
+ }): Promise<unknown>;
109
+ getLatestBar(symbol: string): Promise<unknown>;
110
+ getSnapshot(symbol: string): Promise<unknown>;
111
+ searchAssets(params?: {
112
+ status?: 'active' | 'inactive';
113
+ asset_class?: 'us_equity' | 'crypto';
114
+ }): Promise<unknown>;
115
+ getOptionChain(params: {
116
+ underlying_symbol: string;
117
+ expiration_date?: string;
118
+ expiration_date_gte?: string;
119
+ expiration_date_lte?: string;
120
+ type?: 'call' | 'put';
121
+ strike_price_gte?: number;
122
+ strike_price_lte?: number;
123
+ }): Promise<unknown>;
124
+ placeOptionOrder(params: {
125
+ symbol: string;
126
+ side: 'buy' | 'sell';
127
+ qty: number;
128
+ type?: 'market' | 'limit';
129
+ limit_price?: number;
130
+ time_in_force?: 'day' | 'gtc';
131
+ }): Promise<unknown>;
132
+ getCryptoBars(params: {
133
+ symbol: string;
134
+ timeframe: string;
135
+ start?: string;
136
+ end?: string;
137
+ limit?: number;
138
+ }): Promise<unknown>;
139
+ getCryptoQuote(symbol: string): Promise<unknown>;
140
+ placeCryptoOrder(params: {
141
+ symbol: string;
142
+ qty?: number;
143
+ notional?: number;
144
+ side: 'buy' | 'sell';
145
+ type?: 'market' | 'limit';
146
+ limit_price?: number;
147
+ time_in_force?: 'day' | 'gtc' | 'ioc';
148
+ }): Promise<unknown>;
149
+ getWatchlists(): Promise<unknown>;
150
+ createWatchlist(name: string, symbols: string[]): Promise<unknown>;
151
+ addToWatchlist(watchlistId: string, symbol: string): Promise<unknown>;
152
+ deleteWatchlist(watchlistId: string): Promise<unknown>;
153
+ getMarketCalendar(params?: {
154
+ start?: string;
155
+ end?: string;
156
+ }): Promise<unknown>;
157
+ getCorporateActions(params: {
158
+ symbol: string;
159
+ types?: string;
160
+ start?: string;
161
+ end?: string;
162
+ }): Promise<unknown>;
163
+ chatWithAI(messages: ChatMessage[]): Promise<ChatMessage>;
164
+ generateStrategyFromDescription(description: string): Promise<TradingStrategy>;
165
+ }
166
+ export declare function getAlpacaMCPClient(): AlpacaMCPClient;
167
+ export declare const alpacaMCPClient: {
168
+ readonly instance: AlpacaMCPClient;
169
+ };
170
+ export declare function getAccount(): Promise<unknown>;
171
+ export declare function placeOrder(params: Parameters<AlpacaMCPClient['placeOrder']>[0]): Promise<unknown>;
172
+ export declare function getQuote(symbol: string): Promise<unknown>;
173
+ export declare function chatWithAI(messages: ChatMessage[]): Promise<ChatMessage>;
174
+ //# sourceMappingURL=alpaca-mcp-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alpaca-mcp-client.d.ts","sourceRoot":"","sources":["../../src/alpaca/alpaca-mcp-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { default as Alpaca } from '@alpacahq/alpaca-trade-api';
2
+ export interface AlpacaConfig {
3
+ paper?: boolean;
4
+ keyId?: string;
5
+ secretKey?: string;
6
+ baseUrl?: string;
7
+ }
8
+ /**
9
+ * Creates an Alpaca API client with the provided configuration
10
+ * Supports both Trading API and Broker API
11
+ * @param config - Configuration options for the Alpaca client
12
+ * @returns Alpaca client instance
13
+ */
14
+ export declare function createAlpacaClient(config?: Partial<AlpacaConfig>): Alpaca;
15
+ /**
16
+ * Creates an Alpaca Broker API client for creating and managing user accounts
17
+ * @param config - Broker API configuration
18
+ * @returns Alpaca Broker client instance
19
+ */
20
+ export declare function createAlpacaBrokerClient(config?: Partial<AlpacaConfig>): Alpaca;
21
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/alpaca/client.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,4BAA4B,CAAA;AAE/C,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,UAqChE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,UAetE"}