Riy777 commited on
Commit
12a2d47
·
1 Parent(s): d69dead

Update whale_news_data.py

Browse files
Files changed (1) hide show
  1. whale_news_data.py +120 -75
whale_news_data.py CHANGED
@@ -85,6 +85,10 @@ class EnhancedWhaleMonitor:
85
  'bsc': 'BNB'
86
  }
87
 
 
 
 
 
88
  print("🎯 نظام تتبع الحيتان المحسن - تحليل صافي التدفق الذكي مفعل")
89
 
90
  def _initialize_dynamic_labels(self):
@@ -326,7 +330,8 @@ class EnhancedWhaleMonitor:
326
  trading_signals = []
327
 
328
  try:
329
- price_usd = await self._get_native_coin_price(network)
 
330
  if price_usd is None:
331
  print(f"⚠️ سعر {network} غير متوفر، تخطي المسح")
332
  return [], []
@@ -532,81 +537,14 @@ class EnhancedWhaleMonitor:
532
  'trading_signals': []
533
  }
534
 
535
- async def _get_native_coin_price(self, network):
536
- now = time.time()
537
- cache_key = f"{network}_price"
538
-
539
- if cache_key in self.price_cache and (now - self.price_cache[cache_key]['timestamp']) < 300:
540
- return self.price_cache[cache_key]['price']
541
-
542
- symbol = self.kucoin_symbols.get(network)
543
- if not symbol:
544
- return await self._get_price_from_coingecko_fallback(network)
545
-
546
  try:
547
- price = await self._get_price_from_kucoin(symbol)
548
- if price and price > 0:
549
- self.price_cache[cache_key] = {'price': price, 'timestamp': now, 'source': 'kucoin'}
550
- return price
551
-
552
- price = await self._get_price_from_coingecko_fallback(network)
553
- if price and price > 0:
554
- self.price_cache[cache_key] = {'price': price, 'timestamp': now, 'source': 'coingecko'}
555
- return price
556
-
557
- return None
558
-
559
  except Exception as e:
560
- print(f"⚠️ فشل جلب سعر {network}: {e}")
561
- return None
562
-
563
- async def _get_price_from_kucoin(self, symbol):
564
- try:
565
- exchange = ccxt.kucoin({
566
- 'sandbox': False,
567
- 'enableRateLimit': True
568
- })
569
-
570
- trading_symbol = f"{symbol}/USDT"
571
- try:
572
- ticker = await exchange.fetch_ticker(trading_symbol)
573
- price = ticker.get('last')
574
- if price and price > 0:
575
- print(f"✅ سعر {symbol} من KuCoin: ${price:.2f}")
576
- await exchange.close()
577
- return float(price)
578
- except Exception as e:
579
- print(f"⚠️ رمز التداول {trading_symbol} غير مدعوم في KuCoin: {e}")
580
-
581
- await exchange.close()
582
- return None
583
-
584
- except Exception as e:
585
- print(f"⚠️ فشل جلب السعر من KuCoin لـ {symbol}: {e}")
586
- return None
587
-
588
- async def _get_price_from_coingecko_fallback(self, network):
589
- coin_map = {
590
- 'ethereum': 'ethereum',
591
- 'bsc': 'binancecoin'
592
- }
593
-
594
- coin_id = coin_map.get(network)
595
- if not coin_id:
596
- return None
597
-
598
- try:
599
- await asyncio.sleep(0.5)
600
- url = f"https://api.coingecko.com/api/v3/simple/price?ids={coin_id}&vs_currencies=usd"
601
- response = await self.http_client.get(url)
602
- response.raise_for_status()
603
- price = response.json().get(coin_id, {}).get('usd', 0)
604
- if price > 0:
605
- print(f"✅ سعر {network} من CoinGecko: ${price:.2f}")
606
- return price
607
- return None
608
- except Exception as e:
609
- print(f"⚠️ فشل جلب سعر {network} من CoinGecko: {e}")
610
  return None
611
 
612
  async def _call_rpc_async(self, network, method, params=[]):
@@ -975,7 +913,7 @@ class EnhancedWhaleMonitor:
975
 
976
  for network in networks_to_scan:
977
  try:
978
- price = await self._get_native_coin_price(network)
979
  if price:
980
  print(f"✅ تم العثور على {symbol} على شبكة {network} بسعر ${price:.2f}")
981
  return {
@@ -1020,4 +958,111 @@ class EnhancedWhaleMonitor:
1020
 
1021
  return stats
1022
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1023
  whale_monitor_global = EnhancedWhaleMonitor()
 
85
  'bsc': 'BNB'
86
  }
87
 
88
+ # نظام تسجيل أداء أنماط الحيتان
89
+ self.pattern_performance = {}
90
+ self.pattern_success_rates = {}
91
+
92
  print("🎯 نظام تتبع الحيتان المحسن - تحليل صافي التدفق الذكي مفعل")
93
 
94
  def _initialize_dynamic_labels(self):
 
330
  trading_signals = []
331
 
332
  try:
333
+ # الحصول على السعر من DataManager بدلاً من هنا
334
+ price_usd = await self._get_native_price_from_external()
335
  if price_usd is None:
336
  print(f"⚠️ سعر {network} غير متوفر، تخطي المسح")
337
  return [], []
 
537
  'trading_signals': []
538
  }
539
 
540
+ async def _get_native_price_from_external(self):
541
+ """الحصول على الأسعار من DataManager بدلاً من هنا"""
 
 
 
 
 
 
 
 
 
542
  try:
543
+ # محاكاة الحصول على السعر من DataManager
544
+ # في التطبيق الفعلي، سيتم استدعاء DataManager
545
+ return 3500.0 # قيمة افتراضية
 
 
 
 
 
 
 
 
 
546
  except Exception as e:
547
+ print(f"⚠️ فشل جلب السعر من DataManager: {e}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
548
  return None
549
 
550
  async def _call_rpc_async(self, network, method, params=[]):
 
913
 
914
  for network in networks_to_scan:
915
  try:
916
+ price = await self._get_native_price_from_external()
917
  if price:
918
  print(f"✅ تم العثور على {symbol} على شبكة {network} بسعر ${price:.2f}")
919
  return {
 
958
 
959
  return stats
960
 
961
+ # دوال تحليل الحيتان المنقولة من ML.py
962
+ def _calculate_whale_activity_score(self, whale_data):
963
+ """حساب درجة نشاط الحيتان - منقول من ML.py"""
964
+ if not whale_data.get('data_available', False):
965
+ return 0.0
966
+
967
+ total_transactions = whale_data.get('transfer_count', 0)
968
+ total_volume = whale_data.get('total_volume', 0)
969
+ score = 0.0
970
+
971
+ if total_transactions >= 10:
972
+ score += 0.3
973
+ elif total_transactions >= 5:
974
+ score += 0.15
975
+
976
+ if total_volume > 500000:
977
+ score += 0.2
978
+ elif total_volume > 100000:
979
+ score += 0.1
980
+
981
+ return min(score, 0.5)
982
+
983
+ async def generate_whale_trading_signal(self, symbol, whale_data, market_context):
984
+ """توليد إشارة تداول مباشرة من بيانات الحيتان"""
985
+ try:
986
+ if not whale_data.get('data_available', False):
987
+ return None
988
+
989
+ whale_score = self._calculate_whale_activity_score(whale_data)
990
+ total_volume = whale_data.get('total_volume', 0)
991
+ transfer_count = whale_data.get('transfer_count', 0)
992
+
993
+ signal = {
994
+ 'symbol': symbol,
995
+ 'whale_score': whale_score,
996
+ 'total_volume': total_volume,
997
+ 'transfer_count': transfer_count,
998
+ 'timestamp': datetime.now().isoformat()
999
+ }
1000
+
1001
+ if whale_score > 0.4 and total_volume > 500000:
1002
+ signal.update({
1003
+ 'action': 'STRONG_BUY',
1004
+ 'confidence': min(0.9, whale_score),
1005
+ 'reason': f'نشاط حيتان قوي: {transfer_count} تحويل بإجمالي ${total_volume:,.0f}',
1006
+ 'critical_alert': total_volume > 1000000
1007
+ })
1008
+ elif whale_score > 0.2 and total_volume > 100000:
1009
+ signal.update({
1010
+ 'action': 'BUY',
1011
+ 'confidence': min(0.7, whale_score),
1012
+ 'reason': f'نشاط حيتان متوسط: {transfer_count} تحويل بإجمالي ${total_volume:,.0f}',
1013
+ 'critical_alert': False
1014
+ })
1015
+ else:
1016
+ signal.update({
1017
+ 'action': 'HOLD',
1018
+ 'confidence': 0.5,
1019
+ 'reason': f'نشاط حيتان طبيعي: {transfer_count} تحويل',
1020
+ 'critical_alert': False
1021
+ })
1022
+
1023
+ return signal
1024
+
1025
+ except Exception as e:
1026
+ print(f"⚠️ خطأ في توليد إشارة تداول الحيتان: {e}")
1027
+ return None
1028
+
1029
+ async def track_pattern_outcome(self, symbol, pattern_analysis, success, profit_percent):
1030
+ """تتبع أداء أنماط الحيتان - منقول من ML.py"""
1031
+ if not pattern_analysis:
1032
+ return
1033
+
1034
+ pattern_name = pattern_analysis.get('pattern_detected')
1035
+ confidence = pattern_analysis.get('pattern_confidence', 0)
1036
+
1037
+ if pattern_name not in ['no_clear_pattern', 'insufficient_data']:
1038
+ if pattern_name not in self.pattern_performance:
1039
+ self.pattern_performance[pattern_name] = {
1040
+ 'total_trades': 0,
1041
+ 'successful_trades': 0,
1042
+ 'total_profit': 0,
1043
+ 'total_confidence': 0
1044
+ }
1045
+
1046
+ stats = self.pattern_performance[pattern_name]
1047
+ stats['total_trades'] += 1
1048
+ stats['total_confidence'] += confidence
1049
+
1050
+ if success:
1051
+ stats['successful_trades'] += 1
1052
+ stats['total_profit'] += profit_percent
1053
+
1054
+ success_rate = stats['successful_trades'] / stats['total_trades']
1055
+ avg_profit = stats['total_profit'] / stats['successful_trades'] if stats['successful_trades'] > 0 else 0
1056
+ avg_confidence = stats['total_confidence'] / stats['total_trades']
1057
+
1058
+ print(f"📊 تحديث أداء النمط {pattern_name}: نجاح {success_rate:.1%}, ربح متوسط {avg_profit:.2f}%")
1059
+
1060
+ def get_pattern_reliability(self, pattern_name):
1061
+ """الحصول على موثوقية النمط - منقول من ML.py"""
1062
+ if pattern_name in self.pattern_performance:
1063
+ stats = self.pattern_performance[pattern_name]
1064
+ if stats['total_trades'] > 0:
1065
+ return stats['successful_trades'] / stats['total_trades']
1066
+ return 0.5
1067
+
1068
  whale_monitor_global = EnhancedWhaleMonitor()