تجهيز بيئة العمل
ثبّت Python، وأنشئ مشروعاً بحزمه الخاصة، واختر بين Jupyter وVS Code، وتأكّد من أن كل شيء يعمل عبر سكربت فحص قصير.
في هذا الدرس ستتعلّم أن
- ثبّت إصداراً حديثاً من Python ومدير حزم.
- أنشئ مجلد مشروع بمجموعة حزم معزولة خاصة به.
- شغّل شيفرة Python من دفتر ملاحظات (Notebook) ومن ملف سكربت.
- تأكّد من إعدادك بسكربت يفحص الإصدارات، واقرأ مخرجاته.
قبل أن تُختبر أي فكرة تداول، تحتاج إلى مكان تكتب فيه الشيفرة وتشغّلها. يجهّز هذا الدرس ذلك المكان. يستغرق نحو خمس عشرة دقيقة، ولا تفعله إلا مرة واحدة. وإن كنت تستخدم Python أصلاً، فاطّلع على الأوامر سريعاً وشغّل سكربت الفحص في النهاية للتأكد من إصداراتك.
يتألف الإعداد من ثلاثة أجزاء: Python نفسها، وطريقة لتثبيت الحزم داخل مشروع، ومحرّر تكتب فيه الشيفرة.
لماذا تهمّ بيئة المشروع
تنجز Python وحدها الكثير، لكن الأدوات التي تستخدمها هذه الدورة تأتي في حزم منفصلة: numpy لمصفوفات الأرقام، وpandas لجداول البيانات، وmatplotlib للرسوم البيانية. تُحدَّث الحزم بانتظام، وتغيّر الإصدارات الجديدة سلوكها أحياناً. فقد يطبع الـ Backtest الذي عمل بطريقة ما العام الماضي أرقاماً مختلفة قليلاً بعد التحديث.
الحل هو بيئة المشروع: مجموعة حزم خاصة بالمجلد، مع تسجيل إصداراتها. يحصل كل مشروع على بيئته، فلا يُفسد تحديثُ أحدها غيرَه، ويمكنك دائماً إعادة بناء الإعداد الذي أنتج نتيجة ما بالضبط. وفي عمل غايته الأساسية أدلّة قابلة لإعادة الإنتاج، يهمّ هذا كثيراً.
الخيار أ: uv (موصى به)
uv أداة مجانية تثبّت Python وتنشئ بيئات المشاريع وتدير الحزم. وهي سريعة وتتولى المهام الثلاث بأوامر قليلة. ثبّتها من الطرفية (Terminal على macOS، وPowerShell على Windows):
curl -LsSf https://astral.sh/uv/install.sh | shpowershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"أغلق الطرفية وأعد فتحها لتجد الأمر الجديد، ثم أنشئ مشروع الدورة:
uv python install 3.12
mkdir scuta-quant
cd scuta-quant
uv init --python 3.12
uv add numpy pandas matplotlib jupyterlabسطراً بسطر: ثبّت Python 3.12؛ وأنشئ مجلداً وادخل إليه؛ وحوّل المجلد إلى مشروع يستخدم Python 3.12؛ وأضف الحزم الأربع. ينشئ uv init ملف pyproject.toml يصف المشروع، ويسجّل uv add كل حزمة هناك وفي ملف uv.lock الذي يثبّت الإصدارات بدقة.
لتشغيل Python داخل المشروع، ضع uv run قبل الأمر: uv run python check_setup.py يشغّل سكربتاً، وuv run jupyter lab يفتح دفتر ملاحظات.
الخيار ب: venv وpip
إن كنت تفضّل الأدوات المرفقة مع Python، فثبّت Python 3.12 من python.org، ثم أنشئ بيئة بوحدة venv المدمجة وثبّت الحزم بـpip:
mkdir scuta-quant
cd scuta-quant
python3 -m venv .venv
source .venv/bin/activate
pip install numpy pandas matplotlib jupyterlabعلى Windows، استخدم python بدلاً من python3، وفعّل البيئة بـ.venv\Scripts\activate. تبقى البيئة مفعّلة في نافذة الطرفية تلك فقط؛ وسترى (.venv) في بداية سطر الأوامر. شغّل deactivate للخروج منها، وفعّلها من جديد في كل مرة تفتح فيها طرفية جديدة. في هذا الخيار، يشغّل python check_setup.py سكربتاً ويفتح jupyter lab دفتر ملاحظات، دون uv run قبلهما.
اختيار المحرّر
تحتاج إلى مكان تكتب فيه الشيفرة وتشغّلها. خياران مجانيان جيدان:
JupyterLab يعمل في المتصفح. تعيش الشيفرة في خلايا؛ تشغّل خلية فتظهر مخرجاتها مباشرة تحتها، بما فيها الرسوم البيانية. وهذا مثالي لاستكشاف البيانات خطوة بخطوة. شغّله من مجلد المشروع بالأمر uv run jupyter lab (أو jupyter lab في بيئة venv مفعّلة)، ثم أنشئ دفتر ملاحظات جديداً.
VS Code محرّر شيفرة عام. ثبّت إضافتَي Python وJupyter من لوحة الإضافات، وافتح مجلد المشروع، واختر بيئة المشروع مفسّراً حين يُطلب منك ذلك. بعدها يمكنك تشغيل ملفات السكربت .py وفتح دفاتر الملاحظات في النافذة نفسها.
يستخدم كثيرون الاثنين معاً: دفتر ملاحظات للاستكشاف، وملفات سكربت لكل ما يجب أن يعمل بالطريقة نفسها مرتين. تتيح لك دفاتر الملاحظات تشغيل الخلايا بأي ترتيب، وهذا مريح لكنه يسهّل أن تنتهي بنتائج تعتمد على خلية شغّلتها قبل ساعة ثم حذفتها. وحين تكون النتيجة مهمة، ضع الشيفرة في سكربت وشغّله من الأعلى إلى الأسفل.
برنامجك الأول
أنشئ في مجلد المشروع ملفاً باسم first.py بهذه الأسطر، ثم شغّله:
account = 25_000
risk_per_trade = 0.01
print("Risk per trade in dollars:", account * risk_per_trade)Risk per trade in dollars: 250.0حدثت ثلاثة أشياء. خزّن السطر الأول الرقم 25,000 تحت الاسم account؛ وتتيح لك Python كتابة شرطات سفلية في الأرقام الطويلة لتسهيل قراءتها. وخزّن الثاني 1% بصورة العدد العشري 0.01. وضرب الثالث القيمتين وطبع الناتج. ويشرح الدرس التالي كلاً من هذه الأفكار شرحاً وافياً.
تحقّق من إعدادك
يستورد هذا السكربت كل حزمة ويطبع إصدارها. احفظه باسم check_setup.py وشغّله.
import sys
import matplotlib
import numpy as np
import pandas as pd
print(f"Python {sys.version.split()[0]}")
print(f"numpy {np.__version__}")
print(f"pandas {pd.__version__}")
print(f"matplotlib {matplotlib.__version__}")Python 3.12.15
numpy 2.5.3
pandas 3.0.6
matplotlib 3.11.2يحمّل import حزمة لتستخدمها شيفرتك. ويحمّل import numpy as np حزمة numpy تحت الاسم الأقصر np، وهو عُرف يتبعه تقريباً كل مستخدمي Python؛ وكذلك pd لحزمة pandas. أما الحرف f قبل كل نص فيجعله f-string، تستبدل أي شيء داخل الأقواس المعقوفة بقيمته.
هذه هي الإصدارات المستخدمة لإنتاج كل مخرجات هذه الوحدة. يُفترض أن تعمل الإصدارات الأحدث، وإن كانت الأرقام المطبوعة قد تختلف أحياناً في آخر خانة عشرية. وإذا فشل أي استيراد، فالبيئة تفتقد تلك الحزمة؛ أضفها بـuv add أو pip install وشغّل السكربت مرة أخرى.
كيف تستخدم الشيفرة في هذه الدورة
كل كتلة شيفرة برنامج كامل. يمكنك لصقها في ملف جديد وتشغيلها، أو لصقها في خلية دفتر ملاحظات. وحيث تعرض كتلة مخرجات مطبوعة تحتها، فإن تلك المخرجات جاءت من تشغيل تلك الشيفرة بالضبط بالإصدارات أعلاه. فإن اختلفت مخرجاتك، فقارن بعناية: الفرق يشير عادةً إلى خطأ في الكتابة، أو سطر تغيّر، أو إصدار حزمة مختلف.
جميع البيانات في الدورة اصطناعية، مولَّدة بالشيفرة ببذرة عشوائية ثابتة. لا شيء يتطلب اتصالاً بالإنترنت بعد التثبيت، ولا حساباً لدى أي مزوّد بيانات، ولا مالاً حقيقياً.
أهم الخلاصات
- ينبغي أن يكون لكل مشروع بيئته الخاصة، حتى تُسجَّل إصدارات الحزم ويمكن إعادة إنتاج النتائج.
- uv طريقة سريعة لتثبيت Python وإدارة الحزم؛ وتعمل أيضاً أداتا venv وpip المدمجتان.
- دفاتر الملاحظات مناسبة للاستكشاف؛ وملفات السكربت مناسبة لكل ما تريد إعادة تشغيله بالضبط.
- كل مثال شيفرة في هذه الدورة برنامج كامل يمكنك لصقه في ملف أو في خلية دفتر ملاحظات وتشغيله.
ابنِ مشروع الدورة وتحقّق منه
أنشئ مجلداً باسم scuta-quant له بيئته الخاصة وتضم numpy وpandas وmatplotlib وJupyterLab. شغّل check_setup.py من هذا الدرس بوصفه سكربتاً، ثم شغّل الشيفرة نفسها في خلية دفتر ملاحظات. احفظ الإصدارات المطبوعة في ملف نصي داخل المشروع، لتقارن بها لاحقاً إن تغيّرت نتيجة ما.
اختبار ذاتي
أجب بكلماتك أولاً، ثم اكشف الإجابة.
لماذا نعطي كل مشروع بيئته الخاصة بدلاً من تثبيت الحزم مرة واحدة للحاسوب كله؟
اعرض الإجابةأخفِ الإجابة
لأن الحزم تتغيّر بين الإصدارات، أحياناً بطرق تغيّر النتائج. وبيئة المشروع تسجّل بالضبط أي الإصدارات يستخدمها المشروع، وتمنع المشاريع من إفساد بعضها، وتتيح لك أو لأي شخص آخر إعادة إنتاج المخرجات نفسها لاحقاً.
متى تختار ملف سكربت بدلاً من دفتر ملاحظات؟
اعرض الإجابةأخفِ الإجابة
حين تريد إعادة تشغيل الخطوات نفسها بالضبط، من الأعلى إلى الأسفل، مثل الـ Backtest أو التقرير. دفاتر الملاحظات مريحة للاستكشاف، لكن يمكن تشغيل خلاياها بترتيب مختلف، مما يسهّل الحصول على نتائج تعتمد على حالة خفية.
ماذا يفعل الأمر
uv add pandasداخل مشروع؟اعرض الإجابةأخفِ الإجابة
يثبّت pandas في البيئة الخاصة بالمشروع ويسجّله، مع إصداره، في ملفَّي
pyproject.tomlوuv.lockالخاصين بالمشروع، بحيث يمكن إعادة بناء الإعداد نفسه لاحقاً.
