أربعة أرقام، قسناها جميعًا على منظومة التداول الورقي الخاصة بنا: استراتيجية واحدة، وإشارات عقود BTCUSDT الدائمة على إطار 1-minute، خلال 31 يومًا و1,418 أمرًا. وسيط الوقت من إغلاق الشمعة إلى إقرار المنصة باستلام الأمر: 195 ms. المئين 99: 2,970 ms. الوسيط في أعلى 1% من الدقائق بحسب التقلب المحقق: 840 ms. أما ثابت الكمون الذي ظل في إعدادات الاختبار الخلفي معظم العام السابق: 0.
ثلاثة من هذه الأرقام لا تثير الاهتمام. الجميع يعرف أن الصفر خطأ، والجميع يستبدله في نهاية المطاف بشيء ما، وغالبًا ما يكون ذلك الشيء ثابتًا اختاره أحدهم بالتخمين: 100 ms، أو 250 ms، أو «لنكن متحفظين، 500». الرقم المهم فعلًا هو 840، لأنه يبيّن أن الكمون يتغير حسب حالة السوق، وأن حالات السوق التي يتضخم فيها هي نفسها الحالات التي تظن فيها إشارتك أنها عثرت على فرصة.
أين تذهب الـ195 ميلي ثانية؟
إليك الميزانية كاملة، قسنا كل مرحلة على حدة باستخدام طوابع زمنية من ساعة رتيبة كُتبت عند كل انتقال. الخادم مثيل AWS في ap-northeast-1، وهي المنطقة نفسها التي توجد فيها نقاط اتصال المنصة، وهذا أقرب ما يمكن إلى إعداد تجزئة غير موضوع في الموقع نفسه.
| المرحلة | p50 | p95 | p99 |
|---|---|---|---|
| إغلاق الشمعة → استلام حدث إغلاق شمعة WS kline | 128 ms | 402 ms | 1,940 ms |
| التحليل + تحديث حالة السمات | 3 ms | 9 ms | 28 ms |
| اتخاذ القرار: تقييم النموذج + فحوص المخاطر | 11 ms | 22 ms | 60 ms |
| إرسال الأمر → إقرار المنصة | 47 ms | 180 ms | 1,100 ms |
| من البداية إلى النهاية (مقاس، لا مجموع) | 195 ms | 690 ms | 2,970 ms |
ثمة نقطتان يجدر الانتباه إليهما قبل الوصول إلى الجزء المهم. أولًا، لا يساوي مجموع الوسائط وسيط المسار كله: 128 + 3 + 11 + 47 = 189، بينما وسيط المسار المقاس من البداية إلى النهاية هو 195. المئينات لا تُجمع، وإذا بنيت تقديرك للكمون بجمع قيم p99 لكل مرحلة، فستحصل على 3,128 ms بينما القيمة الحقيقية للمئين 99 هي 2,970. الفرق هنا مقبول، لكنه يصبح هائلًا عندما تكون المراحل مترابطة في الاتجاه المعاكس. قِس المسار كاملًا.
ثانيًا، انظر إلى الصف الأول. يُنفق ثلثا ميزانية الوسيط في انتظار أن تخبرك المنصة بأن الشمعة أُغلقت. ليس السبب الشبكة، ولا شيفرتك، ولا توجيه الأمر. تجمع المنصة التداولات في شمعة kline، وتقرر انتهاء الدقيقة، ثم ترسل الحدث. يسبق الإرسال طابور، ويشترك فيه كل مشترك آخر في ذلك التدفق.
رقم 840
صنّف كل واحد من تلك الأوامر الـ1,418 بحسب التقلب المحقق للدقيقة التي أنتجت الإشارة، وستجد أن التوزيع يتباين بشدة.
| شريحة تقلب شمعة الإشارة | الأوامر | p50 من البداية إلى النهاية | p99 من البداية إلى النهاية |
|---|---|---|---|
| الربع الأدنى | 201 | 141 ms | 488 ms |
| الربعان الأوسطان | 796 | 183 ms | 1,210 ms |
| الربع الأعلى | 407 | 312 ms | 2,880 ms |
| أعلى 1% من جميع الدقائق | 14 | 840 ms | 4,100 ms |
تتدهور كل المراحل معًا، ولذلك يتراكم الأثر. يغذي ضغط محرك المطابقة حمل المحرك طابور تجميع المنصة وبثها، لذا تُرسل الشمعة التي تضم 11,000 صفقة في وقت متأخر مقارنة بشمعة تضم 600 صفقة. وتعالج عمليتك تحديثات عمق أكبر وعددًا أكثر من طبعات التداول في الفترة نفسها، فتستغرق عملية تحديث السمات التي تستغرق عادة 3 ms نحو 28. كما يتنافس مسار أوامر REST مع حالة الهلع لدى الجميع، وتبدأ برؤية حالات 503 وإعادة المحاولة التي تكلّفك ثانية كاملة بمفردها. بلغ معامل الارتباط بين عدد التداولات في شمعة الإشارة والكمون من البداية إلى النهاية في عينتنا 0.41. ليس رقمًا ضخمًا، لكنه يكفي لإفساد أي ثابت.
والاستراتيجيات التي تجتاز الفحص الأولي هي، في معظمها، تلك التي تتداول الاختراقات والارتدادات والانحرافات عن السعر وسلاسل التصفية. تنشط هذه الاستراتيجيات تحديدًا في الشريحة التي يكون فيها الكمون أسوأ ما يمكن. إشارة زخم لا تنطلق إلا عندما تتحرك الدقيقة بمقدار 40 bps هي إشارة رتّبت بنيتها مسبقًا كي تخدمها دائمًا أبطأ نسخة من منظومتك.
أمضينا يومًا ذات مرة في تعقب حالة شاذة استغرقت 3.6 ثانية، وكانت تظهر في الوقت نفسه تقريبًا كل ليلة. السبب كان logrotate، إذ كان ينسخ ملفًا حجمه 2 GB ثم يفرغه على وحدة EBS نفسها التي كانت العملية تكتب إليها، ما أوقف حلقة الأحداث. لم يكن للسوق ذنب. قِس أولًا، ثم ألقِ اللوم على بنية السوق.
كيف يؤثر ذلك في تنفيذ الأمر؟
يتحرك السعر أثناء الانتظار. في دقيقة عشوائية، بلغ متوسط الحركة المعاكسة خلال وسيطنا البالغ 195 ms نحو 1.1 bps مقابل اتجاه الإشارة. وفي دقائق الربع الأعلى، عند 312 ms، بلغ 5.8 bps. أما في أعلى 1% من الدقائق، عند 840 ms، فبلغ الانزلاق المعاكس نحو 14 bps قبل أن يصل الأمر حتى إلى سجل الأوامر.
في العقود الدائمة لـBTC، لا يكاد الفارق السعري يسهم في هذا: فتغير وحدة واحدة على سعر عرض يبلغ 84,000 يعادل 0.012 bps، لذا ينتج الضرر عن الانزلاق المعاكس لا عن تكلفة عبور الفارق. انقل الاستراتيجية نفسها إلى عقد دائم لعملة متوسطة القيمة السوقية، وسيظهر العامل الثاني: ارتفع فارق أفضل سعر عرض وطلب في عينتنا من 1.4 bps في الدقائق الهادئة إلى 6.2 bps في الربع الأعلى، وانخفض العمق عند ذلك السعر بأكثر من النصف. تتحمل الانزلاق والفارق الأوسع والعمق الأقل في آن واحد، لأن لها سببًا مشتركًا.
عندما أعدنا تشغيل الأيام الـ31 نفسها باستخدام كمون مشروط بكل شمعة بدلًا من 200 ms ثابتة، أصبح متوسط سعر الدخول في الاختبار الخلفي أسوأ بمقدار 3.1 bps، وتركز ذلك كله تقريبًا في 9% من التداولات. وانخفض الفرق بين سعر الدخول في الاختبار الخلفي والتداول الورقي من 4.2 bps إلى 0.9 bps. وهبطت Sharpe داخل العينة لهذه الاستراتيجية من 1.7 إلى 1.1؛ وهذا هو الرقم الصادق، وكان كذلك دائمًا.
إذًا، ما الذي تضعه فعلًا في الإعدادات؟
ليس قيمة واحدة. هذا ما نستخدمه الآن:
- اسحب عينة، ولا تضع قيمة ثابتة. اسحب كمون كل أمر محاكى من توزيع تجريبي مشروط بنشاط شمعته — يكفي عدد التداولات والعائد المطلق، وكلاهما موجود أصلًا في شمعة kline قياسية. لائم التوزيع مرة واحدة لكل منصة ولكل نوع أمر، وأعد ملاءمته شهريًا.
- احتفظ بالذيل. لا تلائم توزيعًا لوغاريتميًا طبيعيًا وتعدّ الأمر منتهيًا؛ فالمئين 99 يكمن في عواصف إعادة المحاولة وتوقفات GC التي لا يعيد أي توزيع سلس تمثيلها. نستخدم المئينات التجريبية مع إعادة أخذ عينات للذيل فوق p95.
- ينطبق الكمون على أوامر الإلغاء أيضًا. يخضع استبدال أمر وقف أو إلغاء تحوّط للتأخير نفسه، وفي الأسواق السريعة يتسابق الإلغاء مع تنفيذ الأمر. إذا كان المحاكي يلغي فورًا، فنموذج المخاطر لديك محض خيال.
- أضف شرطًا لمنع التعامل مع الإشارات القديمة وحاكِه. نظامنا يُسقط أي إشارة يتجاوز عمر شمعتها 1.5 ثانية عند وصولها. لهذا السلوك كلفة حقيقية؛ فهو يزيل تداولات بصمت، ويجب أن يزيل التداولات نفسها في الاختبار الخلفي.
- أعد المعايرة بالاستناد إلى التداول الورقي. التداول الورقي هو مصدر الحقيقة الميدانية. سجّل الطوابع الزمنية للانتقالات الأربعة مع كل أمر، وقارن التوزيعات بما افترضه المحاكي، أسبوعيًا.
المشكلة نفسها في فئات أصول أخرى. الأسهم الأمريكية: يضيف شريط الأسعار الموحد تأخير التجميع الخاص به فوق تأخير وسيطك، ويتسع تحت ضغط معدل الرسائل للسبب البنيوي نفسه. أسواق التنبؤ: إدخال الأوامر عبر REST فقط في معظم المنصات؛ وقد قسنا وسائط دون 100 ms ارتفعت إلى عدة ثوانٍ عند وقوع حدث حسم، حين يصل الجميع في الوقت نفسه. خيارات العملات المشفرة: قد يكون السعر الذي تعتمد عليه في التسعير قديمًا بثانيتين في الدقيقة نفسها التي تحرك فيها الأصل الأساسي.
الصيغة العامة للخطأ هي التعامل مع معامل تنفيذ كما لو كان ثابتًا مستقلًا، مع أنه دالة في متغير الحالة نفسه الذي يقود إشارتك. الرسوم تتصرف كما هو متوقع؛ والتمويل يتصرف كما هو متوقع؛ أما الكمون فلا. إذا كنت ستحتفظ برقم واحد في ذهنك من كل هذا، فليكن النسبة: p99 لدينا يساوي خمسة عشر ضعف الوسيط، وإشارتنا تصل في أحيان أكثر قرب الطرف الذي يمثله p99.
سجّل توقيت الانتقالات الأربعة. يستغرق ذلك بعد ظهر واحد، وسيخبرك عن استراتيجيتك أكثر مما سيخبرك أسبوع آخر من البحث عن المعاملات.
→ جميع المقالات


