init
This commit is contained in:
166
check_live_trading.py
Normal file
166
check_live_trading.py
Normal file
@ -0,0 +1,166 @@
|
||||
import os
|
||||
import sys
|
||||
import logging
|
||||
import importlib
|
||||
import asyncio
|
||||
from dotenv import load_dotenv
|
||||
|
||||
# Configure logging
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(levelname)s - %(message)s',
|
||||
handlers=[logging.StreamHandler()]
|
||||
)
|
||||
logger = logging.getLogger("check_live_trading")
|
||||
|
||||
def check_dependencies():
|
||||
"""Check if all required dependencies are installed"""
|
||||
required_packages = [
|
||||
"numpy", "pandas", "matplotlib", "mplfinance", "torch",
|
||||
"dotenv", "ccxt", "websockets", "tensorboard",
|
||||
"sklearn", "PIL", "asyncio"
|
||||
]
|
||||
|
||||
missing_packages = []
|
||||
|
||||
for package in required_packages:
|
||||
try:
|
||||
if package == "dotenv":
|
||||
importlib.import_module("dotenv")
|
||||
elif package == "PIL":
|
||||
importlib.import_module("PIL")
|
||||
else:
|
||||
importlib.import_module(package)
|
||||
logger.info(f"✅ {package} is installed")
|
||||
except ImportError:
|
||||
missing_packages.append(package)
|
||||
logger.error(f"❌ {package} is NOT installed")
|
||||
|
||||
if missing_packages:
|
||||
logger.error(f"Missing packages: {', '.join(missing_packages)}")
|
||||
logger.info("Install missing packages with: pip install -r requirements.txt")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def check_api_keys():
|
||||
"""Check if API keys are configured"""
|
||||
load_dotenv()
|
||||
|
||||
api_key = os.getenv('MEXC_API_KEY')
|
||||
secret_key = os.getenv('MEXC_SECRET_KEY')
|
||||
|
||||
if not api_key or api_key == "your_api_key_here" or not secret_key or secret_key == "your_secret_key_here":
|
||||
logger.error("❌ API keys are not properly configured in .env file")
|
||||
logger.info("Please update your .env file with valid MEXC API keys")
|
||||
return False
|
||||
|
||||
logger.info("✅ API keys are configured")
|
||||
return True
|
||||
|
||||
def check_model_files():
|
||||
"""Check if trained model files exist"""
|
||||
model_files = [
|
||||
"models/trading_agent_best_pnl.pt",
|
||||
"models/trading_agent_best_reward.pt",
|
||||
"models/trading_agent_final.pt"
|
||||
]
|
||||
|
||||
missing_models = []
|
||||
|
||||
for model_file in model_files:
|
||||
if os.path.exists(model_file):
|
||||
logger.info(f"✅ Model file exists: {model_file}")
|
||||
else:
|
||||
missing_models.append(model_file)
|
||||
logger.error(f"❌ Model file missing: {model_file}")
|
||||
|
||||
if missing_models:
|
||||
logger.warning("Some model files are missing. You need to train the model first.")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
async def check_exchange_connection():
|
||||
"""Test connection to MEXC exchange"""
|
||||
try:
|
||||
import ccxt
|
||||
|
||||
# Load API keys
|
||||
load_dotenv()
|
||||
api_key = os.getenv('MEXC_API_KEY')
|
||||
secret_key = os.getenv('MEXC_SECRET_KEY')
|
||||
|
||||
if api_key == "your_api_key_here" or secret_key == "your_secret_key_here":
|
||||
logger.warning("⚠️ Using placeholder API keys, skipping exchange connection test")
|
||||
return False
|
||||
|
||||
# Initialize exchange
|
||||
exchange = ccxt.mexc({
|
||||
'apiKey': api_key,
|
||||
'secret': secret_key,
|
||||
'enableRateLimit': True
|
||||
})
|
||||
|
||||
# Test connection by fetching markets
|
||||
markets = exchange.fetch_markets()
|
||||
logger.info(f"✅ Successfully connected to MEXC exchange")
|
||||
logger.info(f"✅ Found {len(markets)} markets")
|
||||
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to connect to MEXC exchange: {str(e)}")
|
||||
return False
|
||||
|
||||
def check_directories():
|
||||
"""Check if required directories exist"""
|
||||
required_dirs = ["models", "runs", "trade_logs"]
|
||||
|
||||
for directory in required_dirs:
|
||||
if not os.path.exists(directory):
|
||||
logger.info(f"Creating directory: {directory}")
|
||||
os.makedirs(directory, exist_ok=True)
|
||||
|
||||
logger.info("✅ All required directories exist")
|
||||
return True
|
||||
|
||||
async def main():
|
||||
"""Run all checks"""
|
||||
logger.info("Running pre-flight checks for live trading...")
|
||||
|
||||
checks = [
|
||||
("Dependencies", check_dependencies()),
|
||||
("API Keys", check_api_keys()),
|
||||
("Model Files", check_model_files()),
|
||||
("Directories", check_directories()),
|
||||
("Exchange Connection", await check_exchange_connection())
|
||||
]
|
||||
|
||||
# Count failed checks
|
||||
failed_checks = sum(1 for _, result in checks if not result)
|
||||
|
||||
# Print summary
|
||||
logger.info("\n" + "="*50)
|
||||
logger.info("LIVE TRADING PRE-FLIGHT CHECK SUMMARY")
|
||||
logger.info("="*50)
|
||||
|
||||
for check_name, result in checks:
|
||||
status = "✅ PASS" if result else "❌ FAIL"
|
||||
logger.info(f"{check_name}: {status}")
|
||||
|
||||
logger.info("="*50)
|
||||
|
||||
if failed_checks == 0:
|
||||
logger.info("🚀 All checks passed! You're ready for live trading.")
|
||||
logger.info("\nRun live trading with:")
|
||||
logger.info("python main.py --mode live --demo true --symbol ETH/USDT --timeframe 1m")
|
||||
logger.info("\nFor real trading (after updating API keys):")
|
||||
logger.info("python main.py --mode live --demo false --symbol ETH/USDT --timeframe 1m --leverage 50")
|
||||
return 0
|
||||
else:
|
||||
logger.error(f"❌ {failed_checks} check(s) failed. Please fix the issues before running live trading.")
|
||||
return 1
|
||||
|
||||
if __name__ == "__main__":
|
||||
exit_code = asyncio.run(main())
|
||||
sys.exit(exit_code)
|
Reference in New Issue
Block a user