خصائص محرّك الامتثال الشرعي — كيل
لا تصف هذه الصفحة إلا ما يستطيع مستودعُ المحرّك إظهارَه. وكلُّ قسمٍ يرتبط بالمصدر الذي يُثبته — فإن انحرفت دعوى يومًا عن الشيفرة، فالرابط هو سبيلك إلى الإمساك بنا.
فرزُ أصولٍ موثَّق — يرفض عند الفشل
القبولُ في قائمة الأصول المسموح بها مقسومٌ بحسب ما يمكن معرفتُه. فوقائعُ السوق تُحسَب؛ أمّا التصنيفات الشرعية — هل الغرض الأساسي للرمز قطاعٌ محرَّم (§28.4)، وهل هو عينٌ ('ayn) مدعومةٌ بأصلٍ أم دَينٌ (dayn) (§65.5/§67.2)، وهل يوزّع عائدًا شبيهًا بالربا — فتُوثَّق ولا تُستنبَط، عبر الأمر keel assets attest. وغيابُ التوثيق رفضٌ، لا قبولٌ افتراضي.
تحقّق في المستودع: compliance/screen.py
سكك الأمان — إحدى وعشرون فحصًا لا يتجاوزها أيُّ أمر
ضوابطُ حتميةٌ لا يتجاوزها شيء، ولا حتى وضعُ الاستقلالية. وهي إحدى وعشرون، مرقَّمةٌ من 1 إلى 14 ومن 16 إلى 22، إذ أُلغيت السكةُ 15 ولم يُعَد استعمالُ رقمها:
- قائمةُ الأصول الحلال المسموح بها، وسقوفُ الإنفاق للأمر الواحد ولليوم، وسقوفُ التعرُّض والتركيز
- تحجيمٌ يراعي الارتباط، وحدٌّ أدنى لحركة السعر، ومنعُ المارتينغال ومنعُ توسيع وقف الخسارة
- قواطعُ التراجُع (drawdown) الكلّي والأسبوعي، وقاطعُ الخسائر المتتالية وتآكُل الأفضلية
- فحوصُ تقادُم موجزات البيانات واتّزان عروض الأسعار
- السكة 14 — توثيقُ الاشتراك في المنصّة وقابليةِ السحب منها: تُرفض أوامرُ الشراء الحيّة حتى يوثّق المشغّل
- السكة 17 — القبض الحُكمي §65.4: تُوثَّق قابليةُ السحب وتُنفَّذ، لأن الأصل الذي لا يمكن سحبُه قد لا يكون قد قُبِض قبضًا صحيحًا
- بوابةُ دخولٍ بحدٍّ أقصى لفارق السعر: ترفض الشراء الحيّ عند 50 نقطة أساسٍ أو أكثر، وترفض كذلك عند تعذُّر قراءة دفتر الأوامر
- السكة 20 — نطاقُ التداول: نجاحُ القراءة بمفتاحٍ ما ليس دليلًا على أنه يستطيع التداول، فيُرفض كلُّ دخولٍ حيٍّ حتى تؤكّد المنصّةُ نفسُها أنّ هذا المفتاح يجوز له وضعُ أمرِ دخول
- السكة 21 — رصيدُ الأصل: يُرفض البيعُ إذا أفادت المنصّةُ صراحةً بعدم وجود رصيد، ويُمرَّر عمدًا إذا كان الرصيدُ مجهولًا لا غير، لأنّ منعَ الخروج يحبس مركزًا أراد الخروج
- رفضُ السكة يسمّي نفسه ويسمّي الأمرَ الذي يرفعه
تحقّق في المستودع: execution/guards.py
نطاقُ التداول — المنصّةُ نفسُها تستطيع تكذيبَ ما وثّقه المشغّل
نجاحُ القراءة بمفتاحٍ ما ليس دليلًا على أنه يستطيع التداول: مفتاحٌ سليمُ الصياغة نجحت به كلُّ قراءة، ثم رُفض أولُ أمرٍ حيٍّ به بعبارة «ليست لديك صلاحيةُ القيام بهذا الإجراء». فصار ادّعاءُ المشغّل أنّ مفتاح المنصّة يجوز له وضعُ أوامر دخولٍ حيّةٍ سجلًّا تستطيع المنصّةُ نفسُها نقضَه — الأمرُ keel scope attest يكتب نصيبَ المشغّل، ورفضُ المنصّة يمحوه، والسجلُّ مربوطٌ ببصمة المفتاح الذي كسبه، فلا يرث مفتاحٌ جديدٌ إذنَ سابقِه. وتقرأ السكةُ 20 هذا السجلَّ فترفض الدخولَ الحيَّ ما دام يقول لا. أمّا الخروجُ فلا يُمَسّ عمدًا، إذ يجب أن يبقى الخروجُ ممكنًا دائمًا.
تحقّق في المستودع: commands/scope.py
بوابات الاستراتيجية — مرشَّحة ← تجريبية ← حيّة
على القاعدة أن تجتاز ثلاث مراحل قبل أن تلمس مالًا حقيقيًّا. ولا تُرقَّى إلا باجتياز بوابةٍ من شقّين: حدودٌ دنيا للأداء، وفحصٌ للإفراط في المُلاءمة (PBO/CSCV). ويجوز بلوغُ الحدّ الأدنى البالغ مائة صفقة بالاختبار الرجعي للقاعدة نفسها، أو بتجميع صفقات الوسائط نفسها عبر منتجاتٍ متعدّدةٍ في التداول التجريبي — بشرط أن يُسهم خمسةُ منتجاتٍ على الأقل بعشر صفقاتٍ لكلٍّ منها، لأن تجميع عيّناتٍ مترابطةٍ يُبالغ في تقدير قوّتها الإحصائية.
تحقّق في المستودع: agent.py — RULE_REGISTRY
قياسٌ صادق، مقابل الشراء الدوري المنتظم
يعيد الأمر keel simulate تشغيلَ القواعد الحقيقية على التاريخ المجلوب، ويقارنها بمؤشّرٍ مرجعيٍّ بسيطٍ هو الشراء الدوري المنتظم (DCA)، ويكتب تقرير GO-LIVE أو TRAIN-MORE مسمّيًا كلَّ بوابةٍ وأرقامَها. ويُسعّر المحرّك الرجعي الانزلاقَ لكلِّ منتجٍ على قدر سيولته هو — من 5 نقاط أساسٍ عند أعلى السيولة إلى 183.8، وهو ما يدفعه أرقُّ الأصول في الكون المقيس — فلا يمكن تجميلُ نتيجةٍ بدفترِ أوامرَ ضعيفِ السيولة. وبالقياس على ذلك الكون، لا يبلغ أرضيةَ الخمس نقاطٍ ولا أصلٌ واحدٌ من الأربعة والعشرين. ويذكر التقريرُ أيَّ تمريرةٍ استعملت أيَّ سعر، لأنّ جدول الأفضلية يُسعَّر لكلِّ منتج بينما تمريرةُ الحساب والمؤشّرُ المرجعي ما يزالان بسعرٍ ثابت. وعلى القواعد الافتراضية سيقول لك على الأرجح TRAIN-MORE — وهذا دليلُ عمل المحرّك لا دليلُ عطبه.
تحقّق في المستودع: سجلّ التجارب
سجلُّ الأوامر يقيّد دفترَ السوق الذي نُفِّذ عليه الأمرُ فعلًا
كان جدولُ الأوامر يُكتَب منذ البداية ولا واجهةَ تقرؤه، فكان سؤالُ «ماذا اشترى كيل وباع، وبأيّ سعر» لا يُجاب إلا بفتح قاعدة البيانات يدويًّا. صار الآن خدمةً: الأمرُ keel orders يعرض التقرير، وتعرض لوحةُ الويب المحليّة التقريرَ نفسَه بدل إعادة حسابه، فلا تفترق الواجهتان. ويحمل كلُّ أمرٍ أعلى دفترِ المنصّة لحظةَ الإرسال، محفوظًا عرضًا وطلبًا لا رقمَ فارقٍ واحدًا — فالفارقُ إذا حُسب ثمّ خُزّن ضاع الرقمان اللذان جاء منهما. وعند أحجام هذا النشر يكاد الفارقُ يكون التكلفةَ كلَّها، فسُجّل دليلًا بدل أن يُعاد بناؤه لاحقًا.
تحقّق في المستودع: commands/orders.py
keel research — بابٌ واحدٌ على ثلاث عشرة وحدةَ أدلّة
كانت عُدّةُ الأدلّة ثلاثَ عشرة وحدةً بلا موضعٍ واحدٍ يقول ذلك؛ وستٌّ منها لا تُبلَغ إلا بقراءة الشيفرة. والآن يسمّي الأمرُ keel research index الثلاثَ عشرةَ جميعًا — ما تجيب عنه كلُّ وحدة، وما لا تستطيع الإجابةَ عنه، والأمرُ الذي يشغّلها. ولا يضيف إحصاءً من عنده: فالخمسُ التي كان لها موضعٌ تحت keel trials مُسجَّلةٌ مرّةً ثانيةً بوصفها الكائناتِ نفسَها لا نسخًا عنها، لأنّ بابًا يعيد التنفيذَ يفترق عن أصله لحظةَ يُصلَح أحدُ النسختين دون الأخرى. وعمودُ «ما لا تستطيع الإجابةَ عنه» يُقرأ بالعناية نفسِها التي يُقرأ بها الآخر.
تحقّق في المستودع: commands/research.py
ثلاثة أنماط نشرٍ لا يتقاسم أيٌّ منها شيئًا
نمطٌ يوميٌّ تجريبي، ونمطٌ حيّ، ونمطٌ ساعيٌّ لجمع الأدلة (paper-hourly) — لكلٍّ منها قاعدةُ بياناته وإعداداته. ووُجد النمطُ الساعي لأن المؤقّت اليومي يقيس 2.15 إشارةً لكل أصلٍ في السنة (أي إنّ مراجعة المائة صفقة تبعد ما بين 31 و84 سنة)، بينما تُطلق القواعد نفسها على شموع الساعة 49.4 إشارة — أي نحو 940 إشارة دخولٍ سنويًّا بعد التجميع، فتصير مراجعةُ الأدلة الأمامية على بُعد أسابيع بدل عقود. وهو مقيسٌ بخسارةٍ صافيةٍ أيضًا: فقد وُجد لجمع أدلةٍ أماميةٍ مقبولة، لا للربح.
تحقّق في المستودع: كتاب تشغيل المشغّل
منفذُ وسطاءٍ، لا ارتهانٌ لوسيط
تُنفّذ المحوّلات عقدًا واحدًا — منفذ keel-broker-api — وتُسجَّل تحت نقطة الدخول keel.brokers. ومحوّل Coinbase Advanced Trade هو المحوّل المرجعي؛ ويُسلَّم Robinhood منصّةً اختياريةً غيرَ موصولةٍ عمدًا؛ وانضمّ محوّل Alpaca في الإصدار v0.10.0؛ ويوجد محوّلُ Kraken هيكلًا مكتملَ المنفذ تُطلق كلُّ دواله للبيانات والسوق استثناءً — فهو يُثبت شكلَ المنفذ لا أنّ كيل يستطيع التداول هناك. وثمّة منصّةٌ وهميةٌ متعمَّدةُ الاختلاف تُبقي المنفذ أمينًا: إذ تعمل حزمةُ اختبارات المطابقة على الاثنتين معًا، ضمن حزمةِ اختباراتٍ تناهز 6,650 اختبارًا.
تحقّق في المستودع: packages/
الأمرُ القَوْسي (bracket) نوعُ أمرٍ واحد — لأنّ ساقَيه تتراهنان
أضحى في المنفذ الذي تُنفّذه المحوّلاتُ القوسُ نوعَ أمرٍ واحد — BracketGTC، أمرُ خروجٍ يغلق مركزًا محتفَظًا به — لا أمرَين يُوضَعان ثم يُقترَنان لدى العميل. فساقان تُوضَعان كلٌّ على حدة تتراهنان: إن مُلئت إحداهما ولم تُلغَ الأخرى، بقي أمرٌ حيٌّ قادرٌ على بيعِ مركزٍ أُغلِق فعلًا، كما أنّ ساقين تحمل كلٌّ منهما الكميةَ الكاملة يلتزمان المركزَ مرّتين. أمرٌ أصيلٌ واحد يُزيل الفشلين معًا بحكم البناء. وهذه مرحلةٌ أولى، مفرداتُ منفذٍ فحسب: كلُّ محوّلٍ يرسم خرائطها، وحزمةُ اختبارات المطابقة تثبّتها، في حين أنّ مسار كيل الحيّ ما يزال يضع أمرَ المنصّة القَوْسيَّ الأصيل مباشرةً، ونقلَ هذا الاستدعاء إلى المنفذ هو المرحلةُ التالية. وهو عملُ تصحيحٍ لا أكثر: لا يدّعي شيءٌ هنا أنّ المحرّك يتاجر أفضل، بل أنّ طرقَ الخطأ صارت أقل.
تحقّق في المستودع: orders.py — BracketGTC
حجمُ الأمر يُقرَّب إلى دقّة المنصّة — ولا يُعطَّل خروجٌ أبدًا
قلّما يقعُ أمرٌ محجَّمٌ بالمخاطرة على عددٍ صحيح، والمنصّةُ ترفض حجمًا يحمل خاناتٍ عشريةً أكثر من خطوة الزيادة التي يحدّدها المنتج — وقد رفضت المنصّةُ أولَ أمرٍ حيٍّ محجَّمٍ بالمخاطرة على هذا التحديد بالضبط: خطأُ تنسيقٍ لا سكةُ أمان. والآن يُقرَّب الحجمُ إلى الأسفل إلى مضاعفِ الزيادة التي تعلنها المنصّة للمنتج، على جانبَي الأمر معًا. وإذا كانت الزيادةُ مجهولةً فشِلَ الجانبان في اتجاهين متعاكسين عمدًا: الشراءُ يُرفَض — فالدخولُ المرفوض لا يكلّف شيئًا — أمّا البيعُ فيُرسَل كما هو مع تسجيلِ ذلك، لأنّ خروجًا لا يستطيع المغادرةَ أسوأُ من دخولٍ لا يستطيع البدء. وحجمٌ يتقرّب إلى الصفر يُرفَض رفضًا قاطعًا.
تحقّق في المستودع: execution/executor.py
التنفيذُ الجزئي حالةٌ قائمةٌ بذاتها؛ والخروجُ لا يُطلِق إلا ما بيع فعلًا
الأمرُ السوقي الذي لا يمتلئ إلا جزئيًّا لم يعد مجبَرًا على أن يبدو إمّا معلّقًا وإمّا منفَّذًا: فـ«أكبر من صفر وأقلّ من المطلوب» حالةٌ غير نهائيةٍ قائمةٌ بذاتها، تُسجَّل فيها الكميةُ التي رأت المنصّةُ تنفيذَها إلى جوار الكمية المطلوبة، ويُعتمد متوسطُ المنصّة الجاري سعرًا للتنفيذ. وكلُّ ما بعد ذلك يُحسَب على ما نُفّذ فعلًا — فأساسُ احتساب المتوسط تُحتسَب فيه المشترياتُ الجزئية عند كميتها المنفَّذة، لا عند حجمٍ لم يشترِ شيئًا. والدخولُ الذي لا يمتلئ إلا جزئيًّا يُحذَّر عنه بصوتٍ عالٍ، لأنّ أمرَ الحماية القَوْسي وُضع على الكمية المطلوبة وقد يتجاوز ما هو محتفَظٌ به فعلًا؛ وتغييرُ حجمه فعلُ مشغّلٍ عمدًا لا فعلٌ آلي. والخروجُ الذي لا يمتلئ إلا جزئيًّا يقيّد النتيجةَ على الكمية التي بيعت فعلًا ويحبس إطلاقَ ما بقي محتفَظًا به — فالشريحة لا تُغلَق إلا إذا غطّاها تنفيذُها. وأيُّ جانبٍ ينتمي إليه التحذيرُ مثبَّتٌ باختبار.
تحقّق في المستودع: execution/reconcile.py
سجلُّ الانهيار يُكتَب قبل الإلغاء، حتى يكون تحريكُ الوقف الميّت صاخبًا
تحريكُ الوقف يعني إلغاءَ أمر الحماية القائم ووضعَ بديله — وعمليّةٌ تموت بين الاثنين كانت تترك المركز عاريًا وصامتًا معًا، لأنّ المطابقة تتعمّد السكوتَ عن الصفوف التي لا نيّةَ مسجَّلةً لها، حتى لا يُدرَّب المنبّه على التجاهل. والآن انعكس ترتيبُ العمليّتين: سجلُّ نيّة «غير المحصَّن» (unbracketed) — سجلُّ الانهيار الذي يسمّي المركزَ الذي فقد حمايته — يُكتَب قبل أن يُصدَر الإلغاء. فتحريكُ وقفٍ يموت في منتصف الطريق يُسمَع في دورة المطابقة التالية نفسِها، حاملًا الأرقامَ اللازمة لإعادة وضع أمر الحماية.
تحقّق في المستودع: execution/executor.py — _roll_stop
Robinhood: قواعدُ المنصّة نفسها تُفحَص قبل إرسال أيّ أمر
محوّلُ Robinhood — الاختياريُّ غيرِ الموصول عمدًا كما كان — يقرأ الآن قواعدَ كلِّ زوجٍ تنشرها المنصّة (حدٍّ أدنى لحجم الأمر مُقوَّمًا بعملة التسعير، وخطوةَ الزيادة، وحدًّا أقصى) ويفحص كلَّ أمرٍ عليها قبل الإرسال، فما كان دون الحدّ الأدنى أو خارج خطوة الزيادة يُرفَض محليًّا لا عند المنصّة. كما أنّ نقطته best_bid_ask ليست لقطةَ دفترٍ — فساقاها تُعيَّنان كلٌّ على حدة وتتقاطعان على أكثر الأزواج سيولةً — فلا يُعيد المحوّل عرضًا إلا إذا رتّبت أرقامُ المنصّة نفسُها ترتيبًا متّسقًا، ويرفض تلفيقَ عرضٍ خلاف ذلك.
تحقّق في المستودع: keel-broker-robinhood/adapter.py
التأكيدُ هو الأصل؛ والاستقلاليةُ تغيّر مَن يُسأل
يعاين كيل كلَّ أمرٍ ويسأل عند الطرفية؛ وإن كان يعمل بلا واجهةٍ تفاعلية رفض الأمر. والأمر keel autonomy on يغيّر مَن يُسأل، لا ما يُسمح به. ولإيقاف التداول: keel kill — ومفتاحُ الإيقاف يرفض عند الفشل.
تحقّق في المستودع: الـREADME، «كيف يعمل كيل»
يُسلَّم كيل خاملًا
لا يجري أيُّ تداولٍ حتى تُرقّي قاعدةً، وتوثّق الاشتراك في المنصّة، وتموّل الحساب، و— في وضع التأكيد — تكتب y. والعملُ مقصورٌ على الشراء الفوري (long-only spot): لا رافعةَ مالية، ولا بيعَ على المكشوف، ولا مشتقّات، والتحجيمُ بالنقد الفعلي، فلا ربا.
أمّا الالتزامات على مستوى الحساب التي لا تراها أيُّ سكة — وأبرزُها تعطيلُ مكافآت USDC على الأرصدة الخاملة — فعلى المشغّل التحقّقُ منها، وكتابُ تشغيل المشغّل يسردها.
ونمطُ التداول التجريبي هو حيث تبدأ كلُّ قاعدة — مجّانيٌّ، بتنفيذٍ مُحاكًى، ولا شيء فيه في خطر، ولا يحتاج إلى حسابٍ مموَّلٍ لدى منصّة ولا إلى بيانات اعتمادٍ للتداول (فمفتاحُ بيانات سوقٍ مجّانيٌّ للقراءة فقط هو كلُّ ما يطلبه). وهو ليس عرضًا تجريبيًّا: فصفقاتُ الوسائط نفسها في التداول التجريبي تُحتسب ضمن الحدّ الأدنى لبوابة الترقية، ومن ثَمّ فدليلُ التداول التجريبي هو المرحلة الأولى من المسار.
تُرجمت هذه الصفحة عن المراجعة الإنجليزية 2026-09-16.1.