بناء استراتيجية تداول خاصة بك هو الجسر اللي يفصل بين مجرد "القمار" وبين البزنس الممنهج. استخدام البيانات التاريخية (Backtesting) يخليك ترتكب كل الأخطاء الممكنة "على الورق" قبل ما تخاطر براس مالك الحقيقي مع خوارزمية معينة.
في ه المقال، راح نفكك العملية من أول ما تدور على فكرة لين ما تختبر قوتها باستخدام أحدث الأدوات التقنية.
1. الأساس: من الفكرة لين الخوارزمية
أي استراتيجية تبدأ بـ فرضية. يعني جملة واضحة عن سلوك السوق. مثلاً: "إذا نزل سعر الأصل بنسبة 5% خلال ساعة مع حجم تداول غير طبيعي، فاحتمالية الارتداد على المدى القصير تكون عالية".
أنواع الاستراتيجيات للمبتدئين:
- Mean Reversion (العودة للمتوسط): ندور على اللحظات اللي يبتعد فيها السعر وايد عن قيمته المتوسطة.
- Trend Following (اتباع الاتجاه): ندخل الصفقة يوم يتأكد اتجاه الحركة (باستخدام المتوسطات المتحركة أو اختراق المستويات).
- Arbitrage (التحكيم): استغلال فرق الأسعار لنفس الأصل بين منصات تداول مختلفة.
- Statistical Arbitrage: البحث عن علاقات (Correlation) بين أصول مختلفة.
2. جمع البيانات التاريخية
جودة الاختبار تعتمد بشكل مباشر على جودة البيانات اللي تستخدمها.
"بيانات تعبانة تعطي نتائج تعبانة" (Garbage in, garbage out).
من وين أجيب البيانات؟
- APIs الخاصة بالمنصات: مثل Binance أو Coinbase أو Bybit توفر بيانات الشموع التاريخية (OHLCV).
- خدمات متخصصة: Yahoo Finance (للأسهم)، CoinMetrics (للكريبتو)، Glassnode (بيانات On-chain).
- مجموعات بيانات جاهزة: Kaggle أو مستودعات خاصة على GitHub.
جدول: أنواع البيانات واستخداماتها
| نوع البيانات | الوصف | شو تناسب؟ |
|---|---|---|
| OHLCV | سعر الافتتاح، الأعلى، الأدنى، الإغلاق، وحجم التداول | التحليل الفني الكلاسيكي، الاستراتيجيات متوسطة المدى. |
| Orderbook (L2) | دفتر الطلبات، صفقات الـ Limit | السكالبينج (Scalping)، التداول عالي التردد (HFT)، تحليل السيولة. |
| Tick Data | كل صفقة فردية تمت | اختبار باك تست دقيق جداً، الأربيتراج. |
| Alternative Data | السوشيال ميديا، الأخبار، التقارير | تحليل المشاعر (Sentiment Analysis)، النهج الأساسي. |
3. أدوات الاختبار
للمبتدئين، المنصات المرئية تعتبر ممتازة، أما للمحترفين فالبرمجة هي الحل.
- TradingView (Pine Script): أسرع طريقة عشان تتخيل فكرتك. أداة فحص الاستراتيجيات المدمجة ترويك الأرباح والخساير مباشرة على الشارت.
- لغة Python (مكتبات):
- Pandas: لمعالجة البيانات وتحليلها.
- Backtrader أو VectorBT: محركات قوية جداً لعمل الباك تست.
- ccxt: للربط مع مئات منصات الكريبتو.
مثال كود بسيط بلغة بايثون (VectorBT)
ه الكود يختبر تقاطع اثنين من المتوسطات المتحركة (Golden Cross):
import vectorbt as vbt
import pandas as pd
# تنزيل البيانات
data = vbt.YFData.download('BTC-USD', start='2023-01-01')
close = data.get('Close')
# تحديد الاستراتيجية: المتوسط السريع (10) يقطع المتوسط البطيء (50) للأعلى
fast_ma = vbt.MA.run(close, 10)
slow_ma = vbt.MA.run(close, 50)
entries = fast_ma.ma_crossed_above(slow_ma)
exits = fast_ma.ma_crossed_below(slow_ma)
# تشغيل الباك تست
pf = vbt.Portfolio.from_signals(close, entries, exits, init_cash=1000)
print(pf.total_return())4. مقاييس الكفاءة
لا تطالع بس "إجمالي الربح". الربح الخيالي ممكن يكون معاه مخاطرة إنك تخسر كل محفظتك (Drawdown).
- Drawdown (التراجع): أكبر نزول للمحفظة من القمة لين القاع المحلي. إذا كان التراجع 50%، فأنت محتاج ربح 100% بس عشان ترجع لنقطة الصفر.
- Sharpe Ratio (نسبة شارب): يوضح لك هل الربح يستاهل المخاطرة اللي جالس تاخذها؟ إذا الرقم فوق 1.0، يعتبر الوضع جيد.
- Win Rate (نسبة النجاح): نسبة الصفقات الرابحة. ملاحظة: استراتيجية بنسبة نجاح 30% ممكن تكون مربحة جداً إذا كان ربحها أضعاف خسارتها (Risk/Reward).
- Profit Factor: نسبة إجمالي الأرباح إلى إجمالي الخسائر.
5. فخاخ الباك تست (تفاصيل ما يعرفها الكل)
هنا المكان اللي أغلب المبتدئين "يطيرون" فيه أول مبالغ حقيقية لهم بعد ما شافوا نتائج باك تست ممتازة.
Look-ahead Bias (النظر للمستقبل)
الخوارزمية مالتك تستخدم بالصدفة بيانات من المستقبل. مثلاً، تحسب متوسط سعر اليوم وتتخذ قرار شراء الصبح بناءً عليه. في الواقع، أنت الصبح ما تعرف كم بيكون السعر في الليل.
Survivorship Bias (انحياز الناجين)
تختبر الاستراتيجية بس على العملات أو الأسهم اللي "ناجحة" الحين وموجودة في التوب. وتنسى مئات المشاريع اللي أفلست واختفت من المنصات. لازم الاختبار يكون على كل الأصول اللي كانت موجودة في ذاك الوقت.
الانزلاق السعري والعمولات (Slippage)
في النظرية أنت اشتريت بـ 100$. في الواقع، طلبك تنفذ على 100.5$ بسبب نقص السيولة، والمنصة خذت 0.1% عمولة. على مدى 1000 صفقة، ه الفروقات البسيطة تحول الاستراتيجية الرابحة إلى خاسرة.
6. أساليب الاختبار المتقدمة: اختبار الصلابة
بعد ما يطلع لك "باكتيست" أولي بمنحنى أرباح يفتح النفس، لازم تحط الاستراتيجية في اختبارات ضغط حقيقية. مجرد فحص البيانات التاريخية بشكل عادي ما يكفي، لأن السوق "متلون" ويتغير طول الوقت.
Walk-Forward Analysis (WFA)
هذا هو أسلوب الاختبار "المتدرج". تقسم البيانات عندك لعدة أقسام:
- In-Sample (التدريب): تحسن فيها إعدادات الاستراتيجية (مثلاً تختار أفضل طول للمتوسط المتحرك MA).
- Out-of-Sample (الاختبار): تجرب هذي الإعدادات على قسم البيانات اللي بعده، واللي الخوارزمية لسه ما "شافته" أبداً.
بعدها تحرك "النافذة" للأمام. إذا الاستراتيجية أعطت نتايج ثابتة في كل الأقسام "غير المرئية" — يعني إنها قوية وقابلة للاستمرار.
محاكاة مونت كارلو (Monte Carlo Simulation)
هنا تخلط ترتيب صفقاتك بشكل عشوائي آلاف المرات.
- الهدف: تعرف شو احتمالية إن سلسلة خسائر متتالية (Drawdown) تطير محفظتك بالكامل.
لو من أصل 10,000 محاكاة، صار فيه إفلاس في 500 حالة، يعني الاستراتيجية هذي مخاطرتها عالية جداً وتعتبر قنبلة موقوتة، حتى لو كان معدل ربحها يبين إنه عالي.
7. التحسين المفرط وفخ الـ "Overfitting"
أخطر فخ ممكن يطيح فيه الباحث هو الـ Overfitting. وهي الحالة اللي تخلي فيها الإعدادات دقيقة بزيادة لدرجة إن الخوارزمية صارت "حافظة" التاريخ حفظ، وتضيع وتفشل قدام أي بيانات جديدة.
كيف تتجنب هالفخ:
- الأقل هو الأفضل: كل ما زدت المؤشرات وشروط "if-then" في الكود، زادت فرصة إنك قاعد تتداول على "ضجيج" السوق مش على حركة حقيقية.
- استقرار الإعدادات: لو الاستراتيجية شغالة تمام على إعداد 20، بس فجأة تخسر لو خليته 19 أو 21 — يعني استراتيجيتك هشة. النتايج لازم تتغير بمرونة وبشكل تدريجي مع تغيير الإعدادات.
- المنطق الاقتصادي: كل رقم أو إعداد لازم يكون له سبب مقنع. جملة "لأنها جابت فلوس أكثر في التاريخ" هي أسوأ عذر ممكن تستخدمه.
8. مفاهيم للمحترفين: الـ MEV وسيولة الـ JIT في الباكتيستنج
إذا كنت شغال في مجال الـ DeFi (مثل Uniswap v3/v4)، طرق الباكتيستنج التقليدية ممكن تخدعك بسبب طبيعة البلوكشين.
- LVR (Loss Versus Rebalancing): مقياس حديث لمزودي السيولة. يقارن الأرباح من العمولات مع الخسارة اللي تصير لما "الأربتراج" يسحبون السيولة بأسعار في مصلحتهم (وضد مصلحتك إنت).
- JIT (Just-In-Time) Liquidity: استراتيجية يتم فيها ضخ السيولة في الـ "Pool" قبل ثانية وحدة من صفقة كبيرة، وسحبها فوراً بعدها. في الباكتيستنج العادي اللي يعتمد على الشموع (OHLCV) مستحيل تصيد هالحركة — تحتاج بيانات تعتمد على الأحداث (Event-driven data).
9. قائمة التحقق العملية: الطريق من الكود إلى المنصة
| المرحلة | الإجراء | الأداة |
|---|---|---|
| 1. الفرضية | وصف شروط الدخول والخروج ووقف الخسارة. | Notepad / Obsidian |
| 2. جمع البيانات | سحب بيانات الشموع التاريخية أو الـ Ticks. | API (Binance/CCXT), Python |
| 3. الباكتيست | أول تجربة للاستراتيجية على البيانات التاريخية. | Backtrader, Pine Script |
| 4. التحسين | حساب العمولات (0.1%+) والانزلاق السعري (Slippage). | الإعدادات في الكود |
| 5. التحقق | اختبارات الـ Walk-Forward ومونت كارلو. | Python (scipy, numpy) |
| 6. Paper Trading | تداول بحساب وهمي في الوقت الحقيقي. | TradingView / حساب تجريبي |
| 7. الانطلاق | البدء برأس مال حقيقي وبمبالغ صغيرة. | API Keys (Read/Write) |
10. مثال على الكود: حساب العمولات والانزلاق السعري
في الاختبارات الاحترافية، ضروري "تجلد" استراتيجيتك وتحملها تكاليف. هذا مثال توضيحي للمنطق:
# كود توضيحي لحساب تكاليف التداول
commission = 0.001 # عمولة 0.1% لكل صفقة
slippage = 0.0005 # انزلاق سعري بنسبة 0.05%
def execute_trade(price, size, side):
if side == 'buy':
effective_price = price * (1 + slippage)
cost = size * effective_price * (1 + commission)
elif side == 'sell':
effective_price = price * (1 - slippage)
revenue = size * effective_price * (1 - commission)
return effective_price, cost_or_revenue
القاعدة الذهبية: إذا استراتيجيتك تحولت من مربحة إلى خاسرة بعد ما أضفت عمولات واقعية وانزلاق سعري — لا تحاول "ترقعها" أو تعدلها بزيادة. انسى الموضوع ودور فكرة ثانية. السوق ما يرحم الشخص اللي يتجاهل التكاليف.