improvement

This commit is contained in:
Gal Podlipnik 2025-07-17 02:54:29 +02:00
parent 761e595389
commit 360dc78833
2 changed files with 20 additions and 6 deletions

View File

@ -4,7 +4,7 @@ Handles all market data fetching and processing operations.
"""
import pandas as pd
from datetime import datetime, timedelta
from datetime import datetime, timedelta, timezone
import logging
import alpaca_trade_api as tradeapi
from config.trading_config import alpaca_config, trading_config
@ -55,6 +55,7 @@ class DataHandler:
}
tf = tf_map.get(timeframe, tradeapi.TimeFrame.Hour)
# Use simple date format for historical data
bars = self.api.get_crypto_bars(symbol, tf, start_date, end_date).df
bars.index = pd.to_datetime(bars.index)
@ -129,12 +130,19 @@ class DataHandler:
symbol = symbol or trading_config.symbol
try:
# Get latest bar
# Get latest bar using proper RFC3339 format
end_time = datetime.now()
start_time = end_time - timedelta(minutes=5)
# Convert to RFC3339 format with timezone offset
start_str = start_time.strftime('%Y-%m-%dT%H:%M:%S-00:00')
end_str = end_time.strftime('%Y-%m-%dT%H:%M:%S-00:00')
bars = self.api.get_crypto_bars(
symbol,
tradeapi.TimeFrame.Minute,
datetime.now() - timedelta(minutes=5),
datetime.now()
start_str,
end_str
).df
if not bars.empty:

View File

@ -59,10 +59,15 @@ class TradingEngine:
'equity': float(account.equity),
'cash': float(account.cash),
'buying_power': float(account.buying_power),
'day_trade_count': int(account.day_trade_count),
'pattern_day_trader': account.pattern_day_trader
'pattern_day_trader': getattr(account, 'pattern_day_trader', False)
}
# Day trade count might not be available for crypto accounts
if hasattr(account, 'day_trade_count'):
account_info['day_trade_count'] = int(account.day_trade_count)
else:
account_info['day_trade_count'] = 0
# Update peak portfolio value
if self.peak_portfolio_value is None or account_info['equity'] > self.peak_portfolio_value:
self.peak_portfolio_value = account_info['equity']
@ -74,6 +79,7 @@ class TradingEngine:
except Exception as e:
logger.error(f"Error getting account info: {e}")
logger.error("Failed to get account information")
return None
def get_current_position(self, symbol: str = None) -> dict: