This commit is contained in:
aaron 2026-02-05 22:28:33 +08:00
parent 15add26b15
commit 2f246491e9

View File

@ -40,8 +40,24 @@ class CryptoAgent:
logger.info(f"加密货币智能体初始化完成,监控交易对: {self.symbols}")
def _get_seconds_until_next_5min(self) -> int:
"""计算距离下一个5分钟整点的秒数"""
now = datetime.now()
current_minute = now.minute
current_second = now.second
# 计算下一个5的倍数分钟
minutes_past = current_minute % 5
if minutes_past == 0 and current_second == 0:
# 刚好在整点,立即执行
return 0
minutes_to_wait = 5 - minutes_past if minutes_past > 0 else 5
seconds_to_wait = minutes_to_wait * 60 - current_second
return seconds_to_wait
async def run(self):
"""主运行循环"""
"""主运行循环 - 在5的倍数分钟执行"""
self.running = True
logger.info("加密货币智能体开始运行...")
@ -49,16 +65,27 @@ class CryptoAgent:
await self.feishu.send_text(
f"🚀 加密货币智能体已启动\n"
f"监控交易对: {', '.join(self.symbols)}\n"
f"分析间隔: {self.analysis_interval}"
f"运行时间: 每5分钟整点 (:00, :05, :10, ...)"
)
while self.running:
try:
# 等待到下一个5分钟整点
wait_seconds = self._get_seconds_until_next_5min()
if wait_seconds > 0:
next_run = datetime.now() + timedelta(seconds=wait_seconds)
logger.info(f"等待 {wait_seconds} 秒,下次运行时间: {next_run.strftime('%H:%M:%S')}")
await asyncio.sleep(wait_seconds)
# 执行分析
run_time = datetime.now()
logger.info(f"=== 开始分析 [{run_time.strftime('%H:%M:%S')}] ===")
for symbol in self.symbols:
await self.analyze_symbol(symbol)
# 等待下一次分析
await asyncio.sleep(self.analysis_interval)
# 等待几秒确保不会在同一分钟内重复执行
await asyncio.sleep(2)
except Exception as e:
logger.error(f"分析循环出错: {e}")