We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/TheMacroeconomicDao/bybit-ai-trader'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
"""
Тест полного анализа рынка через OpenRouter Qwen
"""
import asyncio
import os
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent))
from autonomous_agent.qwen_client import QwenClient
from loguru import logger
logger.add(
sys.stdout,
format="<green>{time:HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{message}</cyan>",
level="INFO"
)
async def test_full_market_analysis():
"""Тест полного анализа рынка"""
print("\n" + "=" * 60)
print("ТЕСТ ПОЛНОГО АНАЛИЗА РЫНКА")
print("=" * 60)
api_key = os.getenv("QWEN_API_KEY", "")
if not api_key:
print("❌ QWEN_API_KEY не установлен!")
return False
try:
client = QwenClient(api_key, model="qwen/qwen-turbo")
prompt = """
Проведи анализ криптовалютного рынка и выдай мне 3 лучших точки входа прямо сейчас.
Требования:
1. Найди ТОП 3 возможности с confluence ≥ 8.0/10
2. Вероятность успеха ≥ 70%
3. R:R минимум 1:2
4. Детально объясни каждую возможность
5. Укажи конкретные уровни входа, SL, TP
Формат ответа (JSON):
{
"top_opportunities": [
{
"symbol": "BTC/USDT",
"side": "long",
"entry_price": 50000,
"stop_loss": 49500,
"take_profit": 51000,
"confluence_score": 8.5,
"probability": 0.75,
"risk_reward": 2.0,
"reasoning": "Детальное объяснение почему это хорошая возможность",
"timeframes_alignment": ["1h", "4h", "1d"],
"key_factors": ["RSI oversold", "Support level", "Bullish pattern"]
}
],
"market_summary": "Краткое резюме рыночной ситуации",
"btc_status": "bullish/neutral/bearish",
"recommendations": ["Общие рекомендации"]
}
"""
system_instructions = """
Ты - профессиональный AI торговый аналитик с глубокими знаниями технического анализа криптовалютных рынков.
Твоя задача - находить моменты НЕИЗБЕЖНОГО роста с максимальной вероятностью успеха.
Критерии качества:
- Confluence минимум: 8.0/10
- Вероятность успеха: ≥ 70%
- R:R минимум: 1:2
- Multi-timeframe alignment
- Детальное обоснование
Всегда отвечай в формате JSON как указано в запросе.
"""
print("📤 Отправляю запрос на полный анализ рынка...")
print("⏳ Ожидание ответа (может занять 30-60 секунд)...")
result = await client.generate(
prompt=prompt,
system_prompt=system_instructions,
temperature=0.3,
max_tokens=3000
)
if result.get("success"):
print("\n✅ Анализ успешен!")
content = result.get("content", "")
print(f"\n📥 Длина ответа: {len(content)} символов")
print(f"\n📝 Полный ответ:")
print("=" * 60)
print(content)
print("=" * 60)
# Попытка распарсить JSON
import json
try:
json_content = content
if "```json" in json_content:
json_start = json_content.find("```json") + 7
json_end = json_content.find("```", json_start)
json_content = json_content[json_start:json_end].strip()
elif "```" in json_content:
json_start = json_content.find("```") + 3
json_end = json_content.find("```", json_start)
json_content = json_content[json_start:json_end].strip()
parsed = json.loads(json_content)
print(f"\n✅ JSON успешно распарсен!")
print(f" - Ключи: {list(parsed.keys())}")
if "top_opportunities" in parsed:
print(f"\n 🎯 Найдено возможностей: {len(parsed['top_opportunities'])}")
for i, opp in enumerate(parsed['top_opportunities'][:3], 1):
print(f"\n {i}. {opp.get('symbol', 'N/A')} ({opp.get('side', 'N/A').upper()})")
print(f" Entry: ${opp.get('entry_price', 0):,.2f}")
print(f" SL: ${opp.get('stop_loss', 0):,.2f}")
print(f" TP: ${opp.get('take_profit', 0):,.2f}")
print(f" Confluence: {opp.get('confluence_score', 0)}/10")
print(f" Probability: {opp.get('probability', 0)*100:.0f}%")
print(f" R:R: {opp.get('risk_reward', 0):.2f}")
print(f" Reasoning: {opp.get('reasoning', 'N/A')[:100]}...")
if "market_summary" in parsed:
print(f"\n 📊 Market Summary: {parsed['market_summary']}")
if "btc_status" in parsed:
print(f"\n ₿ BTC Status: {parsed['btc_status']}")
return True
except json.JSONDecodeError as e:
print(f"\n⚠️ Не удалось распарсить JSON: {e}")
print(" Но ответ получен, возможно формат другой")
return True # Все равно успех, просто формат другой
else:
print(f"\n❌ Ошибка: {result.get('error', 'Unknown')}")
return False
except Exception as e:
print(f"\n❌ Исключение: {e}")
import traceback
traceback.print_exc()
return False
async def main():
"""Запуск теста"""
print("\n" + "🚀" * 30)
print("ТЕСТ ПОЛНОГО АНАЛИЗА РЫНКА ЧЕРЕЗ OPENROUTER")
print("🚀" * 30)
result = await test_full_market_analysis()
print("\n" + "=" * 60)
if result:
print("✅ ТЕСТ ПРОШЁЛ УСПЕШНО!")
print("🎉 OpenRouter Qwen работает отлично!")
else:
print("❌ ТЕСТ ПРОВАЛЕН")
print("Проверьте API ключ и баланс на OpenRouter")
print("=" * 60)
return 0 if result else 1
if __name__ == "__main__":
exit_code = asyncio.run(main())
sys.exit(exit_code)