تجارة الفوركس الخوارزمية: قصة عملية للمهندسين
نشرت: 2022-03-11كما تعلم ، يتم استخدام سوق الصرف الأجنبي (فوركس أو فوركس) للتداول بين أزواج العملات. لكن قد لا تدرك أنه السوق الأكثر سيولة في العالم.
قبل بضع سنوات ، مدفوعًا بفضولي ، اتخذت خطواتي الأولى في عالم تداول الفوركس الخوارزمي من خلال إنشاء حساب تجريبي وتشغيل عمليات محاكاة (بأموال مزيفة) على منصة التداول Meta Trader 4.
بعد أسبوع من "التداول" ، ضاعفت أموالي تقريبًا. مدفوعًا بتداولي الخوارزمي الناجح ، تعمقت أكثر واشتركت في النهاية في عدد من منتديات الفوركس. بعد فترة وجيزة ، كنت أقضي ساعات في القراءة حول أنظمة التداول الخوارزمية (مجموعات القواعد التي تحدد ما إذا كان يجب عليك الشراء أو البيع) ، والمؤشرات المخصصة ، وحالات السوق المزاجية ، والمزيد.
موكلي الأول
في هذا الوقت تقريبًا ، من قبيل الصدفة ، سمعت أن شخصًا ما كان يحاول العثور على مطور برامج لأتمتة نظام تداول بسيط. كان هذا في أيام كليتي عندما كنت أتعلم البرمجة المتزامنة في Java (الخيوط ، والإشارات ، وكل ذلك غير الهام). اعتقدت أن هذا النظام الآلي لا يمكن أن يكون أكثر تعقيدًا من عملي في دورة علوم البيانات المتقدمة ، لذلك استفسرت عن الوظيفة وانضممت إليها.
أراد العميل برنامج تداول خوارزمي مُصمم باستخدام MQL4 ، وهي لغة برمجة وظيفية تستخدمها منصة Meta Trader 4 لأداء الإجراءات المتعلقة بالأسهم.
يتمثل دور منصة التداول (ميتا تريدر 4 ، في هذه الحالة) في توفير اتصال لوسيط فوركس. يوفر الوسيط بعد ذلك منصة بمعلومات في الوقت الفعلي حول السوق وينفذ أوامر الشراء / البيع الخاصة بك. للقراء غير المطلعين على تداول العملات الأجنبية ، إليك المعلومات التي يوفرها موجز البيانات:
من خلال Meta Trader 4 ، يمكنك الوصول إلى كل هذه البيانات بوظائف داخلية ، يمكن الوصول إليها في أطر زمنية مختلفة: كل دقيقة (M1) ، كل خمس دقائق (M5) ، M15 ، M30 ، كل ساعة (H1) ، H4 ، D1 ، W1 ، MN .
تسمى حركة السعر الحالي علامة . بمعنى آخر ، علامة التجزئة هي تغيير في سعر العرض أو الطلب لزوج من العملات. خلال الأسواق النشطة ، قد يكون هناك العديد من القراد في الثانية. خلال الأسواق البطيئة ، يمكن أن تكون هناك دقائق بدون علامة. القراد هو القلب النابض لروبوت سوق العملات.
عندما تضع طلبًا من خلال مثل هذه المنصة ، فإنك تشتري أو تبيع حجمًا معينًا من عملة معينة. يمكنك أيضًا تعيين حدود وقف الخسارة وجني الأرباح. حد وقف الخسارة هو الحد الأقصى من النقاط (تغيرات الأسعار) التي يمكنك تحمل خسارتها قبل التخلي عن صفقة. حد أخذ الربح هو مقدار النقاط التي ستجمعها لصالحك قبل صرفها.
كانت مواصفات التداول الخوارزمية للعميل بسيطة: أرادوا روبوت فوركس يعتمد على مؤشرين. بالنسبة للخلفية ، تكون المؤشرات مفيدة للغاية عند محاولة تحديد حالة السوق واتخاذ قرارات التداول ، لأنها تستند إلى البيانات السابقة (على سبيل المثال ، أعلى قيمة سعرية في آخر ن أيام). يأتي الكثير منها مدمجًا في Meta Trader 4. ومع ذلك ، فإن المؤشرات التي كان عميلي مهتمًا بها جاءت من نظام تداول مخصص.
لقد أرادوا التداول في كل مرة يتقاطع فيها اثنان من هذه المؤشرات المخصصة ، وفي زاوية معينة فقط.
تشابك الايدى
عندما أصبحت يدي متسخة ، علمت أن برامج MQL4 لها الهيكل التالي:
- [توجيهات المعالج]
- [معلمات خارجية]
- [المتغيرات العالمية]
- [الوظيفة الأولية]
- [وظيفة Deinit]
- [بدء الوظيفة]
- [وظائف مخصصة]
تعتبر وظيفة البداية قلب كل برنامج MQL4 حيث يتم تنفيذها في كل مرة يتحرك فيها السوق (ergo ، سيتم تنفيذ هذه الوظيفة مرة واحدة لكل علامة). هذا هو الحال بغض النظر عن الإطار الزمني الذي تستخدمه. على سبيل المثال ، يمكن أن تعمل على الإطار الزمني H1 (ساعة واحدة) ، ومع ذلك فإن وظيفة البداية ستنفذ عدة آلاف من المرات لكل إطار زمني.
للتغلب على هذا ، أجبرت الوظيفة على التنفيذ مرة واحدة لكل وحدة فترة:
int start() { if(currentTimeStamp == Time[0]) return (0); currentTimeStamp = Time[0]; ...
الحصول على قيم المؤشرات:
// Loading the custom indicator extern string indName = "SonicR Solid Dragon-Trend (White)"; double dragon_min; double dragon_max; double dragon; double trend; int start() { … // Updating the variables that hold indicator values actInfoIndicadores(); …. string actInfoIndicadores() { dragon_max=iCustom(NULL, 0, indName, 0, 1); dragon_min=iCustom(NULL, 0, indName, 1, 1); dragon=iCustom(NULL, 0, indName, 4, 1); trend=iCustom(NULL, 0, indName, 5, 1); }
منطق القرار متضمنًا تقاطع المؤشرات وزواياها:
int start() { … if(ticket==0) { if (dragon_min > trend && (ordAbierta== "OP_SELL" || primeraOP == true) && anguloCorrecto("BUY") == true && DiffPrecioActual("BUY")== true ) { primeraOP = false; abrirOrden("OP_BUY", false); } if (dragon_max < trend && (ordAbierta== "OP_BUY" || primeraOP == true) && anguloCorrecto("SELL") == true && DiffPrecioActual("SELL")== true ) { primeraOP = false; abrirOrden("OP_SELL", false); } } else { if(OrderSelect(ticket,SELECT_BY_TICKET)==true) { datetime ctm=OrderCloseTime(); if (ctm>0) { ticket=0; return(0); } } else Print("OrderSelect failed error code is",GetLastError()); if (ordAbierta == "OP_BUY" && dragon_min <= trend ) cerrarOrden(false); else if (ordAbierta == "OP_SELL" && dragon_max >= trend ) cerrarOrden(false); } }
إرسال الطلبات:
void abrirOrden(string tipoOrden, bool log) { RefreshRates(); double volumen = AccountBalance() * point; double pip = point * pipAPer; double ticket = 0; while( ticket <= 0) { if (tipoOrden == "OP_BUY") ticket=OrderSend(simbolo, OP_BUY, volumen, Ask, 3, 0/*Bid - (point * 100)*/, Ask + (point * 50), "Orden Buy" , 16384, 0, Green); if (tipoOrden == "OP_SELL") ticket=OrderSend(simbolo, OP_SELL, volumen, Bid, 3, 0/*Ask + (point * 100)*/, Bid - (point * 50), "Orden Sell", 16385, 0, Red); if (ticket<=0) Print("Error abriendo orden de ", tipoOrden , " : ", ErrorDescription( GetLastError() ) ); } ordAbierta = tipoOrden; if (log==true) mostrarOrden(); }
إذا كنت مهتمًا ، فيمكنك العثور على الكود الكامل والقابل للتشغيل على GitHub.

الاختبار الخلفي
بمجرد أن أنشأت نظام التداول الخوارزمي الخاص بي ، أردت أن أعرف: 1) ما إذا كان يتصرف بشكل مناسب ، و 2) إذا كانت استراتيجية تداول الفوركس التي استخدمتها جيدة.
Backtesting (يُكتب أحيانًا "الاختبار الخلفي") هو عملية اختبار نظام معين (مؤتمت أو غير مؤتمت) في ظل أحداث الماضي. بمعنى آخر ، أنت تختبر نظامك باستخدام الماضي كوكيل للحاضر.
تأتي MT4 مع أداة مقبولة لإجراء اختبار رجعي لإستراتيجية تداول العملات الأجنبية (في الوقت الحاضر ، هناك المزيد من الأدوات الاحترافية التي توفر وظائف أكبر). للبدء ، تقوم بإعداد الأطر الزمنية الخاصة بك وتشغيل برنامجك في إطار محاكاة ؛ ستحاكي الأداة كل علامة مع العلم أنه لكل وحدة يجب أن تفتح بسعر معين ، وتغلق عند سعر معين ، وتصل إلى قمم وقيعان محددة.
بعد مقارنة إجراءات البرنامج بالأسعار التاريخية ، سيكون لديك فكرة جيدة عما إذا كان يتم تنفيذه بشكل صحيح أم لا.
من الاختبار العكسي ، قمت بفحص نسبة إرجاع روبوت FX لبعض الفواصل الزمنية العشوائية ؛ وغني عن القول ، كنت أعلم أن موكلي لن يصبح ثريًا به - المؤشرات التي اختارها ، جنبًا إلى جنب مع منطق القرار ، لم تكن مربحة . كعينة ، فيما يلي نتائج تشغيل البرنامج عبر نافذة M15 لـ 164 عملية:
لاحظ أن رصيدنا (الخط الأزرق) ينتهي دون نقطة البداية.
تحسين المعلمات وأكاذيبها
على الرغم من أن الاختبار العكسي جعلني أشعر بالقلق من فائدة روبوت FX هذا ، إلا أنني كنت مفتونًا عندما بدأت في اللعب بمعاييره الخارجية ولاحظت اختلافات كبيرة في نسبة العائد الإجمالية. يُعرف هذا العلم المعين باسم تحسين المعلمات .
لقد أجريت بعض الاختبارات التقريبية لمحاولة استنتاج أهمية المعلمات الخارجية على نسبة العودة وتوصلت إلى شيء مثل هذا:
أو التنظيف:
قد تعتقد (كما فعلت أنا) أنه يجب عليك استخدام المعامل أ. لكن القرار ليس مباشرًا كما قد يبدو. على وجه التحديد ، لاحظ عدم إمكانية التنبؤ بالمعلمة A: بالنسبة لقيم الخطأ الصغيرة ، يتغير إرجاعها بشكل كبير. بعبارة أخرى ، من المرجح جدًا أن تتنبأ المعلمة A بالنتائج المستقبلية نظرًا لعدم اليقين ، فإن أي تحول على الإطلاق سيؤدي إلى أداء أسوأ.
لكن في الواقع ، المستقبل غير مؤكد! وبالتالي فإن إرجاع المعامل A غير مؤكد أيضًا. الخيار الأفضل ، في الواقع ، هو الاعتماد على عدم القدرة على التنبؤ. في كثير من الأحيان ، ستكون المعلمة ذات العائد الأقصى المنخفض ولكن القدرة على التنبؤ الفائقة (أقل تذبذبًا) أفضل من المعلمة ذات العائد المرتفع ولكن القدرة على التنبؤ الضعيفة.
الشيء الوحيد الذي يمكنك التأكد منه هو أنك لا تعرف مستقبل السوق ، والتفكير في أنك تعرف كيفية أداء السوق بناءً على البيانات السابقة يعد خطأً. في المقابل ، يجب أن تقر بعدم القدرة على التنبؤ في تنبؤاتك بالفوركس.
هذا لا يعني بالضرورة أننا يجب أن نستخدم المعامل B ، لأنه حتى العوائد المنخفضة للمعلمة A تؤدي بشكل أفضل من المعلمة B ؛ هذا فقط لتوضيح أن تحسين المعلمات يمكن أن يؤدي إلى اختبارات تبالغ في تقدير النتائج المستقبلية المحتملة ، وهذا التفكير ليس واضحًا.
اعتبارات التداول الخوارزمية الشاملة للفوركس
منذ تجربة تداول الفوركس الخوارزمية الأولى ، قمت ببناء العديد من أنظمة التداول الآلي للعملاء ، ويمكنني أن أخبرك أنه يوجد دائمًا مجال لاستكشاف المزيد من تحليل فوركس الذي يتعين القيام به. على سبيل المثال ، قمت مؤخرًا ببناء نظام يعتمد على إيجاد ما يسمى بحركات "السمكة الكبيرة". وهذا يعني وجود اختلافات كبيرة في النقاط في وحدات زمنية صغيرة جدًا. هذا موضوع يسحرني.
يعد بناء نظام محاكاة العملات الأجنبية الخاص بك خيارًا ممتازًا لمعرفة المزيد عن تداول سوق الفوركس ، والإمكانيات لا حصر لها. على سبيل المثال ، يمكنك محاولة فك رموز التوزيع الاحتمالي لتغيرات الأسعار كدالة للتقلب في سوق واحد (EUR / USD على سبيل المثال) ، وربما إنشاء نموذج محاكاة مونت كارلو باستخدام التوزيع حسب حالة التقلب ، باستخدام أي درجة من الدقة التي تريدها. سأترك هذا كتمرين للقارئ الشغوف .
قد يكون عالم الفوركس مربكًا في بعض الأحيان ، لكنني آمل أن تكون هذه الكتابة قد أعطتك بعض النقاط حول كيفية البدء في إستراتيجية تداول فوركس الخاصة بك.
قراءة متعمقة
في الوقت الحاضر ، هناك مجموعة كبيرة من الأدوات لبناء واختبار وتحسين أتمتة نظام التداول: Trading Blox للاختبار ، NinjaTrader للتداول ، OCaml للبرمجة ، على سبيل المثال لا الحصر.
لقد قرأت بإسهاب عن العالم الغامض الذي هو سوق العملات. فيما يلي بعض الكتابات التي أوصي بها للمبرمجين والقراء المتحمسين:
- BabyPips: هذه هي نقطة البداية إذا كنت لا تعرف القرفصاء عن تداول الفوركس.
- طريقة السلحفاة ، بقلم كورتيس فيث: هذا ، في رأيي ، هو الكتاب المقدس للفوركس . اقرأها بمجرد حصولك على بعض الخبرة في التداول ومعرفة بعض استراتيجيات الفوركس.
- التحليل الفني لمتخصص التداول - استراتيجيات وتقنيات الأسواق المالية العالمية المضطربة اليوم ، بقلم كونستانس إم براون
- Expert Advisor Programming - إنشاء أنظمة تداول مؤتمتة في MQL لـ Meta Trader 4 ، بقلم Andrew R. Young
- أنظمة التداول - نهج جديد لتطوير النظام وتحسين المحفظة ، بقلم Urban Jeckle و Emilio Tomasini: تقني للغاية ، يركز بشدة على اختبار العملات الأجنبية.
- تنفيذ خطوة بخطوة لنظام تداول العملات متعدد الوكلاء ، بواسطة روي بيدرو باربوسا وأورلاندو بيلو: هذا النظام احترافي للغاية ، ويصف كيف يمكنك إنشاء نظام تداول ومنصة اختبار.