Signal Pilot
🔴 متقدّم • الدرس 57 من 82

أتمتة التداول: برمِج أفضليتك وأخرج العاطفة

15 دقيقة قراءة • التنفيذ الآلي وواجهات API
Signal Pilot
تعليم تداول احترافي
0%
أنت تتقدّم!
واصل القراءة لإكمال هذا الدرس

الثالثة فجرًا. إعداد الكنس لديك يتحقّق. وأنت نائم.

يضع البوت الصفقة، ويثبّت وقف الخسارة، ويستهدف 3R. وأنت في أحلامك.

السادسة صباحًا. تستيقظ. الصفقة أُغلقت. ربح 2.8R. وطعم القهوة أفضل.

🎯 ما تَعِد به الأتمتة

لا FOMO. لا خوف. لا تردّد. مجرّد شيفرة تنفّذ قواعدك بدقّة في كل مرّة.

هذا ليس خيالًا علميًا. هكذا يتداول المحترفون في 2024.

📉 دراسة حالة: نداء الهامش على مايك بـ 19,000 دولار

المشهد: مايك سوليفان (مثال مركّب)، مطوّر Python، حساب بـ 200,000 دولار. بوت على API من Alpaca (شراء SPY عند RSI<30). backtest لأعوام 2020-2023: نسبة ربح 67 %، و+140,000 دولار. أُطلق بصفر ضوابط أمان.

الكارثة (صباح صدمة بيانات التضخّم): عمل البوت 8 أسابيع (+14,000 دولار، نسبة ربح 71 %). فتح SPY بفجوة ‏-2.8 % عند 510 دولارات. رأى البوت RSI عند 22 وواصل الشراء: 200,000 دولار عند 510 و505 و495 و490 دولارًا = مركز بـ 800,000 دولار (رافعة 4 أضعاف، متوسّط تكلفة 499.87 دولارًا). عند الثالثة عصرًا: SPY عند 488 دولارًا — أي 7 % تحت إغلاق اليوم السابق — قيمة المركز 781,000 دولار، بخسارة 19,005 دولارات، ووصل نداء الهامش. كان مايك في عمله ولم يستطع فعل شيء.

التعافي: الحساب بعد الانفجار: 195,000 دولار. أُعيد بناؤه بخمسة ضوابط: مركز بحدّ أقصى 50,000 دولار، وVIX>25 = تعطيل، و3 صفقات يوميًا كحدّ أقصى، وتنبيه عند ‏-5 % من القمّة، وإيقاف كامل عند ‏-10 %. النتيجة خلال الأشهر الثمانية التالية: 195,000 دولار → 218,000 دولار (+12 %)، ولم يتخلّف أي ضابط عن العمل ولو مرّة.

الدرس: برمِج ضوابط الأمان أولًا: (1) حدود المركز، (2) مرشّحات التقلّب، (3) قطع عند أقصى drawdown، (4) زرّ إيقاف. الـ backtest يكذب: فهو يتجاهل البجعات السوداء.

سؤال: بوت مايك تلقّى نداء هامش في صباح واحد. ما السبب؟

A) slippage في التنفيذ ومشكلات في زمن الاستجابة
B) انقطع اتصال API أثناء الانهيار
C) صفر ضوابط أمان — متوسّط البوت السعر 4 مرّات خلال هبوط 7 % في يوم واحد، فبلغ مركزًا بـ 800,000 دولار (رافعة 4 أضعاف) على حساب بـ 200,000 دولار
D) خطأ برمجي أنتج أوامر مكرّرة
الإجابة الصحيحة: ج. برمَج مايك «اشترِ عند تشبّع RSI بالبيع» لكنه لم يبرمج أبدًا حدودًا للمركز ولا مرشّحات تقلّب ولا زرّ إيقاف. بنى البوت مركزًا برافعة 4 أضعاف أثناء الانهيار — 19,005 دولارات خسارة ونداء هامش قبل أن يصل هو إلى لوحة مفاتيح. التعافي: أضاف خمسة ضوابط أمان وأخذ الحساب من 195,000 دولار إلى 218,000 دولار في 8 أشهر. برمِج ضوابط الأمان أولًا.
⚡ خطوات سريعة للغد (اضغط للعرض)
  1. تداول على الورق أولًا — لا تضع رأس مال حقيقي خلف أتمتة غير مختبَرة. الورق أولًا، وبحسب الجزء 2 هذا يعني أشهرًا لا أسابيع.
  2. أضف حدودًا للمركز — ثبّت في الشيفرة حجمًا أقصى للمركز: 2 % من الحساب مخاطرةً لكل صفقة وسقفًا للقيمة الاسمية أيضًا، لأن 2 % مخاطرة ليست 2 % انكشافًا.
  3. ابنِ زرّ إيقاف — أنشئ إيقافًا يدويًا يعطّل كل نشاط البوت بنقرة أو أمر واحد.
الجزء 1: لماذا تؤتمت تداولك؟

المشكلة البشرية في التداول

قضيت 6 أشهر في صقل استراتيجية. اختبرتها في backtest. واختبرتها إلى الأمام. نسبة الربح: 62 %. متوسّط R: 2.3. الأفضلية مؤكّدة.

تبدأ بتداولها بأموال حقيقية. والنتيجة؟

الشهر أداء الاستراتيجية (لو اتُّبعت بدقّة) أداؤك الفعلي المشكلة
الشهر 1 +4,200 دولار (نسبة ربح 62 %) +1,800 دولار (نسبة ربح 48 %) تخطّيت 3 إعدادات (خوف بعد سلسلة خسائر)
الشهر 2 +3,900 دولار (نسبة ربح 60 %) ‏-2,100 دولار (نسبة ربح 38 %) صفقات انتقام، ومضاعفة الحجم بعد الخسائر
الشهر 3 +5,100 دولار (نسبة ربح 65 %) +900 دولار (نسبة ربح 52 %) ترّددت في إعدادات الاختراق، وفاتك 40 % من الإشارات

الحقيقة القاسية: لديك استراتيجية رابحة. لكن الحلقة الأضعف هي أنت.

قتلة التنفيذ الثلاثة

1. التردّد (التخطّي بدافع الخوف)

  • تلقّيت خسارتين للتوّ. يظهر الإعداد رقم 3. تفكّر: «ربما أنتظر تأكيدًا…»
  • تنتظر. يمضي السعر من دونك. كانت صفقة بـ 4R. فاتتك بسبب الخوف.
  • الأثر: تخطّي الصفقات الرابحة يهدم التوقّع الإيجابي

2. الإفراط في التداول (الدخول بدافع FOMO)

  • السوق ينطلق صعودًا. استراتيجيتك تقول «لا يوجد إعداد». لكنك لا تحتمل المشاهدة. تدخل على أي حال.
  • لا وقف خسارة. لا خطّة. مجرّد أمل. ينعكس. تخسر.
  • الأثر: الدخول العشوائي يخفّف أفضليتك بالضجيج

3. حجم مركز غير ثابت

  • الإعداد A: تخاطر بـ 1 % (حذر بعد خسارة قريبة)
  • الإعداد B: تخاطر بـ 5 % (واثق، «أشعر بها»)
  • الإعداد A يربح 3R. تكسب 3 %. الإعداد B يخسر 1R. تخسر 5 %. الصافي: ‏-2 %.
  • الأثر: قرار خاطئ واحد في الحجم يمحو 3 صفقات جيّدة

💡 ما الذي تحلّه الأتمتة

بوت التداول الآلي ينفّذ بـ انضباط تام:

  • لا تردّد: يظهر الإعداد → تُنفَّذ الصفقة (حتى بعد 5 خسائر متتالية)
  • لا FOMO: لا يظهر الإعداد → ينتظر البوت (مهما بدا السوق مملًّا)
  • حجم مثالي: كل صفقة تخاطر بـ 2 % بالضبط (أو ما برمجته)، في كل مرّة

النتيجة: أداؤك في backtest يصبح أداءك الحقيقي. الأفضلية التي اختبرتها هي الأفضلية التي تحصل عليها.

مشكلة التوسّع (حدود التداول اليدوي)

التداول اليدوي يضع سقفًا على إمكاناتك:

القيد الحدّ اليدوي الإمكان مع الأتمتة
الأسواق مراقبة 1-3 رموز (حدّ الانتباه البشري) مراقبة أكثر من 50 رمزًا في آن واحد
الأطر الزمنية متابعة إطارين على الأكثر مسح 5 دقائق و15 دقيقة وساعة واليومي دفعة واحدة
الساعات التداول 6-8 ساعات يوميًا (خطر الإنهاك) التداول بلا توقّف (العملات الرقمية) أو طوال ساعات السوق (الأسهم)
الإعدادات التقاط 5-10 إعدادات أسبوعيًا (واقعي لمتداول تقديري) التقاط 50-200 إعداد أسبوعيًا (البوت لا ينام ولا يفوته شيء)

مثال: متداول يدوي يراقب ES (عقود S&P الآجلة) على رسم 15 دقيقة. يلتقط نحو 8 إعدادات أسبوعيًا. ويكسب 3,200 دولار شهريًا في المتوسّط — أي نحو 92 دولارًا لكل إعداد.

المتداول نفسه بعد الأتمتة: يمسح البوت ES وNQ وRTY (عقود المؤشّرات الآجلة) إضافة إلى GC وCL (المعادن والطاقة) على 5 دقائق و15 دقيقة وساعة. يلتقط نحو 24 إعدادًا أسبوعيًا. وبالـ 92 دولارًا نفسها لكل إعداد، يصير ذلك 9,600 دولار شهريًا.

ما الذي يتحرّر: أنت لا تتداول بشكل أفضل. أنت تتداول أكثر — دون أن تحترق.

وأين السقف: ES وMES وSPY وQQQ هي إلى حدّ بعيد الصفقة نفسها. إضافة رموز مترابطة تضاعف عدد إشاراتك لا أفضليتك — وتضاعف مخاطرك حين تنطلق أربعة منها معًا. عُدّ الفرص غير المترابطة، لا الرموز.

متى تكون الأتمتة منطقية (ومتى لا تكون)

تعمل الأتمتة على أفضل وجه مع:

  • الاستراتيجيات القائمة على قواعد: معايير دخول وخروج واضحة (مثلًا «اشترِ حين يكنس السعر قاعًا ثم يستعيده»)
  • الإعدادات المتكرّرة: استراتيجيات تتحقّق أكثر من 10 مرّات أسبوعيًا (العدد يبرّر وقت البرمجة)
  • التنفيذ المملّ: استراتيجيات لا يضيف فيها التقدير الشخصي قيمة (أفضليات ميكانيكية)

وتتعثّر الأتمتة مع:

  • الإعدادات التقديرية: «لا أتداول هذا إلا حين *أشعر* أنه صحيح» (الحدس لا يُبرمج)
  • الصفقات المرهونة بالسياق: «هذا الاختراق ينجح إذا تجاوز الحجم ضعفَي المتوسّط ووُجد محفّز إخباري» (السياق المركّب يصعب تكميمه)
  • الاستراتيجيات منخفضة التكرار: إعدادات تتحقّق مرّة أو مرّتين شهريًا (لا تستحقّ عناء البرمجة)

⚠️ الأتمتة لا تصلح استراتيجية سيّئة

خطأ شائع: «استراتيجيتي لا تعمل يدويًا. ربما يجعلها البوت رابحة؟»

الواقع: تنفّذ الأتمتة استراتيجيتك تمامًا كما برمجتها. إن لم يكن لاستراتيجيتك أفضلية، فسيخسر البوت باستمرار — لكن أسرع وبكفاءة أعلى.

القاعدة: لا تؤتمت إلا الاستراتيجيات ذات التوقّع الإيجابي المثبت على أكثر من 100 صفقة يدوية. الأتمتة تضخّم الأفضليات. وهي لا تصنعها.

الجزء 2: اختيار API والوسيط

مقارنة واجهات API لدى الوسطاء

ليس كل وسيط يدعم التداول الآلي. ومن يدعمه تتفاوت لديه الجودة والتكلفة والمزايا تفاوتًا كبيرًا.

أفضل واجهات API لدى الوسطاء للتداول الآلي

الوسيط فئات الأصول جودة API التكاليف الأفضل لـ
Alpaca أسهم وETF وعملات رقمية ⭐⭐⭐⭐⭐ ممتازة (RESTful ‏+ WebSocket، موثّقة جيّدًا) الأسهم بلا عمولة، والعملات الرقمية 0.1-0.25 % المبتدئون (أسهل API، تداول ورقي مجاني، مكتبة Python)
Interactive Brokers ‏(IBKR) أسهم وخيارات وعقود آجلة وعملات وCFD (أسواق عالمية) ⭐⭐⭐⭐ جيّدة (قوية لكن معقّدة، منحنى تعلّم حادّ) 0.005 دولار للسهم، و0.65 دولار لعقد الخيارات المتداولون المتقدّمون (يريدون أتمتة الخيارات والعقود الآجلة ووصولًا عالميًا)
Binance عملات رقمية (أكثر من 600 زوج؛ المنصّة الرئيسية مغلقة أمام المقيمين في الولايات المتحدة — وBinance.US منصّة منفصلة وأصغر بكثير) ⭐⭐⭐⭐⭐ ممتازة (REST ‏+ WebSocket، إنتاجية عالية) 0.1 % في الفوري، و0.02-0.04 % في الآجل (مع خصم BNB) متداولو الخوارزميات في العملات الرقمية (أسواق بلا توقّف وسيولة عالية)
Schwab (سابقًا TD Ameritrade / thinkorswim) أسهم وخيارات وعقود آجلة ⭐⭐⭐ متوسّطة (أُوقفت واجهة TD Ameritrade القديمة في 2024؛ وحلّت محلّها Schwab Trader API وما زالت تنضج) 0 دولار على الأسهم، و0.65 دولار لعقد الخيارات عملاء Schwab الحاليون (الحساب موجود ويريدون الأتمتة)
TradeStation أسهم وخيارات وعقود آجلة ⭐⭐⭐⭐ جيّدة (برمجة بلغة EasyLanguage، وbacktesting مدمج) 0 دولار على الأسهم، و0.60 دولار لعقد الخيارات المتداولون النشطون (يريدون منصّة متكاملة بلا برمجة خارجية)

دليل سريع للاختيار

اختر Alpaca إذا: كنت تتعلّم الأتمتة (أسهل API، تداول ورقي مجاني، أفضل توثيق). اختر Interactive Brokers إذا: احتجت خيارات أو عقودًا آجلة أو أسواقًا عالمية (كل فئات الأصول، 0.005 دولار للسهم، مستوى مؤسّسي). اختر Binance إذا: كنت في العملات الرقمية فقط (أسواق بلا توقّف، أكثر من 600 زوج، رسوم 0.1 %).

💡 نصيحة محترف: ابدأ دائمًا بالتداول الورقي

كل وسيط مذكور أعلاه يوفّر تداولًا ورقيًا (تداول محاكى بأموال وهمية وبيانات حقيقية).

الجدول الزمني المقترح:

  1. الأسبوعان 1-2: الاتصال بـ API واختبار إرسال الأوامر الأساسية (شراء، بيع، وقف خسارة)
  2. الأسابيع 3-8: برمجة استراتيجيتك وتشغيلها على الورق ومتابعتها يوميًا
  3. الأسابيع 9-12: التحقّق من أداء الاستراتيجية (هل يطابق backtest؟)
  4. من الشهر 4: إن كانت رابحة 3 أشهر متتالية على الورق، انتقل للحقيقي بـ 10 % من رأس المال
  5. من الشهر 6: إن ظلّت رابحة، ارفعها إلى التخصيص الكامل

لا تتخطَّ التداول الورقي أبدًا. مايك (دراسة الحالة أعلاه) تخطّاه وتلقّى نداء هامش في صباح واحد.

الجزء 3: بناء أول استراتيجية آلية لك

من فكرة التداول إلى شيفرة قابلة للتنفيذ

لديك استراتيجية يدوية. كيف تترجمها إلى شيفرة ينفّذها بوت؟

إطار ترجمة الاستراتيجية في 5 خطوات

الخطوة 1: حدّد شروط الدخول (قواعد صريحة فقط)

يفكّر المتداول اليدوي هكذا: «أشتري حين يكنس السعر قاعًا ثم يرتدّ صعودًا.»

هذا مبهم أكثر من اللازم بالنسبة لبوت. البوت يحتاج منطقًا دقيقًا:

  • ما هو «الكنس»؟ → قاع الشمعة الحالية ينزل 0.3 % على الأقل تحت قاع التأرجح السابق
  • وما معنى «يرتدّ صعودًا»؟ → يغلق السعر مجدّدًا فوق قاع التأرجح خلال 1-3 شمعات
  • وما هو «قاع التأرجح»؟ → أدنى قاع في آخر 20 شمعة

الصيغة المبرمَجة:

swing_low = min([bar.low for bar in last_20_bars])
current_low = current_bar.low
current_close = current_bar.close

if current_low < swing_low * 0.997:  # كُنس 0.3 % تحته
    if current_close > swing_low:     # استعاده
        ENTRY = True  # تأكّد إعداد الكنس

الخطوة 2: حدّد شروط الخروج (الوقف والهدف)

المتداول اليدوي: «أضع الوقف تحت الكنس، وآخذ الربح عند نسبة مخاطرة إلى عائد 3 إلى 1.»

الصيغة المبرمَجة:

entry_price = current_close
stop_loss = swing_low * 0.995  # أسفل الكنس مباشرة
stop_distance = entry_price - stop_loss
target = entry_price + (stop_distance * 3)  # هدف 3R

الخطوة 3: حدّد حجم المركز (إدارة المخاطر)

المتداول اليدوي: «أخاطر بنحو 2 % في الصفقة الواحدة.»

الصيغة المبرمَجة:

account_equity = 100000  # حساب بـ 100,000 دولار
risk_per_trade = 0.02    # 2 %
risk_amount = account_equity * risk_per_trade  # 2,000 دولار

stop_distance = entry_price - stop_loss
position_size = risk_amount / stop_distance  # عدد الأسهم

# مثال: دخول 520 دولارًا، وقف 518 دولارًا، مسافة دولاران
# حجم المركز = 2,000 دولار / دولاران = 1,000 سهم
# ...أي 520,000 دولار من SPY على حساب بـ 100,000 دولار. قاعدة 2 %
# لا تقول شيئًا عن القيمة الاسمية: الوقف الضيّق يشتري لك رافعة بهدوء.
max_notional = account_equity * 1.5   # سقف صارم عند 1.5 ضعف حقوق الملكية
position_size = min(position_size, max_notional / entry_price)
# بعد السقف: 288 سهمًا. المخاطرة الحقيقية 576 دولارًا لا 2,000 -
# هذا هو الثمن، وهو بالضبط ما يبقيك في السوق.

الخطوة 4: حدّد إدارة الصفقة (اختياري)

هل تخرج على دفعات؟ هل تحرّك الوقف؟ هل تجني أرباحًا جزئية؟

مثال: «أجني 50 % من الربح عند 2R وأترك الباقي يجري حتى 3R.»

if current_price >= entry_price + (stop_distance * 2):
    SELL_HALF = True  # إغلاق 50 % عند 2R
    # نقل الوقف إلى نقطة التعادل لبقيّة الـ 50 %

الخطوة 5: حدّد المرشّحات (لمنع الإعدادات السيّئة)

ما الظروف التي تُبطل الإعداد؟

  • مرشّح الوقت: التداول في أوّل ساعتين من الجلسة فقط (9:30-11:30 بتوقيت الشرق)
  • مرشّح التقلّب: تخطّي الصفقات حين يتجاوز VIX مستوى 30 (متقطّع أكثر من اللازم)
  • مرشّح الاتجاه: إعدادات الشراء فقط حين يكون السعر فوق EMA لـ 50 فترة
if VIX > 30:
    SKIP_TRADE = True  # السوق شديد التقلّب

if current_time < "09:30" or current_time > "11:30":
    SKIP_TRADE = True  # خارج نافذة التداول

✅ مثال كامل للاستراتيجية (منطق بوت الكنس)

الخطوات الخمس مجتمعة في شبه شيفرة قابلة للتنفيذ:

# الخطوة 1: شروط الدخول
swing_low = min([bar.low for bar in last_20_bars])
if current_bar.low < swing_low * 0.997:  # كنس
    if current_bar.close > swing_low:     # استعاده

        # الخطوة 2: الخروج
        entry = current_bar.close
        stop = swing_low * 0.995
        target = entry + ((entry - stop) * 3)

        # الخطوة 3: حجم المركز
        risk_amount = account_equity * 0.02
        size = risk_amount / (entry - stop)

        # الخطوة 4: إدارة الصفقة (50 % عند 2R)
        profit_target_partial = entry + ((entry - stop) * 2)

        # الخطوة 5: المرشّحات
        if VIX < 30 and time_in_window():
            PLACE_ORDER(symbol, size, entry, stop, target)

صار هذا قابلًا للتنفيذ. يستطيع بوت أن يتبع هذه القواعد بدقّة في كل مرّة.

التنفيذ الكامل للبوت (استراتيجية الكنس والانعكاس)

import alpaca_trade_api as tradeapi
from alpaca_trade_api.rest import TimeFrame
import os, time

# الإعداد
API_KEY = os.getenv('ALPACA_API_KEY')  # لا تكتبه في الشيفرة أبدًا!
API_SECRET = os.getenv('ALPACA_API_SECRET')
api = tradeapi.REST(API_KEY, API_SECRET, 'https://paper-api.alpaca.markets')

MAX_NOTIONAL_MULT = 1.5   # لا تحتفظ بأكثر من 1.5 ضعف حقوق الملكية
MAX_DAILY_LOSS = 0.03     # زرّ الإيقاف: نتوقّف لهذا اليوم عند -3 %

def get_swing_low(bars, lookback=20):
    # استبعد الشمعة الحالية. لو أدخلتها، صار قاع التأرجح هو القاع الحالي
    # نفسه، فلا يتحقّق اختبار الكنس أبدًا ولا ينطلق البوت مرّة واحدة.
    lows = [bar.l for bar in bars[-(lookback + 1):-1]]
    return min(lows)

def check_sweep(current_price, current_low, swing_low):
    # الكنس = القاع الحالي < قاع التأرجح (0.3 %)، ثم استعادة فوقه
    if current_low < swing_low * 0.997 and current_price > swing_low:
        return True
    return False

def calculate_position_size(api, entry, stop):
    equity = float(api.get_account().equity)
    risk_amount = equity * 0.02                        # مخاطرة 2 %
    by_risk = risk_amount / (entry - stop)
    by_notional = (equity * MAX_NOTIONAL_MULT) / entry  # الضابط الذي أهمله مايك
    return int(min(by_risk, by_notional))

def kill_switch_tripped(api):
    acct = api.get_account()
    move = (float(acct.equity) - float(acct.last_equity)) / float(acct.last_equity)
    return move <= -MAX_DAILY_LOSS

def in_position(api, symbol):
    # اسأل الوسيط؛ لا تثق بمتغيّر محلّي. أمر bracket نُفِّذ وأُغلق ليلًا
    # يجب ألّا يمنع إعداد الغد.
    try:
        api.get_position(symbol)
        return True
    except Exception:
        return False

def place_bracket_order(api, symbol, size, entry, stop, target):
    try:
        order = api.submit_order(
            symbol=symbol, qty=size, side='buy', type='limit',
            limit_price=entry, time_in_force='gtc',
            order_class='bracket',
            stop_loss={'stop_price': stop},
            take_profit={'limit_price': target}
        )
        print(f"✓ أمر: {size} سهمًا @ ${entry} | وقف: ${stop} | هدف: ${target}")
        return order
    except Exception as e:
        print(f"✗ فشل الأمر: {e}")
        return None

def run_bot(symbol='SPY'):
    print(f"انطلق البوت. أراقب {symbol} بحثًا عن إعدادات كنس...")

    while True:
        try:
            if not api.get_clock().is_open:      # الضابط 1: ساعات السوق
                time.sleep(60)
                continue
            if kill_switch_tripped(api):         # الضابط 2: حدّ الخسارة اليومي
                print("🛑 بلغنا حدّ الخسارة اليومي. أتوقّف.")
                break

            bars = api.get_bars(symbol, TimeFrame.Minute, limit=50)
            current_price = bars[-1].c
            current_low = bars[-1].l
            swing_low = get_swing_low(bars)

            if not in_position(api, symbol) and check_sweep(current_price, current_low, swing_low):
                print(f"🎯 رُصد كنس @ ${current_price}")
                entry = current_price
                stop = swing_low * 0.995
                target = entry + (entry - stop) * 3  # 3R
                size = calculate_position_size(api, entry, stop)   # الضابط 3: سقف القيمة الاسمية
                if size > 0:
                    place_bracket_order(api, symbol, size, entry, stop, target)

            time.sleep(60)  # تحقّق كل دقيقة
        except Exception as e:
            print(f"خطأ: {e}")
            time.sleep(60)

run_bot()  # نحو 75 سطرًا - وأهمّ ثلاثة فيها هي الضوابط.

ماذا يفعل هذا: يتّصل بـ Alpaca، ويجلب شمعات SPY لدقيقة واحدة، ويرصد انعكاسات ما بعد الكنس (القاع يكنس تحت قاع التأرجح ثم يستعيده)، ويحسب الحجم على مخاطرة 2 % مقيَّدًا بسقف القيمة الاسمية، ويضع أمر bracket (دخول + وقف + هدف 3R)، ويكرّر ذلك كل 60 ثانية — لكن فقط ما دام السوق مفتوحًا، وفقط حين يؤكّد الوسيط عدم وجود مركز، وأبدًا بعد أن يهبط اليوم 3 %. انضباط تام، صفر عاطفة، وثلاث فرامل.

💡 لحظة الإدراك

لقد أزلت للتوّ الطبقة البشرية. لا مزيد من «هل آخذ هذه؟». ولا مزيد من «ربما أنتظر».

يظهر الإعداد → يتداول البوت. لا يظهر → ينتظر البوت. انضباط تام.

الجزء 4: النشر في بيئة الإنتاج (الجزء الصعب)

التداول الورقي ≠ التداول الحقيقي

بوتك يعمل بلا عيب على الورق. تنقله إلى الحقيقي. ينهار. تُرفض الأوامر. أنت في حيرة.

أهلًا بك في بيئة الإنتاج.

الأخطاء الشائعة (وكيف تعالجها)

الأخطاء الشائعة: انتهاء مهلة الاتصال، ورفض الأمر، والتنفيذ الجزئي، وحدود الطلبات، وسوق مغلق. العلاجات: منطق إعادة المحاولة (3 مرّات بتراجع أسّي)، وفحوص قبلية (الرصيد، ساعات السوق، السعر)، ومعالجة التنفيذ الجزئي، وتحديد معدّل الطلبات (200 في الدقيقة)، وفحص ساعات السوق (9:30-16 بتوقيت الشرق). البوتات المحترفة تعالج الأخطاء بأناقة.

منطق إعادة المحاولة (ضروري)

import uuid

def place_order_with_retry(api, **order_params):
    """إعادة محاولة إرسال الأمر حتى 3 مرّات"""
    max_retries = 3

    # المعرّف نفسه في كل محاولة. إن كان الطلب الأوّل قد وصل فعلًا
    # إلى الوسيط وضاع الردّ وحده، تُرفض إعادة المحاولة بوصفها
    # تكرارًا بدل أن تضاعف مركزك.
    order_params.setdefault('client_order_id', f"bot-{uuid.uuid4()}")

    for attempt in range(max_retries):
        try:
            order = api.submit_order(**order_params)
            return order  # نجح!

        except Exception as e:
            if attempt < max_retries - 1:
                wait = 2 ** attempt  # ثانية ثم ثانيتان (تراجع أسّي)
                print(f"فشل الأمر: {e}. إعادة المحاولة بعد {wait} ثانية...")
                time.sleep(wait)
            else:
                # فشلت المحاولة الأخيرة أيضًا
                print(f"فشل الأمر بعد {max_retries} محاولات: {e}")
                # أرسل تنبيهًا (بريد، رسالة نصية)
                raise  # أعد رمي الاستثناء

المتابعة والتنبيهات (بالغة الأهمية)

بوتك يعمل على VPS في السحابة. أنت على العشاء. يصطدم البوت بخطأ.

أنت الآن في منتصف الطريق. تعلّمت الاستراتيجيات الأساسية.

تقدّم رائع! خذ استراحة قصيرة إن احتجت، ثم ننتقل إلى المفاهيم المتقدّمة التالية.

كيف تعرف؟

الإجابة: بالتنبيهات.

import smtplib
from email.mime.text import MIMEText

def send_alert(subject, message):
    """إرسال تنبيه بالبريد"""
    msg = MIMEText(message)
    msg['Subject'] = subject
    msg['From'] = 'bot@yourbot.com'
    msg['To'] = 'you@gmail.com'

    # الإرسال عبر SMTP من Gmail - يحتاج كلمة مرور تطبيق من Gmail،
    # لا كلمة مرور حسابك؛ فقد أُوقفت المصادقة الأساسية في 2022.
    with smtplib.SMTP('smtp.gmail.com', 587) as server:
        server.starttls()
        server.login('bot@yourbot.com', os.getenv('EMAIL_PASSWORD'))
        server.send_message(msg)

# الاستخدام
try:
    # منطق التداول
    pass
except Exception as e:
    send_alert(
        subject="🚨 خطأ في بوت التداول",
        message=f"اصطدم البوت بخطأ: {e}"
    )
    raise

الآن تعرف خلال دقائق إن تعطّل شيء.

🚨 زرّ الإيقاف (غير قابل للتفاوض)

يجب أن يتوقّف بوتك عن التداول تلقائيًا إذا:

  • تجاوز drawdown اليومي ‏-3 % (كما كان بوت مايك المعاد بناؤه يُغلق نهائيًا عند ‏-10 % من القمّة)
  • توالت 5 خسائر
  • تجاوزت أخطاء API عشرة في الساعة
  • رُصد سلوك غير متوقّع

برمِج هذا. اختبره. حسابك معلّق عليه.

الاستضافة: أين تشغّل بوتك

لماذا يفشل حاسوب المنزل

  • انقطاع الكهرباء: ينطفئ الحاسوب ويتوقّف البوت
  • انقطاع الإنترنت: لا اتصال = صفقات ضائعة
  • تحديثات Windows: إعادة تشغيل تلقائية عند الثالثة فجرًا = بوت ميّت
  • أنت: «سأعيد تشغيل الحاسوب لثانية فقط…»

زمن التشغيل: 95 % (غير مقبول للتداول الخوارزمي)

لماذا يفوز الـ VPS السحابي

  • زمن تشغيل 99.9 %: AWS وDigitalOcean وLinode
  • لا انقطاع للكهرباء: طاقة احتياطية ونسخ احتياطي
  • إنترنت سريع: زمن استجابة منخفض نحو واجهات API لدى الوسطاء
  • إعادة تشغيل تلقائية: انهار البوت؟ يعود خلال 30 ثانية

التكلفة: 5-20 دولارًا شهريًا (أرخص مضخّم أفضلية ستشتريه في حياتك)

الجزء 5: مواجهة الواقع

الأتمتة ليست «شغّل وانسَ»

تُطلق بوتك. يتداول شهرًا. نسبة النجاح: 65 %. تمامًا كما في backtest. أنت مبتهج.

الشهر 2: تهبط نسبة النجاح إلى 48 %. أنت في حيرة.

ماذا حدث؟

تغيّر نظام السوق. استراتيجيتك تعمل في الأسواق ذات الاتجاه. انتقل السوق إلى التذبذب العرضي. وواصل بوتك التداول. فتدهورت النتائج.

🚨 الحقيقة الصعبة

الأتمتة تضخّم أفضليتك. لكنها لا تتكيّف تلقائيًا مع تغيّر النظام السوقي.

يبقى عليك أن تراقب وتراجع وتعدّل. لكن بوتيرة أقل.

قائمة الصيانة الشهرية للبوت

1. مؤشّرات الأداء: هل نسبة الربح ضمن 5 % من backtest؟ هل متوسّط R موجب؟ هل drawdown مقبول؟ هل تدهور slippage؟ 2. سجلّات الأخطاء: أخطاء الاتصال، والأوامر المرفوضة، والحالات الحدّية. 3. فحص النظام السوقي: هل ما زال السوق ملائمًا للاستراتيجية؟ VIX مرتفع ← توقّف مؤقّتًا. تقلّب منخفض ← الاختراقات تتعثّر.

🎓 أهم الخلاصات

  • الأتمتة تزيل العاطفة — لكنها لا تصلح استراتيجية سيّئة
  • ابدأ بـ Alpaca (أسهم) أو Binance (عملات رقمية) للوصول السهل إلى API
  • تداول على الورق 3-6 أشهر قبل الانتقال للحقيقي
  • معالجة الأخطاء بالغة الأهمية: إعادة المحاولة، والتنبيهات، وزرّ الإيقاف
  • استضف على VPS سحابي (5-20 دولارًا شهريًا) لزمن تشغيل 99.9 %
  • راجع شهريًا: الأداء والأخطاء والملاءمة للنظام السوقي

📝 تمرين عملي

ابنِ أوّل سكربت تداول عبر API

  1. افتح حساب تداول ورقي على Alpaca
    • سجّل على alpaca.markets (التداول الورقي مجاني)
    • ولّد مفتاح API والمفتاح السرّي
    • ثبّت مكتبة Python: pip install alpaca-trade-api
  2. اكتب سكربت استراتيجية بسيطًا
    • اتّصل بـ API لدى Alpaca
    • اجلب سعر SPY كل 60 ثانية
    • طبّق منطقًا أساسيًا: إذا عبر السعر فوق SMA لـ 20 فترة، أرسل أمر شراء
    • أضف حساب حجم المركز (مخاطرة 2 % لكل صفقة)
    • ضع وقف خسارة عند ‏-1R
  3. أضف معالجة للأخطاء
    • غلّف استدعاءات API بكتل try/except
    • سجّل كل الأخطاء في ملفّ
    • طبّق منطق إعادة المحاولة (3 محاولات)
  4. اختبر أسبوعًا واحدًا على الورق
    • راقب التنفيذ: هل تُنفَّذ الأوامر كما ينبغي؟
    • راجع السجلّات: هل ثمّة أخطاء اتصال؟
    • راجع الأداء: هل يطابق backtest لديك؟

الهدف: ابنِ أوّل سكربت تداول آلي وشغّله في وضع التداول الورقي. أتقن الأساسيات قبل المخاطرة برأس مال حقيقي.

🎮 اختبر فهمك (بلا ضغط)

السؤال 1: كتبت بوتًا يعمل بلا عيب على الورق. ما أقلّ مدّة اختبار قبل الانتقال للحقيقي؟

A) أسبوع واحد (ما دام يعمل، أطلقه!)
B) شهر واحد (يكفي لمعرفة إن كان رابحًا)
C) 3-6 أشهر (للتحقّق من الاتساق عبر ظروف سوق مختلفة)
D) لا حاجة للاختبار (يكفي backtest)

السؤال 2: كانت نسبة نجاح بوتك 65 % في backtest، لكنها 48 % في الحقيقي بعد شهرين. ما السبب الأرجح؟

A) الوسيط يخرّب صفقاتك
B) في شيفرتك خلل (سلوك عشوائي)
C) تغيّر النظام السوقي (الاستراتيجية لا تلائم الظروف الحالية)
D) backtesting بلا فائدة (يفشل دائمًا في الحقيقي)

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

دروس ذات صلة

متقدم #55

تعلّم الآلة في التداول

استخدم نماذج ML لتوليد إشارات تداول آلية.

اقرأ الدرس ←
متوسط #32

backtesting متقدّم

اختبر استراتيجياتك الآلية قبل نشرها في الحقيقي.

اقرأ الدرس ←
متقدّم #59

عزو الأداء

حلّل أي الاستراتيجيات الآلية تسهم في العائد.

اقرأ الدرس ←

⏭️ التالي

الدرس #58: نظرية المحافظ المتقدّمة — نظرية المحفظة الحديثة، والحدّ الكفء، وتكافؤ المخاطر، وأطر بناء المحافظ الاحترافية.

💬 نقاش (0 تعليق)

0/1000

جارٍ تحميل التعليقات…

← الدرس السابق الدرس التالي ←
لأغراض تعليمية فقط. ينطوي التداول على مخاطر خسارة كبيرة. هذه ليست نصيحة مالية. الأداء السابق لا يضمن النتائج المستقبلية.