اضغط على ESC للإغلاق

التداول الخوارزمي: كيفية كتابة استراتيجيات خاصة باستخدام بايثون

  • مارس 01, 2025
  • 2 minutes read

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

 

1. لماذا بايثون؟

بايثون هو اللغة الأساسية للتداول الخوارزمي لعدة أسباب:

  • سهولة في الكتابة — يسمح بكتابة الكود واختباره بسرعة.
  • نظام بيئي غني — مكتبات للعمل مع البيانات، التحليل، التعلم الآلي و API للبورصات.
  • مرونة — إمكانية التكامل مع الوسطاء، منصات العملات الرقمية، الخوادم والحلول السحابية.

المكتبات الشهيرة للتداول باستخدام بايثون:

  • pandas — لتحليل ومعالجة البيانات.
  • numpy — لإجراء العمليات الرياضية بسرعة.
  • ccxt — الاتصال بالبورصات الرقمية عبر API.
  • backtrader أو zipline — لاختبار الاستراتيجيات.
  • ta — مؤشرات التحليل الفني.

 

2. هيكلية روبوت التداول

يتكون المتداول الخوارزمي عادة من الوحدات التالية:

  1. جمع البيانات
    • طلب الأسعار من البورصة عبر API.
    • تخزين البيانات في الذاكرة المؤقتة أو قاعدة البيانات.
  2. تحليل البيانات
    • حساب المؤشرات (SMA، RSI، MACD، إلخ).
    • اكتشاف الأنماط والاتجاهات.
  3. اتخاذ القرارات
    • تطوير خوارزمية تحدد نقاط الدخول والخروج.
    • إدارة المخاطر (وقف الخسارة، جني الأرباح).
  4. تنفيذ الصفقات
    • إرسال الأوامر عبر API للبورصة.
    • متابعة تنفيذ الأوامر.
  5. التسجيل والمراقبة
    • تسجيل البيانات الخاصة بالصفقات.
    • متابعة الأخطاء وتعديل الاستراتيجية.

 

3. الاتصال بالبورصة والحصول على البيانات

لنقوم بالاتصال بمنصة Binance باستخدام ccxt وتحميل البيانات التاريخية:

import ccxt
import pandas as pd

# الاتصال بـ Binance
exchange = ccxt.binance()

# الحصول على البيانات التاريخية لـ BTC/USDT
bars = exchange.fetch_ohlcv('BTC/USDT', timeframe='1h', limit=100)

# تحويلها إلى DataFrame
df = pd.DataFrame(bars, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')

print(df.tail())

الآن لدينا البيانات التي يمكن العمل عليها.

 

4. تطوير استراتيجية بسيطة (تقاطع SMA)

إحدى أبسط الاستراتيجيات هي تقاطع المتوسطات المتحركة البسيطة (SMA). إذا عبرت الـ SMA القصيرة فوق الطويلة للأعلى — نشتري، وإذا عبرت للأسفل — نبيع.

ننفذ هذا:

import numpy as np

# حساب المتوسطات المتحركة
df['SMA_50'] = df['close'].rolling(window=50).mean()
df['SMA_200'] = df['close'].rolling(window=200).mean()

# توليد الإشارات
df['signal'] = np.where(df['SMA_50'] > df['SMA_200'], 1, -1)

print(df.tail())

هذا الكود يضيف عموداً باسم signal حيث يمثل الرقم 1 الشراء، و -1 البيع.

 

5. اختبار الاستراتيجية (Backtesting)

قبل تنفيذ الاستراتيجية، من المهم اختبارها على البيانات التاريخية. سنستخدم backtrader:

import backtrader as bt

class SmaCross(bt.Strategy):
    params = dict(short_period=50, long_period=200)

    def __init__(self):
        self.sma_short = bt.indicators.SimpleMovingAverage(period=self.params.short_period)
        self.sma_long = bt.indicators.SimpleMovingAverage(period=self.params.long_period)

    def next(self):
        if self.sma_short[0] > self.sma_long[0]:
            self.buy()
        elif self.sma_short[0] < self.sma_long[0]:
            self.sell()

# إنشاء أداة اختبار الباك
cerebro = bt.Cerebro()
data = bt.feeds.PandasData(dataname=df)
cerebro.adddata(data)
cerebro.addstrategy(SmaCross)
cerebro.run()
cerebro.plot()

هذا الكود يختبر كيف كانت ستعمل الاستراتيجية على البيانات التاريخية.

 

6. تنفيذ الصفقات تلقائيًا

الآن بعد اختبار الاستراتيجية، يمكننا أتمتة التداول. مثال على إرسال أمر عبر API لمنصة Binance:

api_key = "YOUR_API_KEY"
api_secret = "YOUR_API_SECRET"

exchange = ccxt.binance({
    'apiKey': api_key,
    'secret': api_secret
})

# إرسال أمر شراء سوقي لشراء 0.01 BTC
order = exchange.create_market_buy_order('BTC/USDT', 0.01)
print(order)

 

7. إدارة المخاطر

عند كتابة روبوت التداول، من المهم أن تأخذ بعين الاعتبار إدارة رأس المال:

  • وقف الخسارة الثابت — لتقليل الخسائر.
  • وقف الخسارة المتحرك — لتثبيت الأرباح.
  • حجم الصفقة — حساب حجم الصفقة بناءً على رصيد الحساب.

مثال على حساب حجم الصفقة (مخاطرة 2%):

capital = 10000  # حجم الرصيد
risk_per_trade = 0.02  # مخاطرة 2%
stop_loss = 200  # الخسارة عند الدخول الخاطئ
trade_size = (capital * risk_per_trade) / stop_loss

print(f"حجم الصفقة الموصى به: {trade_size} USDT")

 

الاستنتاجات

الآن لديك فكرة أساسية عن كيفية كتابة استراتيجيات خوارزمية باستخدام بايثون: ✅ الحصول على البيانات عبر API
✅ استخدام المؤشرات الفنية
✅ اختبار الاستراتيجيات على البيانات التاريخية
✅ تنفيذ الصفقات تلقائيًا
✅ إدارة المخاطر

يمكنك الآن تطوير الاستراتيجية بشكل أكبر، من خلال إضافة التعلم الآلي، مؤشرات أكثر تعقيدًا وتحسين المعلمات.

إذا كنت مهتمًا بمواضيع أكثر تعقيدًا مثل صناعة السوق، HFT أو استراتيجيات التحكيم — اكتب لنا في التعليقات وسنناقشها في المقالة التالية! 🚀

Leave a comment

Your email address will not be published. Required fields are marked *