From 71a01fb5577ae8326072020a8de49361f16bd3de Mon Sep 17 00:00:00 2001 From: TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> Date: Thu, 2 Apr 2026 10:08:32 +0900 Subject: 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 --- shared/src/shared/alpaca.py | 15 ++++++++++----- shared/tests/test_alpaca.py | 2 ++ 2 files changed, 12 insertions(+), 5 deletions(-) (limited to 'shared') 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() -- cgit v1.2.3