summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-02 10:26:52 +0900
committerTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-02 10:26:52 +0900
commit53cadcf7e34f05f77082e84f0696b56bcbcbae36 (patch)
treee02650e10c4d5727bc1e32e27788c17327fa46f7 /cli
parentf5521da2876a2c19afc24f370b3258f2be95f81a (diff)
refactor: remove all crypto/Binance code, update to US stock symbols
Diffstat (limited to 'cli')
-rw-r--r--cli/src/trading_cli/commands/backtest.py4
-rw-r--r--cli/src/trading_cli/commands/data.py59
-rw-r--r--cli/src/trading_cli/commands/trade.py2
3 files changed, 26 insertions, 39 deletions
diff --git a/cli/src/trading_cli/commands/backtest.py b/cli/src/trading_cli/commands/backtest.py
index 01fe092..3876f1b 100644
--- a/cli/src/trading_cli/commands/backtest.py
+++ b/cli/src/trading_cli/commands/backtest.py
@@ -20,9 +20,9 @@ def backtest():
@backtest.command()
@click.option("--strategy", required=True, help="Strategy name to backtest")
-@click.option("--symbol", required=True, help="Trading symbol (e.g. BTCUSDT)")
+@click.option("--symbol", required=True, help="Trading symbol (e.g. AAPL)")
@click.option("--timeframe", default="1h", show_default=True, help="Candle timeframe")
-@click.option("--balance", default=10000.0, show_default=True, help="Initial balance in USDT")
+@click.option("--balance", default=10000.0, show_default=True, help="Initial balance in USD")
@click.option(
"--output",
"output_format",
diff --git a/cli/src/trading_cli/commands/data.py b/cli/src/trading_cli/commands/data.py
index 2810a07..1ecc15f 100644
--- a/cli/src/trading_cli/commands/data.py
+++ b/cli/src/trading_cli/commands/data.py
@@ -16,10 +16,10 @@ def data():
@data.command()
-@click.option("--symbol", required=True, help="Trading symbol (e.g. BTCUSDT)")
+@click.option("--symbol", required=True, help="Trading symbol (e.g. AAPL)")
@click.option("--timeframe", default="1m", show_default=True, help="Candle timeframe")
def collect(symbol, timeframe):
- """Start collecting live market data for a symbol."""
+ """Start collecting live stock market data for a symbol."""
click.echo(f"To collect live data for {symbol} at {timeframe}, run the data-collector service:")
click.echo()
click.echo(" docker compose up -d data-collector")
@@ -31,16 +31,14 @@ def collect(symbol, timeframe):
@data.command()
-@click.option("--symbol", required=True, help="Trading symbol (e.g. BTCUSDT)")
-@click.option("--timeframe", default="1m", show_default=True, help="Candle timeframe")
+@click.option("--symbol", required=True, help="Trading symbol (e.g. AAPL)")
+@click.option("--timeframe", default="1Day", show_default=True, help="Bar timeframe")
@click.option("--from", "since", default=None, help="Start date (ISO format)")
-@click.option("--limit", default=1000, show_default=True, help="Number of candles to fetch")
+@click.option("--limit", default=1000, show_default=True, help="Number of bars to fetch")
def history(symbol, timeframe, since, limit):
- """Download historical market data for a symbol."""
- sys.path.insert(0, str(_ROOT / "services" / "data-collector" / "src"))
-
+ """Download historical stock market data for a symbol."""
try:
- from data_collector.binance_rest import fetch_historical_candles
+ from shared.alpaca_client import AlpacaClient
from shared.db import Database
from shared.config import Settings
except ImportError as e:
@@ -48,59 +46,48 @@ def history(symbol, timeframe, since, limit):
sys.exit(1)
async def _fetch():
- import ccxt.async_support as ccxt
from datetime import datetime, timezone
settings = Settings()
db = Database(settings.database_url)
await db.connect()
- # Parse the since date to a timestamp in ms
+ start = None
if since:
try:
- dt = datetime.fromisoformat(since).replace(tzinfo=timezone.utc)
- since_ms = int(dt.timestamp() * 1000)
+ start = datetime.fromisoformat(since).replace(tzinfo=timezone.utc)
except ValueError:
click.echo(
f"Error: Invalid date format '{since}'. Use ISO format (e.g. 2024-01-01).",
err=True,
)
sys.exit(1)
- else:
- # Default: fetch from 1000 candles ago (approximate)
- since_ms = None
-
- # Normalize symbol for ccxt (BTCUSDT -> BTC/USDT)
- ccxt_symbol = symbol
- if "/" not in symbol and "USDT" in symbol:
- base = symbol.replace("USDT", "")
- ccxt_symbol = f"{base}/USDT"
-
- exchange = ccxt.binance(
- {
- "apiKey": settings.binance_api_key,
- "secret": settings.binance_api_secret,
- }
+
+ client = AlpacaClient(
+ api_key=settings.alpaca_api_key,
+ api_secret=settings.alpaca_api_secret,
+ base_url=getattr(settings, "alpaca_base_url", "https://paper-api.alpaca.markets"),
)
try:
- kwargs = {"limit": limit}
- if since_ms is not None:
- kwargs["since"] = since_ms
-
- candles = await fetch_historical_candles(exchange, ccxt_symbol, timeframe, **kwargs)
+ candles = await client.get_historical_bars(
+ symbol=symbol,
+ timeframe=timeframe,
+ start=start,
+ limit=limit,
+ )
count = 0
for candle in candles:
await db.insert_candle(candle)
count += 1
- click.echo(f"Saved {count} candles for {symbol} ({timeframe}) to database.")
+ click.echo(f"Saved {count} bars for {symbol} ({timeframe}) to database.")
except Exception as e:
- click.echo(f"Error fetching candles: {e}", err=True)
+ click.echo(f"Error fetching bars: {e}", err=True)
sys.exit(1)
finally:
- await exchange.close()
+ await client.close()
await db.close()
asyncio.run(_fetch())
diff --git a/cli/src/trading_cli/commands/trade.py b/cli/src/trading_cli/commands/trade.py
index f90e0ed..6bbd5a6 100644
--- a/cli/src/trading_cli/commands/trade.py
+++ b/cli/src/trading_cli/commands/trade.py
@@ -9,7 +9,7 @@ def trade():
@trade.command()
@click.option("--strategy", required=True, help="Strategy name to run")
-@click.option("--symbol", required=True, help="Trading symbol (e.g. BTCUSDT)")
+@click.option("--symbol", required=True, help="Trading symbol (e.g. AAPL)")
def start(strategy, symbol):
"""Start a trading bot for a strategy and symbol."""
click.echo(f"Starting trading bot: strategy={strategy}, symbol={symbol}...")