fix bug: trade time is valid. (修复BUG:持仓时间为空的问题)
This commit is contained in:
@@ -140,10 +140,10 @@ class BaseDataSource(ABC):
|
||||
if klines:
|
||||
latest_time = datetime.fromtimestamp(klines[-1]['time'])
|
||||
time_diff = (datetime.now() - latest_time).total_seconds()
|
||||
# logger.info(
|
||||
# f"{self.name}: {symbol} 获取 {len(klines)} 条数据, "
|
||||
# f"最新时间: {latest_time}, 延迟: {time_diff:.0f}秒"
|
||||
# )
|
||||
logger.info(
|
||||
f"{self.name}: {symbol} 获取 {len(klines)} 条数据, "
|
||||
f"最新时间: {latest_time}, 延迟: {time_diff:.0f}秒"
|
||||
)
|
||||
|
||||
# 检查数据是否过旧
|
||||
max_diff = TIMEFRAME_SECONDS.get(timeframe, 3600) * 2
|
||||
|
||||
@@ -84,7 +84,7 @@ class CryptoDataSource(BaseDataSource):
|
||||
else:
|
||||
symbol_pair = symbol
|
||||
|
||||
# logger.info(f"获取加密货币K线: {symbol_pair}, 周期: {ccxt_timeframe}, 条数: {limit}")
|
||||
logger.info(f"获取加密货币K线: {symbol_pair}, 周期: {ccxt_timeframe}, 条数: {limit}")
|
||||
|
||||
ohlcv = self._fetch_ohlcv(symbol_pair, ccxt_timeframe, limit, before_time, timeframe)
|
||||
|
||||
@@ -136,7 +136,7 @@ class CryptoDataSource(BaseDataSource):
|
||||
since = int(start_time.timestamp() * 1000)
|
||||
end_ms = before_time * 1000
|
||||
|
||||
# logger.info(f"历史数据请求: since={since//1000}, end={before_time}, 时间跨度={total_seconds/86400:.1f}天")
|
||||
logger.info(f"历史数据请求: since={since//1000}, end={before_time}, 时间跨度={total_seconds/86400:.1f}天")
|
||||
|
||||
# 分页获取数据,直到覆盖完整时间范围
|
||||
all_ohlcv = []
|
||||
@@ -160,20 +160,21 @@ class CryptoDataSource(BaseDataSource):
|
||||
last_timestamp = batch[-1][0]
|
||||
|
||||
# 如果最后一条数据时间超过了结束时间,或者返回数据少于请求量,说明已经获取完毕
|
||||
if last_timestamp >= end_ms or len(batch) < batch_limit:
|
||||
# if last_timestamp >= end_ms or len(batch) < batch_limit:
|
||||
if last_timestamp >= end_ms:
|
||||
break
|
||||
|
||||
# 下次从最后一条的下一个时间点开始
|
||||
timeframe_ms = TIMEFRAME_SECONDS.get(timeframe, 86400) * 1000
|
||||
current_since = last_timestamp + timeframe_ms
|
||||
|
||||
# logger.info(f"分页获取中: 已获取 {len(all_ohlcv)} 条, 继续从 {datetime.fromtimestamp(current_since/1000)}")
|
||||
logger.info(f"分页获取中: 已获取 {len(all_ohlcv)} 条, 继续从 {datetime.fromtimestamp(current_since/1000)}")
|
||||
|
||||
ohlcv = all_ohlcv
|
||||
else:
|
||||
ohlcv = self.exchange.fetch_ohlcv(symbol_pair, ccxt_timeframe, limit=limit)
|
||||
|
||||
# logger.info(f"CCXT 返回 {len(ohlcv) if ohlcv else 0} 条数据")
|
||||
logger.info(f"CCXT 返回 {len(ohlcv) if ohlcv else 0} 条数据")
|
||||
return ohlcv
|
||||
|
||||
except Exception as e:
|
||||
@@ -200,7 +201,7 @@ class CryptoDataSource(BaseDataSource):
|
||||
since = int((datetime.now() - timedelta(seconds=total_seconds)).timestamp() * 1000)
|
||||
|
||||
ohlcv = self.exchange.fetch_ohlcv(symbol_pair, ccxt_timeframe, since=since, limit=limit)
|
||||
# logger.info(f"CCXT 备用方法返回 {len(ohlcv) if ohlcv else 0} 条数据")
|
||||
logger.info(f"CCXT 备用方法返回 {len(ohlcv) if ohlcv else 0} 条数据")
|
||||
return ohlcv
|
||||
except Exception as e:
|
||||
logger.error(f"CCXT fallback method also failed: {str(e)}")
|
||||
|
||||
@@ -596,7 +596,7 @@ class TradingExecutor:
|
||||
if not klines or len(klines) < 2:
|
||||
logger.error(f"Strategy {strategy_id} failed to fetch K-lines")
|
||||
return
|
||||
logger.info(rf'Strategy {strategy_id} kline number: {len(klines)}')
|
||||
logger.info(rf'Strategy {strategy_id} history kline number: {len(klines)}')
|
||||
|
||||
# 转换为DataFrame
|
||||
df = self._klines_to_dataframe(klines)
|
||||
@@ -1093,7 +1093,8 @@ class TradingExecutor:
|
||||
market='Crypto',
|
||||
symbol=symbol,
|
||||
timeframe=timeframe,
|
||||
limit=limit
|
||||
limit=limit,
|
||||
before_time=int(time.time()),
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to fetch K-lines: {str(e)}")
|
||||
|
||||
@@ -274,7 +274,7 @@ def _insert_strategy(
|
||||
json.dumps(indicator_config, ensure_ascii=False),
|
||||
json.dumps(trading_config, ensure_ascii=False),
|
||||
json.dumps({}, ensure_ascii=False),
|
||||
300,
|
||||
3000,
|
||||
now,
|
||||
now,
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user