بناء مجموعة عملات من اثنين من العملاء: عميل البحث + حارس البوابة
مؤلف: فريق FXMacroData
نشرت: 21 مايو 2026
روبوتات الفوركس ذات الوكيل الواحد تفشل لسبب بسيط: نفس النموذج الذي يولد الأفكار يسمح له أيضا بموافقتها. الرواتب غير الزراعية في الولايات المتحدة، خطأ واحد من التفكير يمكن أن تقفز مباشرة في خطر الموقف.
يوضح هذا الدليل بنية أكثر أمانًا: تقسيم المسؤوليات بين اثنين من الوكلاء. يقوم الوكيل الأول بأبحاث السوق ويقدم إعدادات. الوكل الثاني هو حارس حراسة صارم لا يمكنه إلا الموافقة على المقترحات أو تغيير حجمها أو رفضها بناءً على قواعد المخاطر الصعبة.
بحلول النهاية، سيكون لديك سير عمل عملي لعاملين اليورو/دولار و جنيه استرليني مقابل دولار أمريكي يدعم كل من تكامل API REST المباشر وتكامل الأدوات القائمة على MCP.
الشروط المسبقة
- بايثون 3.10+
- مفتاح FXMacroData API من إدارة API. .
- نقطة نهاية ماجستير في العلوم للبحوث ووكلاء حراس البوابات
- معرفة أساسية مع واجهات برمجة التطبيقات JSON و HTTP.
تثبيت التبعيات:
pip install requests python-dotenv pydantic
إبتكر .env الملف:
FXMD_API_KEY=your_fxmacrodata_key
RESEARCH_MODEL=claude-or-hermes
GATEKEEPER_MODEL=claude-or-hermes
MAX_RISK_PCT=0.50
Step 1: Define strict roles for both agents
ماذا تفعل: قم بتحديد المسؤوليات قبل كتابة البرمجة
- وكيل البحث: يقرأ سياق السوق الكلي ويقدم مقترحات لترتيبات المرشحين.
- عامل حارس البوابة: يُحقق من صحة القيود فقط. لا يمكنه ابتكار صفقات جديدة، بل يوافق فقط/يرفض/يقوم بتغيير حجمها.
لماذا يهم: هذا الفصل يمنع نموذج واحد من تجاوز ضوابط المخاطر عندما تكون الثقة عالية ولكن الأدلة ضعيفة.
الخطوة 2: استخدم السياق المهيكلة مع دعوات REST المباشرة
ماذا تفعل: احضر الإصدارات والبيانات الفورية من FXMacroData حتى يحصل وكيل البحث على مدخلات نظيفة بدلاً من عناوين غير منظمة.
curl "https://fxmacrodata.com/api/v1/calendar/usd?api_key=YOUR_API_KEY"
curl "https://fxmacrodata.com/api/v1/announcements/eur/inflation?api_key=YOUR_API_KEY"
curl "https://fxmacrodata.com/api/v1/announcements/gbp/unemployment?api_key=YOUR_API_KEY"
curl "https://fxmacrodata.com/api/v1/forex?base=EUR"e=USD&api_key=YOUR_API_KEY"
لماذا يهم: المجال المتسق والمهيكلة يعطي كلا العاملين نفس مصدر الحقيقة ويجعل التحقق من صحة محدد.
الحد الأدنى لجميع برامج بايثون:
import os
import requests
from datetime import datetime, timezone
API = "https://fxmacrodata.com/api/v1"
KEY = os.environ["FXMD_API_KEY"]
def fxmd_get(path, **params):
r = requests.get(
f"{API}{path}",
params={"api_key": KEY, **params},
timeout=25,
)
r.raise_for_status()
return r.json()
def build_market_context():
return {
"asof_utc": datetime.now(timezone.utc).isoformat(),
"calendar_usd": fxmd_get("/calendar/usd").get("data", [])[:8],
"calendar_eur": fxmd_get("/calendar/eur").get("data", [])[:8],
"eur_inflation": fxmd_get("/announcements/eur/inflation").get("data", [])[-1:],
"gbp_unemployment": fxmd_get("/announcements/gbp/unemployment").get("data", [])[-1:],
"eurusd": fxmd_get("/forex", base="EUR", quote="USD").get("data", [])[-48:],
"gbpusd": fxmd_get("/forex", base="GBP", quote="USD").get("data", [])[-48:],
}
الخطوة 3: توليد مرشحين للتجارة مع وكيل البحث
ماذا تفعل: اسأل وكيل البحث عن المرشحين فقط لا تدعيه يرسل تعليمات جاهزة للتنفيذ
{
"pair": "EUR/USD",
"bias": "long|short|flat",
"thesis": "string",
"confidence": 0.0,
"entry_zone": "string",
"invalidation": "string",
"event_risks": ["string"]
}
لماذا يهم: تخطيط ثابت يسمح لحارس البوابة بتطبيق القواعد على الحقول المتوقعة بدلاً من محاولة تحليل النص الحر.
الخطوة 4: تطبيق قواعد المخاطر الصعبة في وكيل حارس البوابة
ماذا تفعل: اجري كل مرشح من خلال نموذج ثان أو معتمد قاعدة أولا مع حدود صارمة.
مثال سياسة:
- الحد الأقصى للمخاطر لكل صفقة: 0.50٪ من رأس المال.
- لا توجد صفقات جديدة خلال 15 دقيقة من الإفراج عن تأثير كبير من تقويم الإصدار. .
- مستوى الإبطال الإلزامي
- رفض إذا كانت الثقة < 0.60
بوابة بيدانتيك وخرج القرار:
from pydantic import BaseModel, Field
class Candidate(BaseModel):
pair: str
bias: str
thesis: str
confidence: float = Field(ge=0.0, le=1.0)
entry_zone: str
invalidation: str
event_risks: list[str]
class GateDecision(BaseModel):
status: str # approve, resize, reject
approved_size_pct: float
reason: str
def gate(candidate: Candidate, max_risk_pct: float = 0.50) -> GateDecision:
if candidate.confidence < 0.60:
return GateDecision(status="reject", approved_size_pct=0.0, reason="Low confidence")
if not candidate.invalidation.strip():
return GateDecision(status="reject", approved_size_pct=0.0, reason="Missing invalidation")
proposed = 0.50 if candidate.confidence >= 0.75 else 0.30
size = min(proposed, max_risk_pct)
return GateDecision(status="approve", approved_size_pct=size, reason="Within policy")
لماذا يهم: حتى لو كان عميل البحث لديه قراءة سيئة، يمكن لخادم البوابة أن يحجب الإعدادات الضعيفة أو الضخمة.
الخطوة 5: إضافة مسار تكامل MCP (جريان عمل الوكيل الأصلي للأداة)
ماذا تفعل: تعريض FXMacroData من خلال MCP حتى يمكن لأطر العميل استدعاء الأدوات بشكل أصلي بدلاً من بناء غراء REST مخصص لكل بوت.
بدء خادم MCP مبني على بايثون uvx:
uvx fxmacrodata-mcp --transport http --server-url https://fxmacrodata.com/mcp
مثال تكوين العميل:
{
"mcpServers": {
"fxmacrodata": {
"command": "uvx",
"args": [
"fxmacrodata-mcp",
"--transport",
"http",
"--server-url",
"https://fxmacrodata.com/mcp"
]
}
}
}
مثال على مخطط استدعاء أداة MCP لعامل البحث الخاص بك:
{
"name": "get_fx_calendar_and_spot",
"description": "Get upcoming macro events and current spot context for selected pairs",
"input_schema": {
"type": "object",
"properties": {
"currencies": {
"type": "array",
"items": { "type": "string" }
},
"pairs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"base": { "type": "string" },
"quote": { "type": "string" }
},
"required": ["base", "quote"]
}
}
},
"required": ["currencies", "pairs"]
}
}
مثال استدعاء العميل (مسار MCP):
Research Agent:
"Using the fxmacrodata MCP tools, pull today's USD/EUR/GBP calendar and spot for EUR/USD and GBP/USD.
Return up to 3 candidate setups in strict JSON schema."
Gatekeeper Agent:
"Validate each candidate against risk policy v1. Reject anything violating confidence,
size, invalidation, or event-window constraints. Return approve/resize/reject with reason."
لماذا يهم: MCP يقلل من الانجراف التكامل مع نمو كومة الخاص بك، وخاصة عندما تشغيل وكلاء متعددة أو مزودي نموذج المبادلة.
الخطوة 6: توجيه المخرجات إلى مراجعة البشر ، ثم وسيط API
ماذا تفعل: إرسال قرار حارس البوابة إلى سلاك/تلغرام أولاً. فقط إرسالة الصفقات المعتمدة إلى أنظمة التنفيذ بعد التأكيد البشري في الإصدارات الأولى.
لماذا يهم: هذا يخلق حلقة قابلة للتدقيق ويحميك أثناء تغييرات النموذج أو النمط.
[FX Two-Agent Candidate]
Pair: EUR/USD
Research Bias: Long
Gatekeeper: Approve
Approved Size: 0.30%
Reason: Confidence 0.71, invalidation present, no high-impact event in 15m window.
ما بنيت
لديك الآن بنية FX من اثنين من الوكلاء التي تفصل بين توليد الأفكار والموافقة على المخاطر، تدعم اندماج REST المباشر، وتدعم أيضاً تنظيم الأدوات القائمة على MCP من خلال uvxهذا أساس أقوى من الروبوتات العاملة بمفردها لأن المرشحين للتجارة يجب أن ينجووا من بوابة سياسة مستقلة قبل التنفيذ.
الخطوة التالية: إضافة طبقة مفاتيح إيقاف تُجبر تلقائياً reject بعد فترة تأخير غير عادية، أو فقدان حقول البيانات، أو فشل مخطط متكرر خلال جلسات عالية التقلب. يمكنك أيضًا إضافة قيود تتناسب مع الجلسة من جلسات العملات الأجنبية ووضع السياق من كوت. .