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

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

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

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

الآن يمكنك البدء في تخطيط بنية الروبوت الخاص بك.
بادئ ذي بدء ، نحتاج إلى متغير يقوم بتخزين المعلومات حول الحالة الدقيقة للروبوت في الوقت الحالي. إما شراء أو بيع. يعد المتغير المنطقي أو التعداد خيارًا جيدًا لتخزين هذه المعلومات.
ثم تحتاج إلى تعيين حدود لعمليات البيع والشراء. يتم التعبير عن هذه القيم كنسبة مئوية وتمثل الزيادة أو النقصان في سعر الأصل منذ المعاملة السابقة.
على سبيل المثال ، إذا اشتريت شيئًا بسعر 100 دولار وكان السعر الحالي 102 دولارًا ، فإننا نتعامل مع زيادة بنسبة 2٪ في السعر. إذا تم تعيين الحد الأدنى لعملية البيع على زيادة سعرية قدرها واحد بالمائة ، فسيقوم الروبوت ، برؤية هذه النسبة البالغة 2٪ ، ببيع الأصل ، نظرًا لأنه حقق بالفعل ربحًا يتجاوز قيمة الحد الذي حددناه.
في حالتنا هذه ، ستكون هذه القيم ثوابت. نحتاج إلى 4 قيم من هذا القبيل - 2 لكل حالة بوت.
▍ قيم الحد الأدنى لعملية الشراء (إذا كان الروبوت في حالة البيع)
DIP_THRESHOLD: يقوم الروبوت بإجراء عملية شراء إذا انخفض السعر بقيمة أكبر من القيمة المحددةDIP_THRESHOLD. الأساس المنطقي وراء ذلك هو تنفيذ إستراتيجية شراء منخفضة ، وبيع عالية. بمعنى أن الروبوت سيحاول شراء أصل بسعر مخفض ، متوقعا زيادة في السعر وإمكانية بيع الأصل المربح.UPWARD_TREND_THRESHOLD: يشتري الروبوت أصلًا إذا ارتفع السعر بقيمة أعلى من تلك المحددة بواسطة هذا الثابت. هذه الحركة تتعارض مع فلسفة الشراء عند الانخفاض والبيع عند الارتفاع. والغرض منه هو تحديد الاتجاه الصعودي وعدم تفويت فرصة الشراء قبل أن يرتفع السعر أكثر.
فيما يلي توضيح يمكن أن يساعدك في فهم معنى هذه الثوابت.

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

يوضح هذا الموقف عندما تم إجراء عملية شراء حيث تكون علامة الشراء. بعد ذلك يصل السعر إلى الحد المحدد
PROFIT_THRESHOLDونبيع الأصل بربح. هذه هي الطريقة التي تجني بها الروبوتات المال.
الآن وقد أصبح لدينا فهم عام لكيفية عمل الروبوت ، فقد حان الوقت لإلقاء نظرة على الشفرة الكاذبة.
▍ وظائف مفيدة للعمل مع API
أول شيء سيحتاجه الروبوت هو القدرة على تبادل البيانات مع واجهة برمجة تطبيقات التبادل. نقوم بتنفيذ هذه القدرات باستخدام العديد من الوظائف المساعدة:
FUNCTION getBalances():
DO: GET- API
RETURN:
FUNCTION getMarketPrices():
DO: GET- API
RETURN:
FUNCTION placeSellOrder():
DO:
1. (
, ,
50% )
2. POST- API
SELL
RETURN:
FUNCTION placeBuyOrder():
DO:
1. (
, ,
50% )
2. POST- API
BUY
RETURN:
// ,
//
FUNCTION getOperationDetails():
DO: GET- API
RETURN:
يجب أن يكون الكود أعلاه واضحًا بدون تفسير. ولكن عند تنفيذ هذه الوظيفة ، يجب أن تعرف بالضبط البيانات التي تحتاج إلى نقلها إلى واجهة برمجة التطبيقات عند إجراء طلبات POST التي تبدأ في شراء أو بيع شيء ما.
في كثير من الأحيان ، على سبيل المثال ، عند تداول زوج XAU / USD (الذهب والدولار الأمريكي) ، عند تنفيذ طلب ، يمكنك تحديد كمية الذهب التي تحتاج إلى شرائها أو عدد الدولارات التي تحتاجها للبيع. عند تنفيذ مثل هذه الطلبات ، من المهم جدًا أن نفهم بوضوح معنى الإجراءات التي يتم تنفيذها.
حلقة بوت الرئيسية
الآن بعد أن أعددنا وظائف المساعد ، فلنبدأ في وصف إجراءات الروبوت. أولاً ، نحتاج إلى إنشاء حلقة لا نهاية لها تعمل على فترات منتظمة. لنفترض أننا نريد أن يحاول الروبوت إجراء عملية كل 30 ثانية. هذا ما قد تبدو عليه حلقة كهذه:
FUNCTION startBot():
INFINITE LOOP:
attemptToMakeTrade()
sleep(30 seconds)
بعد ذلك ، سنقوم بتكوين المتغيرات والثوابت التي تحدثنا عنها أعلاه ، ونكتب منطق الروبوت الذي يسمح لها باتخاذ القرارات. نتيجة لذلك ، بالإضافة إلى الوظائف المساعدة والحلقة الرئيسية ، سيبدو رمز الروبوت الرئيسي كما يلي:
bool isNextOperationBuy = True
const UPWARD_TREND_THRESHOLD = 1.50
const DIP_THRESHOLD = -2.25
const PROFIT_THRESHOLD = 1.25
const STOP_LOSS_THRESHOLD = -2.00
float lastOpPrice = 100.00
FUNCTION attemptToMakeTrade():
float currentPrice = getMarketPrice()
float percentageDiff = (currentPrice - lastOpPrice)/lastOpPrice*100
IF isNextOperationBuy:
tryToBuy(percentageDiff)
ELSE:
tryToSell(percentageDiff)
FUNCTION tryToBuy(float percentageDiff):
IF percentageDiff >= UPWARD_TREND_THRESHOLD OR percentageDiff <= DIP_THRESHOLD:
lastOpPrice = placeBuyOrder()
isNextOperationBuy = False
FUNCTION tryToSell(float percentageDiff):
IF percentageDiff >= PROFIT_THRESHOLD OR percentageDiff <= STOP_LOSS_THRESHOLD:
lastOpPrice = placeSellOrder()
isNextOperationBuy = True
لاحظ أنه يتم تحديد الحدود في هذا الرمز بشكل عشوائي. يجب عليك اختيار هذه القيم بنفسك ، وفقًا لاستراتيجية التداول الخاصة بك.
بدمج الشفرة أعلاه مع وظائف المساعد ومع حلقة البوت الرئيسية ، والتي يمكن تمثيلها بشيء مثل الوظيفة
main، هذا يعني أن لدينا الآن روبوتًا بسيطًا للغاية مع القدرات الأساسية النموذجية للروبوتات.
في كل تكرار للدورة ، سيتحقق الروبوت من حالته الحالية (شراء أو بيع) وسيحاول إجراء عملية تداول ، باستخدام قيم العتبة التي تم ترميزها في الكود الخاص به عند تحليل الوضع الحالي. بعد ذلك ، إذا اكتملت العملية ، فسيقوم الروبوت بتحديث المعلومات حول حالته الحالية وبيانات حول السعر الذي تم تنفيذ العملية الأخيرة به.
الخطوة 5. تحسين الروبوت

الهيكل الأساسي للبوت جاهز. ولكن ربما يمكننا تحسينه قليلاً بتزويده ببعض الميزات الإضافية.
▍ مجلات
عندما بدأت في إنشاء أحد متغيرات هذا الروبوت ، كان من المهم جدًا بالنسبة لي أن يقوم الروبوت بتسجيل المعلومات حول إجراءاته باستمرار ، وإخراجها إلى الجهاز وإلى ملف سجل منفصل.
يجب أن تكون كل خطوة من خطوات البرنامج مصحوبة تقريبًا بالسجلات التالية:
[BALANCE] USD Balance = 22.15$
[BUY] Bought 0.002 BTC for 22.15 USD
[PRICE] Last Operation Price updated to 11,171.40 (BTC/USD)
[ERROR] Could not perform SELL operation - Insufficient balance
ما يدخل في ملف السجل هو الوقت مختوم. نتيجة لذلك ، إذا اتصلت بالخادم مرة واحدة يوميًا ورأيت ، على سبيل المثال ، رسالة خطأ ، يمكنني معرفة وقت حدوث الخطأ بالضبط وما الذي كان يفعله الروبوت طوال هذا الوقت.
لتجهيز الروبوت بهذه القدرات ، يجب كتابة دالة يمكن تسميتها
createLog. يجب استدعاء هذه الوظيفة في كل خطوة من خطوات حلقة الروبوت الرئيسية. هذا ما قد تبدو عليه هذه الوظيفة:
FUNCTION createLog(string msg):
DO:
1. msg
2. msg ,
▍ تحديد الاتجاهات
الهدف الرئيسي من برنامج الروبوت لدينا هو شراء الأصول بسعر رخيص وبيعها وتحقيق ربح. ولكن في الكود الخاص به هناك ثابتان يرمزان إلى قيمتين عتبة ، والتي تتعارض جزئيًا مع هذا الهدف. هذا
UPWARD_TREND_THRESHOLDو STOP_LOSS_THRESHOLD.
تهدف هذه القيم إلى الحد من الخسائر عن طريق بيع الأصل عند انخفاض السعر وتنظيم شراء الأصل عندما يرتفع السعر. النقطة المهمة هنا هي أنه بمساعدتهم نحاول التنبؤ بالاتجاهات والأسعار ، عندما تظهر ، تتجاوز حدود الاستراتيجية المعتادة ، ولكن يمكن أن تضرنا أو تعطينا المال. كل من ذلك وآخر يوفر بعض الإجراءات من جانبنا.
الطريقة التي يعمل بها تحليل الأسعار الآن تحدنا كثيرًا. إن تحليل الأسعار ، الذي يتم إجراؤه من خلال مقارنة زوج من المؤشرات ، ليس آلية لتحديد الاتجاهات.
لكننا ، لحسن الحظ ، يمكننا ، دون الكثير من المتاعب ، أن نجعل نظام الكشف عن الاتجاه أكثر موثوقية.
نحتاج فقط إلى تنظيم مراقبة قيم الأسعار أكثر من ذي قبل. وقبل ذلك ، قمنا بتخزين معلومات حول مؤشر سعر واحد فقط - حول قيمة الأصل في وقت العملية الأخيرة (
lastOpPrice). على سبيل المثال ، يمكنك تخزين معلومات حول الأسعار لآخر 10 أو 20 تكرارًا لدورة الروبوت ومقارنتها بالسعر الحالي ، وليس فقط lastOpPrice. من المحتمل أن يسمح هذا بتحديد الاتجاهات بشكل أفضل ، حيث إنه باستخدام هذا النهج يمكننا تحديد تقلبات الأسعار على المدى القصير بدلاً من التقلبات التي تحدث على مدى فترة طويلة.
▍ قاعدة بيانات؟
لا يحتاج الروبوت البسيط حقًا إلى قاعدة بيانات. بعد كل شيء ، إنه يعمل بكميات صغيرة جدًا من البيانات ويخزن جميع المعلومات التي يحتاجها في الذاكرة.
ولكن ماذا يحدث إذا ، على سبيل المثال ، توقف الروبوت بشكل غير طبيعي؟ كيف يعرف ، بدون تدخل بشري ، ما المعنى
lastOpPrice؟
من أجل التخلص من الحاجة إلى التدخل اليدوي في كود الروبوت عند إعادة تشغيله ، قد نحتاج إلى بعض قواعد البيانات البسيطة التي يمكننا تخزين بعض المؤشرات فيها مثل
lastOpPrice.
باستخدام هذا الأسلوب ، قد لا يستخدم الروبوت ، عند بدء التشغيل ، القيم التي تم تشفيرها بشكل ثابت في الكود. بدلاً من ذلك ، يصل إلى البيانات المخزنة ويستأنف من حيث توقفت.
اعتمادًا على مدى بساطة "قاعدة البيانات" التي تعتقد أنها يجب أن تكون ، قد تقرر استخدام ملفات .txt أو .json عادية على هذا النحو ، نظرًا لأننا ، على أي حال ، نتحدث عن تخزين مجموعة بيانات محدودة.
▍ لوحة التحكم

إذا كنت ترغب في تنظيم تصور نشاط الروبوت ، بالإضافة إلى إدارته دون تحرير الكود الخاص به ، فقد ترغب في توصيل الروبوت بنوع من لوحة التحكم.
سيتطلب هذا أن يكون لدى الروبوت واجهة برمجة تطبيقات خادم خاصة به لإدارة وظائفه.
هذا النهج ، على سبيل المثال ، يجعل من السهل تغيير العتبات.
هناك العديد من قوالب لوحات المعلومات المتاحة ، مما يعني أنه إذا قررت القيام بشيء كهذا ، فلن تضطر حتى إلى إنشاء واحدة من البداية. ألق نظرة على Start Bootstrap و Creative Tim ، على سبيل المثال .
استراتيجيات الاختبار على البيانات التاريخية
تتيح العديد من البورصات للعملاء الوصول إلى بيانات الأسعار التاريخية. بالإضافة إلى ذلك ، إذا كنت بحاجة إلى هذا النوع من البيانات ، فمن السهل عادةً الحصول عليها.
استخدامها مفيد للغاية لاختبار استراتيجيات التداول قبل تطبيقها فعليًا. يتيح ذلك تشغيل محاكاة باستخدام البيانات التاريخية والأموال المزيفة. يتيح لك ذلك معرفة مدى جودة أداء العتبات ، وإذا لزم الأمر ، قم بتغيير هذه القيم.
معلومات إضافية عن الحدود والمطالبات
هناك بعض الأشياء التي يجب وضعها في الاعتبار عند تقديم الطلبات.
أولاً ، عليك أن تعرف أن هناك نوعين من الأوامر: أوامر الحد وأوامر السوق. إذا كنت لا تعرف أي شيء عن هذا على الإطلاق ، فعليك بالتأكيد قراءة الأدبيات الخاصة. سأشرح هذه الأفكار في بضع كلمات فقط.
أوامر السوق هي أوامر يتم تنفيذها بسعر السوق الحالي. في معظم الحالات ، هذا يعني تنفيذها الفوري.
من ناحية أخرى ، أوامر الحد هي أوامر يتم وضعها للإشارة إلى سعر أدنى من السوق (في حالة أوامر الشراء) ، أو أعلى من السوق (في حالة أوامر البيع). في الوقت نفسه ، ليس هناك ما يضمن تنفيذ هذه الأوامر ، حيث قد لا يصل السعر إلى القيمة المحددة.
تكمن قوة الأوامر المحددة في أنها تسمح ، توقعًا لتحركات السوق ، بوضع أوامر حيث قد يكون السعر في رأي المتداول.
بالإضافة إلى ذلك ، عادةً ما يتم تطبيق عمولات أقل على مثل هذه الطلبات مقارنةً بعمولات السوق. ويرجع ذلك إلى حقيقة أن ما يسمى "رسوم أخذ" يتم تطبيقه عادة على أوامر السوق ، وما يسمى عادة "رسوم صانع" ينطبق على الطلبات المحددة.
يعود سبب تسمية هذه العمولات بهذه الطريقة إلى أن من يضع طلبًا في السوق هو ببساطة "يأخذ" سعر السوق الحالي. والأوامر المحددة خارج أسعار السوق ، فهي تضيف سيولة إلى السوق ، ونتيجة لذلك ، "تخلق سوقًا" ، يكافأ منشئوها بعمولات أقل.
يرجى ملاحظة أن الروبوت الذي نفكر فيه هنا هو الأنسب للعمل مع طلبات السوق.
وفي ختام الحديث حول العمولات ، أود أن أشير إلى أنه عند تحديد القيمة
PROFIT_THRESHOLD، يجب أيضًا أخذ العمولات في الاعتبار.
من أجل تحقيق ربح ، يجب أن يقوم الروبوت أولاً بإجراء عملية شراء ، ثم عملية بيع. هذا يعني أنه سيتم احتساب العمولة مرتين.
نتيجة لذلك ، يحتاج الروبوت إلى التكوين بحيث يغطي الربح المحصل من المبيعات العمولات على الأقل. خلاف ذلك ، سوف يتداول الروبوت بخسارة.
دعونا نفكر في الأمر ، انطلاقًا من افتراض استخدام العمولات التي لا تعتمد على مقدار التطبيق وعلى نوع العملية. لذلك ، فإن عمولة شراء أصل مقابل 100.00 دولار هي 0.50 دولار. إذا تم بيع هذا الأصل مقابل 100.75 دولار أمريكي وتم تحصيل نفس العمولة ، فسيتبين أن إجمالي الربح هو 0.75٪. لكن في الحقيقة نحن هنا نتعامل مع خسارة صافية قدرها 0.25٪.
تخيل الآن أن الروبوت الخاص بك يغلق الصفقات دائمًا بخسارة صافية. في مثل هذه الحالة ، يمكنك أن تخسر الكثير من المال بسرعة.
النتيجة
كان هدفي الرئيسي هو الكشف عن المفاهيم التي تحتاج إلى معرفتها عند تطوير روبوتات التداول. حاولت وصف كل شيء بطريقة تجعله مفهومًا حتى لأولئك الذين لم يتداولوا في البورصة من قبل. في الوقت نفسه ، لم أربط السرد بأي لغة برمجة محددة.
لقد افترضت أن قراء هذه المادة على دراية بكيفية عمل طلبات HTTP باستخدام لغة البرمجة التي يختارونها. لذلك لم أخوض في تفاصيل البرمجة وركزت على أشياء أخرى.
لقد أخبرتك بكل ما أريده بشأن تطوير روبوتات التداول. نأمل أن تتمكن الآن من إنشاء روبوت خاص بك.
هل تستخدم روبوتات التداول؟
