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

هناك وسيط روسي - بنك تينكوف. الآن هذه هي المشكلة: لا يدعم الوسيط أوامر جني الأرباح ووقف الخسارة. على الإطلاق. إذا كنت تريد أن تشعر بمزيد من الراحة أثناء التداول ، فأنت بحاجة إلى بعض الحلول لهذا الموقف ، حتى يقوم مطورو Tinkoff Bank أخيرًا بإصدار هذه الطلبات كميزة قاتلة. في المقالة ، سوف أريكم حلك.
التحديث: 2019-03-22 ، نشر الوسيط منصة 3.0.0 (تحديث رئيسي) في Google Play. ميزات التغيير تأخذ أوامر الربح / وقف الخسارة

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

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

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

الحل الخاص بي بسيط للغاية:

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

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

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

2. كان أول أصل لي هو سهم أجنبي ، ويمكن شراء أو بيع الأسهم الأجنبية فقط في بورصة سانت بطرسبرغ. كان الاندفاع الأول لتحليل موقع تبادل SPB .

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

بدلاً من ذلك ، قررت أن أضيف موقع tradeview.com كمصدر بيانات آخر. ليست هناك حاجة إلى تحليل الكثير من الصفحات للعثور على الأسهم الخاصة بك ، لأن كل أصل له صفحة خاصة به ، مثل هذه الصفحة:
www.tradingview.com/symbols/NASDAQ-TSLA

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

بالنسبة لهذه المشكلة ، أعرف ثلاثة حلول مختلفة:

PyQT ، السيلينيوم (webdriver) وملحق طلبات HTML. لأن لدي بالفعل وحدة طلبات في مشروعي ، فقد قررت استخدام طلبات HTML.

لخيبة أمل قوية لي ، لم يكن مستقرًا جدًا ، حتى وجدت بعض القرائن على StackOverFlow وكذا.

session = HTMLSession() r = session.get(url) my = r.html.render(timeout=30) selector = 'span.tv-symbol-header-quote__value.tv-symbol-header-quote__value--large.js-symbol-last' price = r.html.find(selector)[0].text r.close() session.close() 

انتبه إلى المهلة ، وكذلك على كل من المكالمات () القريبة. معظم الأمثلة تفتقر إلى هذه التفاصيل ، وقد تنشأ بعض المشاكل.

3. الآن ، عندما نزّلنا صفحات تحتوي على بيانات JS ، قمنا بتحليلها وتقررنا ، ما إذا كنا بحاجة إلى إرسال إشعار ، لا يوجد سوى سؤال: "كيف يمكننا إرسال إشعار؟". في حالتي ، يقدم sms.ru واجهة برمجة تطبيقات ملائمة و 5 رسائل SMS مجانية يوميًا. الاشتراك على بوابة الرسائل القصيرة. إنشاء مفتاح API. المفتاح شيء مثل هذا:

 24A41EA5-EEEE-CCCC-5555-094143C2EDDD 

إرسال وظيفة SMS من إصدار سابق من الحل الخاص بي:

 def send_message(mymessage): sms_url = 'https://sms.ru/sms/send?api_id=key&to=number&msg=message&json=1' sms_url = sms_url.replace('key', mykey) sms_url = sms_url.replace('number', mynumber) sms_url = sms_url.replace('message', mymessage) sms_response = requests.get(sms_url) 

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

أضفت عداد الرسائل القصيرة ، والذي يتحقق البرنامج النصي قبل استدعاء send_message.

  global sms_counter sms_counter = sms_counter + 1 

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

حلي يعمل الآن ، يمكنك تنزيله من GitHub .

بالنسبة للمستخدمين ، الذين لا يعرفون كيفية التعامل مع البرامج النصية Python ، أقدم حلًا معبأًا لنظام التشغيل Windows (بإذن من PyInstaller).

اليوم:

  1. تحليل وقت التاريخ لمسح عدادات SMS بدلاً من إعادة تشغيل البرنامج النصي ؛
  2. الآن هو تطبيق عديم الجنسية ، أريد إضافة قاعدة بيانات ؛
  3. بعد رقم 2 ، سيكون من الجيد تتبع زيادة كبيرة أو خفض سعر الأصل (بالنسبة إلى سعر إغلاق يوم التداول السابق) ؛
  4. قم بتوسيع مسارات الاتصالات (Telegram و Viber والمكالمات الصوتية) ومقدمي الخدمات (لأغراض الموثوقية أرغب في إضافة smsc.ru - بوابة SMS ، لأن sms.ru عالق في بعض الأحيان ولا يُرجع sms_response ، على الرغم من إرسال الرسائل القصيرة).

Source: https://habr.com/ru/post/ar443434/


All Articles