cc22174b78
- Implemented tests for fetching historical bars for AAPL with different timeframes (1D, 5Min, 1H). - Verified response structure and data integrity for each timeframe. - Ensured that the API returns valid data and appropriate status for the requests.
74 lines
2.2 KiB
TypeScript
74 lines
2.2 KiB
TypeScript
import Alpaca from "@alpacahq/alpaca-trade-api";
|
|
|
|
const alpaca = new Alpaca({
|
|
keyId: process.env.ALPACA_API_KEY!,
|
|
secretKey: process.env.ALPACA_SECRET_KEY!,
|
|
baseUrl: process.env.ALPACA_BASE_URL || "https://paper-api.alpaca.markets",
|
|
dataBaseUrl: process.env.ALPACA_DATA_URL || "https://data.alpaca.markets",
|
|
retryOnError: false,
|
|
});
|
|
|
|
export async function loader({ request }: { request: Request }) {
|
|
const url = new URL(request.url);
|
|
const ticker = url.searchParams.get("ticker")?.toUpperCase() || "AAPL";
|
|
|
|
try {
|
|
// Test different timeframes
|
|
const timeframes = ["1Day", "1Min", "5Min"];
|
|
const results: any = {};
|
|
|
|
for (const tf of timeframes) {
|
|
try {
|
|
console.log(`test-alpaca: testing ${ticker} with timeframe ${tf}`);
|
|
const bars = await alpaca.getBarsV2(ticker, {
|
|
timeframe: tf as any,
|
|
limit: 3,
|
|
});
|
|
|
|
const barsArray = [];
|
|
for await (const bar of bars) {
|
|
barsArray.push(bar);
|
|
}
|
|
results[tf] = { count: barsArray.length, sample: barsArray[0] };
|
|
console.log(`test-alpaca: ${tf} -> ${barsArray.length} bars`);
|
|
} catch (e) {
|
|
results[tf] = { error: e instanceof Error ? e.message : String(e) };
|
|
}
|
|
}
|
|
|
|
// Test popular stocks
|
|
const symbols = ["AAPL", "MSFT", "SPY", "QQQ"];
|
|
const symbolResults: any = {};
|
|
|
|
const startDate = new Date();
|
|
startDate.setDate(startDate.getDate() - 30);
|
|
const start = startDate.toISOString().split('T')[0];
|
|
|
|
for (const sym of symbols) {
|
|
try {
|
|
const bars = await alpaca.getBarsV2(sym, {
|
|
timeframe: "1D",
|
|
limit: 3,
|
|
start,
|
|
});
|
|
const barsArray = [];
|
|
for await (const bar of bars) barsArray.push(bar);
|
|
symbolResults[sym] = barsArray.length;
|
|
} catch (e) {
|
|
symbolResults[sym] = e instanceof Error ? e.message : String(e);
|
|
}
|
|
}
|
|
|
|
return Response.json({
|
|
ticker,
|
|
timeframeResults: results,
|
|
symbolResults,
|
|
});
|
|
} catch (error) {
|
|
console.error("test-alpaca error:", error);
|
|
return Response.json({
|
|
error: error instanceof Error ? error.message : String(error),
|
|
ticker
|
|
}, { status: 500 });
|
|
}
|
|
} |