summaryrefslogtreecommitdiff
path: root/shared
diff options
context:
space:
mode:
authorTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-02 10:08:32 +0900
committerTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-02 10:08:32 +0900
commit71a01fb5577ae8326072020a8de49361f16bd3de (patch)
tree7515f1e5d67d308cefbaa0d9ee8a13984f20b73f /shared
parent6f162e4696e8e90fcbd6ca84d0ad7f0d187dfb01 (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.py15
-rw-r--r--shared/tests/test_alpaca.py2
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()