التداول الخوارزمي عبر API MEXEM: دليل المطورين والمتداولين المحترفين




blue-background

التداول الخوارزمي لم يعد حكراً على البنوك الاستثمارية الكبرى وصناديق التحوط — بل أصبح في متناول أي مطور أو متداول متقدم يمتلك الأدوات الصحيحة. وAPIMEXEM — المبنية على بنية Interactive Brokers التقنية — هي من أقوى وأشمل واجهات برمجية في صناعة الوساطة الأوروبية. فكما كشفنا في مقارنتنا الموضوعية بين MEXEM وأبرز الوسطاء الأوروبيين، API MEXEM هي إحدى النقاط التي يتفوق فيها MEXEM على غالبية المنافسين تفوقاً واضحاً.

في هذا المقال، نستعرض بعمق كيف تعمل API MEXEM، ما البروتوكولات والمكتبات المتاحة، وكيف تبني أول بوت تداول خوارزمي من الصفر — مع أمثلة كود حقيقية وقابلة للتطبيق.

نوع الـ APITWS API + Client Portal (Web) API
اللغات المدعومةPython, Java, C++, C#, DDE للـ Excel
البروتوكولTCP/IP Socket (TWS) + REST/WebSocket (Portal)
الأسواق المتاحةكل أسواق MEXEM: أسهم + ETF + خيارات + عقود آجلة + سندات
سرعة التنفيذميلي ثانية — مناسبة لاستراتيجيات متوسطة السرعة
بيانات السوقبيانات فورية + تاريخية + L2 Order Book
الحساب التجريبيPaper Trading Account — اختبر بدون مخاطر
التوثيقInteractive Brokers API Documentation الرسمية

اقرأ تقييم MEXEM الشامل والموضوعي على theqabrokers.com — تحليل معمّق لكل جوانب الوسيط.

1. ما هو التداول الخوارزمي ولماذا MEXEM API؟

التداول الخوارزمي (Algorithmic Trading) هو تنفيذ صفقات التداول تلقائياً باستخدام برامج حاسوبية تتخذ القرارات بناءً على معايير محددة مسبقاً — سواء كانت إشارات تقنية، بيانات أساسية، أحداث إخبارية، أو معادلات رياضية — دون الحاجة لتدخل بشري في كل صفقة.

لماذا MEXEM API تحديداً؟

  • عمق البيانات: وصول لبيانات فورية وتاريخية ومستويات عمق السوق (Level 2) بجودة مؤسسية.
  • تنوع الأسواق: نفس الأسواق الـ 150+ التي يتيحها MEXEM للتداول اليدوي — كلها قابلة للأتمتة.
  • نظام التوجيه الذكي: كما شرحنا في مقالنا عن Smart Routing وكيف يضمن أفضل سعر تنفيذ، خوارزمياتك ستستفيد تلقائياً من SOR في كل صفقة.
  • خوارزميات تنفيذ جاهزة: VWAP, TWAP, Arrival Price — جاهزة للاستخدام مباشرة في الكود.
  • بيئة اختبار آمنة: نفس API تعمل مع حساب Paper Trading — اختبر كل شيء قبل التشغيل الحقيقي.
  • مكتبات مفتوحة المصدر: مجتمع كبير وأدوات جاهزة كـ ib_insync وibapi الرسمية.

2. بروتوكولات API المتاحة في MEXEM

أ) TWS API — الواجهة الأقوى والأكثر شمولاً

تعمل عبر بروتوكول TCP/IP Socket. تتصل مباشرةً بـ Trader Workstation أو IB Gateway المُثبَّت على جهازك. تُتيح الوصول لجميع إمكانيات MEXEM بدون استثناء.

الخاصيةالتفاصيل
بروتوكول الاتصالTCP/IP Socket — localhost:7497 (live) أو 7496 (paper)
اللغات الرسميةPython, Java, C++, C# — مكتبات رسمية من IBKR
الوصول للبياناتبيانات فورية + تاريخية + L2 + أخبار + ملخص الحساب
الأوامر المتاحةجميع أنواع الأوامر (Market, Limit, Stop, Algo, Options…)
الحد الأقصى للطلبات50 رسالة/ثانية (ضبط آلي للوتيرة مطلوب)
المتطلباتTWS أو IB Gateway مُشغَّل محلياً
الموثوقيةممتازة — بنية IBKR المُثبَتة منذ عقود

ب) Client Portal API — الواجهة السحابية الحديثة

واجهة REST/WebSocket تعمل عبر HTTP بدون الحاجة لتثبيت TWS محلياً. مثالية للحلول السحابية والتشغيل على خوادم بعيدة.

الخاصيةالتفاصيل
بروتوكول الاتصالHTTPS REST + WebSocket
المتطلباتلا يحتاج TWS — يعمل على أي خادم
المصادقةOAuth 2.0 — آمنة وحديثة
الأنسب لـالنشر السحابي + التطبيقات المبنية على ويب
محدوديةأقل شمولاً من TWS API في بعض الميزات المتقدمة
الوثائقswagger/OpenAPI specification رسمية

3. إعداد البيئة البرمجية — الخطوات من الصفر

  1. تثبيت TWS أو IB Gateway

قم بتنزيل IB Gateway (أخف من TWS، مخصص للتشغيل الآلي) من موقع Interactive Brokers وتثبيته. فعّل خيار “Enable ActiveX and Socket Clients” من قائمة Edit → Global Configuration → API → Settings.

  1. تثبيت مكتبة Python (ib_insync — الأبسط للمبتدئين)
# تثبيت ib_insync (مكتبة مجتمعية شائعة)pip install ib_insync
# أو المكتبة الرسمية من IBKRpip install ibapi
  1. أول اتصال بحساب Paper Trading
from ib_insync import *
# الاتصال بحساب Paper Trading (المنفذ 7497)ib = IB()ib.connect(‘127.0.0.1’, 7497, clientId=1)
# طباعة ملخص الحسابaccount = ib.accountSummary()for item in account[:5]:    print(f”{item.tag}: {item.value} {item.currency}”)
ib.disconnect()

تنبيه مهم: استخدم دائماً المنفذ 7497 (Paper Trading) في مرحلة الاختبار، والمنفذ 7496 فقط حين تكون جاهزاً تماماً للتداول الحقيقي. أخطاء الكود في الحساب الحقيقي تُنفَّذ فوراً بأموال حقيقية.

4. جلب بيانات السوق في الوقت الفعلي

أ) بيانات الأسعار الفورية (Market Data)

from ib_insync import *
ib = IB()ib.connect(‘127.0.0.1’, 7497, clientId=1)
# تحديد الأصل: سهم Apple في NASDAQstock = Stock(‘AAPL’, ‘SMART’, ‘USD’)
# طلب بيانات فوريةib.qualifyContracts(stock)ticker = ib.reqMktData(stock)
# انتظار البياناتib.sleep(2)
print(f”السعر الحالي: {ticker.last}”)print(f”عرض الشراء: {ticker.bid}”)print(f”عرض البيع: {ticker.ask}”)print(f”حجم التداول: {ticker.volume}”)

ب) البيانات التاريخية (Historical Data)

# جلب بيانات يومية لآخر سنةbars = ib.reqHistoricalData(    stock,    endDateTime=”,    durationStr=’1 Y’,    barSizeSetting=’1 day’,    whatToShow=’TRADES’,    useRTH=True)
# تحويل لـ DataFrameimport pandas as pddf = util.df(bars)print(df.tail())

5. استراتيجيات التداول الخوارزمي القابلة للتطبيق مع MEXEM API

📈  الاستراتيجية الأولى: تقاطع المتوسطات المتحركة (MA Crossover)

من أبسط وأشهر الاستراتيجيات الخوارزمية: حين يتقاطع المتوسط المتحرك القصير (مثل 20 يوماً) فوق المتوسط الطويل (50 يوماً) — شراء. حين يتقاطع تحته — بيع. بسيطة، قابلة للفهم والاختبار، ومناسبة كنقطة بداية.

import pandas as pdfrom ib_insync import *
def ma_crossover_signal(df, short=20, long=50):    df[‘MA_short’] = df[‘close’].rolling(short).mean()    df[‘MA_long’]  = df[‘close’].rolling(long).mean()    df[‘signal’]   = 0    df.loc[df[‘MA_short’] > df[‘MA_long’], ‘signal’] = 1   # شراء    df.loc[df[‘MA_short’] < df[‘MA_long’], ‘signal’] = -1  # بيع    return df

⚖️  الاستراتيجية الثانية: المراجحة الإحصائية (Pairs Trading)

شراء سهم وبيع سهم مرتبط به آنياً حين ينحرفان عن علاقتهما التاريخية — مراهنة على العودة للمتوسط. مثال: AAPL وMSFT، أو BP وShell، أو سهمَان في نفس القطاع. التنفيذ يحتاج دقة عالية واختباراً إحصائياً مسبقاً.

import numpy as npfrom scipy import stats
def check_pair_signal(price_a, price_b, window=60, threshold=2.0):    # نسبة التسعير بين السهمَين    ratio  = price_a / price_b    mean   = ratio.rolling(window).mean()    std    = ratio.rolling(window).std()    z_score = (ratio – mean) / std    # إشارة شراء: Z > +threshold -> بيع A وشراء B    # إشارة بيع:  Z < -threshold -> شراء A وبيع B    return z_score.iloc[-1]

🕒  الاستراتيجية الثالثة: تنفيذ VWAP — تقليل تأثير الصفقات الكبيرة

لمن يريد تنفيذ أوامر كبيرة بأقل تأثير على السوق: خوارزمية VWAP المدمجة في MEXEM API تُوزّع الأمر الكبير على مدار اليوم بما يتناسب مع حجم التداول في كل فترة — تُقلّل من “تأثير السوق” وتحصل على متوسط سعر تنفيذ أقرب لمتوسط اليوم الفعلي.

# استخدام خوارزمية VWAP المدمجة مباشرةfrom ib_insync import *
order = Order()order.action       = ‘BUY’order.orderType    = ‘IBALGO’order.algoStrategy = ‘Vwap’order.totalQuantity = 1000order.algoParams   = [    TagValue(‘startTime’,    ’09:30:00 US/Eastern’),    TagValue(‘endTime’,      ’16:00:00 US/Eastern’),    TagValue(‘maxPctVol’,    ‘0.1’),   # 10% من حجم السوق    TagValue(‘noTakeLiq’,   ‘0’),]

🔄  الاستراتيجية الرابعة: إعادة التوازن الآلي للمحفظة

بناء بوت يُعيد التوازن لمحفظتك الاستثمارية آلياً بناءً على أوزان مُحددة مسبقاً — مثلاً 60% أسهم + 30% ETFs + 10% ذهب. مرة شهرياً أو ربع سنوياً، يفحص البوت الأوزان الحالية ويُنفّذ الصفقات اللازمة لإعادتها للأهداف. هذا يُكمل خطة الادخار الآلية التي تحدثنا عنها — لكن بمستوى تحكم برمجي أعلى بكثير.

ابدأ التداول الخوارزمي مع MEXEM API اليوم! افتح حسابك مجاناً في MEXEM — بدون حد أدنى للإيداع، وصول فوري لـ API الاحترافية من اليوم الأول. ► افتح حسابك المجاني في MEXEM الآن

6. تنفيذ الأوامر برمجياً — من البسيط للمتقدم

أ) أمر شراء بسيط بالسعر الحالي (Market Order)

from ib_insync import *
ib = IB()ib.connect(‘127.0.0.1’, 7497, clientId=1)
# تحديد الأصلstock = Stock(‘MSFT’, ‘SMART’, ‘USD’)ib.qualifyContracts(stock)
# إنشاء أمر الشراءorder = MarketOrder(‘BUY’, 10)  # شراء 10 أسهم
# تنفيذ الأمرtrade = ib.placeOrder(stock, order)ib.sleep(3)
print(f’حالة الأمر: {trade.orderStatus.status}’)print(f’سعر التنفيذ: {trade.orderStatus.avgFillPrice}’)

ب) أمر بسعر محدد مع وقف خسارة (Bracket Order)

# Bracket Order: شراء + هدف ربح + وقف خسارةbracket = ib.bracketOrder(    action       = ‘BUY’,    quantity     = 100,    limitPrice   = 185.00,   # سعر الشراء المحدد    takeProfitPrice = 195.00, # هدف الربح    stopLossPrice   = 178.00  # وقف الخسارة)
# تنفيذ الثلاثة أوامر دفعة واحدةfor o in bracket:    ib.placeOrder(stock, o)

ج) مراقبة الأوامر في الوقت الفعلي (Event-Driven)

# استخدام Events للاستجابة الفوريةdef on_order_status(trade, fill):    print(f’تنفيذ: {fill.shares} سهم بسعر {fill.execution.price}’)
def on_pnl_update(account, portfolio, positions):    for pos in positions:        print(f'{pos.contract.symbol}: P&L = {pos.unrealizedPnL}’)
# ربط الدوال بالأحداثib.execDetailsEvent += on_order_statusib.updatePortfolioEvent += on_pnl_update
# تشغيل حلقة الأحداثib.run()

7. إدارة المخاطر برمجياً — لا بوت بدون حماية

أي بوت تداول بدون إدارة مخاطر مدمجة هو قنبلة موقوتة. كما ذكرنا في مقالنا عن لماذا MEXEM هو الوسيط الأوروبي الأكثر أماناً، الأمان لا يقتصر على الوسيط — بل يشمل منطق الكود نفسه.

🛡️  الحد الأقصى للخسارة اليومية (Daily Loss Limit)

أضف للبوت شرطاً: إذا تجاوزت الخسارة اليومية X% من رأس المال، أوقف كل التداول لبقية اليوم. لا تترك للبوت حرية خسارة لا محدودة في يوم واحد سيئ.

def check_daily_loss_limit(ib, max_loss_pct=0.02):    account  = {a.tag: float(a.value) for a in ib.accountSummary()}    net_liq  = account.get(‘NetLiquidation’, 0)    daily_pnl = account.get(‘RealizedPnL’, 0)    daily_pnl += account.get(‘UnrealizedPnL’, 0)
    loss_pct = abs(daily_pnl) / net_liq if daily_pnl < 0 else 0
    if loss_pct > max_loss_pct:        print(f’تجاوز حد الخسارة اليومية: {loss_pct:.1%}’)        cancel_all_orders(ib)        return False    return True

📊  الحد الأقصى لحجم المراكز (Position Sizing)

لا تترك للبوت فتح مراكز بأحجام غير محدودة. اجعل حجم كل مركز نسبة ثابتة من رأس المال — مثلاً 5% كحد أقصى لأي مركز واحد. هذا يمنع “مضاعفة” الخسارة في صفقة واحدة سيئة.

⏱️  اختبار الخلفية (Backtesting) قبل التشغيل

قبل تشغيل أي بوت بأموال حقيقية، اختبره على بيانات تاريخية لأطول فترة ممكنة. إذا خسر في الاختبار الخلفي — سيخسر في الحقيقي غالباً. إذا ربح في الاختبار فقط — راجع هل اختبارك متحيز (Overfitting).

8. المكتبات والأدوات المحيطة بـ MEXEM API

الأداةالاستخداماللغةمستوى الصعوبة
ib_insyncأفضل مكتبة Python لـ TWS API — واجهة async أنيقةPythonسهل
ibapi (رسمية)المكتبة الرسمية من IBKR — أكثر تحكماًPython/Java/C++متوسط
zipline-reloadedمنصة Backtesting + Live TradingPythonمتوسط
backtraderمحاكاة الاستراتيجيات وBacktestingPythonمتوسط
pandas-taحساب المؤشرات الفنية (RSI, MACD…)Pythonسهل
alpaca + MEXEMبعض المطورين يستخدمان معاًPythonمتوسط
Jupyter Notebookاختبار وتطوير الاستراتيجيات تفاعلياًPythonسهل
Dockerنشر البوت على خادم سحابي باستمرارDevOpsمتوسط-صعب

9. البوت الكامل — مثال تطبيقي متكامل

إليك هيكل بوت تداول متكامل يدمج كل ما تعلمناه: الاتصال، جلب البيانات، الإشارة، التنفيذ، وإدارة المخاطر:

from ib_insync import *import pandas as pdimport logging
logging.basicConfig(level=logging.INFO)log = logging.getLogger(__name__)
class MexemAlgoBot:    def __init__(self, paper=True):        self.ib     = IB()        self.port   = 7497 if paper else 7496        self.max_loss = 0.02  # 2% حد الخسارة اليومية
    def connect(self):        self.ib.connect(‘127.0.0.1’, self.port, clientId=10)        log.info(‘متصل بـ MEXEM API’)
    def get_signal(self, symbol: str) -> int:        stock = Stock(symbol, ‘SMART’, ‘USD’)        self.ib.qualifyContracts(stock)        bars  = self.ib.reqHistoricalData(            stock, endDateTime=”, durationStr=’3 M’,            barSizeSetting=’1 day’, whatToShow=’TRADES’, useRTH=True        )        df = util.df(bars)        df[‘ma20’] = df[‘close’].rolling(20).mean()        df[‘ma50’] = df[‘close’].rolling(50).mean()        last = df.iloc[-1]        if last[‘ma20’] > last[‘ma50’]:            return 1   # إشارة شراء        elif last[‘ma20’] < last[‘ma50’]:            return -1  # إشارة بيع        return 0
    def execute(self, symbol: str, action: str, qty: int):        if not self.check_risk(): return        stock = Stock(symbol, ‘SMART’, ‘USD’)        self.ib.qualifyContracts(stock)        trade = self.ib.placeOrder(stock, MarketOrder(action, qty))        self.ib.sleep(2)        log.info(f’تنفيذ: {action} {qty} {symbol} @ {trade.orderStatus.avgFillPrice}’)
    def check_risk(self) -> bool:        return check_daily_loss_limit(self.ib, self.max_loss)
    def run(self, symbols: list):        self.connect()        for sym in symbols:            sig = self.get_signal(sym)            if sig == 1:                self.execute(sym, ‘BUY’, 10)            elif sig == -1:                self.execute(sym, ‘SELL’, 10)        self.ib.disconnect()
# تشغيل البوت بحساب Paper Tradingbot = MexemAlgoBot(paper=True)bot.run([‘AAPL’, ‘MSFT’, ‘GOOGL’])

10. API MEXEM في سياق المنظومة الاستثمارية الكاملة

API MEXEM لا تعمل بمعزل — بل هي طبقة التحكم الكاملة لجميع ما يُقدّمه MEXEM. يمكن للمطور بناء نظام يتحكم في:

11. نصائح عملية للبدء — تجنّب الأخطاء الشائعة

  • ابدأ دائماً بـ Paper Trading: لا تُوصّل البوت بالحساب الحقيقي حتى تختبره أسبوعاً كاملاً بلا أخطاء.
  • اجعل البوت يسجّل كل شيء (Logging): كل اتصال، كل إشارة، كل أمر — هذا السجل يُنقذك حين يحدث شيء غير متوقع.
  • أضف Timeout لكل طلب API: لا تترك البوت ينتظر استجابة إلى الأبد — إضافة timeout تمنع تعليق البرنامج.
  • تعامل مع انقطاع الاتصال: اكتب منطق Reconnect تلقائي — الاتصال بالإنترنت ينقطع أحياناً.
  • لا تُفرط في عدد الطلبات: MEXEM API لها حد 50 رسالة/ثانية — إضافة throttling ضرورية.
  • اختبر على بيانات متعددة السيناريو: أسواق صاعدة، هابطة، وجانبية — الاستراتيجية الجيدة تعمل في الثلاثة.
  • لا تُحسّن الاستراتيجية على نفس البيانات التي اختبرتها عليها — هذا Overfitting مضمون للفشل.

الخلاصة — MEXEM API: قوة المؤسسات في يد المطور الفردي

API MEXEM هي المسار الذي يُفتح أمام المطور والمتداول المتقدم للانتقال من “تنفيذ يدوي” إلى “نظام استثماري ذكي” يعمل على مدار الساعة. ومع دعم لغات متعددة، بيانات فورية بجودة مؤسسية، وخوارزميات تنفيذ مدمجة كـ VWAP وTWAP — أنت تمتلك أدوات كانت حكراً على بنوك الاستثمار الكبرى حتى وقت قريب. وكما استعرضنا في مقالنا عن كيف تبدأ رحلتك الاستثمارية مع MEXEM، البداية لا تحتاج رأس مال ضخم — بل حسابًا مجانيًا وفكرة واضحة.

وللاطّلاع على التقييم الكامل والموضوعي لكل ما يُقدّمه هذا الوسيط — توجّه إلى تقييم MEXEM الشامل على theqabrokers.com.

اقرأ التقييم الكامل تقييم MEXEM على theqabrokers.comابدأ البرمجة الآن افتح حسابك مجاناً في MEXEM

إخلاء المسؤولية

جميع الاستثمارات تنطوي على مخاطر. الأكواد والأمثلة البرمجية المذكورة لأغراض تعليمية فقط — اختبرها دائماً في بيئة Paper Trading قبل تفعيلها بأموال حقيقية. التداول الخوارزمي لا يضمن الأرباح. MEXEM Ltd وسيط منظَّم من CySEC برقم ترخيص 325/17.

استشارة مجانية عبر الواتساب

أرسل رسالة الآن

أضف تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *