| |
| """ |
| Bitcoin Analysis Project - Main Script |
| |
| This script runs the Bitcoin analysis crew to generate investment recommendations |
| integrating technical analysis, news sentiment, and market context. |
| """ |
|
|
| import os |
| import json |
| import time |
| from datetime import datetime |
| from dotenv import load_dotenv |
|
|
| |
| load_dotenv() |
|
|
| |
| if not os.getenv("OPENAI_API_KEY"): |
| print("Error: OPENAI_API_KEY not found in environment variables") |
| print("Please set up your .env file with the required API keys") |
| exit(1) |
|
|
| if not os.getenv("ALPACA_API_KEY") or not os.getenv("ALPACA_API_SECRET"): |
| print("Error: ALPACA_API_KEY or ALPACA_API_SECRET not found in environment variables") |
| print("Please set up your .env file with the required Alpaca API keys") |
| exit(1) |
|
|
| |
| from src.crypto_analysis.crew import BitcoinAnalysisCrew |
|
|
| def main(): |
| """Run the Bitcoin analysis project""" |
| print("=" * 80) |
| print("BITCOIN ANALYSIS PROJECT") |
| print("=" * 80) |
| print(f"Run started at: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") |
| print("Initializing Bitcoin Analysis Crew...") |
| |
| |
| try: |
| crew = BitcoinAnalysisCrew() |
| print("Crew initialized successfully") |
| print("Starting Bitcoin analysis...") |
| |
| |
| result = crew.run_analysis() |
| |
| |
| print("\n" + "=" * 40) |
| print("ANALYSIS RESULTS") |
| print("=" * 40) |
| print(f"Signal: {result.get('signal', 'unknown').upper()}") |
| print(f"Confidence: {result.get('confidence', 0)}%") |
| print(f"Allocation: {result.get('allocation_percentage', 0)}%") |
| if 'reasoning' in result: |
| print("\nReasoning:") |
| print(result['reasoning']) |
| |
| |
| timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") |
| results_dir = "results" |
| os.makedirs(results_dir, exist_ok=True) |
| |
| results_file = os.path.join(results_dir, f"bitcoin_analysis_{timestamp}.json") |
| with open(results_file, "w") as f: |
| json.dump(result, f, indent=2) |
| |
| print(f"\nResults saved to {results_file}") |
| print("=" * 80) |
| |
| |
| if 'order_execution' in result: |
| print("\nORDER EXECUTION RESULTS:") |
| print("-" * 40) |
| order_result = result['order_execution'] |
| if isinstance(order_result, dict): |
| if order_result.get('success', False): |
| print(f"Order {order_result.get('order_id', 'unknown')} executed successfully!") |
| print(f"Side: {order_result.get('side', 'unknown').upper()}") |
| print(f"Symbol: {order_result.get('symbol', 'unknown')}") |
| print(f"Quantity: {order_result.get('quantity', 'unknown')}") |
| print(f"Status: {order_result.get('status', 'unknown')}") |
| print(f"Current price: ${order_result.get('current_price', 'unknown')}") |
| else: |
| print(f"Order execution failed: {order_result.get('error', 'Unknown error')}") |
| else: |
| print(f"Account check completed: {order_result}") |
| |
| return 0 |
| |
| except Exception as e: |
| print(f"Error in analysis: {str(e)}") |
| import traceback |
| traceback.print_exc() |
| return 1 |
|
|
| if __name__ == "__main__": |
| main() |