ما نتحدث عنه بشكل أساسي هنا هو تنفيذ التعليمات البرمجية المبرمجة في الوقت الفعلي لاستراتيجيات التداول المتوسطة والمنخفضة التردد.
إستراتيجية
تعتمد ولادة استراتيجية التداول الكمي بشكل عام على مراقبة وفهم السوق، وتوليد فكرة استراتيجية، ثم تصميم التفاصيل المحددة للاستراتيجية، ثم اختبار رجعي لأنواع متعددة من البيانات للحصول على تأثير قيم معلمات محددة والتحقق منها. . إذا كان التأثير جيدًا وقابلاً للتطبيق عالميًا، فإن الخطوة التالية هي اختبار السوق الحقيقي بأموال صغيرة. إذا كان العرض الحقيقي خارج العينة ممكنًا، فيمكنك في النهاية زيادة الأموال وتشغيله لفترة طويلة.
من أجل منع الرافعة المالية، اسمحوا لي أن أوضح أنه بالطبع هناك طرق أخرى لتوليد الاستراتيجيات، مثل استخراج البيانات، والحفر، والحفر، وعوامل الحفر. هناك أيضًا عوامل توليد تلقائية مثل التعلم الآلي والتعلم المعزز. ومع ذلك، من الصعب الاستمرار في تشغيل هذا النوع من أساليب الصندوق الأسود خلال فترة تصحيح الإستراتيجية، لأنك لا تعرف متى ولماذا ستفشل هذه العوامل المستخرجة. عند القيام بالتداول الكمي، فإن الشيء الأكثر أهمية هو الإصرار على التداول الثابت. إذا لم يكن السوق جيدًا، فيمكنك تقليص مركزك، لكن لا يمكنك إغلاقه. لا أحد يستطيع أن يعرف متى سوف تندلع السوق الكبيرة. إذا فاتك ذلك، فإن ارتدادك السابق سيكون بلا جدوى.
تشبيه، تصميم الاستراتيجية، والاختبارات الراجعة، يعادل ما قيل في (فن الحرب) "حساب المعبد"، "من ينجح في حساب المعبد قبل المعركة، يكون لديه حسابات كثيرة؛ ومن لا ينجح، سيكون لديه حسابات قليلة. الكثير من الحسابات يؤدي إلى النصر، والقليل من الحسابات يؤدي إلى الهزيمة، فكيف إذا لم يكن هناك حسابات!"
لذا، يجب التخطيط لاستراتيجية التداول من البداية، وحسابها بدقة، وإلا فستكون قد خسرت حتى قبل بدء التداول الفعلي. هذه الخطوة هي الأصعب، على الرغم من أن كود التداول الفعلي ليس سهلًا، لكن معظم الأمور فقط متعبة. إذا استثمرت المزيد من الوقت والجهد، ستتمكن من القيام بذلك بشكل جيد. المفتاح في التداول الفعلي هو إدارة المخاطر.
استراتيجية التداول، أو ما يسمى بقواعد التداول، هي ما يجعلنا "نفعل الشيء الصحيح"، بينما التنفيذ الفعلي يعني "القيام بالأشياء بشكل صحيح". في كثير من الأحيان، معرفة الاتجاه الصحيح يكون أصعب بكثير من إكمال الرحلة. كما في تلك النكتة عن تصليح المعدات، رسم خط يكلف ألف يوان. الرسم نفسه لا يساوي إلا يوانًا واحدًا، لكن معرفة أين ترسم يكلف 999.
تشكل الاستراتيجية + التداول الفعلي النظام التجاري. يمكنك الرجوع إلى المقال السابق حول تصميم النظام التجاري: العناصر السبعة لنظام تداول كامل. التداول الفعلي هنا هو العمليات المحددة للخطوات الأربع "الدخول والخروج من الأرباح والخسائر" للنظام التجاري.
لكن، حتى لو كانت الاستراتيجية جيدة، إذا لم يتم تنفيذها بشكل صحيح، فسوف تتأثر النتائج بشكل كبير، بل قد تؤدي إلى إيقاف استراتيجيات ذات إمكانات جيدة. تطوير استراتيجية جيدة هو أمر صعب، فلا تتركها في مرحلة التنفيذ. الأفكار الجيدة يجب أن تتحقق بشكل آمن في النهاية.
المشكلة
1. حركة مفاجئة
هذا يحدث فقط مع الاستراتيجيات التي تحتوي على إشارات داخل الشمعة. الإشارة داخل الشمعة تعني أنه لم يتم استخدام سعر الإغلاق أو سعر الفتح، بل يتم استخدام الأسعار أثناء التداول لإصدار الإشارة.
هنا مثال لمشكلة واجهتها في التداول الفعلي قبل بضعة أيام. مثال دقيق لسوق تداول. وهو أمر شائع في عالم العملات الرقمية.
الصورة أدناه هي لعقد BNB الدائم لمدة 10 ثوانٍ (يعني أن كل bar هو بيانات معاملات مُجمعة خلال 10 ثوانٍ للحصول على OHLCV).

يمكنك أن ترى، أن تلك الشمعة الكبيرة كانت ذات نطاق تذبذب 3.53%، وتم تنفيذها بحوالي 30 مليون دولار. تم ذلك في غضون 10 ثوانٍ. قبل بدء هذه الحركة، كان الاتجاه تقريبًا بلا تذبذب.
لننظر إلى الصورة أدناه، وهي k-line لمدة ثانية واحدة في ذلك الوقت، حيث يمكنك الحصول على مزيد من التفاصيل.

بشكل أساسي، تم الوصول إلى المستوى المطلوب في حوالي 4 ثوانٍ. في الثانية الأولى، ارتفعت الأسعار حوالي نقطتين. هذه عادةً ما تكون نتائج تلك الاستراتيجيات عالية التردد (مدفوعة بالأحداث، الاتجاه العالي التردد، صنع السوق، وما إلى ذلك) أو نتائج الرهانات التي قد تم إعدادها مسبقًا.
لننظر إلى k-line لمدة 4 ساعات لـ BNB. أكبر شمعة صاعدة كانت خلال الفترة التي صدرت فيها الأخبار. نطاق التذبذب 4.05%.

يمكنك أن ترى من مقارنة هذه الكيانات لفترات زمنية مختلفة، أن التذبذب المدفوع بالأخبار (هذه الأخبار كانت حول IEO الجديد من Binance، ARKM) يحدث عادةً في لمح البصر. الزيادة في 4 ساعات لا تختلف كثيرًا عن تلك التي في 10 ثوانٍ، بينما الارتفاع الفعلي لم يستغرق سوى حوالي 4 ثوانٍ. هذه ساحة معركة، تعود لأولئك ذوي الاستراتيجيات عالية التردد المسلحة حتى الأسنان. ومع ذلك، قد تؤثر هذه أيضًا على استراتيجيات المتوسطة والمنخفضة التردد، مما يؤدي إلى مزيد من الانزلاق.
لا أدرس استراتيجيات عالية التردد، لكن بالنسبة للمتوسطة والمنخفضة التردد، ماذا تعني هذه المشكلة؟ أفكر في نقطتين رئيسيتين:
1. بعض انفجارات الاتجاه تحدث فجأة، وفي فترة زمنية قصيرة، لذا لا يمكن إيقاف الاستراتيجية بشكل عشوائي. يجب أن يكون التداول الفعلي في عالم العملات الرقمية متصلًا على مدار الساعة، خاصة في حالة وجود مراكز.
2. يمكن أن يصل انزلاق التداول الفعلي إلى مستوى 2%. انظر إلى k-line لمدة ثانية واحدة أعلاه، إذا كانت إشارة الشراء لديك تعتمد على سعر معين، وكان هذا السعر يظهر في الجزء السفلي من الكيانات الكبيرة، فبغض النظر عن الطريقة، فإن السعر الذي تدخل به سيكون غالبًا قد انزلق بنسبة 2~3%. والأسوأ قد يصل إلى 4%، تلك الطلبات التي تمت عند حافة الشمعة. ومع ذلك، إذا كنت تبيع، فستحصل على أرباح تتجاوز التوقعات. ولكن وفقًا لقانون مورفي، فإن الخبز المتساقط دائمًا ما يسقط على الجانب الذي يحتوي على الزبدة. على المدى الطويل، من المرجح أن يكون هناك المزيد من الانزلاق.
ومع ذلك، فإن الجيد هو أن حدوث هذه الحالة محدود. طالما أن الاستراتيجية سليمة، فإن الانزلاق الكبير بعض الشيء هو مجرد عودة للأرباح، ولا يؤثر على العائدات الإيجابية على المدى الطويل. اعتبرها كأنك تحملت مرة أخرى تآكلًا بسبب التذبذب.
طريقة للتخفيف هي استخدام websocket للحصول على الأسعار الأحدث، حيث تقول الوثيقة إن التحديث يتم كل 250 مللي ثانية، لكن أحيانًا يكون التحديث أسرع، مما قد يسمح بالتفاعل في الوقت المناسب. ميزة أخرى لـ websocket هي أنه لا يشغل تردد API الخاص بالبورصة. سيتم ذكر هذا بمزيد من التفصيل لاحقًا.
2. الحركة عند الوقت المحدد
هذا أمر يواجهه الكثير من استراتيجيات الاتجاه، حيث يتم حساب إشارات الدخول والخروج بناءً على أسعار فتح وإغلاق المراكز. عندما يمر الوقت، يبدأ الجميع في التحرك.
في الأوقات المحددة، وخاصة في مضاعفات 8، لأنه بغض النظر عن استراتيجية التداول الخاصة بك، يجب أن تتقاطع هذه النقاط الثلاث مع وقت مشترك، وقد تتخذ جميع استراتيجيات الأتمتة إجراءات، مما يؤدي إلى إشارات متداخلة.
بالإضافة إلى ذلك، في هذه اللحظة، تحتاج البورصة أيضًا إلى التسوية والتسليم. على الرغم من أن العقود الدائمة لا تحتاج إلى تسليم، إلا أنه يجب حساب رسوم التسليم، وقد تكون هناك عمليات أخرى. في حوالي 6 ثوانٍ بعد الساعة 0/8/16، لا يقوم websocket الخاص بـ Binance بإرسال معلومات k-line، يتوقف!
الأمر الأكثر خطورة هو أن السوق يمكن أن يتناغم، خاصة في ظروف السوق الهابطة، حيث تكون عدوى الذعر أشد. تصبح خوادم البورصة أكثر انشغالًا، ويعطل العديد من العملات الصغيرة المتقلبة، ولا يمكن إدخال الطلبات، وكلها 1001 أخطاء. عندما تذهب لتقديم الطلب بنجاح، قد تكون تلك الطلبات التي تمت عند الحافة هي طلباتك.
لذا، فإن الانزلاق أمر لا يمكن تجنبه، إنه قدر، تقبله، فلا فائدة من تحسين الكود بشكل مفرط. كما ذُكر سابقًا، اعتبرها كأنك قد أوقفت خسارة إضافية.
ومع ذلك، هناك بعض الحيل الصغيرة للمشاركة.
يمكن حساب الإشارات قبل n ثانية من الوقت المحدد، في ذلك الوقت لا يزال هناك ازدحام، لأن معظم الاستراتيجيات الآلية تنتظر حتى ظهور سعر إغلاق k-line. ومع ذلك، فإن هذه الطريقة قد تؤدي إلى إشارات خاطئة، مثل أن السعر قد يعود إلى الوراء، مما يعني أنه لم يكن يجب وجود إشارة، وقد يحدث false positive. هنا، يتعلق الأمر باختيارك، هل ستفعل ذلك أم لا. ومع ذلك، يمكنك إضافة حد معين، بحيث يتم تفعيله فقط إذا تجاوز ذلك، مما يمنع الإشارات المرسلة بشكل خاطئ بسبب تراجع السعر في فترة قصيرة. إن تقليل الانزلاق حتى قليلاً يكون مفيدًا.
أيضًا، استخدام إزاحة الوقت أو طرق إزاحة الكيانات مثل shift k-line، لا ينتج إشارات في الأوقات المحددة، ولا يتداخل مع الآخرين، مما يساعد على تجنب الازدحام بشكل أفضل. بالإضافة إلى ذلك، طرق مثل TWAP وغيرها.
ومع ذلك، كل هذا يحتاج إلى بعض المهارات، مما يزيد من صعوبة كود التداول الفعلي.
التداول الفعلي
عادةً ما تكون كودات التداول الفعلي للاستراتيجيات المتوسطة إلى المنخفضة التردد بسيطة جدًا. نوع واحد فقط من الاستراتيجية لكل نوع، ولا توجد زيادة أو نقصان في المراكز، ولا معلومات متقاطعة مختلطة. لذا، يمكن أن لا تحتاج الكود المحلي إلى الحفاظ على أي حالة، لأن البورصة تسجل كل شيء. سواء كانت هناك مراكز، مقدار الهامش، هل تم تنفيذ الطلبات، وما إلى ذلك. نظرًا لأنه متوسط إلى منخفض التردد، يمكنك دائمًا استعلام معلومات الحساب من البورصة عند الحاجة، وهذا هو الأكثر دقة وفورية. هذه الطريقة تلغي الحاجة إلى تسجيل حالة التداول محليًا باستخدام قواعد بيانات أو ما شابه.
هذه الاستراتيجية البسيطة قابلة للتطبيق، لكن المشكلة هي أنه قد تحدث تراجعات أكبر، حيث لا يوجد تنوع كافٍ، مما يزيد من المخاطر. قد لا يكون هناك حركة في نوع واحد، وقد يحدث تراجع دون عودة، أو قد نواجه ظروفًا متطرفة، مما يؤدي إلى حدوث فجوة كبيرة في منحنى الأموال. إذا كانت الأمور صارمة، فلن تتحمل وسيتعين عليك إيقاف الاستراتيجية، وإذا كانت الأمور أخف، فإن تجربة التداول ستتأثر كثيرًا. انتبه، كل ما ذُكر هنا يعتمد على ظروف مراكز معقولة. وإلا، إذا كانت المراكز خفيفة جدًا، سيكون التراجع صغيرًا، لكن العائدات ستنخفض أيضًا، الأرباح والخسائر تأتي من نفس المصدر، ومن المؤسف أن نفوت الفرص؛ أما إذا كانت المراكز ثقيلة، فهذا خطأ، وسينتهي الأمر بالكارثة عاجلاً أم آجلاً.
ومع ذلك، يُنصح المبتدئين ببدء تشغيل مثل هذه الاستراتيجية في التداول الفعلي. التجربة هي ما يسرع من تحسين مستوى التداول. لكن انتبه، يجب أن تكون المراكز خفيفة، ويجب أن تكون الرافعة منخفضة، من الأفضل عدم استخدام الرافعة، حتى تتمكن من الاستمرار لفترة أطول.
إذا كنت تريد أن تكون أكثر احترافية، وتقليل مخاطر النقاط الفردية، وجعل منحنى الأموال أكثر سلاسة، وتقليل القلق أثناء التداول الفعلي (كما ذُكر سابقًا، تحت ظروف مراكز معقولة، هذا الأمر مهم جدًا، لأنه يجعل من الأسهل الاستمرار في تشغيل الاستراتيجية حتى تأتي الفرصة)، يكون النمط عمومًا متعدد الأنواع، متعدد الاستراتيجيات، ومتعدد المعلمات، بالإضافة إلى زيادة ونقص المراكز. ليس بالضرورة أن يكون ذلك في زيادة أو نقصان على استراتيجية واحدة، بل يمكن أن يكون تأثير زيادة ونقص المراكز بواسطة استراتيجيات فرعية متعددة. ومع ذلك، في هذه الحالة، ستصبح الاستراتيجيات مزدحمة، وإذا كنت تريد تقليل انزلاق فتح وإغلاق المراكز، فستزداد تعقيد الكود بشكل كبير.
دعني أتناول الآن المشكلات التي تأتي من نمط متعدد الأنواع، استراتيجيات متعددة، ومعلمات متعددة.
نقطة صعبة
1. قيود تردد API
التحدي الأول للاستراتيجيات المتعددة هو قيود تردد API. كلما زاد عدد الأنواع، وزادت الاستراتيجيات، يجب أن تتواصل باستمرار مع البورصة للحصول على الأسعار اللحظية، والمراكز، وطلبات الشراء. كما ذُكر سابقًا، إذا كان تردد الاستعلام منخفضًا وبطيئًا، فقد لا تحصل على السعر الأحدث، وبالتالي قد يكون هناك انزلاق كبير.
موارد خوادم البورصات محدودة، مما يؤدي إلى قيود تردد الوصول إلى API. القيود في Binance هي 2400 طلب في الدقيقة، ثم هناك قيود لمدة 10 ثوانٍ، بالإضافة إلى أنماط أخرى تُكتشف بها سلوكيات غير مرغوبة. بصفة عامة، إذا كانت الطلبات كثيرة جدًا، فهذا غير مقبول، وما هو غير مقبول تحدده البورصة، وهذا ما تفهمه، لا يوجد نمط ثابت.
على الرغم من أن الحد هو 2400، إلا أنني قمت باختبار تزامني بشكل عشوائي، فإذا كان الطلبات على k-line، فإن أقصر عدد هو 99 (وزن API هو 1)، وطلب 75 عملة معًا قد يؤدي إلى حظرك لبضع دقائق. لذا، لا تتحدى الحدود بسهولة.
إذا انتهكت، ستتلقى خطأ 429 أو 418، وسيتم حظر IP الخاص بك لبضع دقائق إلى أيام. في هذه الحالة، إذا كانت لديك مراكز، ستكون في وضع سيء (يمكن تقديم الطلبات، خاصة لإغلاق المراكز الحالية دون قيود، لكنك لن تحصل على معلومات الأسعار، إلا إذا كان لديك websocket)
حل هذه المشكلة هو استخدام websocket للحصول على البيانات، حيث تقوم البورصة بإرسال البيانات مباشرة، مما يوفر الوقت ولا يشغل API. يمكن أن يقلل من بعض الانزلاقات. المشكلة التي تترتب على ذلك هي أنك ستحتاج إلى صيانة مجموعة أخرى تعتمد على websocket لمركز السوق. هذا يجعل كود التداول الفعلي أكثر تعقيدًا. يجب أن تكون متصلًا على مدار 24 ساعة بدون انقطاع، وإذا انقطع الاتصال، فيجب إعادة الاتصال تلقائيًا في الوقت المناسب.
2. حالة الاستراتيجية
كما ذُكر سابقًا، مع زيادة عدد الاستراتيجيات وتعقيدها، يجب تسجيل حالة كل استراتيجية، وإلا فلن تعرف البورصة أي استراتيجية فتحت المراكز، وكم منها. وأيضًا، إذا كنت ترغب في إعادة النظر، ستحتاج إلى تسجيل المزيد من البيانات.
في هذه الحالة، يجب إدخال قاعدة بيانات (بالطبع، يمكنك استخدام ملفات للتسجيل، فهي نفس الفكرة).
إدخال قاعدة البيانات يجلب معه مشكلات قاعدة البيانات. ولكن هذا مشابه لتطوير البرمجيات في صناعات أخرى، لا يوجد شيء جديد. خاصة في صناعة التجارة الإلكترونية، لأن الأمور تتعلق برصيد الأموال، وإدارة الطلبات، وما إلى ذلك، يمكن للذين ليس لديهم خبرة الرجوع إلى كتب ومقالات من هذا النوع.
يجب الانتباه إلى أن العديد من الخطوات يجب أن تحقق عمليات ذرية مشابهة لتعاملات قاعدة البيانات، بمعنى أنه يجب أن تنجح مجموعة العمليات كلها، وإذا فشلت خطوة واحدة، فلا يجب القيام بشيء، والرجوع إلى الحالة الأولية.
ثم، نظرًا لأن هذه هي معاملات حقيقية بأموال حقيقية، فمن الأفضل استخدام أعلى مستوى من مستويات العزل في قاعدة البيانات، أي التسلسل Serializable، لتجنب جميع أنواع القراءة القذرة، القراءة غير المتكررة، والقراءة الوهمية. لا تستخدم أي تزامن، أو تعدد خيوط، أو حتى قراءة وكتابة المعلومات الأساسية في قاعدة البيانات بشكل غير متزامن، جميع العمليات تكتمل في خيط واحد. لتحقيق عمليات متساوية.
لا تتحدى البرمجة المتزامنة بسهولة. إذا ظهرت مشكلة في هذا النظام، لن تعرف من أين تبدأ، فهي من أصعب الأخطاء التي يمكن اكتشافها في تطوير البرمجيات. الذين يمكنهم إكمال هذا النوع من العمل بشكل نظيف هم من يحققون رواتب أعلى من 50 ألف.
الأشياء التي أفكر بها حول استخدام التعددية أو غير المتزامنة (التعددية وغير المتزامنة، يُفضل استخدام التعددية، لأن غير المتزامنة في بايثون مثل العدوى، بمجرد استخدامها، يجب استخدامها في جميع سلاسل الاستدعاء) يمكن أن تكون مفيدة في إرسال إشارات تنبيه عبر DingTalk. نظرًا لأن خدمة DingTalk في الصين، بينما خوادم البورصات في الخارج، يجب أن تكون خادم الكود الخاص بك في الخارج، بالقرب من البورصة، لذا عند إرسال DingTalk، قد تحتاج أحيانًا إلى الانتظار لعدة ثوانٍ للعودة، وأحيانًا قد تتعطل حتى عشر ثوانٍ.
أخيرًا
في الواقع، لا يهم إذا لم تتمكن من القيام بالعديد من الأمور. طالما أنك مستعد لتحمل انزلاق أكبر، مما يعني أنك قد تخسر حوالي 1/5 أو أكثر من الأرباح. الأهم هو الاستراتيجية، والعائدات الإيجابية، والقدرة على التشغيل المستمر.
بشكل عام، تكون الأولوية القصوى للتداول الفعلي هي تنفيذ منطق الاستراتيجية المحددة بشكل مستمر وثابت. الانزلاق جزء من التداول، يجب تقليله قدر الإمكان، طالما أنه لا يؤذي.
استراتيجية ممتازة، لكن تنفيذها في التداول الفعلي قد يكون بمستوى ثانٍ أو ثالث، وهذا ليس مشكلة كبيرة. ولكن إذا كانت الاستراتيجية ضعيفة، فإن كود التنفيذ المثالي لن يفيد، وستظل تخسر. لذا، مجرد كتابة الكود بشكل جيد ليس كافيًا في التداول الكمي. الاستراتيجية الجيدة، وكود التنفيذ القوي، هو الأفضل. ولكن في ظل محدودية الوقت، يجب أن تركز جهدك بشكل أكبر على الاستراتيجية.
يتبع