اتصال Zeromq به Metatrader

ساخت وبلاگ

ما یک راه حل با استفاده از ZEROMQ (یک منبع باز ، کتابخانه پیام رسانی ناهمزمان و چارچوب همزمانی) برای ساختن یک پل گسترده و با کارایی بالا بین زبانهای برنامه نویسی خارجی (غیر MQL) و متاترادر ارائه می دهیم.

دلایل توسعه

  1. فقدان ادبیات جامع و در دسترس عموم در مورد این موضوع در وب.
  2. معامله گران با در نظر گرفتن گزینه های دیگر برای روبات های برنامه نویسی در Metatrader به طور سنتی به راه حل های مبتنی بر Winsock/WinAPI اعتماد کرده اند. این موارد اغلب با به روزرسانی های Microsoft ™ و Metaquotes revision نیاز به تجدید نظر دارند و از این رو برای حفظ آن دست و پا گیر هستند.
  3. گزینه های دیگر برای Zeromq شامل لوله های نامگذاری شده و رویکردهایی است که عملکرد وابسته به سیستم فایل ، پل بین متاترادر و زبانهای خارجی را تشکیل می دهد.

معماری

در این بخش ما پایه و اساس یک سیستم تجاری را ارائه می دهیم:

  1. برای دستیابی به داده های بازار از Metatrader استفاده کنید و اجرای و مدیریت تجارت را انجام دهید
  2. پشتیبانی از استراتژی های تجاری متعدد ، مستقل ، غیر MQL با Metatrader به طور موازی.

اینفوگرافیک: زیرساخت های تجاری با قابلیت Zeromq (با Metatrader)

zeroMQ trading infrastructure

چرا صفر؟

  1. برنامه نویسان را قادر می سازد تا هر کد را به هر روش دیگری به هر کد دیگری وصل کنند.
  2. وابستگی کاربر Metatrader را به فناوری پشتیبانی شده توسط Metatrader فقط از بین می برد (ویژگی ها ، شاخص ها ، سازه های زبان ، کتابخانه ها و غیره)
  3. معامله گران می توانند شاخص ها و استراتژی ها را در C/C#/C ++ ، Python ، R و Java (برای نامگذاری چند مورد) توسعه دهند و از طریق Metatrader به بازار اعزام شوند.
  4. ابزارهای یادگیری ماشین اهرم در پایتون و R برای تجزیه و تحلیل داده های پیچیده و توسعه استراتژی ، در حالی که با Metatrader برای اجرای و مدیریت تجارت ارتباط برقرار می کند.
  5. Zeromq می تواند به عنوان یک لایه حمل و نقل با کارایی بالا در سیستم های تجاری پیشرفته و تجاری استفاده شود که در غیر این صورت اجرای MQL دشوار است.
  6. در صورت لزوم اجزای مختلف استراتژی را می توان به زبانهای مختلف ساخته شد و یکپارچه با یکدیگر در مورد پروتکل های TCP ، فرآیند ، بین فرآیند یا چند مرحله ای صحبت می کنند.
  7. الگوهای ارتباطی چندگانه و عملکرد قطع شده.

Zeromq: زبانهای برنامه نویسی پشتیبانی شده

اگرچه ما در این پست روی MQL در ارتباط با Python & R تمرکز می کنیم ، فرآیند اساسی شرح داده شده در اینجا می تواند به راحتی در سایر زبانهای پشتیبانی شده از Zeromq اجرا شود.

لیست کاملی از اتصالات زبان Zeromq در اینجا موجود است.

برنامه ریزی کنترل جریان

لطفاً توجه داشته باشید که این بخش در نظر گرفته نشده است که یک آموزش دقیق در مورد Zeromq باشد.

با این حال ، درک چند مورد در مورد Zeromq که باعث می شود آن را به ویژه در وظیفه اتصال زبانهای برنامه نویسی خارجی مانند پایتون و R به Metatrader مناسب می کند ، مهم است.

این شبکه از TCP ، بین فرآیند ، فرآیند ، PGM و EPGM پشتیبانی می کند.

ما از نوع حمل و نقل TCP برای اجرای این دفترچه استفاده می کنیم.

ZerOMQ سرورها و مشتریان را قادر می سازد "در صورت تقاضا" به یکدیگر وصل شوند ، به ویژه برای طراحی زیرساخت های تجاری مفید هستند.

علاوه بر پشتیبانی از ارتباطات ناهمزمان و عملکرد قطع ارتباط ، ZerOMQ از چندین الگوی ارتباطی پشتیبانی می کند که امکان انتقال داده های سطح بالاتر را فراهم می کند ، برنامه نویسان را آزاد می کنند تا بیشتر بر روی منطق انتقال تمرکز کنند تا مکانیسم های سطح پایین.

این الگوهای شامل:

  1. درخواست (REQ) / پاسخ (Rep)
  2. انتشار (میخانه) / مشترک شدن (زیر) و ،
  3. فشار (فشار) / کشش (کشش).

برای اجرای در این پست وبلاگ ، ما از الگوهای ارتباطی Pub/Sub Zeromq استفاده خواهیم کرد.

Metatrader "سرور" ما خواهد بود و استراتژی های معاملاتی "مشتری" خواهند بود.

لطفاً توجه داشته باشید که این (MT = سرور ، استراتژی = مشتری) ضروری نیست - شما باید تصمیم بگیرید که در مورد کنترل جریان متناسب با نیازهای خاص شما تصمیم بگیرید.

کد منبع همراه یک راه حل کار برای این الگوی طراحی خاص ارائه می دهد ، اما البته کاربران رایگان می توانند آن را متناسب با نیازهای خود اصلاح کنند.

چندین روش وجود دارد که می توانید به هدف نهایی برسید. با دقت برنامه ریزی کنترل جریان منجر به عملکرد کارآمد می شود.

انتشار (میخانه) / اشتراک (زیر) الگوی

سرور (Metatrader EA) به محض رسیدن ، از یک سوکت TCP از نوع میخانه استفاده می کند تا داده های تیک را برای لیست از پیش تعیین شده از نمادها منتشر کند.

مشتری (استراتژی تجارت ، به عنوان مثال در پایتون) از یک سوکت TCP از نوع زیر استفاده می کند تا در هر تعداد از نمادهایی که توسط سرور Metatrader منتشر می شود ، مشترک شود.

الگوی فشار (فشار) / کشش (کشش)

مشتری (استراتژی تجارت) برای ارسال دستورات معاملاتی به سرور و یک سوکت کشش برای دریافت پاسخ ، از سوکت فشار استفاده می کند.

سرور (Metatrader EA) همچنین از یک سوکت فشار برای ارسال پاسخ های فرمان به مشتری (استراتژی های معاملاتی) استفاده می کند.

الگوی فشار/کشش سرورها و مشتری ها را قادر می سازد تا داده ها را با یکدیگر در صورت تقاضا مبادله کنند ، اما از یک جهت بدون انتظار پاسخ. این البته می تواند بسته به الزامات کنترل جریان برنامه شما ، برای یک الگوی Req/Rep دیگر تعویض شود.

به طور خلاصه ، برای اجرای ارائه شده در این کتابچه راهنما:

مشاور متخصص Metatrader - مؤلفه ها

همانطور که در اینفوگرافیک بالا نشان داده شده است ، Metatrader EA به عنوان سرور فعال شده با Zeromq ما ، با سه ماژول اصلی عمل می کند:

روتر پیام

این امر به EA اجازه می دهد تا دستورات را دریافت کرده و تصدیق را به مشتریان اتصال (استراتژی های معاملاتی) از طریق سوکت فشار ارسال کند.

روتر تمام پیام ها را به تجزیه کننده منتقل می کند.

تجزیه کننده پیام

پیام های دریافت شده توسط این ماژول به اقدامات برای ماژول بعدی (مترجم و مجری) تجزیه می شوند.

مترجم و مجری

این ماژول به معنای واقعی کلمه پیام های تجزیه شده "تفسیر" می کند و اقدامات درخواست شده را بر این اساس انجام می دهد.

اگر مشتری درخواست خرید یا فروش تجارت را دارد ، به عنوان مثال باز می شود. یورو/دلار ، تجارت را به بازار و اطلاع رسانی در مورد موفقیت/عدم موفقیت/بلیط بلیط از طریق سوکت کشش به مشتری می فرستد.

الزامات اجرای

برای بازدید از مخزن GitHub پروژه اینجا را کلیک کنید

سلب مسئولیت مهم:

MQL EA در یک حالت فعال عملکردهای تجارت زنده را دارد ، به این معنی که ارسال و دستکاری سفارشات به/از بازار مجهز است.

بنابراین ، لطفاً اطمینان حاصل کنید که قبل از استفاده از آن در یک حساب پول واقعی ، همه چیز را به طور کامل بررسی کرده اید. تمام کد منبع AS-IS ارائه شده است و کاربران در نتیجه استفاده از آن مسئولیت هر و همه نتایج را بر عهده دارند.

مبانی تجارت فارکس...
ما را در سایت مبانی تجارت فارکس دنبال می کنید

برچسب : نویسنده : سحر دولتشاهی بازدید : 48 تاريخ : شنبه 20 اسفند 1401 ساعت: 16:14