
Python للتمويل: المكتبات، البيانات، وأول برنامج لك
اللغة الأكثر شعبية في التمويل الكمّي — ابدأ من هنا
Python كلغة سير عمل، لا فقط صياغة
فرق التمويل الكمّي نادرًا ما تختار لغة لأناقتها المجرّدة فقط. تختار ما يسمح لباحث بالانتقال من ملفّ CSV فوضويّ إلى إشارة مُختبَرة دون إعادة كتابة العالم كل أسبوع. Python يفوز لأنه قابل للقراءة، قابل للبرمجة النصّية، ويجلس في مركز نظام بيئي رقمي ضخم: الاستيعاب، التنظيف، عمل الخصائص، التصوير، و(بحذر) خدمات الإنتاج.
ثلاثة قيود تظهر في تقريبًا كل مكتب:
- زمن الرسم البياني الأول — هل تستطيع تحميل شريحة من التاريخ ورؤية الشواذ في دقائق؟
- التفاعل البيني — هل تستطيع استدعاء واجهات بورصات، قواعد بيانات، ومكتبات تعلّم آلي في عملية واحدة؟
- القابلية للتكرار — هل يستطيع شخص آخر إعادة بناء بيئتك والحصول على نفس الأرقام؟
Python ليست أسرع لغة لكل دورة معالج مركزي. غالبًا هي المسار الأسرع من السؤال إلى الدليل — وهذا هو العائق الحقيقي.
بيئات تستطيع إعادة بنائها
ابدأ كل مشروع جادّ من بيئة معزولة حتى لا تُلوِّث تجارب pip install عملًا غير ذي صلة. المسار الكلاسيكي هو python -m venv .venv، فعّلها، ثم ثبّت التبعيات في requirements.txt أو ملفّ قفل من Poetry أو pip-tools.
للتمويل، ثبّت أيضًا بذور العشوائية (random seeds) حيث تهمّ المحاكاة، وسجّل لقطات البيانات (حتى تجزئة hash لملفّ المُدخَل) بجوار النتائج. القابلية للتكرار تتغلّب على رسوم بيانية ذكيّة لمرّة واحدة عندما تسأل لجنة مخاطر ما الذي تغيّر.
python -m venv .venv
source .venv/bin/activate
pip install pandas numpy matplotlibمكتبات يجب أن تعرفها عن ظهر قلب
NumPy يمنحك مصفوفات متجاورة وحسابًا سريعًا عنصريًّا. pandas يُطبِّق جداولًا مُسمّاة، فهارس زمنية، دمجًا، وgroupby فوقها. Matplotlib (أو Plotly) يُحوِّل السلاسل إلى رسوم بيانية تستطيع الدفاع عنها في اجتماع.
لاتصال العملات الرقمية، تُوحِّد ccxt واجهات بورصات كثيرة خلف سطح واحد — لا تزال تحتاج لقراءة دقّة وحدود معدّل كل منصّة. للأسهم التقليدية، حزم البائعين أو مُحمِّلات شبيهة بياهو شائعة لبيانات التدريب، لا للتداول الحيّ الحساس للزمن.
مخطّط بسيط للعوائد والتقلب
معظم مسارات العمل تنحصر في: تحميل الأسعار → حساب العوائد → استخلاص إحصاءات متحرّكة. هنا نمط مضغوط يستخدم إغلاقات يومية:
import pandas as pd
import numpy as np
df = pd.read_csv("prices.csv", parse_dates=["date"]).set_index("date")
df["ret"] = df["close"].pct_change()
df["vol_20d"] = df["ret"].rolling(20).std() * np.sqrt(252)
التقلب المُحوَّل سنويًّا يضرب الانحراف المعياري اليومي بـ√252 فقط إن تعاملت مع الأيام التقويمية باستمرار — الشموع خلال اليوم تحتاج تحويلًا مختلفًا. وثّق حجم شمعتك بجانب أي رقم تشحنه.
من الاختبار الرجعي إلى استدعاءات API
شيفرة البحث وشيفرة الإنتاج تختلفان: الأولى تتحمّل حلقات بطيئة؛ الثانية تحتاج زمن انتظار، إعادة محاولة بتراجع تدريجي، معرّفات أوامر مُتماثِلة القوة (idempotent)، وسجلّات مُهيكَلة. إن أتمتَّت التداول ضدّ منصّات مثل GaiaEx على Hyperliquid، عامل مفاتيح المحفظة، انضباط nonce، والنهائية على السلسلة كجزء من النظام — لا كفكرة لاحقة مُلحَقة بدفتر ملاحظات.
Python يظلّ طبقة تنسيق جيّدة: استدعِ واجهة التداول، اضغط التنفيذات في pandas للتحليلات، وأنذِر على Slack حين تتفعّل حدود المخاطرة. حافظ على المسار الحرج بسيط بما يكفي للتفكير فيه حين تنفتح الأسواق فجائيًّا.