تجارت الگوریتمی با پایتون

  • 2022-10-10

برای بازار آینده یک سیستم تجارت الگوریتمی بسازید

رشد کمی

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

نصب و راه اندازی

با فرض اینکه پایتون را به درستی نصب کرده اید و متغیرهای محیط مناسب را ایجاد کرده اید ، برای نصب API Python کارگزار تعاملی می توانید در خط فرمان خود با مدیر PIP Package تماس بگیرید.

این بسته IBAPI را به نسخه پیش فرض پایتون شما نصب می کند. اگر چندین نسخه از Python (شاید حتی Python2) داشته باشید ممکن است بخواهید بسته را برای Python3 نصب کنید.

توجه به این نکته حائز اهمیت است که اگر بسته را با موفقیت نصب کنید و هنوز هم یک خطای ModulenOtFound دریافت کنید ، به احتمال زیاد اسکریپت Python خود را با نسخه دیگری از Python اجرا می کنید که API را نصب کرده اید. اگر می خواهید کد منبع را بارگیری کنید ، یا به پیاده سازی های API برای Java ، C ++ و سایر موارد نگاه کنید می توانید آنها را در اینجا بارگیری کنید: https://www. interactivebrokers. com/en/index. php؟f=5041.

در مرحله بعد ما به یک دروازه برای درخواست و دریافت داده از کارگزاران تعاملی که من از آن به عنوان سرور استفاده می کنم ، نیاز داریم. IB Gateway را از لینک بالا (پایین صفحه) بارگیری کنید و وقتی وارد سیستم می شوید ، رابط کاربری را مشاهده خواهید کرد که به نظر می رسد ...

برای پیکربندی → تنظیمات → API settings حرکت کنید و می توانید تنظیمات API (میزبان ، درگاه ، فقط خواندنی و غیره را تنظیم کنید) پیکربندی کنید.

اتصال

پس از نصب موفقیت آمیز API Python کارگزار تعاملی ، زمان اجرای آن است. به طور شهودی این API را می توان به دو کانال ارتباطی تقسیم کرد ، یکی خواندن از دیگری به سرور ...

گرفتار

کلاس Eclient وظیفه ارسال درخواست به سرور را بر عهده دارد. این درخواست ها در صف نگه داشته می شوند تا زمانی که صف با عملکرد Run () پاک شود. این کلاس یک EWrapper را به عنوان یک پارامتر می گیرد زیرا نمونه ای از Ewrapper جایی است که سرور با تماس تلفنی پاسخ می دهد.

اروپر

کلاس EWRAPPER وظیفه دریافت داده ها در توابع پاسخ به تماس را دارد.

چند رشته

برای ساختن یک سیستم تجارت الگوریتمی باید چندین فرآیند به طور همزمان اتفاق بیفتد ، به همین دلیل ما باید در موضوع خود به Eclient ادامه دهیم ، بنابراین خواندن و نوشتن می تواند به صورت ناهمزمان اتفاق بیفتد. اگر می خواهید در مورد multithreading اطلاعات بیشتری کسب کنید ، من یک راهنمای شروع سریع برای چند رشته خواندن در پایتون برای امور مالی نوشتم.

کلاس اصلی TradingApp

برای ایجاد امکان خواندن و نوشتن به سرور ، دو زیر کلاس از Eclient و Ewrapper ایجاد کنید. من زیر کلاس Ewrapper را به عنوان ApicOntroller و Eclient به عنوان Apisocket اعلام می کنم. سپس کلاس اصلی یک زیر کلاس از این دو پیاده سازی خواهد بود.

بیایید آنچه در اینجا اتفاق می افتد را تجزیه کنیم. همانطور که قبل از کلاس Eclient مسئولیت ارسال درخواست به سرور را بر عهده دارد و سرور به کلاس EWRAPPER پاسخ می دهد. با ساخت زیر کلاسهای apisocket و apicontroller می توانیم توابع ابرقهرمان را نادیده بگیریم و پیاده سازی های سفارشی را بنویسیم. در این مثال می بینید که ApicOntroller دارای دو تماس تلفنی است ، یکی برای خطاها و دیگری برای اتصال. سرور فقط در پاسخ به درخواستی که به سرور ارائه شده است ، با توابع ISwrapper تماس می گیرد. برای ایجاد یک درخواست اتصال در کلاس اصلی ، ما خود را به خود (Apisocket) ارجاع می دهیم و با پارامترهای میزبان ، پورت و ClientID ارتباط برقرار می کنیم. این درخواست را در صف eclient قرار می دهد ، اما همانطور که گفتم برای ایجاد یک سیستم الگوریتمی امکان خواندن و نوشتن همزمان باید وجود داشته باشد ، بنابراین ما از پاکسازی صف درخواست (با تهیه درخواست ها) در موضوع خود پشتیبانی خواهیم کرد. پس از اجرای نمونه ای از کلاس TradingApp ، پیامی از اتصال موفق به سرور خواهید داشت ، این اتصال برای عمر موضوع Eclient ادامه دارد.

پس از ایجاد موفقیت آمیز اتصال ، از طریق فرم درخواست های مختلف به انواع داده های سرور دسترسی خواهید داشت ، لیست کاملی از درخواست ها را می توان در مستندات آنها یافت.

داده های بازار جریان

اگر علاقه مند به پخش داده های بازار زنده هستید ، باید اشتراک داده های بازار را خریداری کنید که به حداقل حساب 2000 دلار نیاز دارد.

ایجاد قرارداد

یک قرارداد کلاس است که به سرور می گوید چه ابزاری را به تجارت/پخش/تجزیه و تحلیل علاقه مندیم. پارامترهای ورودی بسیار ساده هستند و فقط به امنیت خاص علاقه اشاره می کنند. من همیشه E-Mini NASDAQ-100 را معامله کرده ام و برای این مثال از آن استفاده خواهم کرد.

درخواست داده

برای درخواست جریان داده ، به سادگی درخواست را در زیر درخواست اتصال قرار دهید.

در حال دریافت داده ها

برای دریافت داده ها از Sever ، TickPrice را اضافه کنید و توابع پاسخ به تماس را به ApicOntroller اضافه کنید.

درخواست های تماس تلفنی

انجام تجزیه و تحلیل در جریان داده های زنده نسبتاً ساده است زیرا داده ها می توانند در فواصل در حافظه نهان داده ذخیره شوند یا در داخل ApicOntroller ذخیره شوند. با این حال ، تهیه درخواست سرور از توابع پاسخ به تماس کمی پیچیده است و من می خواهم یک راه حل خلاقانه ارائه دهم.

ایجاد یک کلاس جدید به نام سیگنال (من از این برای قرار دادن سفارشات در توابع پاسخ به تماس استفاده می کنم اما سایر درخواست ها نیز کار می کنند) با پارامترهای Eclient و قرارداد اجازه می دهد تا کلاس اصلی پارامتر کلاس سیگنال به عنوان eclient باشد. سپس این کلاس سیگنال یک پارامتر جدید از ApicOntroller است بنابراین کنترل کننده می تواند به خودی خود. signal. function_in_signal یا self. signal. eclient. server_request مستقیماً برای انجام اجرای درخواست سفارشی در کلاس سیگنال یا درخواست های مستقیم مراجعه کند.

برچسب ها

ثبت دیدگاه

مجموع دیدگاهها : 0در انتظار بررسی : 0انتشار یافته : ۰
قوانین ارسال دیدگاه
  • دیدگاه های ارسال شده توسط شما، پس از تایید توسط تیم مدیریت در وب منتشر خواهد شد.
  • پیام هایی که حاوی تهمت یا افترا باشد منتشر نخواهد شد.
  • پیام هایی که به غیر از زبان فارسی یا غیر مرتبط باشد منتشر نخواهد شد.