1. لماذا الشبكات العصبية في التداول؟
الأسواق المالية بطبيعتها "غير خطية" (Non-Linear) ومليئة بالضوضاء. المؤشرات التقليدية مثل RSI و MACD تعتمد على معادلات خطية بسيطة غالباً ما تتأخر عن السعر.
الشبكات العصبية (Neural Networks) توفر ميزة حاسمة: القدرة على تقريب أي دالة رياضية معقدة. هذا يعني أنها تستطيع تعلم العلاقات المعقدة بين السعر، الحجم، والوقت، واكتشاف أنماط لا تستطيع العين البشرية أو المؤشرات البسيطة رؤيتها.
نحن لا نعلمك فقط "كيف" تكتب الكود، بل "لماذا" يعمل. الهدف هو بناء نظام تداول يفهم سياق السوق وليس مجرد حفظ للبيانات التاريخية.
2. تنظيف وتجهيز البيانات
البيانات هي وقود الشبكة العصبية. إذا أدخلت بيانات "قذرة"، ستحصل على نتائج عشوائية (Garbage In, Garbage Out). يغطي الكتاب تقنيات متقدمة لتجهيز البيانات:
الاستقرارية (Stationarity)
الأسعار الخام (مثل EURUSD = 1.1050) ليست مستقرة إحصائياً وتتغير بمرور الوقت. الشبكات العصبية تفضل البيانات المستقرة. الحل هو استخدام "العوائد اللوغاريتمية" (Log Returns):
التطبيع (Normalization)
لتسريع عملية التدريب، يجب حصر البيانات في نطاق معين (مثلاً بين 0 و 1). نستخدم معادلة Min-Max:
double MinMaxNormalize(double value, double min, double max) {
if (max == min) return 0.0;
return (value - min) / (max - min);
}
3. هندسة الشبكة العصبية
كيف تختار عدد الطبقات والخلايا؟ هذا ليس تخميناً، بل علم.
- الطبقة المدخلة (Input Layer): عدد الخلايا يساوي عدد الميزات (Features) التي تستخدمها (مثل RSI, MA Difference, Volatility).
- الطبقات المخفية (Hidden Layers): هي "عقل" الشبكة. الكتاب يشرح قاعدة التجربة والخطأ الممنهجة لتحديد العدد الأمثل لتجنب التعقيد غير الضروري.
- دوال التنشيط (Activation Functions): نستخدم دالة
ReLUللطبقات المخفية لسرعتها، وSigmoidأوSoftmaxللمخرجات حسب نوع التوقع.
زيادة عدد الطبقات بشكل مبالغ فيه سيجعل الشبكة "تحفظ" البيانات بدلاً من فهمها. الكتاب يخصص فصلاً كاملاً لكيفية اكتشاف وتجنب هذه المشكلة القاتلة.
4. البناء البرمجي في MQL5
سنقوم ببناء فئة (Class) كاملة للشبكة العصبية من الصفر (Without External Libraries) لضمان السرعة القصوى في التنفيذ المباشر.
هيكل الكلاس الأساسي
class CNeuralNetwork {
private:
int m_layers[]; // هيكل الطبقات
double m_weights[][]; // مصفوفة الأوزان
double m_biases[][]; // قيم التحيز
public:
void CNeuralNetwork(int &topology[]);
void FeedForward(double &inputVals[]);
double GetResults(void);
void BackProp(double &targetVals[]);
};
دالة التغذية الأمامية (Feed Forward)
هذه الدالة هي "قلب" الشبكة، حيث تنتقل البيانات من الطبقة الأولى وصولاً للمخرجات. إليك التحقيق العملي:
void CNeuralNetwork::FeedForward(double &inputVals[]) {
// 1. Load Inputs
for(int i=0; i<m_layers[0]; i++) {
m_neurons[0][i].output = inputVals[i];
}
// 2. Forward Propagation
for(int l=1; l<ArraySize(m_layers); l++) {
double prevLayer[] = m_neurons[l-1];
for(int n=0; n<m_layers[l]; n++) {
double sum = 0.0;
for(int p=0; p<ArraySize(prevLayer); p++) {
sum += prevLayer[p].output * m_weights[l][n][p];
}
sum += m_biases[l][n];
m_neurons[l][n].output = ActivationFunction(sum);
}
}
}
الانتشار العكسي (Backpropagation)
كيف تتعلم الشبكة؟ عن طريق حساب نسبة الخطأ وعكسها لتعديل الأوزان. نستخدم خوارزمية Gradient Descent:
في MQL5، يتم تطبيق ذلك عبر مصفوفات دلتا (Delta) لكل خلية عصبية، مما يسمح للشبكة بتقليل الخطأ تدريجياً مع كل دورة تدريب (Epoch).
5. استراتيجيات التحسين المتقدمة
بمجرد بناء الشبكة، يأتي دور التدريب. نعتمد في الكتاب منهجية Walk-Forward Analysis.
بدلاً من تدريب الشبكة على كامل الفترة التاريخية، نقوم بتقسيم البيانات إلى نوافذ زمنية متحركة (Roling Windows). نتدرب على سنة، ونختبر على 3 أشهر، ثم نحرك النافذة للأمام.
- يضمن قدرة النظام على التكيف مع تغيرات السوق.
- يكشف ضعف الاستراتيجية قبل المخاطرة بأموال حقيقية.