كيف تكتب روبوت تداول - مباشرة في صلب الموضوع. برنامج التبادل: أدوات لإنشاء روبوتات التداول


سيرجي يكتب في 08/08/2019 00:05:
> كتابة أي برامج حسب الطلب. 2 دبلومات MEPhI (معهد موسكو للفيزياء الهندسية) - عالم رياضيات ومبرمج. 25 عامًا من الخبرة المهنية في البرمجة. خبير من الدرجة الأولى ، عمل لسنوات عديدة في الخارج في شركات ذات سمعة عالمية. اللغات С و С ++ و C # و Java و JavaScript و HTML و Pascal و Delphi و Visual Basic و Excel و Assembler و Assembler for microcontrollers (AVR، PIC، x51، x80-86). قواعد البيانات - أي منها ، بما في ذلك Oracle ، MS SQL Server ، InterBase ، DB2 ، Paradox ، Access ، FoxPro أي ، خادم العميل. المتحكمات الدقيقة ASSEMBLER (جميع اللهجات) - 8080 ، 8085 ، Z80 ​​، x51 ، AVR ، PIC ، Arduino. رسومات الحاسوب ثنائية الأبعاد وثلاثية الأبعاد - برنامج OpenGL و DirectX. إنشاء مواقع بأي مستوى من التعقيد.

تحياتي أنا مهتم بكتابة برنامج تتبع.
برنامج بوت للرهانات الآلية في مكتب المراهنات
ليس من أجل Betfair. يجب أن يقوم البرنامج بسلسلة من الإجراءات ، كل شيء يجب أن يبدو كالتالي:

1. نذهب إلى التطبيق ، نضغط على الزر ، يتم تحليل الأسعار الضرورية (التوقعات) من العنوان البريدي (كل يوم يصل خطاب جديد). ربما نعرضها في نافذة منفصلة أو نموذج في البرنامج.

2. وفقًا للرهانات المستلمة (التوقعات) ، يقوم البرنامج تلقائيًا بوضع هذه الرهانات بفاصل زمني معين على عدة حسابات في المراهنات.

3. يمكن أن يكون الحساب في المراهنات واحدًا أو أكثر. من الناحية المثالية ، يمكنك ببساطة دفع حسابات في البرنامج وتحديد أي حساب تريد استخدامه وأي حساب لا تريد استخدامه.

4. يجب أن يكون الوقت بين الرهانات عشوائيًا ، ولكن ليس أقل ولا يزيد عن النطاق الذي يمكن تحديده في الإعدادات. على سبيل المثال: الفاصل الزمني مضبوط من 1 إلى 5 ثوان. الرهان الأول - boomz ، والثاني بعد ثانيتين ، والثالث بعد 3.6 ، والرابع بعد 1.7 ، وما إلى ذلك.

5. موقع مكتب المراهنات يحتاج أيضًا إلى التحليل في النافذة باستخدام البرنامج وتحديد السطر الضروري والأحداث الضرورية فقط. لا أعرف كيفية تنفيذ ذلك ، يجب أن يأتي المبرمج. لماذا؟ في بعض الأحيان ، قد يختلف اسم فريق معين في التوقعات عن الاسم الموجود في شركة المراهنات. لذلك ، لن يكون من الممكن وضع رهان تلقائيًا. نحن ننظر إلى أبعد من ذلك.

6. إذا ، مع ذلك ، لا يمكن وضع بعض الرهانات تلقائيًا ، يجب أن يسمح البرنامج للمستخدم بوضعها يدويًا في أسرع وقت ممكن. أولئك. على سبيل المثال ، يتم وضع 8 من أصل 10 رهانات بنجاح ، ثم تُطرح نافذة أي رهانات لم يتم إجراؤها - يرى المستخدم في البرنامج بالفعل السطر الموزع مع الأحداث الضرورية ويمكنه وضعه يدويًا بنقرة واحدة. أولئك. انقر مرة واحدة على الرهان المطلوب - وسيتم عمل الرهان من جميع الحسابات.

7. يتم تعيين مبلغ الرهان في الإعدادات وهو نفسه لجميع الرهانات.

8. إذا تغيرت الاحتمالات ، حجم العائق (أي الرهان نفسه) أو الحد الأقصى لمبلغ الرهان أثناء تشغيل الروبوت: في بعض الأحيان ، يمكن أن ينخفض ​​من 1.9 إلى 1.7) ب) في حالة حدوث تغيير في حجم الإعاقة ، امنح المستخدم نافذة بإعاقة جديدة ، حيث سيكون الرهان والعائق الجديد مرئيًا ، يمكنك النقر فوق قبول أو إلغاء ج) في حالة حدوث تغيير في الحد الأقصى للرهان (قد يتغير من 50 إلى 0.01 على سبيل المثال) اقبل أيضًا مبلغًا جديدًا إذا لم يكن أقل من N (من المستحسن وضع هذا في الإعدادات).
ربما ليس هذا كل ما هو مطلوب ، لكنه على الأقل 90٪. يرجى توضيح أي أسئلة أثناء التطوير. بالطبع ، لن يحتاج البرنامج إلى التغيير رأساً على عقب ، لكنني أعتقد أن بعض التحسينات ستكون مطلوبة. من الناحية المثالية ، يجب أن يكون هذا برنامجًا من ثلاث نقرات: افتح البرنامج ، وقم بتحليل العطاءات ، وقم بتقديم العطاءات. سأقدم شخصيًا موقع BC للمبرمج ، ثم سأعرض في أي تنسيق تأتي الحروف إلى الصابون وأي سطر من BC يحتاج إلى التحليل. قم بتطوير البرنامج حتى تتمكن من إجراء التحديثات في المستقبل ، وسوف نتعاون لفترة طويلة

أحد الأسئلة الأكثر شيوعًا التي يطرحها الأشخاص الذين بدأوا للتو في الاهتمام بالتداول الخوارزمي هو "ما هي أفضل لغة برمجة لهذا؟". بالطبع ، الإجابة المختصرة هي أنه لا يوجد خيار "أفضل". عند اختيار أداة ، يجب أن تأخذ في الاعتبار معلمات استراتيجية التداول ، والأداء المطلوب ، والنمطية ، ومنهجية التطوير ، ومتطلبات التسامح مع الخطأ. في هذه المقالة سوف نتحدث عن المكونات الرئيسية لهندسة نظام التداول الخوارزمي وكيف يؤثر كل منها على اختيار لغة البرمجة.

ملاحظة المترجم: غالبًا ما نواجه شكوكًا حول التداول الخوارزمي. هناك رأي مفاده أن هذا مجرد تخمين ، وهو أمر ضار للغاية ، والقيام بذلك بالنسبة إلى أخصائي تقني ، بعبارة ملطفة ، ليس أمرًا تجاريًا. توقعًا لبعض الأسئلة في التعليقات ، نود أن نقدم على الفور رابطًا للمادة ، حيث يتم إيلاء الكثير من الاهتمام لوصف أنواع المتداولين الموجودة في أسواق الأسهم ولماذا يتمتع كل منهم بفائدة معينة في وقت معين نقطة زمنية ، بالإضافة إلى موضوع يتطرق فيه إلى موضوع أكثر عمومية لغرض التبادلات نفسها. وهنا يمكنك أن تقرأ عن تجربة مثل هذه التجارة ، والتي أتاحت لشخص لديه معرفة بالبرمجة أن يربح نصف مليون دولار (الجزء الأول ، الجزء الثاني.) استمتع بالقراءة!

بادئ ذي بدء ، سننظر في العناصر الرئيسية لنظام التداول الخوارزمي ، مثل الأدوات التحليلية ، ومحسن المحفظة ، ومدير المخاطر ، وفي الواقع محرك التداول. ثم سنتطرق إلى ميزات استراتيجيات التداول المختلفة وكيف يؤثر اختيار أي منها على تطوير النظام بأكمله. على وجه الخصوص ، سوف نناقش التردد المتوقع (السرعة) وحجم التداول.

بعد أن تختار نوعًا من إستراتيجيات التداول ، فأنت بحاجة إلى تصميم بنية النظام بأكمله. يتضمن ذلك اختيار الأجهزة ونظام التشغيل (أو عدة أنظمة) والمرونة في مواجهة الأحداث النادرة ولكنها كارثية. عند تصميم الهيكل ، ينبغي أيضًا إيلاء الاهتمام الواجب للأداء - كل من سرعة الأدوات التحليلية للنظام ومحرك التداول نفسه.

ماذا يفعل نظام التداول؟

قبل اختيار لغة البرمجة "الأفضل" التي سيعمل بها الروبوت الذي يحقق ربحًا مليونًا ، من الضروري تحديد متطلبات هذه اللغة. هل سيستند النظام إلى المهام البحتة أم سنحتاج أيضًا إلى وحدة إدارة المخاطر أو وحدة إنشاء المحفظة؟ هل أحتاج إلى وحدة اختبار رجعي سريع للعمل؟ بالنسبة لمعظم الاستراتيجيات ، يمكن تقسيم أنظمة التداول إلى فئتين: الإشارات الاستكشافية والمولدة.

تركز استراتيجيات البحث على اختبار الأداء مقابل البيانات التاريخية. يسمى الاختبار على البيانات التي تم جمعها في الماضي الاختبار الخلفي. تتأثر قوة المعالجة الخاصة بوحدة الاختبار الخلفي بكمية البيانات والتعقيد الحسابي للاستراتيجية. فيما يتعلق بتحسين سرعة استراتيجيات البحث ، غالبًا ما تعمل سرعة المعالج وعدد نواه كعوامل مقيدة.

إذا تحدثنا عن توليد إشارات تداول ، فيجب أن تفهم الخوارزمية هنا وقت الشراء أو البيع وإرسال الأوامر المناسبة (غالبًا من خلال نظام الوساطة) إلى السوق. تتطلب بعض الاستراتيجيات مستوى عالٍ من الأداء. سرعة الاستراتيجية محدودة بعوامل مثل عرض قناة البيانات والتأخير الذي تقدمه أنظمة الوساطة والتبادل (زمن الوصول).

وبالتالي ، بناءً على فئة الإستراتيجية التي تحتاجها ، قد يختلف اختيار لغة البرمجة لتنفيذها.

نوع الإستراتيجية والسيولة وحجمها

سيؤثر نوع استراتيجية التداول على كل أجهزتها اللاحقة. من الضروري تقييم الأسواق التي يتم التخطيط للتداول فيها ، وإمكانية ربط موفري البيانات الخارجيين ، فضلاً عن تواتر العمليات التي تقوم بها الخوارزمية ، وحجمها. سيكون من المهم أيضًا إيجاد توازن بين سهولة التطوير وتحسين الأداء ، وكذلك الأجهزة ، بما في ذلك الخوادم التي ستحتاج إلى وضعها في مراكز بيانات الوساطة أو تبادل البيانات ، والمعدات الإضافية التي قد تكون مطلوبة (GPU ، FPGA ، وما إلى ذلك). عوامل.

لتداول الأسهم منخفضة السيولة في أسواق الولايات المتحدة ، ستحتاج إلى استخدام تقنيات مختلفة تمامًا عما في حالة استراتيجية المراجحة الإحصائية عالية التردد في سوق العقود الآجلة. قبل الشروع في اختيار لغة البرمجة الفعلية ، يجب عليك تحديد مزودي البيانات الذين ستعمل معهم استراتيجية التداول الخاصة بك.

من الضروري تحليل الاتصال الحالي بأنظمة البائعين ، وهيكل أي واجهات برمجة تطبيقات ، وسرعة تسليم البيانات ، والقدرة على تخزينها في حالة حدوث أعطال. سيكون أيضًا قرارًا حكيمًا لتنظيم الوصول إلى العديد من هذه الأنظمة في نفس الوقت ، الأمر الذي سيتطلب أيضًا دراسة منفصلة ، نظرًا لأن لكل مزود بيانات متطلباته التكنولوجية الخاصة (رموز شريط أدوات التبادل ، وما إلى ذلك).

سيكون للتكرار المتوقع للتداول تأثير حاسم على كيفية تنفيذ مجموعة تكنولوجيا نظامك. تتطلب الاستراتيجيات التي تحتاج إلى تحديث البيانات أكثر من مرة في الدقيقة مزيدًا من الموارد للتشغيل.

في حالة الاستراتيجيات التي تتطلب بيانات التجزئة ، من الضروري تطوير النظام بأكمله وفقًا لمنهجية التصميم المدفوعة بالأداء. غالبًا ما يتم استخدام HDF5 أو kdb + لهذه المهام.

يجب استخدام كل من أداة اختبار الخلفية المحسنة ومحرك التداول للتعامل مع الأحجام الزائدة من البيانات المطلوبة لتطبيقات HFT. المرشحون الرئيسيون لدور لغة البرمجة في مثل هذا النظام سيكونون C / C ++ (ربما في بعض الأماكن المجمع). غالبًا ما تتطلب استراتيجيات التردد العالي معدات إضافية ، مثل المصفوفات القابلة للبرمجة (FPGA) ، بالإضافة إلى وضع الخوادم في أقرب مكان ممكن من مركز التبادل وضبط واجهات الشبكة للخوادم نفسها.

نظم البحث

عند إنشاء أنظمة من هذا النوع ، غالبًا ما يكون من الضروري اللجوء إلى التطوير التفاعلي وأتمتة النصوص البرمجية. يتم تنفيذ المفهوم الأول في بيئة تطوير متكاملة مثل Visual Studio أو MatLab أو R Studio. ترتبط أتمتة السيناريو بكمية كبيرة من العمليات الحسابية للمعلمات ونقاط البيانات المختلفة. بالنظر إلى كل هذا ، من الضروري اختيار لغة توفر فرصًا ممتازة لاختبار الكود ، كما تتيح لك تحقيق أداء مقبول عند حساب استراتيجيات المعلمات المختلفة.

في هذه المرحلة ، غالبًا ما يتم استخدام IDEs مثل Microsoft Visual C ++ / C # ، والتي تتضمن أدوات متنوعة لتصحيح الأخطاء وإكمال التعليمات البرمجية والعمل مع مكدس المشروع بأكمله (ORM ، LINQ) ؛ MatLab ، المصمم خصيصًا لمشاكل الجبر الخطي العددي وعمليات المتجهات ؛ R Studio ، والذي يتم تنفيذه باستخدام اللغة الإحصائية R ؛ Eclipse IDE لنظام التشغيل Linux Java و C ++ و IDEs شبه المملوكة مثل En Thinkt Canopy for Python والذي يتضمن مجموعة متنوعة من مكتبات تحليل البيانات (NumPy و SciPy و scikit-Learn و pandas).

بالنسبة للاختبار العكسي العددي ، تعد جميع الأدوات المذكورة مناسبة ، على الرغم من حقيقة أن الكود سيعمل "في الخلفية" ، فليس من الضروري على الإطلاق استخدام IDEs الرسومية. في هذه المرحلة ، أولاً وقبل كل شيء ، يجب أن تفكر في سرعة النظام. تعد اللغات المجمعة (مثل C ++) مفيدة عندما يكون عدد خيارات الاختبار الخلفي مرتفعًا جدًا. في مثل هذه الحالة ، يجب أن تكون دائمًا حذرًا للغاية في كل خطوة من خطوات التصميم ، حيث قد لا يكون نظامك سريعًا في البداية. في حالة اللغات المفسرة مثل Python ، غالبًا ما تُستخدم المكتبات عالية الأداء (NumPy / pandas) للاختبار العكسي.

سيتم تحديد اختيار اللغة لتنفيذ وحدة الاختبار الخلفي حسب الاحتياجات المحددة للخوارزمية وعدد المكتبات المتاحة لهذه اللغة (المزيد حول هذا أدناه). ومع ذلك ، لا تنس أن اللغة المستخدمة في backtester وبيئة البحث قد تختلف عن الأدوات المختارة لوحدات Portfolio Builder وإدارة المخاطر ومحرك التداول.

منشئ المحافظ وإدارة المخاطر

غالبًا ما يقلل العديد من المتداولين الخوارزميين من أهمية أداة إنشاء المحفظة وإدارة المخاطر. هذا خطأ كبير لأن هذه الأموال ستسمح لك بالاحتفاظ بأموالك في البورصة. بمساعدتهم ، لا يمكنك تقليل عدد المعاملات المحفوفة بالمخاطر فحسب ، بل يمكنك أيضًا تقليل تكلفة عمليات التداول وتقليل تكاليف المعاملات.

يمكن أن يكون لعمليات التنفيذ المدروسة لهذه المكونات تأثير كبير على جودة واتساق الربحية. بدونهم ، من الصعب جدًا إنشاء إستراتيجية مستقرة ، لأن وجود آلية لتحصيل المحفظة ومدير للمخاطر يجعل من السهل تعديل نظام التداول.

تتمثل مهمة وحدة Portfolio Builder في تحديد مجموعة من الصفقات التي يحتمل أن تكون مربحة وإجراء تلك التي ستحقق أكبر ربح - لهذا ، يتم تحليل العديد من العوامل (على سبيل المثال ، التقلب وفئة الأصول وقطاع الشركة التي يتم تداول أسهمها ). وفقًا لهذا ، يتم توزيع رأس المال المتاح على أدوات الصرف المختلفة.

غالبًا ما يتم تقليل إنشاء المحفظة إلى مشكلة الجبر الخطي (مثل عامل المصفوفة) ، مما يعني أن أداء الآلية يعتمد إلى حد كبير على كفاءة تنفيذ أدوات الجبر الخطي في النظام. تشمل المكتبات الشهيرة uBLAS و LAPACK و NAG لـ C ++. ماتلاب لديها قدرات واسعة من حيث العمليات مع المصفوفات. تستخدم Python NumPy / SciPy لهذا النوع من الحسابات. لكي يدعم النظام حافظة عالية الجودة ومتوازنة ، ستحتاج إلى مكتبة مجمعة (ومحسّنة جيدًا) للعمل مع المصفوفات.

جزء آخر مهم للغاية من أي نظام تداول حسابي هو وحدة إدارة المخاطر. يمكن أن تتخذ المخاطر أشكالًا عديدة: زيادة التقلب (حتى المرغوب فيه لبعض الاستراتيجيات) ، وزيادة الارتباط بين فئات الأصول ، وانقطاع الخادم ، وما يسمى بـ "البجعات السوداء" (الأحداث التي لا يمكن توقعها) والأخطاء غير المكتشفة في رمز برنامج التداول - وهذا ليست سوى جزء صغير من المشاكل المحتملة.

تحاول وحدة إدارة المخاطر "توقع" عواقب معظم المخاطر المذكورة أعلاه. في كثير من الأحيان ، يتم استخدام التحليل الإحصائي لهذا (على سبيل المثال ، اختبارات الإجهاد مونت كارلو). يلعب التوازي دورًا كبيرًا في مثل هذه الحسابات ، وبشكل عام ، يمكن حل مشاكل الأداء ببساطة عن طريق زيادة قوة الحوسبة.

محرك التداول

تتمثل مهمة محرك تداول النظام في تلقي إشارات تداول تمت تصفيتها من مُنشئ المحفظة ووحدات إدارة المخاطر ، وإنشاء أوامر تداول بناءً عليها ، والتي يتم إرسالها بعد ذلك إلى نظام تداول الوساطة. في حالة المتداولين الخاصين "العاديين" ، سيتطلب هذا على الأرجح اتصال API أو بروتوكول FIX. وفقًا لذلك ، لاختيار لغة ، من الضروري تحليل جودة واجهة برمجة التطبيقات نفسها ، ووجود / عدم وجود أغلفة برمجية للعمل معها ، والتكرار المتوقع للمعاملات و "الانزلاق" المتوقع بين لحظة إرسال الطلب إلى نظام الوسيط وظهوره في قلب نظام تداول الصرف.

تتكون "جودة" واجهة برمجة التطبيقات من عدة عناصر: جودة الوثائق ، والأداء الذي توفره الواجهة ، وما إذا كنت بحاجة إلى برنامج منفصل للعمل معها ، أو يمكنك إنشاء اتصال بدون واجهة المستخدم الرسومية ، وما إلى ذلك.

تحتوي معظم واجهات برمجة تطبيقات الوساطة على واجهات C ++ و / أو Java. عادة ، يتم تشكيل مجتمع من المستخدمين - عملاء الوسيط حول كل أداة من هذه الأدوات ، والذين يساعدون في تطويرها وإنشاء أغلفة لـ C # و Python و R و Excel و MatLab. ومع ذلك ، يجب أن نتذكر أن أي مكون إضافي قد يحتوي على أخطاء مختلفة ، لذلك يجب دائمًا اختبارها بدقة والتأكد من مشاركة المطورين في دعم إنشائها. من الأفضل إلقاء نظرة على عدد المرات التي تم فيها إصدار التحديثات في الأشهر الأخيرة.

يعد تكرار عمليات التداول أهم عنصر في خوارزمية محرك التداول. يمكن للروبوت إرسال مئات الطلبات في الدقيقة ، لذا فإن أداء النظام أمر بالغ الأهمية. إذا لم يتم تنفيذ النظام بشكل جيد للغاية ، فسيكون هناك حتما انزلاق كبير بين السعر الذي كان يجب وضع الأمر عنده والسعر الذي تم تنفيذه به بالفعل. يمكن أن يكون لهذا تأثير كبير على الربحية.

عادةً ما تكون اللغات المكتوبة الثابتة (انظر أدناه) مثل C ++ / Java هي الأفضل لكتابة محرك تداول ، ولكن استخدامها يزيد من وقت التطوير وقابلية الاختبار وقابلية صيانة الكود. من ناحية أخرى ، أصبحت اللغات المكتوبة ديناميكيًا مثل Python و Perl الآن "سريعة بما يكفي". تأكد من أن جميع مكونات نظامك مصممة بأسلوب معياري يجعل من السهل إزالة وإضافة عناصر جديدة إلى النظام بمرور الوقت.

عملية التخطيط والتطوير المعماري

لقد ناقشنا بالفعل مكونات نظام التداول ، وأهمية معايير تواتر عمليات التداول وحجمها ، لكننا لم نتطرق حتى الآن إلى مشكلات البنية التحتية. من المرجح أن يواجه المتداول الخاص المستقل أو الموظف في شركة أو صندوق HFT صغير العديد من التحديات - تحليل نموذج ألفا ، وإدارة المخاطر ومعايير التنفيذ ، ونشر النظام النهائي - وكلها يجب أن تتم بشكل مستقل. هذه كلها نقاط مهمة ، لذا قبل الغوص في مناقشة لغات البرمجة ، من الجيد مناقشة بنية النظام المثلى.

فصل المصالح

من أهم المهام في إنشاء روبوت تجاري هو "فصل الاهتمامات" أو ، في لغة تطوير البرمجيات ، تقسيم الجوانب المختلفة لنظام التداول إلى مكونات معيارية.

سيساعد هذا التقسيم إلى مكونات في المستقبل على تغيير / استبدال / إضافة وحدات جديدة إلى النظام لتحسين الأداء أو الموثوقية أو تسهيل صيانته ، دون الحاجة إلى التحقق من جميع التبعيات و "إذا تم كسر أي شيء" في أماكن أخرى. بالنسبة لأنظمة التداول ، يعد هذا النهج هو أفضل الممارسات. بالنسبة للأنظمة التي تعمل "بسرعات متوسطة" فإن تنفيذها مرغوب فيه للغاية. في حالة أنظمة HFT ، قد يلزم تجاهل بعض القواعد من أجل تحقيق أداء أسرع ، ولكن بشكل عام ، يجدر التمسك بهذا النهج.

يعد إنشاء خريطة مكون لنظام تداول حسابي موضوعًا يستحق مقالة منفصلة. ومع ذلك ، فإن النهج الأمثل هنا هو تنفيذ مكونات منفصلة لمعلومات السوق التاريخية والحقيقية ، وتخزين البيانات ، والوصول إلى واجهة برمجة التطبيقات ، ووحدة الاختبار العكسي ، ومعلمات الإستراتيجية ، ومنشئ المحفظة ، بالإضافة إلى وحدة إدارة المخاطر ومحرك التداول نفسه.

على سبيل المثال ، إذا تم العثور على مشاكل تتعلق بكفاءة العمل مع مستودع البيانات (حتى بعد أعمال التحسين) ، فيمكن استبدال هذه الوحدة بسهولة دون الحاجة تقريبًا إلى إعادة كتابة أي شيء في إدخال البيانات أو مكونات الوصول إلى واجهة برمجة التطبيقات.

ميزة أخرى للمخطط المعياري هي أنه يسمح لك باستخدام لغات برمجة مختلفة في أجزاء مختلفة من النظام. ليست هناك حاجة لربط صارم بأداة معينة إذا كانت طريقة الاتصال لمكونات النظام مستقلة. على سبيل المثال ، يمكنهم التواصل عبر TCP / IP أو ZeroMQ أو بروتوكولات أخرى.

للحصول على مثال محدد ، يمكن كتابة نظام الاختبار الخلفي في C ++ للحصول على أداء عالٍ ، بينما يمكن كتابة مدير المحفظة ومحرك التداول بلغة Python باستخدام SciPy و IBPy.

أفكار حول الأداء

الأداء مهم لأية استراتيجية تداول تقريبًا. كلما زاد معدل تكرار نظام التداول ، زادت أهمية هذا العامل. يشير "الأداء" إلى العديد من الأشياء ، بما في ذلك سرعة تنفيذ الخوارزمية ، وزمن انتقال الشبكة ، وقناة الاتصال ، وإدخال / إخراج البيانات ، وتعدد مؤشرات الترابط / التوازي ، والقياس. يتم تخصيص كتب منفصلة لكل جانب من هذه الجوانب ، لذلك سنتطرق إليها لفترة وجيزة فقط. سنناقش الآن الهندسة المعمارية ولغات البرمجة المحددة من حيث تأثيرها على الأداء العام للنظام.

قال دونال كنوث ، أحد آباء ما نسميه علوم الكمبيوتر ، شيئًا حكيمًا للغاية: "جذر كل الشرور هو التحسين المبكر". هذا صحيح دائمًا تقريبًا ، ولكن ليس في حالة تطوير خوارزمية تداول HFT! إذا كنت مهتمًا بإنشاء إستراتيجية أقل تكرارًا ، فسيكون النهج العام في حالتك هو بناء النظام بأبسط طريقة والبدء في تحسينه فقط عند اكتشاف الاختناقات.

للتعرف عليها ، يتم استخدام أدوات التنميط المختلفة. يمكنك إنشاء ملفات تعريف في بيئات MS Windows و Linux. للقيام بذلك ، هناك مجموعة كاملة من الوسائل المختلفة. الآن ، كما هو متفق عليه ، سنناقش لغات برمجة محددة في سياق الأداء.

تحتوي كل من C ++ و Java و Python و R و MatLab على مكتبات عالية الأداء (داخلية وخارجية) لمجموعات البيانات الأساسية والعمل الحسابي. يأتي C ++ مرفقًا بمكتبة النموذج القياسي وتأتي لغة Python مع NumPy / SciPy. يمكنك العثور على مشاكل الرياضيات القياسية في هذه المكتبات ، وكتابة التنفيذ الخاص بك هو مسار نادرًا ما يكون مفيدًا.

الاستثناء هو عندما تحتاج إلى أجهزة فريدة وتستخدم خوارزمية تعمل مع بعض الامتدادات الخاصة (مثل ذاكرات التخزين المؤقت المخصصة). في الوقت نفسه ، يجب أن نتذكر أن اختراع العجلة غالبًا ما يستغرق وقتًا ، والذي يمكن إنفاقه بفائدة أكبر بكثير على تطوير وتحسين جميع أجزاء نظام التداول. وقت التطوير لا يقدر بثمن ، خاصة إذا كنت تبني نظامك الخاص.

بالنسبة لمحرك التداول ، غالبًا ما تكون هناك مشكلة في التأخير لأن أدوات تحليل السوق توجد عادةً على نفس الجهاز. يمكن أن تحدث التأخيرات في أي خطوة من عملية التنفيذ: يتم الوصول إلى قواعد البيانات (تأخر القرص / الشبكة) ، ويجب إنشاء إشارات التداول (تأخيرات نظام التشغيل أو النواة) ، ويجب إرسال الطلبات إلى البورصة (تأخير قنوات الاتصال) ويجب أن تكون كذلك معالجتها من قبل جوهر نظام التداول في البورصة (تأخير الصرف).

لإنشاء نظام HFT فعال ، سيتعين عليك فهم التحسين على مستوى النواة وتحسين عمليات نقل البيانات.

أداة أخرى مفيدة لمطور روبوتات التبادل عالية السرعة هي التخزين المؤقت. الفكرة الرئيسية للتخزين المؤقت هي تخزين المعلومات المطلوبة بشكل متكرر بطريقة يمكن الحصول عليها دون إهدار الموارد. في تطوير الويب ، على سبيل المثال ، يمكن استخدام التخزين المؤقت عند تحميل البيانات من قاعدة بيانات علائقية على القرص إلى الذاكرة. لن تحتاج بعد الآن جميع الطلبات اللاحقة لهذه البيانات إلى إرسالها إلى قاعدة البيانات ، مما قد يؤدي إلى تحسين أداء النظام بشكل كبير.

للتداول عبر الإنترنت ، يمكن أن يكون التخزين المؤقت أيضًا أمرًا مفيدًا للغاية. على سبيل المثال ، يمكنك حفظ الحالة الحالية للمحفظة في ذاكرة التخزين المؤقت والاحتفاظ بها هناك حتى يتم "إعادة موازنة" الأدوات الموجودة فيها ، مما يؤدي إلى تجنب الحاجة إلى إنشاء قائمة بالأصول المشتراة والمباعة من جديد في كل مرة يتم فيها تشغيل الخوارزمية - يمكن ببساطة تحديثه. تتطلب مثل هذه العملية موارد كبيرة من وحدة المعالجة المركزية والإدخال / الإخراج.

لسوء الحظ ، لا يخلو التخزين المؤقت من مشاكله. إعادة تحميل البيانات في ذاكرة التخزين المؤقت ، بسبب الطبيعة المتقلبة لمخازن ذاكرة التخزين المؤقت ، يمكن أن تتطلب أيضًا موارد بنية تحتية كبيرة. مشكلة أخرى هي تأثير الدومينو ، حيث يتسبب الحمل العالي في إنشاء نسخ متعددة من ذاكرة التخزين المؤقت عن طريق الخطأ ، مما يؤدي إلى سلسلة من الأعطال.

التخصيص الديناميكي للذاكرة عملية مكلفة. لذلك ، يجب أن تكون تطبيقات التداول عالية الأداء قادرة على العمل بشكل جيد مع الذاكرة وتكون قادرة على تخصيصها وأخذها في جميع مراحل تدفق البرنامج. تحتوي لغات البرمجة الأحدث مثل Java أو C # أو Pythong على مجموعة تلقائية للقمامة ، حيث يتم تخصيص الذاكرة أو إلغاء تخصيصها ديناميكيًا.

هذه الأداة مفيدة للغاية في التطوير لأنها تقلل عدد الأخطاء وتحسن قابلية قراءة الكود. ومع ذلك ، بالنسبة لبعض أنظمة HFT ، لا يزال من الأفضل عدم استخدام أدوات إدارة الذاكرة القياسية ، ولكن استخدام أدواتك الخاصة. على سبيل المثال ، في Java ، يمكن لبعض التغييرات والتبديل في أداة تجميع البيانات المهملة وتكوين الكومة تحسين أداء استراتيجيات HFT.

لا توجد مجمعات قمامة أصلية في C ++ ، لذلك من الضروري إدارة تخصيص الذاكرة وتحريرها أثناء تنفيذ الكائنات. هذا ، بالطبع ، يزيد من احتمالية حدوث الأخطاء ، ولكنه يسمح أيضًا بتحكم أفضل في الكائنات والأكوام في تطبيقات معينة. عند اختيار لغة برمجة ، تحمل عناء معرفة المزيد حول كيفية عمل جمع البيانات المهملة فيها ، وما إذا كان من الممكن بطريقة ما تحسين تشغيل هذه الآلية لسيناريوهات محددة.

يمكن إجراء موازاة العديد من العمليات في التداول الخوارزمي ، أي جعلها تتم بحيث يتم تنفيذ عمليات البرنامج المختلفة في وقت واحد. تتضمن ما يسمى بالخوارزميات "المتوازية بشكل مذهل" خطوات يمكن إجراؤها بشكل مستقل تمامًا عن الخطوات الأخرى. تعتبر العمليات الإحصائية المحددة ، مثل محاكاة مونت كارلو ، أمثلة جيدة لهذه الخوارزميات المتوازية ، حيث يمكن حساب كل احتمال ومسار الأحداث عند حدوثه دون معرفة المسارات المحتملة الأخرى للموقف.

الخوارزميات الأخرى قابلة للتوازي جزئيًا فقط. تتضمن الخوارزميات من هذا النوع النمذجة في الديناميكا المائية ، حيث يمكن تقسيم المنطقة الحسابية إلى مجالات منفصلة ، لكنها لا تزال بحاجة إلى الارتباط ببعضها البعض. تخضع الخوارزميات القابلة للتوازي لقانون أمدال ، الذي يقدم حدًا نظريًا أعلى لتحسين أداء الخوارزمية المتوازية في حالة العمليات الفردية N (على سبيل المثال ، في قلب المعالج أو في سلسلة).

أصبح التوازي عنصرًا مهمًا في التحسين حيث لم تزد سرعات ساعة المعالج مؤخرًا وتحتوي المعالجات الجديدة على المزيد والمزيد من النوى التي يمكنها أداء الحوسبة المتوازية. أدى تطوير أجهزة الرسومات (خاصة لألعاب الفيديو) إلى تحسينات في وحدات معالجة الرسومات ، التي تحتوي الآن على مئات "النوى" لإجراء العديد من العمليات المتزامنة. وأصبح سعر وحدات معالجة الرسومات هذه أكثر تكلفة بكثير. أصبحت الأطر عالية المستوى مثل CUDA من Nvidia منتشرة في العلوم والتمويل.

عادةً ما تكون أجهزة GPU هذه مناسبة فقط لمهام البحث ، ولكن هناك أيضًا تلك (بما في ذلك FPGAs) التي يتم استخدامها مباشرة مع HFT. في الوقت الحالي ، تدعم الغالبية العظمى من لغات البرمجة الحديثة تعدد مؤشرات الترابط إلى حد ما ، مما سيسمح لك ، على سبيل المثال ، بتحسين backtester بحيث يستخدم عمليات مستقلة عن بعضها البعض.

يشير التحجيم في تطوير البرامج إلى قدرة النظام على التعامل مع أعباء العمل المتزايدة باستمرار في شكل المزيد من الطلبات ، والمزيد من استخدام وحدة المعالجة المركزية ، والمزيد من عمليات تخصيص الذاكرة. في التداول الخوارزمي ، "تتدرج" الإستراتيجية ، مما يعني أنها يمكن أن تعمل بكمية كبيرة من رأس المال ولا تزال تنتج نتيجة إيجابية باستمرار. تعد مجموعة تقنيات التداول قابلة للتطوير إذا كان بإمكانها التعامل مع كميات كبيرة والتعامل مع زمن الوصول المتزايد دون اختناق.

بالطبع ، يجب تصميم الأنظمة بحيث تكون قابلة للتطوير ، ولكن قد يكون من الصعب التنبؤ بالمشاكل والاختناقات. سيجعل التسجيل الدقيق والتنميط والمراقبة النظام أكثر قابلية للتوسع. غالبًا ما توصف بعض لغات البرمجة بأنها "غير قابلة للتطوير". في الواقع ، أولئك الذين يقولون ذلك ببساطة "لا يعرفون كيف يطبخونها". يمكن أن تكون المجموعة الكاملة من التقنيات غير قابلة للتطوير ، ولكن ليس اللغة نفسها. بطبيعة الحال ، تتمتع بعض اللغات بأداء أفضل من غيرها في حالات محددة ، ولكن لا يمكن للمرء أن يقول إن لغة واحدة "أفضل" من لغة أخرى بكل معنى الكلمة.

كما قلنا أعلاه ، تحتاج إلى مشاركة المصالح. لكي يتعامل النظام مع "الارتفاع المفاجئ" (ما يسمى بالتقلب المفاجئ الذي يتسبب في عدد كبير من المعاملات) ، من المفيد إنشاء "بنية قائمة انتظار الرسائل". هذا يعني أن هناك قائمة انتظار بين مكونات نظام التداول ، بحيث يتوقف النظام إذا لم يتمكن مكون معين من معالجة العديد من الطلبات.

الأجهزة وأنظمة التشغيل

يمكن أن يكون للأجهزة التي يعمل عليها نظام التداول الخاص بك تأثير كبير على ربحية الخوارزمية. لا ينطبق هذا حتى على المتداولين ذوي الترددات العالية حصريًا - يمكن أن تفشل الخوادم السيئة في أي لحظة ، ولن يهم عدد المعاملات التي يقوم بها الروبوت الخاص بك إذا لم يتمكن ، بسبب خطأ من الحديد ، من إجراء عملية واحدة ، ولكنها مهمة جدًا . لذلك ، يعد اختيار الأجهزة لنظام التداول أمرًا في غاية الأهمية. عادةً ما يكون الاختيار بين جهاز الكمبيوتر الخاص بالمستخدم ، أو خادم بعيد ، أو جهاز ظاهري سحابي ، أو خادم عند التجميع (في مركز بيانات التبادل أو الوسيط).

من الواضح أن خيار سطح المكتب هو الأبسط والأرخص ، ويرجع ذلك إلى حد كبير إلى وجود عدد كبير من أنظمة التشغيل سهلة الاستخدام (Windows ، Mac OS ، Ubuntu). لكن لديهم أيضًا عيوبًا كبيرة. أحد أهمها هو أن كل ترقية جديدة لنظام التشغيل ستتطلب تصحيحًا لروبوت التداول ، بالإضافة إلى أنه سيتعين إعادة تشغيل الكمبيوتر من وقت لآخر ، وهو أمر ليس جيدًا أيضًا. بالإضافة إلى ذلك ، يتم إنفاق موارد الحوسبة للآلة الشخصية أيضًا على صيانة واجهة المستخدم الرسومية ، ولكن يمكن إنفاقها على زيادة أداء نظام التداول!

بالإضافة إلى ذلك ، فإن العمل في المنزل أو في المكتب محفوف بمشاكل الجهوزية والاتصال بالإنترنت. الميزة الرئيسية لنظام سطح المكتب هي حقيقة أنه يمكن شراء قوة حوسبة إضافية له بمبلغ أقل بكثير مما هو مطلوب لترقية خادم بنفس السرعة.

سيكلفك الخادم المخصص أو الجهاز السحابي أكثر من كمبيوتر سطح المكتب ، ولكنه سيسمح لك أيضًا بتنظيم بنية تحتية أكثر تكرارًا - بما في ذلك النسخ الاحتياطية التلقائية للبيانات ، والقدرة على تكوين الجهوزية ومراقبة السرعة. سيكون من الصعب إدارتها ، حيث سيتطلب ذلك على الأقل اتصالاً عن بُعد.

بالنسبة لخوادم Windows ، من المرجح أن يتم استخدام RDP ، وفي الأنظمة المستندة إلى Unix ، لا يمكن الاستغناء عن SSH - لا توجد طريقة للابتعاد عن سطر الأوامر على الإطلاق ، مما يجعل بعض أدوات التطوير مثل Excel أو MatLab غير قابلة للتطبيق بسبب استحالة العمل بدون واجهة رسومية.

يعني الخادم الموجود في التجميع ببساطة أنك تضع الخادم الخاص بك في أقرب مكان ممكن من قلب التبادل - في مركز البيانات الخاص به ، أو في مركز بيانات الوسيط ، والذي يقع مع نظام التبادل على نفس الشبكة المحلية. بالنسبة لبعض استراتيجيات HFT ، هذا هو الخيار الوحيد القابل للتطبيق ، على الرغم من كونه الأغلى.

الجانب الأخير الذي يجب مراعاته عند اختيار البرنامج ولغة البرمجة هو استقلالية النظام الأساسي. هل هناك حاجة لتنفيذ التعليمات البرمجية على أنظمة تشغيل مختلفة؟ أم أن الكود مصمم للتشغيل على بنية معالج معينة - على سبيل المثال x86 / x64 - أم أنه سيكون قادرًا على العمل على معالجات ARM's RISC أيضًا؟ ستعتمد الإجابات على هذه الأسئلة بشكل مباشر على التكرار المتوقع ونوع استراتيجية التداول.

الاستدامة والاختبار

أفضل طريقة لخسارة الكثير من المال في التداول الخوارزمي هي إنشاء نظام غير مستدام. تتضمن المرونة قدرة النظام على الاستجابة للأحداث النادرة مثل انقطاع الوسيط (أو الإفلاس) أو التقلبات العالية غير المتوقعة أو انقطاع مزود خدمة الإنترنت (الإنترنت أو مركز البيانات) أو الحذف العرضي لقاعدة بيانات التداول بأكملها. يمكن للهندسة المعمارية التي تم تنفيذها بشكل سيء التراجع عن سنوات من التداول الناجح والمربح في بضع ثوانٍ. يجب أن تكون النقاط الرئيسية لنظام التداول الخاص بك هي التصحيح والاختبار والنسخ الاحتياطي والتوافر والمراقبة.

عند تطوير نظام تداول عالي الجودة ، لا تتوقع حتى قضاء أقل من 50٪ من الوقت في التصحيح والاختبار والدعم.

تأتي جميع لغات البرمجة تقريبًا مجمعة مع مصحح أخطاء أو بها بدائل مناسبة من جهات خارجية. باستخدام مصحح الأخطاء ، يمكنك وضع نقاط توقف خاصة في التعليمات البرمجية الخاصة بك تسمح لك بفحص سلوك البرنامج قبل تعطله.

يعد تصحيح الأخطاء أداة مهمة في تحليل الأخطاء ، ولكنه يستخدم في الغالب في اللغات المترجمة مثل C ++ أو Java ، بينما يسهل تصحيح الأخطاء في اللغات المفسرة مثل Python. ومع ذلك ، تأتي هذه اللغة أيضًا مع pdb ، وهي أداة تصحيح أخطاء قوية. يحتوي Microsoft Visual C ++ IDE على أدوات إضافية لتصحيح أخطاء واجهة المستخدم الرسومية ، بينما في Linux C ++ ستحتاج إلى استخدام مصحح أخطاء gdb.

لا يخلو من الاختبار. نموذج الاختبار الأكثر حداثة هو TTD أو Test Driven Development ، حيث يتم كتابة اختبار أولاً يغطي التغيير المطلوب في النظام ، ثم تتم كتابة الكود تحته والذي يمكنه اجتياز هذا الاختبار.

التطوير القائم على الاختبار ليس بالمهمة السهلة التي تتطلب الكثير من الانضباط. بالنسبة لـ C ++ ، يوجد إطار عمل لاختبار الوحدة في Boost ، وفي Java توجد مكتبة JUnit للأغراض نفسها. تحتوي Python أيضًا على وحدة نمطية لهذا النوع من الاختبارات ، والتي تعد جزءًا من المكتبة القياسية. تمتلك العديد من اللغات الأخرى أيضًا أدوات وأطر عمل لإجراء اختبار الوحدة.

في بيئة منتجة ، يعد التسجيل أمرًا ضروريًا ومدروسًا للغاية. من الضروري إنشاء عملية لإصدار مجموعة متنوعة من رسائل الخطأ وسلوك النظام. السجلات هي أول شيء ستبدأ به عند التعامل مع المشاكل والفشل. على الرغم من البساطة الخارجية للمهمة - إخراج الرسائل إلى ملف وتخزينها - في الواقع ، كل شيء أكثر تعقيدًا ، ويجب أن تفكر في مخطط نظام التسجيل قبل الشروع في تنفيذه.

يحتوي كل من Windows و Linux على مجموعة متنوعة من أدوات وميزات التسجيل ، كما تأتي لغات البرمجة مع مكتبات تسجيل تعمل في معظم المواقف. يتمثل الحل المعقول في جعل جميع معلومات التقارير مركزية - لذلك سيكون من الملائم تحليلها في المستقبل.

ستمنحك السجلات فكرة عما حدث في الماضي ، وسيوفر لك نظام المراقبة فهمًا للوضع الحالي. يمكن ويجب مراقبة كل جانب من جوانب نظام التداول الخاص بك: استخدام مساحة القرص والذاكرة المتاحة وحالات الارتباط واستخدام وحدة المعالجة المركزية كلها بيانات مفيدة لفهم أساسي للوضع.

بالإضافة إلى ذلك ، فإن الأمر يستحق مراقبة مقاييس التداول البحتة - الأحجام أو الأسعار غير الطبيعية ، والسحب المفاجئ للحساب والأخبار التي تؤثر على قطاعات معينة من الاقتصاد أو بلدان بأكملها. يجب أن تأتي الشاشة مع وحدة نمطية ستعلمك في حالة انتهاك أي من المعلمات. يمكنك استخدام طريقة مختلفة لتسليم الرسائل (بريد إلكتروني ، رسالة نصية قصيرة ، مكالمة من روبوت إلى هاتف) حسب خطورة حدث معين.

عادةً ما يكون المسؤول المخصص مسؤولاً عن مراقبة النظام ، ولكن إذا فعلت كل شيء بنفسك ، فسيتعين عليك اللجوء إلى استخدام أدوات متنوعة تسهل التطوير ، نظرًا لوجود العديد من الحلول المدفوعة والمجانية المفتوحة لمجموعة متنوعة من الحالات.

يعد النسخ الاحتياطي للنظام وتوافره هو أول شيء يجب العمل عليه. فكر في الأسئلة التالية: 1) إذا تم حذف قاعدة البيانات بأكملها فجأة (وليس هناك نسخ احتياطية) لسبب ما (فظيع) ، فكيف سيؤثر ذلك على خوارزمية البحث وتنفيذ الأوامر؟ 2) إذا توقف نظام التداول لفترة طويلة (إذا كانت هناك صفقات مفتوحة) ، كيف سيؤثر ذلك على مبلغ المال في الحساب والمحافظة؟ عادة ما تكون الإجابات على هذه الأسئلة مخيفة.

لذلك ، من الضروري تطوير نظام للنسخ الاحتياطي ونشر المزيد من البيانات - وهذا يكاد يكون أكثر أهمية من النسخة نفسها. لا يقوم العديد من المتداولين باختبار النسخ الاحتياطية المحفوظة ، مما لا يتضمن أي ضمانات بأنه في الوقت المناسب ستكون هذه البيانات قادرة على "تجميع" وسيعمل النظام كما هو متوقع.

الأمر نفسه ينطبق على العمل على إمكانية الوصول إلى النظام. على الرغم من التكاليف الإضافية ، تأكد من الاهتمام بتوافر البنية التحتية الزائدة عن الحاجة والتكرار - يمكن أن تتجاوز تكلفة تعطل النظام جميع التكاليف بعشرات المرات في بضع دقائق.

اختيار اللغة

لقد درسنا بالفعل العديد من العوامل والجوانب التي تؤثر على تطوير نظام التداول. حان الوقت للتحدث عن لغات البرمجة.
اكتب النظام
عند اختيار لغة برمجة لمكدس التداول ، لا ينبغي لأحد أن ينسى نظام الكتابة. يمكن أن تكون اللغات التي تهم المتداولين الخوارزميين إما ديناميكية أو ثابتة. يتضمن الأخير C ++ و Java - لديهم فحص النوع الذي يتم إجراؤه أثناء عملية الترجمة. في اللغات الديناميكية ، يحدث هذا الفحص سريعًا دون أي تجميع. هذه ، على سبيل المثال ، Python و Perl و JavaScript

بالنسبة للأنظمة عالية الدقة ، والتي تتضمن بالتأكيد روبوتات التداول ، يمكن أن يكون فحص نوع وقت الترجمة خيارًا مفيدًا للغاية ، حيث إنه يزيل عددًا كبيرًا من الأخطاء التي قد تؤدي إلى أخطاء رقمية. من ناحية أخرى ، لا يكتشف فحص الكتابة جميع الأخطاء المحتملة ، لذلك عليك قضاء بعض الوقت والتعامل مع الاستثناءات. عند استخدام اللغات الديناميكية ، غالبًا ما تحدث أخطاء بدء التشغيل التي قد لا تحدث مع التحقق من الكتابة باللغات الثابتة. إذا كنت لا تزال تستخدم لغة ديناميكية ، فمن المفيد تطبيق منهجية TDD واختبار الوحدة لتقليل عدد الأخطاء المحتملة.

المصدر المفتوح أم البرمجيات الاحتكارية؟

أحد القرارات الرئيسية التي سيتعين على مطور برامج التداول الخوارزمية اتخاذها هو استخدام البرامج التجارية أو اللجوء إلى التقنيات المفتوحة. كل من هذه المسارات لها مزاياها وعيوبها. من الضروري دراسة مدى جودة دعم اللغة ، ومدى نشاط المجتمع في تطويرها ، ومدى سهولة التثبيت والصيانة ، ومدى جودة الوثائق على الويب ، وحساب أي تكاليف محتملة للتراخيص واستخدام المنتج .

تعد مكدس Microsoft .NET (بما في ذلك Visual C ++ و Visual C #) و MathWorks من MatLab بمثابة أدوات الملكية الرئيسية لتطوير أنظمة التداول. تم اختبار كلا النظامين من قبل آلاف المتداولين حول العالم في بورصات مختلفة.

منتجات البرامج هذه موثقة جيدًا ولديها مجتمع نشط كبير مهتم بتطوير هذه الأدوات. يسمح برنامج .NET بالتكامل مع العديد من لغات البرمجة مثل C ++ و C # و VB ، بالإضافة إلى توصيل منتجات Microsoft الأخرى مثل قاعدة بيانات SQL Server (عبر LINQ) بسهولة تامة. يحتوي MatLab أيضًا على العديد من المكونات الإضافية والمكتبات (بعضها مدفوع) التي يمكن تطبيقها على أي مجال من مجالات الحوسبة المالية تقريبًا.

لكن هناك أيضًا قيود. السعر الأساسي هو السعر الذي لا يطاق لمتداول واحد (على الرغم من أن Microsoft تقدم الإصدار الأساسي من Visual Studio مجانًا). تعمل منتجات Microsoft بشكل جيد معًا ، ولكن دمجها مع أي أنظمة تابعة لجهات خارجية ليس بالأمر السهل على الإطلاق. أيضًا ، يعمل Visual Studio فقط ضمن WIndows ، والذي يمكن إلقاء اللوم عليه في الأداء البطيء مقارنة بخادم Linux القوي والمجهز جيدًا. يفتقد MatLab إلى بعض المكونات الإضافية التي يمكن أن تجعل استخدام هذا المنتج أسهل.

العيب الرئيسي للمنتجات المسجلة الملكية هو عدم الوصول إلى الكود المصدري. هذا يعني أنك عندما تحتاج إلى أداء فائق وضخم ، فلن تكون قادرًا على تعديل أي شيء فيها ، وبالتالي ، ستكون محدودًا.

المنتجات مفتوحة المصدر شائعة جدًا أيضًا في الصناعة المالية. على سبيل المثال ، يتم استخدام Linux و MySQL / PostgreSQL و Python و R و C ++ و Java حيث يلزم الأداء العالي. ومع ذلك ، لا يمكن تسمية أي من هذه الأدوات ب "شحذ" لهذا السوق بالذات. تحتوي Python و R على الكثير من المكتبات الزائدة عن الحاجة والتي يمكنك من خلالها إجراء أي عملية حسابية ممكنة تقريبًا بسرعات مماثلة للغات المترجمة (مع بعض التحذيرات بالطبع).

الفائدة الرئيسية من استخدام اللغات المفسرة هي سرعة التطوير. تتطلب Python و R عددًا أقل من سطور التعليمات البرمجية لتحقيق وظائف مماثلة. بالإضافة إلى ذلك ، فهي تسمح أيضًا في كثير من الأحيان بالتطوير التفاعلي القائم على وحدة التحكم ، مما يؤدي إلى تسريع عملية التطوير المتسلسل بشكل كبير.

بالنظر إلى حقيقة أن وقت المطور (خاصة إذا كان منعزلاً) له قيمة كبيرة ، وأن سرعة كل شيء وكل شيء في أعمال HFT دائمًا في المقام الأول ، يجدر إلقاء نظرة فاحصة على مكدس التكنولوجيا المفتوحة. تتمتع Python و R نفسها بمجتمع مثير للإعجاب ، ونظرًا لشعبيتها ، فهي مدعومة جيدًا. بالإضافة إلى ذلك ، هناك قدر هائل من الوثائق المتعلقة بهم.

ومع ذلك ، غالبًا ما تفتقر البرامج مفتوحة المصدر إلى الدعم التجاري ، كما هو الحال في المنتجات المسجلة الملكية ، وتعمل على واجهات أقل سهولة في الاستخدام. على خادم Linux ، لن ترى أبدًا واجهة إدارة رسومية ، فكل شيء يجب القيام به من خلال وحدة التحكم. وبالنسبة لبعض المهام ، يمكن أن تكون لغات مثل Python و R بطيئة جدًا. توجد آليات للتكامل مع ، على سبيل المثال ، C ++ لتحسين السرعة ، لكن هذا يتطلب بعض الخبرة في البرمجة متعددة اللغات.

على الرغم من حقيقة أنه في عالم البرمجيات الاحتكارية ، قد تواجه مشاكل عند تحديث إصدارات المنتج ، ومع ذلك ، في حالة البرامج مفتوحة المصدر ، تكون هذه الصعوبات أكثر شيوعًا. بشكل عام ، الأنظمة المفتوحة أكثر صعوبة في الإدارة.

ماذا في الصندوق

ما المكتبات التي تحتويها اللغة وما مدى جودتها؟ هذا هو المكان الذي تتمتع فيه اللغات القديمة بميزة على اللغات الأحدث. تم تطوير C ++ و Java و Python لفترة طويلة ولديها مجموعة واسعة من المكتبات لبرمجة الشبكة و HTTP والتفاعل مع نظام التشغيل والواجهات الرسومية ومكتبات التعبيرات العادية وما إلى ذلك.

تشتهر C ++ بمكتبة القوالب القياسية (STL) التي تحتوي على العديد من هياكل البيانات عالية الأداء. تشتهر Python بقدرتها على العمل مع أي نوع من الأنظمة والبروتوكول تقريبًا (خاصة على الويب) من خلال مكتبتها القياسية. يحتوي R على الكثير من الأدوات الإحصائية والاقتصاد القياسي المضمنة ، ويعتبر MatLab رائعًا لكتابة رمز الجبر الخطي (يمكن العثور عليه ، على سبيل المثال ، في محركات تحسين المحفظة والتسعير

والتقنيات المتعلقة بهذا المجال ، لكننا لم نتحدث أبدًا عن البرامج التي ، في الواقع ، يمكنك من خلالها إنشاء برنامج التداول الخاص بك. Under the cut - نظرة عامة على أدوات البرامج الشائعة لإنشاء أنظمة تداول ميكانيكية تتكيف مع سوق الأوراق المالية الروسية.

معمل الثروة

يعد منتج Fidelity International أحد أقوى أدوات التحليل الفني وتطوير واختبار استراتيجيات التداول. لغة البرمجة المضمنة فيها هي WealthScript ، والتي لها الكثير من القواسم المشتركة مع Pascal ، تستخدم أحدث الإصدارات C # ولغات .NET الأخرى.

في سوق الأوراق المالية الروسية ، يتم استخدامه جنبًا إلى جنب مع محطات الوساطة - في Wealth-Lab ، يصف المستخدم استراتيجيته ، والتي بموجبها يقوم البرنامج بإنشاء أوامر للمعاملات. بمساعدة المكتبات الخاصة للتكامل ، يتم تحويل هذه الأوامر بعد ذلك إلى منصة التداول ، والتي يتم تنفيذها من خلالها. من الناحية الموضوعية ، يفرض مثل هذا المخطط عددًا غير قليل من القيود ، لذلك لا يمكن بالطبع تسمية Wealth-Lab بالخيار المثالي للتبادلات الروسية.

ميتاستوك

منتج أجنبي آخر. يحتوي MetaStock على مكتبة كبيرة من المؤشرات والأدوات المختلفة لإنشاء الصيغ الخاصة بك. من الفوائد - لغة برمجة مدمجة بسيطة إلى حد ما. بمساعدة وحدات إضافية ، يمكنك إنشاء أوامر شراء / بيع. مثل Wealth-Lab ، يتم استخدامه في السوق الروسية جنبًا إلى جنب مع محطات التداول بمساعدة مكتبات إضافية ، مما يؤدي إلى نفس المشكلات تقريبًا. أيضًا ، تشمل العيوب حقيقة أن بساطة لغة البرمجة المضمنة لا تسمح بوصف استراتيجيات التداول المعقدة.

أوميغا للأبحاث

أداة التحليل الفني لإنشاء واختبار أنظمة التداول الميكانيكية. يمكنك كتابة الروبوتات بلغة البرمجة Easy Language المدمجة (بناء الجملة مشابه لـ Pascal). كما في حالة البرنامجين المذكورين أعلاه ، يتم استخدامه في سوق الأوراق المالية الروسية بمساعدة "الحشيات". من بين السلبيات ، على التوالي ، استقرار تشغيل مثل هذا التصميم ، فضلاً عن تعقيد إنشاء Omega Research. بالإضافة إلى ذلك ، يعمل البرنامج فقط مع تنسيق البيانات الخاص به ولا يدعم التحويل من ملفات نصية أو تنسيقات لبرامج التحليل الفني الأخرى.

بالإضافة إلى المنتجات الأجنبية ، هناك عدد من الحلول البرمجية من المطورين الروس في سوق الأوراق المالية المحلية. وإليك القليل منهم.

TSLab

مثل المشروع السابق ، تقوم TSLab بتطوير منصة لإنشاء وإطلاق أنظمة تداول ميكانيكية ، "مصقولة" خصيصًا لسوق الأوراق المالية الروسية. أحد الأشياء الأساسية للمتداولين الذين ليس لديهم مهارات برمجة هو القدرة على تسجيل خوارزمية تداول في شكل مخطط انسيابي.

شارب

مجانية (في الإصدار الأساسي) منصة StockSharp مفتوحة المصدر ومنتجات تعتمد عليها (S #. Studio). كما يوحي الاسم ، يمكنك البرمجة بلغة C #. من الفوائد - القدرة على الاتصال بمحطات التداول وأنظمة الوساطة المختلفة.

تداول مباشر

خط إنتاج شركة Cofite في سان بطرسبرج. بفضل واجهة برمجة التطبيقات ، باستخدام منصة التداول LiveTrade Terminal ، يمكنك تشغيل الروبوتات المطبقة على منصة .NET. من الممكن الاتصال بمحطات وأنظمة التداول الخاصة بالعديد من الوسطاء الروس (بما في ذلك نظام ITinvest باستخدام واجهة برمجة تطبيقات SmartCOM). بالإضافة إلى ذلك ، لدى Cofite منتج Robotlab مخصص بالكامل لبناء الروبوتات. كما في حالة TSLab ، يمكن تنفيذ خوارزميات التداول باستخدام المُنشئ المرئي. يمكن بعد ذلك تشغيل مخطط كتلة الروبوت الناتج في الجهاز.

سمارت اكس

محطة تداول SmartX ليست محطة عادية بالمعنى المعتاد ، ولكنها منتج برمجي متكامل ، والذي يتضمن ، من بين أشياء أخرى ، لغة برمجة البرمجة النصية المدمجة TradeScript - لغة موجهة تم إنشاؤها بواسطة الشركة الأمريكية Modulus Financial Engineering ( USA) خصيصًا لإنشاء روبوتات التداول.

من بين الوظائف المثيرة للاهتمام للمحطة ما يلي:

  • القدرة على إعادة اختبار استراتيجيات التداول - اختبار الروبوت على البيانات التاريخية. في الوقت نفسه ، لا يلزم تحميل هذه البيانات المؤرشفة من مصادر أخرى (غالبًا ما تكون مدفوعة) - يتم تحميلها تلقائيًا بواسطة الجهاز.
  • القدرة على بناء خوارزميات بناءً على بيانات التجزئة.
  • ميزة أخرى مثيرة للاهتمام هي القدرة على اختبار إستراتيجية تداول "سريعًا" باستخدام بيانات التبادل الحالية ، ولكن دون وضع أمر في البورصة نفسها - سيتم عرض وقت المعاملة الافتراضية والسعر والربحية الناتجة في ملف منفصل نافذة او شباك.

لغة البرمجة النصية سهلة التعلم ، ويمكنك البدء في برمجة الروبوتات البسيطة في غضون ساعتين بعد التعرف عليها. بالإضافة إلى ذلك ، تتشابه العديد من الخوارزميات في الكتابة مع Metastock ، لذلك إذا كان المستخدم على دراية بهذا البرنامج سابقًا ، فلن يضطر عمليًا إلى إعادة التعلم.

مثال على روبوت TradeScript بسيط:

إشارات الشراء # اشترِ إذا كان التقلب منخفضًا وكان الحجم والسعر يتجهان لأعلى التقلب التاريخي (إغلاق ، 15 ، 252 ، 2)< REF(HistoricalVolatility(CLOSE, 15, 365, 2), 15) AND TREND(VOLUME, 5) = UP AND TREND(CLOSE, 40) = UP Sell Signals # Продаем, если волатильность снижается, а объем и цена имеют нисходящий тренд HistoricalVolatility(CLOSE, 15, 252, 2) < REF(HistoricalVolatility(CLOSE, 15, 365, 2), 15) AND TREND(VOLUME, 5) = UP AND TREND(CLOSE, 40) = DOWN
تتمثل ميزة هذه الطريقة في إنشاء الروبوتات في أنه ، على عكس نفس Wealth-Lab و Metastock ، ليست هناك حاجة لإنشاء هياكل معقدة واستخدام "منصات" في شكل مكتبات إضافية لنقل الطلبات إلى الجهاز - كل شيء مبني - في ومتصلة على الفور بنظام تداول الوساطة.

بالإضافة إلى ذلك ، يمكن للمستخدم تشغيل العديد من الخوارزميات في وقت واحد كما تسمح سرعة ساعة المعالج وذاكرة الكمبيوتر. بالنظر إلى العدد الكبير من الكلمات والمعاملات في لغة البرمجة النصية ، فهذا يعني القدرة على إنشاء أي عدد من استراتيجيات التداول المعقدة.

سمارتكوم

واجهة برمجة التطبيقات لنظام الوساطة لدينا (مزيد من التفاصيل) ، والتي يمكنك من خلالها إنشاء روبوتات تداول بأي تعقيد. هناك ملحق إضافي لـ AmiBroker ، والذي يسهل بشكل كبير تحليل البيانات.

هذا كل شيء لهذا اليوم. في الموضوعات التالية ، سنتحدث بمزيد من التفاصيل حول كتابة روبوتات التداول ونعطي أمثلة على أنظمة ميكانيكية محددة تم إنشاؤها باستخدام أدوات مختلفة. شكرا لاهتمامكم!

في هذه المقالة سوف أخبرك بالتفصيل وسأوضح لك كيفية كتابة روبوت تداول ، والذي تمت مناقشته في المقالة السابقة. سيكون هذا هو الدرس الأول والأسهل في إنشاء أنظمة التبادل الآلي. ولكن ، على الرغم من ذلك ، بعد القيام بجميع الإجراءات التي وصفتها بالضبط ، ستكون النتيجة روبوت تداول حقيقي.

لن أسكب الماء ، لكنني سأذهب مباشرة إلى هذه النقطة. لذلك ، أولاً وقبل كل شيء ، تحتاج إلى تنزيل وتثبيت دلفي 7. يمكنك القيام بذلك من الرابط - . بعد ذلك ، افتح المجلد باستخدام برنامج shell. يمكن الاطلاع على البرنامج وطلبه على الرابط التالي:

نحن مهتمون بملف TradeRobot.dpr. افتحه وشاهد ما هو مبين في الصورة أدناه.

النافذة التي تقول "روبوت" هي Form1 ، نافذة Windows لوضعها ببساطة. هذا ما يبدو عليه في المطور. نحتاج إلى وضع عناصر التحكم وعناصر التحكم في الروبوت ، مثل: زران وثلاثة نوافذ صف صغيرة. سيكون الزر الأول مسؤولاً عن الاتصال بـ QUIK ، والثاني لبدء تشغيل الروبوت وإيقافه. ستعرض سطور النوافذ معلومات حول أحجام عمليات البيع والشراء الأخيرة والوضع الحالي للبرنامج.

لوضع العناصر الضرورية في النموذج ، يجب النقر فوق الزر الموجود في علامة التبويب "قياسي".

ثم انقر فوق أي مكان في النموذج. ستعرض دلفي إعادة تسمية الزر وسنستخدمه. دعنا نسميها ConnectButton.

بنفس الطريقة ، لنقم بإنشاء زر ثانٍ وقم بتسميته StartButton.

لنقم الآن بإنشاء نوافذ مكونة من 3 صفوف. للقيام بذلك ، في نفس علامة التبويب "قياسي" ، حدد الرمز المناسب (كما في الصورة) وضعه في النموذج.

فنكررها ثلاث مرات وندعوها كالتالي:
- أعلى اليسار BuyVolumeEdit
- أعلى اليمين SaleVolumeEdit
- أسفل StatusEdit

أنت الآن بحاجة إلى تغيير التسميات على العناصر. يتم ذلك في نافذة ObjectInspector ، للأزرار الموجودة في سطر التسمية التوضيحية ، لخطوط النافذة في سطر النص.

يجب أن تتحول مثل الصورة أدناه.

الآن نحن بحاجة إلى كتابة نص لكل زر. للقيام بذلك ، انقر نقرًا مزدوجًا فوق الزر Connect to QUIK وسيتم فتح الرمز ، كما في الصورة أدناه.

أدخل النص التالي قبل البدء:

Var EMsg: مصفوفة شار ؛ EMsgSz: DWord ؛ ExtEC ، rez: LongInt ؛ المسار: سلسلة ؛ رقم الطلب: مزدوج ؛ تدليك: خيط

أدخل ما يلي بين البداية والنهاية:

EMsgSz: = 255 ؛ ExtEC: = 0 ؛ ريز: = - 1 ؛ المسار: = "C: \ Quik-Junior-Zerich \" ؛ FillChar (EMsg ، SizeOf (EMsg) ، 0) ؛ rez: = توصيل (PChar (مسار) ، ExtEC ، EMsg ، EMsgSz) ؛ التدليك: = ResultToString (rez و 255) ؛ إذا كان التدليك = "تنفيذ" ثم ابدأ StatusEdit.Text: = "متصل ..." ؛ الحالة: = "متصل ..." ؛ نهاية آخر تبدأ StatusEdit.Text: = "فشل ..." ؛ الحالة: = "فشل ..." ؛ نهاية؛

نتيجة لذلك ، يجب أن تحصل على ما يلي:

يشير التسطير الأحمر إلى المسار إلى QUIK. إذا كان لديك مسار مختلف ، فقم بتغيير المسار في هذا المكان.

الآن دعنا ننتقل إلى زر START. انقر نقرًا مزدوجًا على البرنامج النصي والصق التالي بين البداية والنهاية:

إذا كان StartButton.Caption = "START" ، فابدأ الحالة: = "Started" ؛ StartButton.Caption: = "STOP" ؛ نهاية الحالة تبدأ الحالة: = "متوقف" ؛ StartButton.Caption: = "START" ؛ نهاية؛ StatusEdit.Text: = الحالة ؛

يجب أن يتحول مثل هذا:

لنكتب الآن المتغيرات العامة. للقيام بذلك ، دعنا نعثر على جزء من الكود:

والصق الكود التالي:

DataTable: مصفوفة من سلسلة سلسلة ؛ حجم البيع ، الحجم: حقيقي ؛ الحالة: سلسلة؛

الآن في ObjectInspector نختار Form1 وفي علامة التبويب الأحداث نجد سطر onshow. انقر نقرًا مزدوجًا لفتح الرمز. أدخل ما يلي بين البداية والنهاية:

SetLength (DataTable، 2000000،10) ؛

الآن نحتاج إلى إيجاد مكان في الكود كما في الصورة أدناه:

بعد var i، j: عدد صحيح ؛ الصق ما يلي:

المسار ، المعاملة: سلسلة ؛ رقم الطلب: مزدوج ؛

بعد البدء يتم ما يلي:
StatusEdit.Text: = الحالة ؛

بعد إذا كانت (خلايا البيانات<>"0") و (خلايا البيانات<>"0،00") ثم ابدأ بلصق الرمز:

DataTable: = Data.Cells ؛ إذا كانت DataTable<>"" ثم ابدأ BuyVolume: = StrToFloat (DataTable) ؛ حجم المبيعات: = StrToFloat (DataTable) ؛ إذا كان StartButton.Caption = "STOP" ، فابدأ إذا (BuyVolume> 10) و (الحالة<>"شراء") ثم ابدأ المعاملة: = "ACTION = NEW_ORDER ؛ TRANS_ID = 1 ؛ CLASSCODE = SPBFUT ؛ SECCODE = SiU6 ؛ ACCOUNT = SPBFUT00553 ؛ CLIENT_CODE = ؛ TYPE = M ؛ العملية = B ؛ الكمية = 1 ؛ السعر = 0 ؛" ؛ الحالة: = "شراء" ؛ dOrderNum: = 0 ؛ send_async_transaction_test (معاملة ، dOrderNum) ؛ نهاية؛ إذا (SaleVolume> 10) و (الحالة<>"Sale") ثم ابدأ المعاملة: = "ACTION = NEW_ORDER ؛ TRANS_ID = 1 ؛ CLASSCODE = SPBFUT ؛ SECCODE = SiU6 ؛ ACCOUNT = SPBFUT00553 ؛ CLIENT_CODE = ؛ TYPE = M ؛ العملية = S ؛ الكمية = 1 ؛ السعر = 0 ؛" ؛ الحالة: = "بيع" ؛ dOrderNum: = 0 ؛ send_async_transaction_test (معاملة ، dOrderNum) ؛ نهاية؛ نهاية؛ نهاية؛ BuyVolumeEdit.Text: = DataTable ؛ SaleVolumeEdit.Text: = DataTable ،

يجب أن يتحول مثل هذا:

الانتباه!

في سطور مثل (يوجد اثنان منهم):

المعاملة: = "ACTION = NEW_ORDER؛ TRANS_ID = 1؛ CLASSCODE = SPBFUT؛ SECCODE = SiU6؛ ACCOUNT = SPBFUT00553؛ CLIENT_CODE =؛ TYPE = M؛ OPERATION = B؛ QUANTITY = 1؛ PRICE = 0؛"؛

في الحساب = المعلمة ، تحتاج إلى تحديد حسابك. الآن تم إدراج SPBFUT00553 الخاص بي هناك.

كل شيء ، الروبوت مكتوب. الآن يبقى تجميعها ، أي تتحول إلى تطبيق EXE مكتمل. للقيام بذلك ، انقر فوق الزر "تشغيل" الأخضر (أو F9) ، على غرار "تشغيل".

يعمل دماغ التاجر بطريقة غير عادية. الشخص الذي هو بعيد عن الأسواق المالية يتصرف بعقلانية ويمكن التنبؤ بها. عندما يلعب الفرد الذي يفكر حصريًا في مجموعات الشموع دورًا ، يكون التنبؤ بالعواقب أكثر صعوبة. كمسألة خاصة ، فإن أولويات الحياة المقلقة وزيادة الاندفاع هي رذائل معروفة للمتداولين. تصبح عملية التجارة ذاتها غاية في حد ذاتها ، ويدخل الكمبيوتر البيولوجي في أحشاء الجمجمة في دورة لا نهاية لها ، معلقًا على الفكرة المجردة للوجود الشاعري ويخته الخاص ، الراسو على رصيف جسر القصر.

بادئ ذي بدء ، فإن مجرد فكرة أتمتة إستراتيجية التداول الخاصة بك لا توفر لك حياة خالية من الهموم أو التخلص من المشاكل الملحة للمتداول. إذا لم تكن لديك أي فكرة عن كيفية عمل السوق ، فإن استثمار الوقت والمال في بناء روبوت لن يملأ حسابك المصرفي بالطلقات الذهبية ، بل سيعيدك إلى الواقع الوحشي للطبقة الوسطى النموذجية.

لذا فإن الوقت الضائع هو الخبرة. الوقت قيم. تقريبًا ، قضاء وقتك ، تشتري الخبرة. لكنك ، بصفتك شخصًا عاقلًا ، سترغب على الأرجح في توفير فلس إضافي ، وعدم ارتكاب أخطاء حيث يمكنك الالتفاف حول أشعل النار ، خاصة إذا كانت هناك فرصة كهذه. في هذه المرحلة ، سأطلب القليل من وقتك لأخبرك كيف تستعد فعليًا لمسألة إنشاء آلات طباعة النقودروبوت التداول ، وبالطبع كيف لا نرتكب الكثير من الأخطاء.

1. نبدأ في تطوير روبوت فوركس بفكرة

إن تطوير روبوت للتداول في الأسواق هو بحث مستمر عن الأفكار ، وعلى وجه الخصوص ، البحث عن الكأس المقدسة. على عكس ادعاءات المواطنين غير المستنيرين ، تم العثور على الكأس بكل بساطة - دعنا نقول "شكرًا" للتقدم التكنولوجي. حاول أن تبحث في موقع google "Holy Grail Forex" - على الأرجح ، مستشار أحلامك موجود على الصفحة الأولى من نتائج البحث ، وهو مجاني تمامًا.

في الواقع ، كان من الممكن أن تنتهي هذه القصة. إذا كان المستشار الخبير المثالي موجودًا بالفعل ، فلماذا تستمر في البحث؟ لكن السؤال الثاني يطرح نفسه: لماذا ، إذا تم العثور على المستشار المثالي ، هل لا يزال هناك نقص في مياه الشرب في إفريقيا؟ إذا كانت الإجابة واضحة لك ، فتهانينا ، لقد اجتزت المرحلة الأولى لتصبح متداولًا معقولاً ، بعد أن تغلبت على مستوى المبتدئين أو المتعصبين الذين لا يرون آفاق تطوره ، ويركزون فقط على نتيجة.

أنا متأكد من أن فكرة المستشار الخبير الخاص بك فريدة تمامًا وليس لها نظائرها. ولكن ، على أي حال ، من الحماقة عدم محاولة العثور على تطورات مماثلة من قبل مؤلفين آخرين - يصعب تقييم حجم البحث الذي تم إجراؤه حتى تصادفه وجهًا لوجه. تتجه الإنسانية نحو التفرد التكنولوجي ، ويتم إدخال تطورات جديدة بسرعة كبيرة بحيث يتعذر في كثير من الأحيان فهم كل المواد الموضوعة. إذا لم تكن هناك حتى الآن مثل هذه التطورات ، وكان من المستحيل اختبار الفكرة دون إجراء البحث الخاص بك ، فقد حان الوقت للانتقال إلى المرحلة التالية.

2. 4 أسئلة مهمة قبل التطوير

لكن قبل ذلك ، حاول الإجابة على الأسئلة التالية بنفسك:

  • ما هي فكرتك في التداول؟
  • ما المهام التي سيحلها المستشار ، وما الميزة الموضوعية التي يمكن أن يعطيها ذلك في التداول؟
  • ربما تحتاج إلى مؤشر رسومي أو نص مساعد؟
  • ما مدى جدوى الفكرة من الناحية الفنية ، وهل يمكنك تقييم مدى تعقيدها بشكل مستقل؟

هذه أسئلة مهمة جدًا لن توفر لك الكثير من الوقت فحسب ، بل ستقربك أيضًا من فهم فكرتك الخاصة. بالتأكيد لم تأت إلى السوق لتوزيع الأموال على المحتاجين ، لكن لديك أهداف أخرى.

من الناحية المثالية ، يجب أن تعرف جيدًا وتفهم تمامًا كيف تعمل منصة التداول التي اخترتها والإستراتيجية التي ستكسب عليها في الواقع. أي تعريف غامض أو إغفال للحظات التي تبدو غير مهمة سيظهر بشكل سيء في المراحل التالية من التطوير ، وسيضر بحساب التداول. لا تخف من إحياء أفكار التداول المنسية منذ فترة طويلة ، ولكن لا تحاول اللعب على بعض الحلول الجاهزة. السوق متقلب للغاية وبحكم التعريف ، في حركة مستمرة ، والمنافسة تتقلص باستمرار.

غالبًا ما يكون لدى المبتدئين في سوق الصرف الأجنبي الكثير من الأسئلة ، والإجابات ليست واضحة تمامًا ، أو مجرد مسألة قلة خبرة. بصفتك متداولًا مبتدئًا ، يكفي أن تقرأ كتابًا واحدًا من تأليف بيل ويليامز لاستبدال مفهوم الفوضى التجارية بأمر تداول مدى الحياة. ثم يتساءل هؤلاء الناس لماذا لا تشتري هنا ، ولكن لا تبيع هنا ، وتطلب مستشارًا من المبرمجين لتقاطع متوسطين متحركين. ولكن في المراحل الأولى من التدريب ، يمكن ترك هذا الأمر بالكامل تحت رحمة أدوات التطوير الجاهزة. واحد من هؤلاء هو معالج MQL5 ، وهو معالج لإنشاء المستشارين الخبراء للميتاتريدر 5.

لتنفيذ الأشياء البسيطة ، يعتبر المعلم مثاليًا. لا تحتاج إلى أي قدرات سحرية - مهارات البرمجة ليست مطلوبة هنا. بضع خطوات بسيطة ، والمستشار جاهز. يمكن اختبار المستشار الجاهز في نفس محطة MetaTrader. حافظ على حصادة لإنتاج الحبوب البسيطة.

لذلك ، بالنسبة للمبتدئين ، قم بتشغيل MetaTrader 5 وانتقل إلى محرر التطبيق (زر F4). في القائمة العلوية ، انقر فوق الزر "إنشاء" وفي مربع الحوار الذي يظهر ، حدد إنشاء مستشار جديد.

إضافة وحدات إشارات التداول. يمكن أن تكون الوحدات معيارية ويتم تطويرها بواسطة المجتمع (يمكنك أيضًا المشاركة في هذه العملية).

في الواقع ، يتم وصف جميع الإشارات القياسية جيدًا في التعليمات عبر الإنترنت على الموقع الرسمي. يمكنك أيضًا تنزيل ملفات مخصصة هناك.

بعد اختيار مؤشر مناسب ، تحتاج إلى تحديد معلمات الإدخال الخاصة به. يمكنك هنا أيضًا تحديد وزن الإشارة بالنسبة للآخرين ، إذا كان هناك الكثير منهم.

إن أمر وقف الخسارة المتحرك أو إغلاق صفقة بناءً على قيم المؤشر هو اختيارك.

هناك أيضًا خيار للعقد الثابت ، أو حجم الصفقة كنسبة مئوية من الإيداع. بالنسبة للوافدين الجدد الأكثر خطورة ، هناك أيضًا واحد مع تقدمه الهندسي للوت ، والذي يمكن أن يجلب لك الملايين لبضع تمريرات إضافية في اختبار الإستراتيجية.

في الواقع ، حتى لو لم تكن عضوًا في عشيرة Metatrader ، فلا تقلق ، فقد تمت كتابة مُنشئ منصة التداول التي تحتاجها بالفعل. النقطة ، مرة أخرى ، في الاحتمالات والرغبة. الأخلاق بسيطة: لا تحاول تنفيذ ما تم تنفيذه بالفعل منذ زمن طويل. يمكن أن يكون تجاهل عمل الآخرين مكلفًا ، فليس من الضروري على الإطلاق ابتكار العلم من جديد.

لذلك ، لديك بالفعل بعض الخبرة في التداول ، لقد اختبرت فكرتك في التداول أو لديك فكرة دقيقة عن كيفية عملها في السوق الحقيقي. لذا ، حان الوقت للانتقال إلى كتابة القواعد الرسمية لاستراتيجيتك. غالبًا في هذه الخطوة ، تبدأ المشاكل بالنسبة لمعظم أتباع العلوم الإنسانية - يواجه الناس جدارًا لا يمكن التغلب عليه من سوء الفهم ، عندما يتوقف مخطط تم وضعه بشكل مثالي في رؤوسهم عن العمل عند ترجمته إلى لغة تقنية.

هذه المشكلة منتشرة على نطاق واسع لدرجة أنها أوجدت صناعة كاملة لترجمة الأفكار المجردة إلى لغة رسمية لقواعد منظمة بشكل واضح ، بطبيعة الحال ، ليس مجانًا. في الواقع ، مع الحد الأدنى من الإعداد ، لن تواجه مثل هذا التعقيد لمجرد أنك تفهم آلية تروس روبوت الفوركس الخاص بك بأدق التفاصيل ، ولكن التطوير لا يزال يتطلب بعض العمل.

في الواقع ، المهمة التي تمت صياغتها بشكل صحيح هي بالفعل نصف العمل. ومع ذلك ، هذه ليست وظيفة المبرمج. إذا طلبت من مبرمج كتابة مهمة لك ، فاستعد لمواجهة سوء التفاهم في أحسن الأحوال والاستياء في الغالبية العظمى من المواقف. مطور الفكرة هو المسؤول عن إضفاء الطابع الرسمي عليها بالضبط ، وليس المنفذ بأي شكل من الأشكال - إذا أردت ، المترجم إلى لغة الأوامر ذات المستوى المنخفض.

مثال على المهمة السيئة لإنشاء مستشار تداول هو غيابه. يمكن أن تكون نية العميل مفهومة: هناك مؤشر ، تحتاج إلى كتابة روبوت تداول ، ولكن ماذا بعد ذلك؟

"حاول الخوض في عملية العمل وكل ما يتعلق مباشرة بتنفيذ فكرة مستشارك"

كيف تغلق صفقة؟ كيف ترافقها؟ ما الأحجام للاختيار؟ ما يجب القيام به مع ؟ عليك أن تفهم أن المبرمج ليس لديه قدرات نفسية. إذا وجدت واحدة ، فتأكد من إخباري ، لا ينبغي أن يختفي هؤلاء الأشخاص.

من خلال رؤية الشروط المرجعية لإنشاء عمل بدون التفاصيل اللازمة ، سيقوم المستقل بعمل تفسيره الخاص ، وفي بعض الحالات ، يمكنه حقًا تخمين النوايا الحقيقية للعميل. ولكن ، كقاعدة عامة ، تنتهي هذه الاستئنافات بطرفين متضررين واستئناف أمام التحكيم مع المزيد من إنهاء العقد.

الأخلاق: كلما زادت التفاصيل التي تقدمها في المهمة ، كان من الأسهل فهمها وفهمها وتنفيذها في النهاية.

7. اختيار الفنان

إذا لم تكن لديك خبرة في التبادل المستقل ، فحاول أن تتخيل نسخة شبه استوائية من الجحيم. في الواقع ، ليس كل شيء مخيفًا للغاية ، لكن بعض الفروق الدقيقة لا تزال تستحق الدراسة.

أولاً ، يمكن أن تكون سياسة التسعير عند كتابة Expert Advisor غير مؤكدة للغاية. هناك حد أدنى معين لن يأخذه المبرمج المناسب ، ولكن في نفس الوقت ، تتقلب قيمة هذا الحد الأدنى كثيرًا وفي بعض الأحيان يصبح الحد الأدنى هو الحد الأقصى (نعم ، يحدث هذا أيضًا).

لا يجب أن تكون كريمًا جدًا أيضًا ، فهذا يشير على الفور إلى أن الشخص لديه أموال وستتمزق بالتأكيد ثلاثة أشكال للقيام ببعض المهام البسيطة. إذا كنت لا تفهم تكلفة المهمة ، فحاول الحصول عليها من الأشخاص الذين تثق بهم. تواصل مع المطورين ذوي الخبرة ، حتى إذا كنت لن تطلب أي شيء منهم. في المستقبل ، سيساعد هذا في تحديد من يمكنك الاتصال به ومن لا يجب عليك الاتصال به.

ثانيًا ، لا تخف من سؤال مطوري برنامج Expert Advisor عن النقاط غير المفهومة له ، وأي منها يتطلب توضيحًا ، وما هو ، في الواقع ، مدى تعقيد جزء أو جزء آخر من الروبوت. يبدو أن كل شيء في الاختصاصات واضح لك ، ومع ذلك غالبًا ما يصادف فناني الأداء سوء فهم أساسي.

"من مصلحتك التحكم في عملية إنشاء المستشار الخبير الذي تحلم به. اسأل عن المعالم ، وشارك في الاختبار التجريبي ، ولا تتردد في الحصول على التفاصيل الفنية. "

أحد الأمثلة النموذجية هو سوء فهم تنسيقات الملفات ومعناها. مثل: "لدي مكتبة .dll هنا (ملف. exe أو برنامج .ex4) ، هل يمكنك إصلاح هذا وذاك بسرعة ، وسأرمي لك فلساً واحداً مقابل ذلك؟ لا؟ و لماذا؟ جعلني فاسيلي مستشارًا مقابل 5 دولارات ، وأنت مطور سيء!

الأخلاق: حاول الخوض في عملية العمل وكل ما يتعلق مباشرة بتنفيذ فكرتك. لن يساعدك هذا في فهم عمل الروبوت بنفسك بشكل أفضل فحسب ، بل سيساعدك أيضًا على تبسيط عملية التواصل مع فناني الأداء. هناك دائمًا طرفان على الأقل يشاركان في العمل ، وإذا كنت تنوي جعل التجارة مهنتك الرئيسية ، فيجب الحفاظ على الصبر - سواء لك أو من حولك.

مرحلة التسليم هي الأصعب. تأكد من أن كل فنان يشرب مرقًا مهدئًا من الحزن ، ويضع علامة سوداء على يوم التقويم ، عندما يُطلب منه مرة أخرى تصحيح أمر قد استنفد بالفعل جميع المواعيد النهائية. مثل الكون ، ليس هناك حد للكمال ، ولكن في لحظة معينة ، عليك أن تجتمع معًا وتقول - اكتملت المهمة.

أفهم أنه بالنسبة للمتداول ، فإن الضوء المنعكس من الجبال الذهبية ينير خلق الفكر التقني المتقدم وثمار العبقرية الداخلية في عرضها الجميل للغاية. كيف ذلك ، لأن المستشار الذي لا يكسب المال ببساطة لا يتناسب مع العقل ، ويخلق صورة للعمل الجاري. كيف يمكنك الدفع مقابل شيء لا يعمل؟

من جانب المؤدي ، يتم تعليق العمل بالضبط عند اكتمال جميع نقاط الطلب. تعتبر الشروط المرجعية للمبرمج مسارًا مرسومًا بوضوح للابتعاد عن أي وسيلة يفكر بها العميل. يؤدي هذا المسار أحيانًا إلى طريق مسدود ، مثل الطريق من العاصمة السابقة لروسيا إلى أوروبا الليبرالية. أي ، في مرحلة قبول العمل ، اتضح أن المهمة لم تكن على الإطلاق ، ولكن بطريقة معاكسة جذريًا.

إذا كانت المهمة صغيرة ، فقد يقدم المؤدي تنازلات ويصحح العمل وفقًا للاختصاصات الجديدة. إذا تم تنفيذ العمل على نطاق واسع ، فقد فات الأوان لتغيير أي شيء. هناك مشكلة شائعة تتمثل في الانفصال التام أثناء عملية التطوير ، على سبيل المثال ، رفض المشاركة في الاختبار التجريبي: "لماذا أرسلت لي مستشارًا خبيرًا به أخطاء ، فما الذي يجب أن أختبره أيضًا من أجلك؟" أو: "كيف أعرف كيفية تشغيل هذا المختبَر لك ، هل أنا مبرمج أو شيء من هذا القبيل؟".

بالنسبة لشخص مناسب ، تقطع مثل هذه العبارات الأذن ، بينما يقع المؤدي في حالة اكتئاب. إن تطوير روبوت التداول هو أولاً وقبل كل شيء عمل. إذا كنت تبحث عن حل جاهز ، فهناك متجر للمستشارين الخبراء الجاهزين ، حيث سيتم اختبار المستشار الخبير وصقله من أجلك ، لتوثيق نجاحه التاريخي على طول الطريق. في هذه الحالة ، لا معنى للاتصال بصرف مستقل.

الأخلاق: لا تعطي كل شيء للصدفة. من مصلحتك التحكم في عملية إنشاء المستشار الخبير الذي تحلم به. اسأل عن المعالم ، وشارك في الاختبار التجريبي ، ولا تتردد في الحصول على التفاصيل الفنية.

استنتاج

لن تسمح لك الشخصيات العظيمة مثل ألبرت هوفمان بالكذب. تجربة إنشاء المنتج الخاص بك لا تقدر بثمن. إذا جئت إلى سوق الصرف الأجنبي بمحض إرادتك ، صدقني ، هذا لفترة طويلة.

إن دراسة الأنماط والبحث عن الحلول وتنفيذها يغير إلى الأبد تصور العالم ، ويجعل صورته أكثر اكتمالاً ، وتأخذ الحياة معنى إضافيًا.

في الواقع ، يعد تطوير المستشار الخبير الخاص بك عملية ممتعة للغاية. حتى إذا كنت لن تربط حياتك المهنية بالتداول في الأسواق المالية ، يمكن تطبيق المعرفة المكتسبة في مجالات أخرى. التجارة والتنمية هي ما يعتمد عليه الاقتصاد الحديث بأكمله ، واليوم لديك الفرصة لتجربته شخصيًا.

اختيار المحرر
عاجلاً أم آجلاً ، لدى العديد من المستخدمين سؤال حول كيفية إغلاق البرنامج إذا لم يتم إغلاقه. في الواقع الموضوع ليس ...

تعكس التعيينات على المواد حركة المخزون في سياق النشاط الاقتصادي للموضوع. لا يمكن تخيل أي منظمة ...

يتم إعداد المستندات النقدية في 1C 8.3 ، كقاعدة عامة ، في وثيقتين: أمر نقدي وارد (يشار إليه فيما يلي باسم PKO) وأمر نقدي صادر ...

أرسل هذه المقالة إلى بريدي في المحاسبة ، فاتورة الدفع في 1C هي وثيقة ...
1C: إدارة التجارة 11.2 مستودعات للحفظ استمرارًا لموضوع التغييرات في 1C: إدارة التجارة UT 11.2 في ...
قد يكون من الضروري التحقق من دفعة Yandex.Money لتأكيد المعاملات الجارية وتتبع استلام الأموال من قبل الأطراف المقابلة ....
بالإضافة إلى نسخة إلزامية واحدة من البيانات المحاسبية (المالية) السنوية ، والتي وفقاً للقانون الاتحادي المؤرخ ...
كيفية فتح ملفات EPF إذا ظهر موقف لا يمكنك فيه فتح ملف EPF على جهاز الكمبيوتر الخاص بك - قد تكون هناك عدة أسباب ...
المدين 10 - ترتبط حسابات المحاسبة الدائنة 10 بحركة وحركة المواد في المنظمة. للخصم 10 - الائتمان 10 ينعكس ...