الرسم البياني للتحليل: السعر مع المؤشرات ورسوم رأس المال والتراجع وتوزيعات العوائد وتصدير الأشكال
استخدم واجهة الشكل والمحاور في matplotlib لبناء الرسوم البيانية الأربعة التي يحتاجها كل تقرير اختبار رجعي، واقرأها بشكل صحيح، وصدّرها بجودة صالحة للطباعة.
ما الذي ستتعلمه
- نمط
fig, ax = plt.subplots()ولماذا يتفوّق على الاختصار السريعseries.plot()في كل ما ستعيد استخدامه. - كيف تكدّس لوحات السعر والمؤشر ورأس المال التي تتشارك محورًا زمنيًا واحدًا، ومتى تحوّل محور رأس المال إلى مقياس لوغاريتمي.
- كيف ترسم رسمًا بيانيًا للتراجع ومدرّجًا تكراريًا للعوائد، وما الذي تبحث عنه في كل منهما.
- كيف يحدّد حجم الشكل ودقة DPI وصيغة الملف شكل الصورة المصدَّرة.
الشرح
الرسوم البيانية في البحث ليست زينة؛ بل هي أسرع وسيلة للتحقق من صحة أرقامك. فمنحنى رأس مال يقفز 30 % في يوم واحد يعني عادةً خطأً في البيانات لا صفقة رائعة. يستخدم هذا الدرس مكتبة matplotlib، التي تستدعيها pandas من وراء الستار، عبر واجهتها كائنية التوجّه.
الشكل والمحاور والمحور الزمني المشترك
الشكل (figure) هو اللوحة كلها؛ وكائن المحاور (axes) منطقة رسم واحدة داخلها. ينشئ fig, axes = plt.subplots(3, 1, figsize=(10, 8), sharex=True, height_ratios=[3, 1, 1]) ثلاث لوحات مكدّسة بارتفاعات مختلفة تتكبّر وتتصغّر معًا. والنمط واحد لكل لوحة: استدعِ ax.plot(x, y, label=...)، ثم ax.set_ylabel وax.legend() وax.grid(True, alpha=0.3). أعطِ كل لوحة عنوانًا قصيرًا وسمِّ الوحدات (€، %، نقاط).
السعر مع المؤشرات
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 6), sharex=True, height_ratios=[3, 1])ax1.plot(df.index, df.close, lw=1, label='الإغلاق')ax1.plot(df.index, df.sma50, lw=1, label='SMA 50')ax1.fill_between(df.index, df.bb_lo, df.bb_hi, alpha=0.15, label='Bollinger')ax1.legend(loc='upper left'); ax1.set_ylabel('السعر (€)')ax2.plot(df.index, df.rsi, lw=1); ax2.axhline(70, ls='--'); ax2.axhline(30, ls='--')ax2.set_ylabel('RSI'); fig.autofmt_xdate(); fig.tight_layout()
يظلّل fill_between نطاقًا؛ ويرسم axhline مستويات مرجعية؛ ويدير autofmt_xdate التواريخ كي لا تتداخل. ولتعليم الصفقات من قائمة صفقات الدرس 8، استخدم ax1.scatter(entries.index, entries.price, marker='^') لنقاط الدخول ومثلثًا متجهًا إلى الأسفل لنقاط الخروج.
رأس المال والتراجع
ارسم رأس المال باستخدام ax.set_yscale('log') كلما تضاعف الحساب أكثر من مرة خلال الفترة. فعلى محور خطي، تبدو حركة من €10,000 إلى €11,000 ضئيلة بجانب حركة لاحقة من €40,000 إلى €44,000، رغم أن كلتيهما +10 %. ترسم لوحة التراجع dd = equity / equity.cummax() - 1 وتملؤها: ax.fill_between(dd.index, dd, 0, alpha=0.4). واقرأها بحثًا عن ثلاثة أمور: أعمق نقطة (أقصى تراجع)، وأطول فترة تحت الصفر (الوقت تحت الماء، وكثيرًا ما يكون أشد إيلامًا من العمق)، وما إذا كانت التراجعات تتجمّع في نظام سوقي واحد.
توزيعات العوائد
يُظهر ax.hist(returns, bins=50, density=True) شكل العوائد اليومية أو العوائد لكل صفقة. ارسم فوقه منحنى طبيعيًا بالمتوسط والانحراف المعياري نفسيهما لترى الذيول السميكة: فالعوائد الحقيقية فيها أيام متطرفة أكثر مما يتنبأ به منحنى الجرس. ولقائمة الصفقات، ارسم مضاعفات R بدلًا من ذلك: يُظهر نظام اتجاه سليم كثيرًا من الخسائر الصغيرة قرب −1R وذيلًا أيمن طويلًا؛ بينما يُظهر نظام بيع التقلب الصورة المعكوسة، وهذا تحذير. اذكر الالتواء والتفرطح باستخدام returns.skew() وreturns.kurt() (يعيد pandas التفرطح الزائد، لذا تعني القيمة 0 ذيولًا شبيهة بالتوزيع الطبيعي).
التصدير
يكتب fig.savefig('equity.png', dpi=150, bbox_inches='tight') صورة نقطية؛ وحجم البكسلات = البوصات × DPI، لذا فإن شكلًا بحجم 10 × 6 بوصات بدقة 150 DPI يساوي 1,500 × 900 بكسل. استخدم .svg أو .pdf للمخرجات المتّجهة التي تبقى حادة في التقرير، وbbox_inches='tight' لقصّ الهوامش البيضاء. استدعِ دائمًا plt.close(fig) بعد الحفظ داخل حلقة، وإلا فإن سكربتًا يُنتج 40 رسمًا بيانيًا لقائمة المراقبة (الدرس 12) سيحتفظ بأربعين شكلًا في الذاكرة. اضبط الإعدادات الافتراضية مرة واحدة باستخدام plt.rcParams['figure.dpi'] = 110 بدلًا من ضبطها في كل استدعاء.
مثال محلول
مثال افتراضي: سلسلة رأس مال لاختبار رجعي (باليورو، مختلَقة) ورسمها البياني. الرسوم والضرائب مستبعدة من قيم رأس المال.
- رأس المال في نهايات السنوات: €10,000، €13,000، €11,700، €16,000، €24,000. سلسلة التراجع: القمم 10,000؛ 13,000؛ 13,000؛ 16,000؛ 24,000 ← التراجعات 0؛ 0؛ 11,700 / 13,000 − 1 = −10.0 %؛ 0؛ 0. أقصى تراجع −10 %، والوقت تحت الماء نحو سنة واحدة.
- على محور خطي يهيمن المقطع الأخير (+€8,000) على الصورة؛ أما على محور لوغاريتمي فتظهر الخطوات +30 %، −10 %، +36.8 %، +50 % بأحجامها النسبية الحقيقية، وتكون سنة −10 % مرئية بدلًا من أن تُسطَّح.
- العوائد اليومية: المتوسط 0.06 %، والانحراف المعياري 1.1 %، والتفرطح الزائد 4.2. التوزيع الطبيعي بهذا الانحراف المعياري سيضع يومًا بعائد −3.3 % (ثلاثة انحرافات معيارية) بمعدل يوم واحد تقريبًا كل 740 يومًا؛ بينما يُظهر المدرّج التكراري سبعة أيام كهذه في 1,000 يوم. هذه الفجوة هي الذيل السميك، وهي السبب في أن الفجوات السعرية قد تتخطى أوامر الوقف (الدرس 8).
- التصدير: يعطي
figsize=(8, 5)بدقةdpi=200حجمًا قدره 1,600 × 1,000 بكسل، وهو كافٍ لشريحة عرض؛ والشكل نفسه محفوظًا بصيغة SVG مستقل عن الدقة، وغالبًا ما يكون أصغر من 100 كيلوبايت.
خطأ شائع
نشاط تطبيقي
على الورق: (أ) يسير منحنى رأس مال على النحو 20,000 ← 26,000 ← 19,500 ← 28,000 (باليورو، أربع نقاط). احسب التراجع عند كل نقطة. (ب) تريد شكلًا بحجم 1,200 × 800 بكسل بالضبط بدقة 100 DPI؛ ما قيمة figsize التي تمرّرها؟ (ج) يُظهر المدرّج التكراري لمضاعفات R لاستراتيجية ما أعلى عمود بين +0.2R و+0.4R وذيلًا أيسر رفيعًا يصل إلى −6R. اكتب جملة واحدة عمّا يوحي به هذا الشكل بشأن الاستراتيجية والمخاطرة التي لن تُظهرها نسبة شارب.
عرض الحل
(أ) القمم: 20,000؛ 26,000؛ 26,000؛ 28,000. التراجعات: 0؛ 0؛ 19,500 / 26,000 − 1 = −25.0 %؛ 0.
(ب) figsize = (1,200 / 100, 800 / 100) = (12, 8) بوصة.
(ج) كثير من المكاسب الصغيرة وخسائر نادرة كبيرة جدًا هو سمة الاستراتيجية التي تبيع المخاطرة (مثل كتابة الخيارات أو تعزيز المراكز الخاسرة بالشراء عند الانخفاض)؛ ونسبة شارب، المبنية على متوسط وانحراف معياري، ترتفع بفعل المكاسب الصغيرة المتكررة وتقلّل من تقدير احتمال يوم بخسارة −6R يمحو أرباح أشهر.
القيود: المدرّج التكراري الذي يضم أقل من 100 مشاهدة تقريبًا مشوَّش جدًا للحكم على شكل الذيل؛ اذكر أسوأ القيم الفعلية بدلًا من ذلك.
أهم النقاط
- استخدم
plt.subplotsمع محاور x مشتركة للوحات السعر والمؤشر ورأس المال والتراجع؛ وسمِّ الوحدات. - يُظهر رأس المال على مقياس لوغاريتمي الحركات النسبية بنزاهة؛ وتُظهر رسوم التراجع العمق والوقت تحت الماء.
- تكشف المدرّجات التكرارية للعوائد أو لمضاعفات R الذيولَ السميكة وعدم التماثل اللذين تخفيهما الإحصاءات الموجزة.
- البكسلات = البوصات × DPI؛ فضّل SVG أو PDF للتقارير، وأغلق الأشكال داخل الحلقات.
الخطوة التالية
ينتقل الدرس 11 من أداة واحدة إلى عدة أدوات: مصفوفات الارتباط والتغاير، وتقلب المحفظة من الأوزان، ومحاكاة إعادة التوازن في pandas.
تقييم ذاتي
أجب عن الأسئلة، ثم تحقّق من إجاباتك. يمكنك إعادة المحاولة بقدر ما تشاء.
تقييم ذاتي تلقائي لمراجعتك الشخصية. تُفحَص إجاباتك في متصفحك ولا نطّلع عليها ولا نقيّمها. هذا ليس امتحانًا ولا مؤهّلًا.
تقدّمك
«مكتمل» يعني فقط أنك علّمت الدرس كمنتهٍ. وهو ليس اختبارًا لفهمك. يُحفظ التقدّم والملاحظات فقط في هذا المتصفح على هذا الجهاز — وليس في حساب.