تصميم دالة الهدف: المقياس الذي تُحسّنه يختار استراتيجيتك سراً
مقال من سلسلة "اختبارات رجعية بلا أوهام".
📄 تطورت هذه المقالة إلى ورقة بحثية. كل رقم أدناه يأتي من سكريبت حتمي واحد يبني حقيقة أساسية مضبوطة — سوق اصطناعي بميزة معروفة في نطاق إشارة معتدل وضوضاء ذات ذيول سمينة في كل مكان — ثم يُشغّل بحث عتبة واحد تحت ستة دوال هدف مختلفة، ويقيس، خارج العينة، أي استراتيجية تختارها كل دالة هدف فعلياً. اقرأ الورقة على الإنترنت (نسخة تفاعلية + PDF) على objective-design.marketmaker.cc، والكود والبيانات على github.com/suenot/objective-design-degeneracy.
تريد الاستراتيجية الأفضل. لذا تُشغّل بحثاً — تمسح عتبة، أو نافذة استرجاع، أو مسافة وقف، وتحتفظ بأياً كان الإعداد الذي يُسجّل أعلى نتيجة. ينتهي البحث ويُسلّمك فائزاً. معقول. قياسي. هذا بالضبط ما يفعله كل مُحسِّن، وكل بحث شبكي، وكل ضابط فرط-معلمات على وجه الأرض.
لكن انظر إلى الفعل: يُسجّل أعلى نتيجة. الأعلى في ماذا؟ قبل أن يستطيع البحث تتويج أي شيء، كان عليك أن تُسلّمه رقماً واحداً ليُعظّمه — دالة هدف. PnL. Sharpe. Sharpe-على-الشموع-التي-تاجرت-فيها. العائد-على-أقصى-انخفاض. كتبت واحداً من هذه، على الأرجح دون تفكير كبير، ثم أمضى البحث مليون تقييم يفعل بالضبط ما طلبته.
ذلك الاختيار الواحد ليس شكلياً. إنه القرار كله. لا يجد البحث "استراتيجية جيدة" — لا وجود لشيء كهذا في المطلق. إنه يجد الاستراتيجية التي تُعظّم الرقم القياسي الذي اخترته، وأرقام قياسية مختلفة تُشير إلى استراتيجيات مختلفة تماماً على نفس البيانات. دالة الهدف هي اليد الخفية على عجلة القيادة، ومعظم الوقت لا أحد ينظر إليها.
إليك المقالة كلها في جدول واحد. بحث عتبة واحد، سوق اصطناعي واحد بميزة حقيقية معروفة، ست دوال هدف — والاستراتيجيات الست التي تختارها، مقاسة على بيانات محجوزة:
| دالة الهدف (ما الذي يُعظّمه البحث) | متوسط التعرض السوقي | Sharpe داخل العينة | Sharpe خارج العينة | فائزون متحللون |
|---|---|---|---|---|
| PnL الخام | 0.859 | 1.76 | 1.61 | 0% |
| Sharpe كامل الخط الزمني | 0.740 | 1.82 | 1.71 | 0% |
| Sharpe لكل صفقة ("نشطة") | 0.286 | 1.00 | 0.70 | 57% |
| حد أدنى للتعرض () | 0.740 | 1.82 | 1.71 | 0% |
| تقليص عدد الصفقات (conf_k) | 0.523 | 1.54 | 1.31 | 20.7% |
| قوي (حد أدنى + conf_k) | 0.675 | 1.78 | 1.70 | 0.2% |
600 بذرة مستقلة، شمعة لكل واحدة، 80 عتبة مرشحة لكل بحث، داخل العينة وخارج العينة مسحوبتان باستقلالية. Sharpe مُسنَّنة سنوياً (252 فترة/سنة). "متحلل" = الفائز المختار في السوق أقل من 5% من الوقت، أو يُسجّل Sharpe خارج العينة غير موجبة. الأمثل الحقيقي لهذا السوق هو Sharpe سنوية خارج العينة قدرها 1.77.
اقرأ الصف الثالث حتى يؤلمك. Sharpe لكل صفقة — ممثل لعائلة كاملة من المقاييس الشرطية-بالنشاط (Sharpe لكل صفقة، التوقع، SQN لفان ثارب، معدل الفوز)، جميعها محسوبة على فقط الشموع التي تاجرت فيها — تختار استراتيجية أسوأ خارج العينة من نصف الاستراتيجيات الأخرى، وتفعل ذلك بشكل متحلل 57% من الوقت. إنها ليست دالة هدف أسوأ قليلاً. على هذه البيانات هي فخ، ويقع البحث فيه أكثر من نصف الوقت. الآن اقرأ الصف الذي يعلوها مباشرة: Sharpe كامل الخط الزمني العادية لا تتحلل أبداً وتُسجّل 1.71 خارج العينة. هذه هي خلاصة الإصلاح كله، مكشوفة مبكراً — الإصلاح الصادق هو ببساطة القياس على كامل الخط الزمني؛ الإصلاحات الأكثر تطوراً في الصفوف السفلى، في أفضل حالاتها، لا تفعل سوى مطابقة ذلك الرقم، ولا تتفوق عليه أبداً. هذه المقالة هي تشريح ذلك الفخ وإصلاحه، مع بقاء الحقيقة الأساسية معروفة طوال الوقت بحيث يكون "هل اختارت دالة الهدف الاستراتيجية الصحيحة؟" حقيقة، لا رأياً.
الفصل 1 — القرار السري: قانون Goodhart هو البحث

في عام 1975 كتب الاقتصادي Charles Goodhart جملة عاشت أطول من كل شيء آخر فعله:
"أي انتظام إحصائي مُلاحَظ سيميل إلى الانهيار بمجرد أن يُمارَس عليه ضغط لأغراض التحكم."
إعادة الصياغة الشائعة، المنسوبة عادة إلى Marilyn Strathern، أكثر إحكاماً: عندما يصبح المقياس هدفاً، يتوقف عن كونه مقياساً جيداً.
بحث المعلمات هو أنقى مثال ممكن على قانون Goodhart. دالة الهدف هي المقياس. البحث هو الضغط — آلاف، ملايين المحاولات لدفع ذلك المقياس لأعلى ما يمكن أن يبلغه. والبحث لا يهتم إطلاقاً بما قصدته بالمقياس. يهتم فقط بالرقم. إذا كانت هناك أي طريقة لجعل الرقم كبيراً لا علاقة لها بميزة حقيقية قابلة للتداول — التداول نادراً، البقاء ساكناً معظم الوقت، اصطياد بضع قيم متطرفة محظوظة — سيجد البحث تلك الطريقة، لأن إيجاد الأقصى هو الشيء الوحيد المصمم لفعله.
هذا هو نفس الفشل الذي يُسمّيه أدب سلامة الذكاء الاصطناعي قرصنة المكافأة (reward hacking): وكيل يُحسّن بديلاً لما تريده سيستغل كل فجوة بين البديل والهدف. بحثك هو ذلك الوكيل. "نسبة Sharpe" هي ذلك البديل. "استراتيجية يمكنني الوثوق بها لتداول مال حقيقي الربع القادم" هي الهدف. الفجوة بينهما هي حيث يعيش التخصص بأكمله.
لمشاهدة الفجوة وهي تنفتح، نحتاج إلى عالم نعرف فيه الحقيقة. لذا نبني واحداً.
السوق. في كل فترة، تصل إشارة تنبؤية (إشارة Normal قياسية)، تليها العائد الذي تتنبأ به جزئياً. الميزة حقيقية لكن محدودة — توجد فقط داخل نطاق إشارة معتدل ، وتختفي خارجه:
يهم اختياران تصميميان. أولاً، تعيش الميزة في النطاق المعتدل: الإشارات المتطرفة لا تحمل أي معلومة تنبؤية، لذا ينبغي لاستراتيجية أن تتاجر في المنتصف وتتخطى الأطراف. ثانياً، الضوضاء ذات ذيول سمينة (Student- بـ4 درجات حرية، النوع من الذيل الثقيل الذي تملكه العوائد الحقيقية فعلاً) — لكن هذا المكوّن هنا من أجل الواقعية، لا الآلية. من المُغري القول إن الذيول السمينة هي ما يجعل الفخ ممكناً، وقد افترضنا ذلك بالضبط حتى شغّلنا الضابط: نسخة بضوضاء Gaussian من هذا السوق (gaussian_control في النتائج، 300 بذرة) تُعيد إنتاج الفخ دون تغيير يُذكر — لا تزال دالة الهدف لكل صفقة تتحلل 55.7% من الوقت تحت ضوضاء Gaussian مقابل 57.0% بالذيول السمينة، وSharpe خارج العينة الخاصة بها 0.71 مقابل 0.70. إذن الفخ ليس بشأن الذيول السمينة. إنه أثر خالص من نوع عينة-صغيرة-زائد-انتقاء: خذ الأقصى، عبر ~20 عتبة منخفضة التعرض، لـSharpe محسوبة على حفنة من المشاهدات، وستبدو زاوية محظوظة ما دائماً مذهلة. أي توزيع ضوضاء يفعل ذلك؛ استراتيجية في السوق لبضع شموع فقط يمكنها، بالحظ وحده، أن تمر ببضع حركات مواتية وتُسجّل رقماً داخل العينة لا يعني شيئاً. نُبقي على الذيول السمينة لأن العوائد الحقيقية تملكها، لا لأن الفخ يحتاجها.
الاستراتيجية. عائلة بمعلمة واحدة. تاجر في اتجاه الإشارة كلما كانت قيمتها المطلقة أدنى من عتبة ، وإلا ابق ساكناً:
عتبة صغيرة جداً تتاجر فقط على أصغر الإشارات وأكثرها اعتيادية — يانصيب نادر التداول، في السوق تقريباً أبداً. عتبة قرب حافة النطاق تلتقط الميزة الحقيقية كاملة وتكون معرَّضة جيداً. عتبة ضخمة تتاجر كل شيء، بما في ذلك الشموع خارج النطاق التي لا تحمل ميزة وتضيف ضوضاء فقط.
def gen_dataset(T, rng, beta=0.30, band=1.0, tail_df=4):
s = rng.standard_normal(T)
edge = beta * np.where(np.abs(s) <= band, s, 0.0) # edge ONLY inside |s| <= 1
t = rng.standard_t(tail_df, T) / np.sqrt(tail_df / (tail_df - 2.0)) # fat tails, unit var
return s, edge + t
def simulate(s, r, theta):
pos = np.where(np.abs(s) <= theta, np.sign(s), 0.0) # trade the band, skip outliers
strat = pos * r
active = pos != 0.0
exposure = active.mean() # fraction of bars in a position
sharpe_full = strat.mean() / strat.std(ddof=1) # on the WHOLE timeline
sharpe_active = strat[active].mean() / strat[active].std(ddof=1) # on ONLY the active bars
return dict(exposure=exposure, n_trades=int(active.sum()),
sharpe_full=sharpe_full, sharpe_active=sharpe_active, pnl=strat.sum())
بما أننا بنينا السوق، يمكننا حساب الحقيقة مباشرة — متوسط الأداء عند كل عتبة عبر كل الـ600 بذرة، خارج العينة. الأمثل الحقيقي يقع عند : تماماً عند حافة نطاق الإشارة، في السوق حوالي 70% من الوقت (مُشتق: إشارة Normal قياسية تقع داخل باحتمال )، وتُسجّل Sharpe سنوية خارج العينة قدرها 1.77. هذا هو الرقم الذي تحاول كل دالة هدف إيجاده. أبقِه في الذهن: θ≈1.04، Sharpe خارج العينة 1.77، حوالي 70% من الخط الزمني في السوق. أي شيء تختاره دالة هدف بعيداً عن هذا هو فشل دالة الهدف، لا صعوبة السوق.
الفصل 2 — الفخ: ثماني صفقات محظوظة، Sharpe قدرها 21، سراب

الآن دَع دالة هدف ساذجة تنطلق على سحبة واحدة ملموسة من هذا السوق — البذرة 6. إفصاح كامل عن البذرة: لم تكن أول سحبة ولا سحبة عشوائية. مسحنا البذور بحثاً عن فائز متحلل بوضوح لكل صفقة واخترنا هذه، بالضبط حتى تكون الآلية مستحيلة التغافل عنها. النتيجة التي تُظهرها نموذجية تماماً — كما سيؤكد الفصل 3، تختار دالة الهدف لكل صفقة يانصيب بتعرض أقل من 5% في 56% من كل البذور — لكن حجم البذرة 6 يقع عند الطرف المتطرف من ذلك التوزيع. اقرأها كمثال حاد بشكل خاص لفشل شائع، لا مثالاً وسيطاً. نُحسّن Sharpe لكل صفقة: نسبة Sharpe محسوبة على فقط الشموع التي كانت الاستراتيجية فيها فعلياً في مركز. هذا شيء طبيعي جداً لتقريره. "عندما تتاجر، ما مدى جودة صفقاتها؟" يبدو أنه يعزل المهارة عن الخمول. إنه يفعل العكس تماماً.
إليك الاستراتيجية التي تُتوّجها Sharpe لكل صفقة على البذرة 6:
- عتبة — تتاجر فقط على أصغر الإشارات على الإطلاق.
- التعرض السوقي 0.4% — ساكنة 99.6% من الوقت.
- ثماني صفقات. ثماني. على مدى 2000 شمعة.
- Sharpe سنوية لكل صفقة داخل العينة: 21.09.
- Sharpe كامل الخط الزمني داخل العينة: 0.82.
- Sharpe كامل الخط الزمني خارج العينة: 0.13.
يقرأ مقياس لكل صفقة 21.09 — رقم لم تُسجّله أي استراتيجية حقيقية قط، من النوع الذي يُطلق صندوقاً استثمارياً. وهو سراب كامل. صادفت تلك الصفقات الثماني بضع حركات مواتية؛ ومقاسة على تلك الشموع الثماني فقط، تكون نسبة المتوسط إلى الانحراف المعياري فلكية. لكن على كامل الخط الزمني — حيث الاستراتيجية ساكنة 99.6% من الوقت — تلك "الميزة" لا تُساهم بشيء يُذكر عملياً: Sharpe كامل الخط الزمني قدرها 0.82 داخل العينة، تنهار إلى 0.13 على بيانات جديدة. الفائز الذي اختارته دالة الهدف هو، لكل الأغراض التداولية، ساكن.
وهي ليست حتى ميزة حقيقية عند تلك العتبة. تذكّر السوق: الميزة تعيش في النطاق ، وتقع في المركز الميت حيث الإشارة أضعف ما تكون. المنحنى الحقيقي خارج العينة عند هو −0.01 — لا يُميَّز عن الصفر (مُشتق من منحنى الحقيقة الأساسية). لم يجد البحث ميزة حقيقية صغيرة. وجد ثماني سحبات محظوظة من الضوضاء وأبلغ عنها كـSharpe قدرها 21.
هذا هو الفخ مصغّراً: تُكافئ Sharpe لكل صفقة الاستراتيجية على التداول نادراً قدر الإمكان، لأنه كلما قلّت الشموع التي تقف عليها، كان أسهل لبضع منها أن تكون محظوظة، ولا يسأل المقياس أبداً "لكن هل كنت فعلياً في السوق؟" حجم البذرة 6 مُنتقى بعناية — بحثنا عن واحدة حادة — لكن نوعها ليس كذلك. عبر كل البذور الـ600، تختار Sharpe لكل صفقة فائزاً متحللاً (واحداً بالكاد يتاجر، أو يخسر خارج العينة) في 57% منها، ويانصيب بتعرض أقل من 5% تحديداً في 56%. الاختيار المتحلل النموذجي أكثر اعتدالاً بكثير من Sharpe البذرة 6 البالغة 21: بالمتوسط عبر كل البذور الـ600، فائز دالة الهدف لكل صفقة لديه Sharpe داخل العينة لكل صفقة قدرها 4.58 ومتوسط تعرض 0.286 — لا يزال ساكناً معظم الوقت، فقط ليس ساكناً بنسبة 99.6%. البذرة 6 تُجسّد الآلية؛ الـ56% هو الجزء الذي ينبغي أن يُقلقك. أكثر من نصف الوقت، هذا المقياس اليومي يُسلّمك تذكرة يانصيب ويسمّيها استراتيجية.
الفصل 3 — الحقيقة الإحصائية: ست دوال هدف، 600 بذرة

بذرة واحدة لا تُثبت شيئاً؛ إنها فقط توضّح. لقياس دالة هدف علينا أن نسأل ماذا تختار بالمتوسط، عبر أسواق مستقلة عديدة، ونُسجّل ذلك الاختيار على بيانات لم يرها البحث قط. إذن: 600 بذرة، كل واحدة سحبة مستقلة من السوق؛ على كل واحدة، شغّل بحث الـ80 عتبة تحت كل دالة هدف؛ سجّل التعرض، وSharpe داخل وخارج العينة لأياً كان ما اختارته، وهل كان ذلك الاختيار متحللاً.
| دالة الهدف | متوسط التعرض | Sharpe داخل العينة | Sharpe خارج العينة | انخفاض داخل→خارج العينة (مطلق) | متحلل |
|---|---|---|---|---|---|
| PnL الخام | 0.859 | 1.76 | 1.61 | 0.15 | 0.0% |
| Sharpe كامل الخط الزمني | 0.740 | 1.82 | 1.71 | 0.11 | 0.0% |
| Sharpe لكل صفقة | 0.286 | 1.00 | 0.70 | 0.30 | 57% |
| حد أدنى للتعرض () | 0.740 | 1.82 | 1.71 | 0.11 | 0.0% |
| تقليص conf_k () | 0.523 | 1.54 | 1.31 | 0.23 | 20.7% |
| قوي (حد أدنى + conf_k) | 0.675 | 1.78 | 1.70 | 0.08 | 0.2% |
عمود "انخفاض داخل→خارج العينة" هو الهبوط المطلق في Sharpe السنوية من داخل العينة إلى خارجها (مثلاً هبوط قدره 0.30)، وليس نسبة مئوية. ولاحظ أن صف "حد أدنى للتعرض" مطابق حرفياً لصف "Sharpe كامل الخط الزمني": ذلك ليس صدفة، ويشرح الفصل 5 السبب.
تبرز ثلاث حقائق، وكل واحدة درس.
Sharpe لكل صفقة هي دالة الهدف الساذجة الوحيدة التي تتحلل. متوسط تعرضها 0.286 — تختار استراتيجيات ساكنة معظم الوقت — وSharpe داخل العينة البالغة 1.00 تهبط بمقدار 0.30 إلى 0.70 خارج العينة، الأسوأ في المجموعة. لاحظ العلامة: رقمها داخل العينة (1.00) ليس مثيراً للإعجاب حتى، ومع ذلك على أي بذرة مفردة ستُبلغ بسعادة عن رقم لكل صفقة قدره 21. يتلاشى المتوسط لأن النوافذ المحظوظة تُشير في اتجاهات عشوائية؛ وما يصمد إلى خارج العينة هو فقط 0.70، و57% من الاختيارات الفردية هي هراء صريح.
دوال الهدف الواعية بالتعرض آمنة بطبيعتها. PnL الخام وSharpe كامل الخط الزمني لا تتحللان أبداً (0.0%). السبب بنيوي: كلاهما يُقاس عبر كامل الخط الزمني، لذا استراتيجية ساكنة 99.6% من الوقت تكسب لا شيء تقريباً تحتهما. لا يمكنك خداع مقياس كامل الخط الزمني بالتداول نادراً — البقاء ساكناً يُعاقَب مباشرة وتلقائياً، لأن الشموع الساكنة في المقام. هذه هي الفكرة الأهم في المقالة كلها، ونعود إليها في الفصل 6.
PnL الخام آمن لكن غير أمثل — إنه يُفرط في التعرض. انظر عن قرب: متوسط تعرض PnL الخام 0.859، الأعلى بين الجميع، وSharpe خارج العينة (1.61) أدنى بدرجة واحدة من Sharpe كامل الخط الزمني (1.71) والأمثل الحقيقي (1.77). يُكافئ PnL التواجد في السوق، لذا يدفع البحث عالياً جداً (على البذرة 6، يختار PnL الخام مقابل الأمثل 1.04)، جارّاً معه شموعاً خارج النطاق لا تحمل ميزة وتضيف ضوضاء فقط. إنه لا ينهار — لكنه ينجرف متجاوزاً الأمثل الحقيقي في الاتجاه المعاكس لفخ لكل صفقة. دالة هدف مختلفة، تحيّز مختلف، نفس الدرس: المقياس اختار الاستراتيجية.
الصفان اللذان لم نُناقشهما بعد — الحد الأدنى للتعرض وconf_k — هما الإصلاح. هذا هو الفصل التالي.
الفصل 4 — لماذا لا يمكن أبداً الوثوق بثماني صفقات

قبل إصلاح الفخ، يستحق الأمر أن نكون دقيقين حول لماذا تُنتج ثماني صفقات Sharpe قدرها 21 لا تعني شيئاً — لأن الإصلاح ينبع مباشرة من السبب.
نسبة Sharpe تقدير، والتقديرات لها أشرطة خطأ. تُعطي نتيجة Andrew Lo لعام 2002 الخطأ المعياري لنسبة Sharpe مُقدَّرة من مشاهدة، تحت أكثر افتراض سخاء ممكن (عوائد Normal مستقلة الاتزاع IID):
الخطأ يتقلّص فقط كـ. أطعمه الفخ. Sharpe لكل صفقة على البذرة 6 هي سنوياً، أي لكل مشاهدة، محسوبة على شمعة. الخطأ المعياري هو
(مُشتق من صيغة Lo). التقدير النقطي هو ؛ شريط خطأ الانحراف المعياري الواحد له من رتبة — اقرأ هذا كترتيب حجم توضيحي، لا فترة ثقة معايرة، لأن الصيغة تفترض عوائد Normal مستقلة الاتزاع تنتهكها ضوضاؤنا ذات الذيل السمين . ومع ذلك، الرسالة لا لبس فيها: "Sharpe قدرها 21" رقم مسحوب من توزيع واسع جداً بحيث لا يحمل عملياً أي معلومة — وهذا هو الحساب المتساهل، لأن امتداد Mertens يُظهر أن الذيول السمينة والالتواء لا تفعل سوى تضخيم الخطأ المعياري أكثر. Sharpe اختبار رجعي نادر التداول أقل موثوقية من قيمته النقطية في كل اتجاه في آن واحد: مشاهدات قليلة جداً، والتوزيع الخاطئ.
هذا بالضبط ما يُضفيه الطابع الرسمي الحد الأدنى لطول سجل التتبع (Minimum Track Record Length) (Bailey & López de Prado، 2012). إنه يقلب السؤال — كم مشاهدة أحتاج قبل أن يُسمح لي بتصديق Sharpe بهذا الحجم عند ثقة ؟ —
يُحوّل "ثق بالاختبارات الرجعية قليلة الصفقات أقل" إلى رقم صريح وقابل للتحقق من عدد الصفقات. النقطة العميقة لتصميم دالة الهدف هي هذه: ينبغي لدالة هدف جيدة أن تفرض حداً أدنى لسجل التتبع من الداخل، بدلاً من ترك إنسان يلاحظ، بعد فوات الأوان، أن الفائز يرتكز على ثماني مشاهدات. تفعل Sharpe لكل صفقة العكس تماماً — إنها تُعظَّم بدفع عدد المشاهدات نحو الحد الأدنى. أي دالة هدف يقع أمثلها عند "أقل عدد ممكن من الصفقات" هي، بالبناء، دالة هدف تبحث عن أقل تقديراتها موثوقية.
يتضافر فشلان في الفخ، وتسمية كليهما يُخبرنا كيف نُصلحه. أولاً، ضوضاء العينة الصغيرة: ثماني مشاهدات لا يمكنها تثبيت أي نسبة. ثانياً، الانتقاء: تلك الشموع الثماني لم تُسلَّم لنا — البحث هو من اختار العتبة التي حطّت عليها، جزئياً لأنها كانت محظوظة. البحث مُعظِّم؛ سيجد دائماً زاوية الفضاء حيث تبدو الضوضاء كإشارة بالصدفة. لا يمكنك التغلب على هذا بتقدير نقطي أفضل. عليك تغيير معنى "الأفضل" بحيث لا تكون الزاوية المحظوظة هي الأقصى.
الفصل 5 — الإصلاح: حد أدنى للتعرض وتقليص عدد الصفقات

لدينا داءان مُسمّيان — يتاجر نادراً جداً ويرتكز على مشاهدات قليلة جداً — فنكتب علاجين، كل واحد موجَّه لأحدهما.
العلاج 1: حد أدنى للتعرض. أبسط إصلاح ممكن. ارفض تماماً أي استراتيجية ليست في السوق على الأقل من الوقت — إذا كنت بالكاد تتاجر، نتيجتك ولا يمكن للبحث اختيارك. لكن هناك دقة صادقة في ما تفرض عليه الحد، وهي الدرس الهادئ لهذه المقالة كلها. كدالة هدف قائمة بذاتها، فرضنا الحد على Sharpe كامل الخط الزمني، وعلى هذا السوق ذلك لا يُغيّر شيئاً على الإطلاق: فائز Sharpe كامل الخط الزمني نفسه يقع أصلاً عند تعرض ~74%، لذا حد 20% لا يُفعَّل أبداً. هذا بالضبط لماذا صفّا "حد أدنى للتعرض" و"Sharpe كامل الخط الزمني" في الجداول أعلاه متطابقان حرفياً — ثبِّت حداً على مقياس آمن أصلاً وستكون قد أعدت اشتقاق Sharpe الكاملة ببساطة. الحد يقوم بعمل مرئي فقط عندما يحرس مقياساً كان سيندفع إلى الزاوية لولا ذلك: مقياس لكل صفقة، كما في دالة الهدف القوية أدناه. بعبارة أخرى، "اشترط التعرض" و"قِس على كامل الخط الزمني" هما، على هذه البيانات، اسمان لنفس التدخل.
العلاج 2: تقليص عدد الصفقات — "conf_k". لعندما تكون عالقاً بمقياس لكل صفقة وتريد تصحيحاً ليّناً بدلاً من قطع صارم: خصم Sharpe باستمرار بحسب عدد الصفقات التي ترتكز عليها. اضرب في ، حيث عدد الصفقات و "ثابت ثقة" ثابت — قوة سابقة مكافئة-للصفقات تُختار قبل البحث:
كلما تُسحق النتيجة إلى صفر بغض النظر عن كبر Sharpe الخام؛ وكلما تتقارب النتيجة إلى Sharpe الخام. هذا هو نفس المنطق التصحيحي لـMinTRL والخطأ المعياري في الفصل 4 — تقليص تقدير عينة صغيرة نحو الصفر كدالة متناقصة لحجم عينته — مطويّاً مباشرة داخل دالة الهدف بدلاً من تطبيقه كمرشِّح بعدي. أقرب سابقة مُسمّاة هي رقم جودة النظام (System Quality Number) لفان ثارب ()، الذي يجعل بالمثل مقياس جودة لكل صفقة يتدرّج مع عدد الصفقات — رغم أن الصيغة الدالية تختلف ( تنمو بلا حدود، بينما تتشبّع عند 1). في الشكل، مقياسنا هو تقليص من نوع Bayesian بترجيح-الدقة / empirical-Bayes؛ إنه بناؤنا لهذه المشكلة، لا مُقدِّراً مُسمّى مأخوذاً من الأدبيات.
def obj_active_sharpe(m): # the trap: Sharpe on only the active bars
return m["sharpe_active"]
def _shrink(n, conf_k): # trade-count shrinkage n / (n + k)
return n / (n + conf_k) if (n + conf_k) > 0 else 0.0
def obj_confk(m, conf_k=40.0): # few trades -> little credit
return m["sharpe_active"] * _shrink(m["n_trades"], conf_k)
def obj_robust(m, e_min=0.20, conf_k=40.0): # both cures at once
if m["exposure"] < e_min: # floor: reject strategies that barely trade
return -np.inf
return m["sharpe_active"] * _shrink(m["n_trades"], conf_k)
الآن الجزء الصادق: كم حداً، كم تقليصاً؟ امسح كليهما واقرأ السطح كاملاً. كل خلية هي متوسط Sharpe خارج العينة عبر 200 بذرة (ثلث من الـ600، للإبقاء على المسح ثنائي الأبعاد رخيصاً) مع معدل التحلل بجانبه:
| \ conf_k | |||
|---|---|---|---|
| 0.00 | 0.66 (59.5%) | 1.26 (22.5%) | 1.47 (11.5%) |
| 0.05 | 1.43 (10.0%) | 1.53 (6.0%) | 1.60 (4.0%) |
| 0.10 | 1.64 (1.5%) | 1.65 (1.0%) | 1.67 (1.0%) |
| 0.20 | 1.71 (0.0%) | 1.71 (0.0%) | 1.71 (0.0%) |
| 0.35 | 1.73 (0.0%) | 1.73 (0.0%) | 1.73 (0.0%) |
متوسط Sharpe سنوية خارج العينة، مع معدل التحلل بين قوسين. الخلية أعلى اليسار هي Sharpe الخام لكل صفقة — بلا حد، بلا تقليص: خارج العينة 0.66، متحلل 59.5%. هذه نفس دالة الهدف لصف الفصل 3 لكل صفقة، الذي قرأ 0.70 / 57%؛ الفجوة الصغيرة هي فقط مجموعة البذور — هذا المسح يستخدم 200 بذرة، ومونت كارلو استخدم الـ600 كلها. نفس المقياس، عينة أصغر.
يروي السطح قصة نظيفة في ثلاث قراءات.
كل علاج يعمل بمفرده. تحرّك يميناً على طول الصف العلوي (أضف تقليصاً، بلا حد): يتسلق خارج العينة ويهبط التحلل . تحرّك للأسفل في العمود الأيسر (أضف حداً، بلا تقليص): يتسلق خارج العينة ويهبط التحلل . أي مقبض، يُدار بمفرده، يرفع باستقلالية أداء خارج العينة ويقتل التحلل. حد التعرض هو الرافعة المفردة الأقوى هنا، لأنه يهاجم السمة المُعرِّفة للفخ — التعرض شبه الصفري — مباشرة.
معاً يبلغان الهضبة — والهضبة هي فقط Sharpe كامل الخط الزمني. بحلول يكون الصف مسطّحاً عند خارج العينة 1.71 مع 0% تحلل عبر كل مستوى تقليص؛ ادفع إلى ويزحف إلى 1.73. لكن انظر جيداً إلى ما هو ذلك 1.71: إنه بالضبط النتيجة التي تُسجّلها Sharpe كامل الخط الزمني العادية في الفصل 3 بلا حد وبلا تقليص على الإطلاق. في أفضل حالاتها، لا تتفوق الإصلاحات بأثر رجعي على Sharpe كامل الخط الزمني — إنها تُعيد بناءها. ودالة الهدف القوية المُصلَحة بالكامل لا تصل حتى إلى ذلك تماماً: عبر كل الـ600 بذرة تهبط عند خارج العينة 1.70 مع تحلل متبقٍ 0.17%، أدنى بشعرة من 1.71 / 0% لـSharpe الكاملة — إنها مُهيمَن عليها بضعف بواسطة المقياس الأبسط. إعداد وسطي متواضع، مع ، يبلغ خارج العينة 1.65 عند 1% تحلل — مفيد إذا فُرض عليك مقياس لكل صفقة، لكن ليس سبباً أبداً لتفضيل واحد.
الأرقام الدقيقة معتمدة على المقياس — الشكل هو النتيجة. القيم المحددة ، التي تُصلح هذا السوق بالكامل مُضبوطة على عملية توليد البيانات هذه؛ على سوق مختلف بترددات تداول وسماكة ذيل مختلفة، تقع الهضبة في مكان آخر. ما يعمّم ليس الإحداثيات بل السطح: ارتفاع رتيب في كلا الاتجاهين، تحلل يُدفَع إلى الصفر، هضبة عند الحقيقة. تجد إحداثياتك الخاصة بالمسح، تماماً كما أعلاه.
ضع كلا العلاجين معاً — دالة الهدف القوية، حد 0.20 زائد conf_k 40 — وعُد إلى البذرة 6. تَوّج الفخ ، ثماني صفقات، Sharpe خارج العينة كامل الخط الزمني قدرها 0.13. دالة الهدف القوية تختار بدلاً من ذلك : تعرض سوقي 0.66، 447 صفقة، Sharpe سنوية خارج العينة 1.77. تلك هي نقطة شبكية واحدة أدنى من الأمثل الحقيقي ، لذا فهي تستعيد عتبة قريبة من الأمثل ومعرَّضة جيداً بدلاً من الهبوط في عين الهدف تماماً — Sharpe خارج العينة للبذرة المفردة (1.77) تصادف أنها تتطابق مع أمثل المجتمع. نفس البيانات، نفس البحث، نفس الـ80 عتبة مرشحة. فقط تعريف "الأفضل" تغيّر، ونقل الفائز من سراب ثماني صفقات ساكن إلى الميزة الحقيقية والمعرَّضة جيداً — وهي، بشكل لافت، نفس العتبة التي تختارها Sharpe كامل الخط الزمني العادية على هذه البذرة بالضبط.
تحذير واحد يجعله المسح صريحاً: conf_k وحدها لا تكفي على هذا السوق. عند بلا حد، التحلل لا يزال 22.5% عبر البذور — وعلى البذرة 6 تحديداً، تختار conf_k وحدها ، 35 صفقة، Sharpe خارج العينة قدرها −0.06. خمس وثلاثون صفقة تنجو من تقليص بنتيجة كافية متبقية للفوز. حد التعرض هو ما يُغلق تلك الفجوة الأخيرة، لأنه يستهدف السمة الحقيقية للفخ — كونه ساكناً — مباشرة، بدلاً من الوثوق بعدد الصفقات كبديل عنه.
الفصل 6 — الدرس الأعمق: قِس على كامل الخط الزمني

تراجع عن الإصلاح ولاحظ ما الذي فصل فعلاً دوال الهدف الآمنة عن الفخ. لم يكن التطور. PnL الخام وSharpe كامل الخط الزمني أبسط من Sharpe لكل صفقة، ولم تتحللا أبداً — 0% عبر 600 بذرة — بلا حد، بلا تقليص، بلا أي ضبط على الإطلاق.
الخط الفاصل خاصية واحدة: أي نافذة يقيسها المقياس؟ تقيس Sharpe لكل صفقة فقط الشموع التي اختارت الاستراتيجية الوقوف عليها — نافذة ذاتية-الانتقاء يمكن للبحث تقليصها كيفما شاء. تقيس Sharpe كامل الخط الزمني وPnL الكلي كامل الخط الزمني، بما فيه الشموع الساكنة. ولا يمكنك جعل مقياس كامل الخط الزمني كبيراً بالتداول نادراً، لأن كل ساعة تقف فيها ساكناً هي ساعة في المقام تكسب لا شيء. حد التعرض وconf_k هما، في النهاية، مجرد طريقتين لإصلاح مقياس لكل صفقة بالوعي-بالتعرض الذي تملكه مقاييس كامل الخط الزمني مجاناً — وقد أخبرنا المسح بالفعل سقف ذلك الإصلاح: في أفضل حالاته يُطابق Sharpe كامل الخط الزمني (خارج العينة 1.70 مقابل 1.71)، ولا يتفوق عليها أبداً. إذا كنت حراً في اختيار النافذة، اختر الخط الزمني كله وتخطَّ الإصلاح بالكامل.
إذن مبدأ التصميم، بصراحة:
صمّم دالة الهدف بحيث لا يمكن خداعها بصفقات محظوظة نادرة. لديك ثلاث أدوات، بترتيب تفضيل تقريبي:
- قِس على كامل الخط الزمني. الافتراضي الذي ينبغي عدم مغادرته تقريباً أبداً. Sharpe كامل الخط الزمني والعائد الكلي واعيان بالتعرض بالبناء — يُعاقَب الخمول تلقائياً لأن الشموع الساكنة تُحتسَب. إذا وجدت نفسك تُبلغ عن مقياس محسوب على "فقط الشموع التي كنا نشطين فيها"، توقف واسأل ماذا سيفعل البحث بحرية اختيار تلك الشموع.
- اشترط التعرض. إذا كان عليك استخدام مقياس شرطي-بالنشاط، ضع حداً للتعرض بحيث لا يستطيع البحث اختيار استراتيجية بالكاد تتاجر. هذه الرافعة المفردة الأقوى ضد الفخ تحديداً.
- قلّص بعدد الصفقات. خصم أي نسبة بـ بحيث تكسب Sharpe المرتكزة على حفنة من المشاهدات جزءاً من رصيد واحدة مرتكزة على الآلاف. هذا هو الإنفاذ على مستوى دالة الهدف للحد الأدنى لطول سجل التتبع: رقم من مشاهدات قليلة غير موثوق (الفصل 4)، لذا فإن دالة هدف صادقة تُسعِّر تلك اللاموثوقية بدلاً من الوثوق بإنسان ليلتقطها لاحقاً.
لا شيء من هذا يجعل البحث أذكى. إنه يجعل الهدف صادقاً، بحيث عندما يفعل البحث بالضبط ما يفعله دائماً — إيجاد الأقصى — يكون الأقصى استراتيجية تريدها فعلاً.
ملاحظات الصدق
ثلاثة تحذيرات، مذكورة بوضوح، لأن دراسة مضبوطة لا تكسب استنتاجاتها إلا بتسمية حدودها.
- السوق اصطناعي، وعن قصد. إشارة Normal قياسية، ميزة خطية محصورة في ، ضوضاء Student-() ذات ذيول سمينة — اختيرت من أجل حقيقة أساسية مضبوطة، لا من أجل واقعية السوق. لا يمكننا إثبات أن دالة هدف تختار الاستراتيجية الخاطئة إلا بتشغيلها على بيانات نعرف فيها أي استراتيجية صحيحة. الأسواق الحقيقية غير مستقرة، ومترابطة ذاتياً، ومتبدّلة الأنظمة. الذيول السمينة مكوّن واقعي أبقيناه، لكن — خلافاً لتخمين أول طبيعي، وخلافاً لمسوّدة سابقة من هذه المقالة نفسها — إنها ليست ما يُشغّل الفخ: ضابط بضوضاء Gaussian (300 بذرة) يتحلل 55.7% من الوقت مقابل 57.0% هنا، بـSharpe خارج العينة 0.71 مقابل 0.70. الفخ أثر عينة-صغيرة-زائد-انتقاء يصمد بوجود أو بغياب الذيول الثقيلة. المُنتَج المُسلَّم هو التشخيص ونمط الإصلاح، لا استراتيجية ولا ثابت عالمي.
- قيم الإصلاح معتمدة على المقياس. الحد المحدد والتقليص اللذان يُغلقان الفخ بالكامل مُضبوطان على عملية توليد البيانات هذه — ترددات تداولها، سماكة ذيلها، حجم ميزتها. على بيانات أخرى تتحرك الهضبة. ما ينتقل هو شكل سطح المسح (ارتفاع رتيب في كلا المقبضين، تحلل إلى صفر، هضبة عند الحقيقة) وطريقة إيجاد إحداثياتك الخاصة: امسح كليهما واقرأ السطح، لا تنسخ الأرقام.
- conf_k بناؤنا الخاص، لا مُقدِّراً مُسمّى. تقليص عدد الصفقات أداة بأسلوب Bayesian بترجيح-الدقة / empirical-Bayes بنيناها لهذه المشكلة؛ منطقها متجذّر في نتيجة الخطأ المعياري المُتحقَّق منها لـLo/Mertens وMinTRL لـBailey–López de Prado، وأقرب قريب مُسمّى لها هو رقم جودة النظام لفان ثارب (، صيغة دالية مختلفة)، لكننا لا نزعم أن نفسها تظهر تحت اسم في الأدبيات. علاجاها المرافقان — حد التعرض، القياس على كامل الخط الزمني — ممارسة قياسية مذكورة بدقة. ولاحظ أي دوال الهدف كانت آمنة أصلاً هنا: PnL الخام وSharpe كامل الخط الزمني لم يحتاجا أبداً إصلاحاً، لأنهما واعيان بالتعرض من البداية — لدرجة أن وضع حد على Sharpe كامل الخط الزمني يختزل إلى Sharpe كامل الخط الزمني، إذ فائزها يتجاوز أصلاً أي حد معقول. الفخ تحديداً هو Sharpe لكل صفقة / النشطة — وحتى دالة الهدف لكل صفقة المُصلَحة بالكامل لا تفعل سوى مطابقة Sharpe كامل الخط الزمني (خارج العينة 1.70 مقابل 1.71)، ولا تتفوق عليها أبداً. الدرس الأساسي ليس الإصلاح؛ إنه القياس على كامل الخط الزمني من البداية.
الخلاصات
- دالة الهدف هي القرار، لا شكلية. لا يجد البحث "استراتيجية جيدة" — إنه يجد مُعظِّم أياً كان الرقم القياسي الذي سلّمته له، وأرقام قياسية مختلفة تختار استراتيجيات مختلفة تماماً على بيانات مطابقة. اختيار دالة الهدف هو اختيار الاستراتيجية؛ كل ما بعده مسك دفاتر. هذا هو قانون Goodhart: لحظة أن يصبح مقياسك هدف البحث، سيستغل البحث كل فجوة بينه وبين ما قصدته.
- Sharpe لكل صفقة فخ. مقاسة على فقط الشموع التي تتاجر فيها الاستراتيجية، تُعظَّم بالتداول نادراً قدر الإمكان — كلما قلّت المشاهدات، كان أسهل لبضع حركات محظوظة أن تُضخّم النسبة (ضابط Gaussian يؤكد أن الذيول السمينة ليست مطلوبة؛ إنه أثر عينة-صغيرة-زائد-انتقاء). عبر 600 بذرة تختار يانصيب بتعرض أقل من 5% في 56% منها وتتحلل في 57%؛ الاختيار المتحلل النموذجي يبلغ متوسطه Sharpe داخل العينة لكل صفقة قدرها 4.58. على بذرة واحدة مُختارة عمداً لحدّتها، تَوّجت استراتيجية بثماني صفقات وتعرض 0.4% بـSharpe داخل العينة لكل صفقة قدرها 21.09 تنهار إلى Sharpe كامل الخط الزمني خارج العينة قدرها 0.13. نسبة مبنية على ثماني مشاهدات لها خطأ معياري من رتبة ±7.7 سنوياً (الفصل 4) — لم تكن معلومة قط.
- دوال الهدف الواعية بالتعرض آمنة بطبيعتها. PnL الخام وSharpe كامل الخط الزمني لم تتحللا أبداً (0%)، لأنهما تقيسان كامل الخط الزمني ويُعاقَب الخمول تلقائياً. لا يمكنك خداع مقياس كامل الخط الزمني بالتداول نادراً. عيب PnL الخام الوحيد هو التحيّز المعاكس — إنه يُفرط في التعرض (متوسط تعرض 0.859، خارج العينة 1.61 مقابل الحقيقي 1.77)، يُجرف متجاوزاً الأمثل ليكون في السوق أكثر.
- الإصلاحات تعمل — لكنها فقط تُعيدك إلى Sharpe كامل الخط الزمني. حد التعرض وتقليص عدد الصفقات (conf_k) كل منهما يرفع باستقلالية Sharpe خارج العينة ويدفع التحلل نحو الصفر؛ معاً يبلغان هضبة. لكن تلك الهضبة هي Sharpe كامل الخط الزمني: يهبط التحلل من 59.5% عند إلى 0% بحلول وتتسلق Sharpe خارج العينة من 0.66 إلى 1.71 — الرقم الدقيق الذي تُسجّله Sharpe الكاملة العادية بلا مساعدة، ودالة الهدف القوية المُصلَحة بالكامل تهبط فعلياً بشعرة تحته (خارج العينة 1.70، تحلل 0.17%: مُهيمَن عليها بضعف). على البذرة 6 تستعيد دالة الهدف القوية عتبة قريبة من الأمثل ومعرَّضة جيداً (، نقطة شبكية واحدة أدنى من الحقيقي ؛ 447 صفقة؛ Sharpe خارج العينة 1.77). عامل conf_k كحل احتياطي لعندما يُفرض عليك مقياس لكل صفقة، لا كترقية على قياس كامل الخط الزمني. الإحداثيات الدقيقة معتمدة على المقياس؛ شكل السطح هو النتيجة القابلة للنقل.
- صمّم دالة الهدف بحيث لا يمكن خداعها بصفقات محظوظة نادرة. بترتيب التفضيل: قِس على كامل الخط الزمني (الافتراضي)، اشترط التعرض (الرافعة المفردة الأقوى)، قلّص بعدد الصفقات (الحد الأدنى لطول سجل التتبع على مستوى دالة الهدف). لا شيء من هذا يجعل البحث أذكى — إنه يجعل الهدف صادقاً، بحيث يكون الأقصى الذي يجده البحث حتماً استراتيجية ستتداولها فعلاً.
بحث المعلمات جنّي مطيع. إنه يمنح بالضبط الأمنية التي تصوغها، لا التي قصدتها — و"عظّم هذا المقياس" هي الأمنية. اصغها كـSharpe لكل صفقة وسيستحضر ثماني صفقات محظوظة ويسمّيها ثروة. اصغها بحيث يُعاقَب البقاء ساكناً وتكسب حفنة من الصفقات فقط حفنة من الرصيد، ونفس الجنّي، على نفس البيانات، يُسلّمك الميزة الحقيقية. الاستراتيجية التي تنشرها اختيرت لحظة أن كتبت دالة الهدف. اختَرها عن قصد.
التجربة الكاملة — السوق الاصطناعي، ودوال الهدف الست، ومونت كارلو بـ600 بذرة، وسطح مسح-الإصلاح، وكل رقم قابل لإعادة التوليد من سكريبت حتمي واحد — موجودة في الورقة المرافقة على objective-design.marketmaker.cc، مع الكود والبيانات على github.com/suenot/objective-design-degeneracy.
هذه جبهة واحدة في نفس الحرب التي تخوضها دراساتنا الأخرى من زوايا مختلفة. نسبة Sharpe المخفّضة تُسعِّر فائز بحث بعد الاختبار المتعدد — حيث تسأل هذه المقالة هل اختارت دالة الهدف الاستراتيجية الصحيحة أصلاً، تسأل DSR هل تتفوق الاستراتيجية المختارة على ما يُنتجه الحظ وحده. دراسة احتمال الإفراط في تخصيص الاختبار الرجعي القادمة تهاجم نفس تحيز الانتقاء من جانب إعادة أخذ العينات، مُسجِّلة الإجراء بدلاً من الفائز. وتصنيف تحيز النظر المستقبلي يُصنِّف المُصنِّع العظيم الآخر لـSharpe مزيّفة — تسرب من المستقبل — الذي يُنتج نفس العرَض بالضبط (اختبار رجعي رائع يموت حياً) عبر آلية مختلفة تماماً. تصميم دالة الهدف، التخفيض، احتمال الإفراط في التخصيص، النظر المستقبلي: أربعة أسماء لتخصص واحد — عدم خداع نفسك باختبارك الرجعي.
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.