diff options
| author | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2026-04-02 10:08:32 +0900 |
|---|---|---|
| committer | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2026-04-02 10:08:32 +0900 |
| commit | 71a01fb5577ae8326072020a8de49361f16bd3de (patch) | |
| tree | 7515f1e5d67d308cefbaa0d9ee8a13984f20b73f /shared | |
| parent | 6f162e4696e8e90fcbd6ca84d0ad7f0d187dfb01 (diff) | |
refactor: migrate to US stocks with Alpaca API
- Replace Binance/ccxt with Alpaca REST client (paper + live)
- Add MOC (Market on Close) strategy for overnight gap trading
- Wire sentiment into strategy engine main loop
- Add EMA + bullish candle entry filters to Asian RSI
- Remove crypto-specific exchange factory
- Update config: Alpaca keys replace Binance keys
- 399 tests passing, lint clean
Diffstat (limited to 'shared')
| -rw-r--r-- | shared/src/shared/alpaca.py | 15 | ||||
| -rw-r--r-- | shared/tests/test_alpaca.py | 2 |
2 files changed, 12 insertions, 5 deletions
diff --git a/shared/src/shared/alpaca.py b/shared/src/shared/alpaca.py index 3dd752b..7821592 100644 --- a/shared/src/shared/alpaca.py +++ b/shared/src/shared/alpaca.py @@ -1,6 +1,6 @@ """Alpaca Markets API client for US stock trading.""" + import logging -from datetime import datetime, timezone from decimal import Decimal from typing import Any @@ -107,7 +107,8 @@ class AlpacaClient: async def get_orders(self, status: str = "open", limit: int = 50) -> list: return await self._request( - "GET", f"{self._base_url}/v2/orders", + "GET", + f"{self._base_url}/v2/orders", params={"status": status, "limit": limit}, ) @@ -155,19 +156,23 @@ class AlpacaClient: params["end"] = end data = await self._request( - "GET", f"{self._data_url}/v2/stocks/{symbol}/bars", params=params, + "GET", + f"{self._data_url}/v2/stocks/{symbol}/bars", + params=params, ) return data.get("bars", []) async def get_latest_quote(self, symbol: str) -> dict: data = await self._request( - "GET", f"{self._data_url}/v2/stocks/{symbol}/quotes/latest", + "GET", + f"{self._data_url}/v2/stocks/{symbol}/quotes/latest", ) return data.get("quote", {}) async def get_snapshot(self, symbol: str) -> dict: return await self._request( - "GET", f"{self._data_url}/v2/stocks/{symbol}/snapshot", + "GET", + f"{self._data_url}/v2/stocks/{symbol}/snapshot", ) # --- Market Status --- diff --git a/shared/tests/test_alpaca.py b/shared/tests/test_alpaca.py index 7c8eab1..080b7c4 100644 --- a/shared/tests/test_alpaca.py +++ b/shared/tests/test_alpaca.py @@ -1,4 +1,5 @@ """Tests for Alpaca API client.""" + import pytest from unittest.mock import AsyncMock, MagicMock from shared.alpaca import AlpacaClient @@ -40,6 +41,7 @@ async def test_get_buying_power(client): result = await client.get_buying_power() from decimal import Decimal + assert result == Decimal("10000.00") await client.close() |
