برای ساخت یک API که بهصورت خودکار دادههای مربوط به عملکرد نهنگها در دکس تریدینگ را جمعآوری کند، معیارهای کلیدی (10 مورد ذکرشده: سود خالص، نرخ برد، نقدینگی، تنوع سبد، حجم معاملات، زمانبندی، کارمزدها، تعداد و نوع توکنها، فعالیت در دکسها، و تأثیرگذاری بر بازار) را محاسبه کرده و موقعیتهای معاملاتی با دقت بالا را از طریق تلگرام اطلاعرسانی کند، باید سیستمی طراحی شود که دادههای آنچین را بهصورت لحظهای پردازش کند و با فیلترهای قوی، موقعیتهای مناسب را شناسایی کند. در ادامه، راهکار کامل بهصورت مرحلهبهمرحله و همراه با کدهای لازم ارائه شده است.
### مراحل کلی ساخت API و سیستم اطلاعرسانی
#### 1. **جمعآوری دادهها از منابع آنچین**
- **ابزارها**: Etherscan API، DexTools API، یا Nansen API برای دریافت دادههای تراکنشها و کیفپولها.
- **هدف**: جمعآوری دادههای خام (تراکنشها، کارمزدها، نقدینگی) برای کیفپولهای نهنگها.
- **چگونه؟**: استفاده از APIهای بلاکچین برای دریافت تراکنشهای آدرسهای خاص و اطلاعات استخرهای نقدینگی.
#### 2. **تحلیل و محاسبه معیارها**
- **ابزارها**: Python با کتابخانههای Web3.py، Pandas، Requests.
- **هدف**: محاسبه معیارهای کلیدی (مثل سود خالص، نرخ برد) با دقت بالا.
- **فیلترهای مهم**:
- **سود خالص**: حداقل سود 10% در هر معامله.
- **نرخ برد**: حداقل 70% معاملات سودآور.
- **حجم معاملات**: تراکنشهای بالای 100,000 دلار.
- **زمانبندی**: خرید در کف قیمتی (نزدیک به حمایتهای تکنیکال) یا فروش در اوج.
- **تأثیرگذاری بر بازار**: تغییرات قیمتی بیش از 5% پس از تراکنش نهنگ.
- **کارمزدها**: کارمزد گس کمتر از 5% سود معامله.
#### 3. **ایجاد API برای پردازش دادهها**
- **ابزارها**: Flask یا FastAPI برای ایجاد API در Python.
- **هدف**: ارائه یک endpoint که دادههای پردازششده را بهصورت JSON برگرداند.
#### 4. **ارسال اعلان به تلگرام**
- **ابزارها**: کتابخانه python-telegram-bot یا python-telegram.
- **هدف**: ارسال اعلانهای لحظهای به یک کانال یا گروه تلگرامی با جزئیات موقعیت (مثل توکن، قیمت، حجم).
#### 5. **مدیریت خطا و افزایش دقت**
- **روشها**:
- استفاده از دادههای معتبر از منابع چندگانه (Etherscan، DexTools، CoinGecko).
- اعمال فیلترهای سختگیرانه برای حذف دادههای نادرست (مثل تراکنشهای جعلی).
- بررسی همزمان چندین معیار برای تأیید موقعیت.
- ذخیره دادهها در پایگاه داده (مثل SQLite) برای تحلیلهای بعدی و جلوگیری از پردازش تکراری.
### کدهای لازم برای پیادهسازی
```python
import requests
import pandas as pd
from web3 import Web3
from datetime import datetime, timedelta
import telegram
import asyncio
from fastapi import FastAPI
import sqlite3
import os
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
ETHERSCAN_API_KEY = os.getenv("ETHERSCAN_API_KEY")
TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
TELEGRAM_CHAT_ID = os.getenv("TELEGRAM_CHAT_ID")
# Initialize Web3 and Telegram bot
w3 = Web3(Web3.HTTPProvider("https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID"))
bot = telegram.Bot(token=TELEGRAM_BOT_TOKEN)
# Initialize FastAPI
app = FastAPI()
# Database setup
conn = sqlite3.connect("whale_transactions.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS transactions (
tx_hash TEXT PRIMARY KEY,
wallet_address TEXT,
token_address TEXT,
amount REAL,
price REAL,
timestamp INTEGER,
profit REAL,
gas_fee REAL
)
""")
conn.commit()
# Fetch transactions from Etherscan
def get_transactions(wallet_address, startblock=0):
url = f"https://api.etherscan.io/api?module=account&action=tokentx&address={wallet_address}&startblock={startblock}&sort=desc&apikey={ETHERSCAN_API_KEY}"
response = requests.get(url)
data = response.json()
if data["status"] == "1":
return data["result"]
return []
# Calculate key metrics
def calculate_metrics(transactions):
df = pd.DataFrame(transactions)
if df.empty:
return None
# Convert values to numeric
df["value"] = df["value"].astype(float) / 1e18 # Convert from Wei
df["timeStamp"] = pd.to_datetime(df["timeStamp"], unit="s")
# Calculate profit (simplified: buy/sell price difference)
buys = df[df["from"] != df["wallet_address"]].groupby("contractAddress").agg({"value": "sum", "timeStamp": "min"})
sells = df[df["to"] != df["wallet_address"]].groupby("contractAddress").agg({"value": "sum", "timeStamp": "max"})
merged = buys.join(sells, lsuffix="_buy", rsuffix="_sell")
merged["profit"] = (merged["value_sell"] - merged["value_buy"]) / merged["value_buy"] * 100
# Calculate win rate
win_rate = len(merged[merged["profit"] > 0]) / len(merged) * 100 if len(merged) > 0 else 0
# Calculate gas fees
gas_fees = df["gasUsed"].astype(float) * df["gasPrice"].astype(float) / 1e18
# Trading volume
volume = df["value"].sum()
# Portfolio diversity
unique_tokens = df["contractAddress"].nunique()
return {
"profit": merged["profit"].mean() if not merged.empty else 0,
"win_rate": win_rate,
"volume": volume,
"gas_fees": gas_fees.sum(),
"unique_tokens": unique_tokens
}
# Filter high-potential opportunities
def filter_opportunities(metrics, transaction):
return (
metrics["profit"] > 10 and # Minimum 10% profit
metrics["win_rate"] > 70 and # Minimum 70% win rate
metrics["volume"] > 100000 and # Minimum $100,000 volume
metrics["gas_fees"] / metrics["volume"] < 0.05 # Gas fees < 5% of volume
)
# Send Telegram notification
async def send_telegram_notification(wallet_address, metrics, transaction):
token_symbol = transaction.get("tokenSymbol", "Unknown")
message = (
f"🚨 Whale Activity Detected!\n"
f"Wallet: {wallet_address[:6]}...{wallet_address[-4:]}\n"
f"Token: {token_symbol}\n"
f"Profit: {metrics['profit']:.2f}%\n"
f"Win Rate: {metrics['win_rate']:.2f}%\n"
f"Volume: ${metrics['volume']:,.2f}\n"
f"Unique Tokens: {metrics['unique_tokens']}\n"
f"Timestamp: {datetime.fromtimestamp(int(transaction['timeStamp']))}\n"
)
await bot.send_message(chat_id=TELEGRAM_CHAT_ID, text=message)
# FastAPI endpoint to process wallet
@app.get("/track_wallet/{wallet_address}")
async def track_wallet(wallet_address: str):
# Validate wallet address
if not w3.is_address(wallet_address):
return {"error": "Invalid wallet address"}
# Fetch transactions
transactions = get_transactions(wallet_address)
if not transactions:
return {"error": "No transactions found"}
# Calculate metrics
metrics = calculate_metrics(transactions)
if not metrics:
return {"error": "Unable to calculate metrics"}
# Filter for high-potential opportunities
latest_transaction = transactions[0]
if filter_opportunities(metrics, latest_transaction):
# Save to database
cursor.execute(
"""
INSERT OR REPLACE INTO transactions (tx_hash, wallet_address, token_address, amount, price, timestamp, profit, gas_fee)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
""",
(
latest_transaction["hash"],
wallet_address,
latest_transaction["contractAddress"],
float(latest_transaction["value"]) / 1e18,
0, # Placeholder for price (fetch from CoinGecko if needed)
int(latest_transaction["timeStamp"]),
metrics["profit"],
float(latest_transaction["gasUsed"]) * float(latest_transaction["gasPrice"]) / 1e18
)
)
conn.commit()
# Send Telegram notification
await send_telegram_notification(wallet_address, metrics, latest_transaction)
return {"status": "Notification sent", "metrics": metrics}
return {"status": "No high-potential opportunity found", "metrics": metrics}
# Run the API
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
```
### مراحل استفاده از سیستم
1. **تنظیم محیط**:
- **نصب کتابخانهها**:
```bash
pip install requests pandas web3 python-telegram-bot fastapi uvicorn sqlite3 python-dotenv
```
- **ایجاد فایل .env**:
ETHERSCAN_API_KEY=your_etherscan_api_key
TELEGRAM_BOT_TOKEN=your_telegram_bot_token
TELEGRAM_CHAT_ID=your_telegram_chat_id
- جایگزین کنید: `your_etherscan_api_key` (از Etherscan)، `your_telegram_bot_token` (از BotFather در تلگرام)، و `your_telegram_chat_id` (آیدی گروه یا کانال تلگرام).
2. **اجرا**:
- فایل `whale_tracker.py` را اجرا کنید:
```bash
python whale_tracker.py
```
- API روی `http://localhost:8000` اجرا میشود.
3. **ارسال درخواست**:
- از مرورگر یا ابزارهایی مثل Postman، درخواست GET به آدرس زیر ارسال کنید:
```
http://localhost:8000/track_wallet/0x123... (آدرس کیفپول نهنگ)
```
- آدرس کیفپول باید یک آدرس معتبر اتریوم باشد (مثلاً از Whale Alert یا Nansen).
4. **دریافت اعلان**:
- اگر معاملهای با معیارهای فیلتر (سود >10%، نرخ برد >70%، حجم >100,000 دلار، کارمزد <5%) شناسایی شود، اعلان به تلگرام ارسال میشود.
### فیلترهای مهم برای دقت بالا
- **سود خالص**: محاسبه سود با مقایسه قیمت خرید/فروش (از APIهایی مثل CoinGecko برای قیمتهای لحظهای).
- **نرخ برد**: بررسی حداقل 70% معاملات سودآور در 30 روز گذشته.
- **حجم معاملات**: فیلتر کردن تراکنشهای بالای 100,000 دلار برای تمرکز بر نهنگها.
- **کارمزدها**: حذف معاملاتی که کارمزد گس آنها بیش از 5% سود است.
- **زمانبندی**: بررسی تغییرات قیمتی 5%+ پس از تراکنش با استفاده از DexTools یا CoinGecko.
- **دادههای معتبر**: استفاده از چند منبع (Etherscan، DexTools) برای تأیید صحت دادهها.
### کاهش ضریب خطا
- **اعتبارسنجی دادهها**: آدرسهای کیفپول و قراردادها را با منابع معتبر (مثل CoinGecko) بررسی کنید.
- **چندمنبعی بودن**: دادهها را از Etherscan، DexTools، و Nansen ترکیب کنید تا خطاها کاهش یابد.
- **ذخیرهسازی دادهها**: استفاده از SQLite برای جلوگیری از پردازش تکراری و ردیابی تاریخچه.
- **فیلترهای سختگیرانه**: معیارهای سختگیرانه (مثل سود >10% و نرخ برد >70%) برای حذف موقعیتهای ضعیف.
- **تست منظم**: اسکریپت را با دادههای آزمایشی (مثل کیفپولهای شناختهشده نهنگها) تست کنید.
### بهبودهای پیشنهادی
- **ادغام با CoinGecko API**: برای دریافت قیمتهای لحظهای توکنها و محاسبه دقیقتر سود.
- **پشتیبانی از چند شبکه**: افزودن پشتیبانی از بایننس اسمارت چین (BscScan) یا سولانا (Solscan).
- **تحلیل پیشرفتهتر**: استفاده از یادگیری ماشین برای پیشبینی رفتار نهنگها (مثلاً با TensorFlow).
- **هشدارهای سفارشی**: افزودن امکان تنظیم فیلترها (مثل حداقل سود یا حجم) توسط کاربر.
### نکات نهایی
- **امنیت**: کلیدهای API و توکن تلگرام را در فایل .env امن نگه دارید.
- **مقیاسپذیری**: برای رصد چندین کیفپول، اسکریپت را با یک حلقه برای بررسی دورهای (مثلاً هر 5 دقیقه) گسترش دهید.
- **هزینهها**: برخی APIها (مثل Etherscan) محدودیت درخواست دارند. نسخههای پولی را برای استفاده سنگین در نظر بگیرید.
اگر نیاز به توضیحات بیشتر درباره هر بخش (مثل تنظیم API، ادغام با CoinGecko، یا بهینهسازی فیلترها) دارید، لطفاً مشخص کنید تا جزئیات دقیقتری ارائه کنم!