كيف تبني بوت تداول بسيط للأسهم العربية باستخدام بايثون

كيف تبني بوت تداول بسيط للأسهم العربية باستخدام بايثون

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

1. اختيار السهم ومصدر البيانات

ابدأ بسهم سائل – مثلاً سهم شركة أرامك أو سابك. السائلية مهمّة لأن البوت يعتمد على حجم التداول لتقليل السحب السعري. للحصول على البيانات، يمكنكم استعمال مكتبة yfinance أو pandas-datareader، لكن السوق العربية ما تكون دائماً مدعومة. في الحالة دي، أنصح بتنزيل ملف CSV من موقع السوق (تداول) أو الاعتماد على واجهة برمجة التطبيقات (API) لوسيط يقدم بيانات مباشرة، مثل Alphavantage مع رموز محلية.

2. إعداد بيئة العمل

نحتاج بيئة نظيفة لتجنب تضارب المكتبات. أنشئ مجلد جديد، وثبت الباكيجات الأساسية:

  • python>=3.8
  • pandas
  • numpy
  • requests (لتواصل API)
  • ta (مؤشرات التحليل الفني)
  • ccxt أو broker-sdk حسب الوسيط

كل هذا يثبت بأمر pip install pandas numpy requests ta.

3. كتابة استراتيجية بسيطة

نختار استراتيجية تعتمد على متوسطين متحركين (EMA). القاعدة:

  • إذا تقاطع EMA قصير (9 أيام) فوق EMA طويل (21 يوم) – إشارة شراء.
  • إذا تقاطع EMA قصير تحت EMA طويل – إشارة بيع.

الكود يبقى شبه التالي:

import pandas as pd
import ta

def get_signals(df):
    df['ema9'] = ta.trend.EMAIndicator(df['Close'], window=9).ema_indicator()
    df['ema21'] = ta.trend.EMAIndicator(df['Close'], window=21).ema_indicator()
    df['signal'] = 0
    df.loc[df['ema9'] > df['ema21'], 'signal'] = 1
    df.loc[df['ema9'] < df['ema21'], 'signal'] = -1
    return df

بعد ما نحصل على الإشارة، نتحقق إذا كانت مختلفة عن الإشارة السابقة لتجنب تنفيذ صفقات متكررة.

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

قبل ما يشتغل على حساب حقيقي، جربه على بيانات تاريخية. استخدم حلقة بسيطة تمر على كل صف من الداتا وتجمع إحصائيات الأداء: صافي الربح، نسبة الفوز، أقصى سحب (drawdown). مثال مختصر:

initial_capital = 100000
position = 0
cash = initial_capital
for i, row in df.iterrows():
    if row['signal'] == 1 and position == 0:
        position = cash / row['Close']
        cash = 0
    elif row['signal'] == -1 and position > 0:
        cash = position * row['Close']
        position = 0
final_value = cash + position * df.iloc[-1]['Close']
print('Return:', (final_value - initial_capital) / initial_capital)

إذا النتيجة إيجابية ومقبولة، نقدر ننتقل للخطوة التالية.

5. ربط البوت بوسيط

معظم الوسطاء العرب (مثل إيتد، أمانة) يوفرون API لتداول مباشر. تحتاج مفتاح API سري – احرص على تخزينه في ملف بيئة (dotenv). الكود للشراء قد يبدو هكذا:

import os
import broker_sdk

api_key = os.getenv('BROKER_API_KEY')
client = broker_sdk.Client(api_key)

def place_order(symbol, qty, side):
    order = client.create_order(symbol=symbol, quantity=qty, side=side, type='market')
    return order

بعد ما يتأكد البوت من إشارة الشراء، يحسب الكمية بناءً على رأس المال المتاح (cash / price) ويستدعي place_order.

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

لا تخلّي البوت يشتري كل رأس المال مرة واحدة. حدّ المخاطرة إلى 2 % من الحساب لكل صفقة. يعني إذا كان رأس المال 100 000 ريال، ما تتجاوز صفة واحدة 2 000 ريال. احسب عدد الأسهم بتقسيم 2 000 على سعر السهم.

كمان ضع وقف خسارة ثابت (مثلاً 3 %) لتقليل الخسائر في حالة انعكاس غير متوقع. في بايثون، يمكن إضافة شرط يراقب السعر الحالي، وإذا وصل إلى مستوى وقف الخسارة، يرسل أمر بيع.

7. تشغيل البوت في الوقت الحقيقي

الخطوة الأخيرة هي تشغيل البرنامج على خادم (VPS) أو جهازك الشخصي مع تشغيل مستمر. استخدم مكتبة schedule لتحديد فترات جلب البيانات (كل 5 دقائق مثلاً) وتنفيذ المنطق. مثال:

import schedule, time

def job():
    df = fetch_latest_data('ARAMC')
    df = get_signals(df)
    execute_trades(df)

schedule.every(5).minutes.do(job)
while True:
    schedule.run_pending()
    time.sleep(1)

بهذا الشكل يظل البوت يشتغل 24 ساعة، ويستجيب للفرص فور حدوثها.

خلاصة

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

آخر المقالات