يتم بناء عميل الذكاء الاصطناعي المستقل (Autonomous AI Agent) من ثلاثة مودولات معزولة تماماً: جامع البيانات على الشبكة (RPC Nodes وIndexer APIs)، النواة المعرفية (نموذج لغوي كبير LLM ذو استجابة سريعة وزمن انتقال منخفض)، وبوابة تنفيذ المعاملات (Action Layer). محاولة ربط منطق التداول الخاص بك بنماذج تجارية تخضع لرقابة صارمة مثل GPT-4o ستنتهي بحظر مفاتيح الـ API الخاصة بك مباشرة أثناء فترات التقلب العالي في السوق؛ لأن فلاتر الأمان الداخلية لديهم تترجم إشارات التداول الفورية كخلق لمخاطر مالية غير مقبولة. لضمان أتمتة مستقرة وثابتة، الخيار الأفضل هو الاعتماد على النماذج المفتوحة غير الخاضعة للرقابة (Open-Weights Models) مثل Llama 3.3 70B أو DeepSeek V3، سواء قمت باستضافتها بشكل لا مركزي أو استدعائها عبر بوابات متخصصة مثل Venice AI.
طبقة التنفيذ (Execution Layer) يجب أن تكون مربوطة ببنية تحتية تضمن أقل بنج (Ping) ممكن. وفي قطاع العقود الآجلة الدائمة (Perps)، أصبحت الـ Hyperliquid API هي المعيار الأساسي في السوق بفضل عملها على تطبيق شبكة مخصص (Dedicated L1 Appchain) يوفر سرعة معالجة للأوامر تصل إلى أقل من 0.1 ثانية. النواة المعرفية لا تملك أي صلاحية وصول مباشرة للمحفظة: يتلقى النموذج مصفوفة من مؤشرات السوق ويعطي التوصية على شكل صيغة JSON، ليقوم بعدها سكريبت محلي مكتوب بـ Python بالتحقق منها ومطابقتها مع حدود صارمة (Hard Limits) قبل إرسال المعاملة إلى الشبكة.
إليكم الكود، وللاطلاع على توثيق الـ Hyperliquid API يمكنك القراءة من هنا: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals
import osimport jsonimport requestsfrom eth_account import Account# نسحب المفاتيح من البيئة، كتابة المفاتيح الخاصة مباشرة في الكود هي انتحار تقني وعته رسمي
VENICE_URL = "https://api.venice.ai/api/v1/chat/completions"
VENICE_KEY = os.getenv("VENICE_API_KEY", "")
WALLET_KEY = os.getenv("AGENT_PRIVATE_KEY", "0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")def get_market_data(coin="ETH"):
# نسحب الـ order book والـ funding الحالي مباشرة من الـ appchain الخاص بـ Hyperliquid
try:
r = requests.post("https://api.hyperliquid.xyz/info", json={"type": "metaAndAssetCtxs"}, timeout=8)
res = r.json()
universe = res[0]["universe"]
ctxs = res[1]
idx = next(i for i, a in enumerate(universe) if a["name"] == coin)
return {
"ticker": coin,
"price": float(ctxs[idx]["midPrice"]),
"funding": float(ctxs[idx]["funding"]),
"oi": float(ctxs[idx]["openInterest"])
}
except Exception:
return None # لو الـ HL مهنج، ما نلمس الأوامر، الأمان فوق كل شيءdef ask_brain(context):
if not VENICE_KEY:
return {"action": "HOLD", "pct": 0, "leverage": 1}
headers = {"Authorization": f"Bearer {VENICE_KEY}", "Content-Type": "application/json"}
# نحصر النموذج في إطار ضيق عشان ما يهري بكلام ماله داعي. نحتاج JSON صافي
prompt = (
"You are a trading bot execution engine. Analyze the metrics. "
"Return JSON ONLY. No markdown blocks, no text explanations. "
"Format: {\"action\": \"BUY\"|\"SELL\"|\"HOLD\", \"pct\": int, \"leverage\": int}"
)
payload = {
"model": "llama-3.3-70b-instruct",
"messages": [
{"role": "system", "content": prompt},
{"role": "user", "content": f"Data: {json.dumps(context)}"}
],
"temperature": 0.1 # نقضي على الهلوسة والإبداع تماماً ونخليه دقيق جداً
}
try:
r = requests.post(VENICE_URL, json=payload, headers=headers, timeout=12)
out = r.json()["choices"][0]["message"]["content"].strip()
# نشيل الـ backticks لو النموذج فهى وأضاف تنسيق الكود تلقائياً
if "```" in out:
out = out.split("```")[1].replace("json", "").strip()
return json.loads(out)
except Exception:
return {"action": "HOLD", "pct": 0, "leverage": 1}def filter_limits(decision, current_price):
# صمام أمان صارم. لو النموذج ضرب سلك معاه، الكود يفرمله فوراً
if decision["action"] not in ["BUY", "SELL"]:
return None
# نحدد الرافعة المالية بحد أقصى 3x وحجم الصفقة بـ 5% كحد أقصى من المحفظة
leverage = min(int(decision.get("leverage", 1)), 3)
pct = min(int(decision.get("pct", 0)), 5)
if pct <= 0:
return None
# نحسب نسبة انزلاق (slippage) بمقدار 0.3% عشان نضمن تنفيذ الأمر فوراً
slip = 1.003 if decision["action"] == "BUY" else 0.997
return {
"coin": "ETH",
"side": decision["action"],
"px": round(current_price * slip, 2),
"lev": leverage,
"size_pct": pct
}def run_pipeline():
if WALLET_KEY != "0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef":
acc = Account.from_key(WALLET_KEY)
print(f"[+] تم تشغيل البوت للمحفظة: {acc.address}")
ctx = get_market_data("ETH")
if not ctx:
print("[-] لا يوجد اتصال مع HL.")
return
raw_decision = ask_brain(ctx)
final_order = filter_limits(raw_decision, ctx["price"])
if final_order:
print(f"[+] تم تجهيز الأمر: {json.dumps(final_order)}")
else:
print("[*] ننتظر الشروط المناسبة، الوضع الحالي بدون تغيير.")if __name__ == "__main__":
run_pipeline()أتمتة الـ Yield Farming في أسواق الإقراض والاقتراض (Lending Markets)
في قطاع الـ DeFi الفوري (Spot DeFi)، يتم عادةً تدريب العملاء على إدارة مراكز الديون (Debt Positions) في مجمعات معزولة (مثل Morpho Blue أو Fluid) أو في الـ Aave V3 العريق. التحدي الأكبر هنا هو الحساب المستمر لمؤشر الأمان (Health Factor أو الـ HF)، وإلا سيتم سحق مركزك المالي وتصفيته بالكامل. يقوم البوت باستدعاء عقد PoolLens عبر الـ RPC ويحسب المخاطر بالطريقة الكلاسيكية:

إذا بدأ السوق في الهبوط الحاد وبدأت قيمة الضمانات (Collateral) في الانهيار، يجب على العميل تفعيل عملية تقليص الرافعة المالية ذاتياً وبشكل جزئي (Self-Deleverage). وعشان ما يحرق كاش أو سيولة من عنده، بيلعب على الـ Flashloans عبر Balancer أو Uniswap V3. هذه الخطوة مصيرية؛ لأن بروتوكولات مثل Morpho تفرض غرامات تصفية (Liquidation Penalties) ضخمة وضخمة جداً، وممكن تخسر 10-15% من رأس مالك المودع في ثانية واحدة.
لو البوت جالس يتنقل بين المجمعات (Pools) يطارد الـ APY المرتفع والمغري، لازم تزرع في الكود حساب دقيق وصارم لتكلفة الـ Gas لكل معاملة. السكريبت بيخبط على الـ API الخاص بـ ParaSwap أو 1inch، يسحب الأسعار ويخصم خسائر الـ Gas والـ Slippage من العائد الإجمالي. إذا كانت عملية نقل العملات المستقرة (مثلاً من Arbitrum إلى Base) بتاخد أكثر من 72 ساعة عشان تغطي تكلفتها وتبدأ تطلع ربح، اسحب على النموذج فوراً. المعاملة بيتم حظرها ورفضها على مستوى المنطق الأساسي للسكريبت، حتى لو الـ LLM معطيها أعلى أولوية وتوقعات وردية فوق السحاب.
مصفوفة المخاطر للأنظمة المستقلة
تسليم المحفظة وإدارتها بالكامل لـ LLM يعتبر دائماً خطوة انتحارية ومخاطرة مرعبة. الشبكات العصبية تأتي معها كمية أخطاء (Bugs) غريبة ومحددة جداً، وهي أشياء لم تكن موجودة أبداً في عالم التداول الخوارزمي التقليدي.
- تسميم البيانات ومصادر الأسعار (Data Poisoning)
المهاجمون يبلشون يضخون معاملات وهمية على الشبكة أو يسبكون أخبار كاذبة في كل مكان. الذكاء الاصطناعي يقرأ هذا الهراء كـ "بداية لتريند صعودي قوي" ويروح يشتري بكل غباء عند القمة (Highs).
الحل: التحقق متعدد المصادر (Multi-Source Verification). يجب على السكريبت مقارنة الهذيان المكتوب في السوشيال ميديا مع أحجام التداول الخام (Raw Volumes) القادمة مباشرة من البلوكشين. إذا ما في سيولة حقيقية في الـ Pool — نتجاهل الأمر تماماً. - أخطاء التنسيق وكسر الهيكل (JSON Break)
السوق فجأة يولع ويدخل في تقلبات جنونية، النموذج يدخل في حالة ذعر، ينسى يقفل علامة تنصيص، أو يحشر نص مال أمه داعي في الرد ويكسر الـ JSON. السكريبت يضرب كراش والبوت يوقف تماماً.
الحل: تطبيق try/except حديدي وصارم. أي خطأ في بناء الجملة (Syntax Error) أثناء عمل parse للرد القادم من الـ LLM لازم يجمد المنطق فوراً ويدخله في وضع الـ HOLD (الاحتفاظ بالمراكز الحالية). حماية الأصول هي الأولوية القصوى دائماً وأبداً. - عمليات الـ Frontrunning أثناء إعادة التوازن
البوت يرمي معاملة نقل السيولة في الـ Mempool العام، وطبعاً بوتات الـ MEV قاعدة تترصد هناك وجاهزة لتصيده. النتيجة إنك بتاكل انزلاق سعري (Slippage) مرعب وتخسر كاش على الفاضي.
الحل: استخدام RPCs خاصة. كل المعاملات نرسلها حصرياً عبر Flashbots Protect أو BuilderRPC لتتجاوز الـ Mempool العام تماماً عشان ما حد يقدر يشوف خطواتنا أو يسبقنا. - تأخر استجابة الشبكة المتتالي (Network Lag)
أثناء الهبوط العنيف والسريع للسوق، أسعار الـ Gas في الـ L1 تطير للفضاء. معاملات البوت الخاصة بدعم الهامش (Margin Top-up) تعلق في الطابور وتصير عبء بدون فائدة، والمركز المالي يتم تصفيته بكل برود وأنت تتفرج.
الحل: توفير احتياطي للـ Gas والسيولة. دائماً نخلي 15-20% من المحفظة بدون لمس بالعملات الأصلية للشبكة (ETH/SOL) في الرصيد، ونحسب حساب احتياطي في الـ maxFeePerGas لا يقل عن +50% من متوسط الشبكة الحالي.
الخلاصة من كل هذا: إنك تعطي الجزء المعرفي (Cognitive Part) صلاحية إدارة المخاطر هو انتحار مالي صريح. النموذج ممتاز جداً فقط كمحلل مرن يبحث عن الثغرات المخفية والمجمعات (Pools) المربحة. لكن أحجام الصفقات، الروافع المالية القصوى، ومحفزات الخروج الطارئ من السوق (Emergency Exits) يجب أن تكون مكتوبة ومحفورة بشكل دائم ومباشر (Hardcoded) في الكود الأساسي.