نحوه ایجاد یک سیستم معاملاتی کاملاً خودکار مبتنی بر هوش مصنوعی با پایتون

  • 2022-01-16

پروژه پایان به انتها: داده ها را دریافت کنید، مدل را آموزش دهید، سفارش دهید، مطلع شوید

چند هفته پیش با یکی از دوستانم چت می‌کردم، نقاب‌ها روی دست، فاصله اجتماعی، چیزهای معمولی. او به من می گفت که چگونه تلاش می کند، و من از برنامه کارگزاری که استفاده می کرد، سم زدایی را نقل قول می کنم. از او در مورد معنای کلمه سم زدایی در این زمینه خاص پرسیدم، نگران بودم که ممکن است خراب شود، اما نه: او به من گفت که دائماً در حال معامله است. او گفت: «اگر سهام خاصی برای بیش از یک ساعت یا بیشتر بالا رفته باشد و من از آستانه سود 1 درصد فراتر رفته باشم، می فروشم، از جمله قوانین شخصی دیگری که از آن پیروی کرده ام». با کنار گذاشتن جنبه شبه علمی خفیف آن قوانین، منظور او از سم زدایی را فهمیدم: پیروی از آنها به معنای بررسی نجومی تلفن همراه با تعداد دفعات زیادی بود.

بنابراین من شروع به تعجب کردم: آیا می توان مجموعه قوانینی را که این مرد در ذهن دارد خودکار کرد؟و در واقع - آیا می‌توان مجموعه‌ای از قوانین منطقی‌تر را خودکار کرد، بنابراین به سیستم اجازه می‌دهم معاملات را برای من انجام دهد؟از آنجایی که شما در حال خواندن این مطلب هستید، فرض می‌کنم که تحت عنوان گیر افتاده‌اید، بنابراین احتمالاً قبلاً حدس زده‌اید که پاسخ مثبت است. بیایید در مورد آن توضیح دهیم، اما اول از همه: زمان طلاست و من نمی‌خواهم کسی را طعمه بزنم. این کاری است که ما می خواهیم انجام دهیم:

  1. برخی از داده های قیمت سهام را در زمان واقعی و دانه ای دریافت کنید: در حالت ایده آل، در فواصل یک دقیقه ای. هر چه ثروتمندتر بهتر – ما از یاهو استفاده خواهیم کرد! امور مالی برای آن، جزئیات بیشتر را دنبال کنید.
  2. به‌جای مجموعه‌ای از قوانین شخصی، می‌خواهیم طعم هوش مصنوعی را به سیستم اضافه کنیم. افشای کامل: من به هیچ وجه در تجزیه و تحلیل سری های زمانی متخصص نیستم، در حال حاضر آموزش های زیادی در مورد نحوه آموزش شبکه های عصبی برای تجارت وجود دارد و من واقعاً نمی خواهم در یک سیستم اسباب بازی مانند این مهندسی بیش از حد کنم، پس بیاییدساده نگه دارید: یک مدل بسیار ابتدایی ARIMA در حال حاضر این کار را انجام می دهد.
  3. در این مرحله ما داده ها و پیش بینی های حاصل از الگوریتم را خواهیم داشت، بنابراین باید بتوانیم تصمیم بگیریم که آیا بفروشیم، بخریم یا نگه داریم. ما باید با کارگزار خود ارتباط برقرار کنیم تا عملاً عمل کنیم. ما قصد داریم از RobinHood و Alpaca استفاده کنیم.
  4. تقریباً همین است - سیستم تمام شده است. آخرین چیزی که نیاز داریم این است که آن را در جایی مستقر کنیم، در مورد ما AWS، و بر فعالیت نظارت کنیم. من انتخاب کرده ام که هر بار که یک عمل توسط سیستم من انجام می شود، یک پیام تلگرام به یک گروه ارسال کنم.

و به چه چیزی نیاز داریم؟

    3. 6 با چند کتابخانه.
  • یک حساب AWS با حقوق سرپرست، برای ذخیره سازی و استقرار.
  • Node. js، فقط برای راه اندازی چارچوب بدون سرور برای استقرار.
  • یک اکانت تلگرام، برای نظارت.

همه چیزهایی که من کدنویسی کرده ام اینجا موجود است. باشه! بنابراین، بدون بحث بیشتر، به سراغ قسمت اول می رویم: دریافت داده ها.

گرفتن داده ها

به دست آوردن داده ها آسان نیست. چند سال پیش یک یاهو رسمی وجود داشت! Finance API، و همچنین جایگزین‌هایی مانند Google Finance – متأسفانه، هر دو سال‌هاست که متوقف شده‌اند. اما نگران نباشید، هنوز جایگزین های زیادی در بازار وجود دارد. الزامات شخصی من این بود:

  • رایگان: برای یک سیستم تولید، من قطعاً این نقطه را به گزینه های ارزان قیمت تغییر می دهم، اما برای یک سیستم اسباب بازی، یا اثبات مفهوم، هر چه می خواهید نامش را بگذارید، آن را رایگان می خواهم.
  • نرخ حد بالا: در حالت ایده آل هیچ محدودیتی وجود ندارد، اما هر چیزی که بیش از 500 ضربه در دقیقه باشد، بیش از حد کافی است.
  • داده های بلادرنگ: برخی از API ها داده ها را با کمی تأخیر، مثلاً 15 دقیقه، ارائه می دهند. من معامله واقعی را می خواهم - نزدیک ترین چیزی که می توانم به قیمت لحظه ای سهام برسم.
  • سهولت استفاده: باز هم - این فقط یک POC است. من ساده ترین را می خواهم.

با در نظر گرفتن این لیست، من به سراغ yfinance رفتم - جایگزین غیر رسمی API قدیمی Yahoo Finance. به خاطر داشته باشید که برای یک سیستم واقعی، و بر اساس لیست عالی ارائه شده توسط پاتریک کالینز، من قطعا API Alpha Vantage را انتخاب می کنم - اما اجازه دهید فعلا آن را ساده نگه داریم.

کتابخانه yfinance توسط Ran Aroussi برای دسترسی به Yahoo! اطلاعات مالی زمانی که API رسمی بسته شد. نقل قول از مخزن GitHub،

از زمانی که Yahoo! مالی API داده‌های تاریخی خود را از کار انداخت، بسیاری از برنامه‌هایی که برای توقف کار به آن متکی بودند.

هدف yfinance حل این مشکل با ارائه روشی قابل اعتماد، رشته ای و پایتونیک برای دانلود داده های بازار تاریخی از یاهو است! دارایی، مالیه، سرمایه گذاری.

شیرین، به اندازه کافی برای من خوب است. چگونه کار می کند؟ابتدا باید آن را نصب کنیم:

و سپس می توانیم با استفاده از شی Ticker به همه چیز دسترسی پیدا کنیم:

این روش بسیار سریع است، به طور متوسط کمی بالاتر از 0. 005 ثانیه است و اطلاعات زیادی را در مورد سهام برمی گرداند. به عنوان مثال، google. info شامل 123 فیلد، از جمله موارد زیر است:

اطلاعات بیشتری از طریق چندین روش در دسترس است: سود سهام ، تقسیم ، تعادل_ صفحه یا درآمد در بین دیگران. بسیاری از این روش ها داده ها را در یک شیء DataFrame Pandas باز می گردانند ، بنابراین ما باید کمی با آن بازی کنیم تا هر آنچه را که می خواهیم بدست آوریم. در حال حاضر من فقط به اطلاعات مربوط به قیمت سهام در طول زمان نیاز دارم. روش تاریخ بهترین روش برای این منظور است. ما می توانیم هم دوره یا تاریخ فاصله و هم فرکانس داده ها را به یک دقیقه انتخاب کنیم - توجه داشته باشید که اطلاعات داخلی فقط درصورتی در صورتی در دسترس استدر هر درخواست واگذار شود. داده های منتقل شده آخرین ورودی با فاصله 1M به شرح زیر است:

ما می توانیم ببینیم که چگونه توسط DateTime نمایه می شود و هر ورودی دارای هفت ویژگی است: چهار نقطه ثابت از قیمت سهام در آن دقیقه (باز ، بالا ، پایین و نزدیک) به علاوه حجم ، سود سهام و تقسیم سهام. من می خواهم فقط از پایین استفاده کنم ، بنابراین اجازه دهید این داده ها را حفظ کنیم:

سرانجام ، از آنجا که ما فقط برای آخرین روز از داده ها استفاده می کنیم ، اجازه می دهیم DataFrame را دوباره حذف کنیم تا تاریخ و قطعات منطقه زمانی را حذف کرده و فقط زمان یک را حفظ کنیم:

خوب به نظر می رسد! ما در حال حاضر می دانیم که چگونه آخرین اطلاعات را از YFInance بدست آوریم - بعداً الگوریتم خود را با این کار تغذیه خواهیم کرد. اما برای این کار ، ما به یک الگوریتم برای تغذیه نیاز داریم: بیایید برای قسمت بعدی برویم.

اضافه کردن هوش مصنوعی

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

ابتدا بیایید DataFrame را به قطار و تست تقسیم کنیم ، بنابراین می توانیم از مجموعه آزمایش برای اعتبارسنجی نتایج مدل ساختگی استفاده کنیم - من قصد دارم 10 ٪ آخر داده ها را به عنوان مجموعه آزمون نگه دارم:

اگر آن را ترسیم کنیم ، دریافت می کنیم:

حالا بیایید مدل را با داده های آموزش متناسب کنیم و پیش بینی کنیم. توجه داشته باشید که HyperParameters مدل ثابت است در حالی که در دنیای واقعی شما باید از اعتبار سنجی متقاطع استفاده کنید تا موارد مطلوب را بدست آورید-این آموزش عالی را در مورد نحوه جستجوی شبکه Arima Hyperparameters با پایتون بررسی کنید. من از پیکربندی 5 ، 0 ، 1 استفاده می کنم و برای لحظه ای بلافاصله پس از پایان داده های آموزش پیش بینی می کنم:

بیایید ببینیم مدل ساختگی ما چقدر خوب عمل کرده است:

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

اتصال به کارگزار

همانطور که احتمالاً حدس زده اید ، این بخش به کارگزار مورد استفاده شما بستگی دارد. من در اینجا دو کارگزار ، Robinhood و Alpaca را پوشش می دهم. دلیل این است که هر دو آنها:

  • یک API عمومی (رسمی یا نه) در دسترس داشته باشید.
  • کمیسیون ها را برای تجارت شارژ نکنید.

بسته به نوع حساب خود ممکن است محدودیت هایی داشته باشید: به عنوان مثال ، Robinhood فقط 3 معاملات را در طی یک دوره 5 روزه اجازه می دهد اگر مانده حساب شما زیر 25000 دلار باشد. Alpaca درخواست های بسیار بیشتری را به شما امکان پذیر می کند اما هنوز هم در هر کلید API محدودیت 200 درخواست در هر دقیقه دارد.

رابین هود

چندین کتابخانه وجود دارد که API Robinhood را می بندند ، اما متأسفانه ، تا آنجا که می دانم هیچ یک از آنها رسمی نیست. کتابخانه سانکو با 1. 5K ستاره در Github بزرگترین کتاب بود ، اما قطع شده است. Lichamnesia مسیر سانکو را ادامه داده است ، اما تاکنون فقط 99 ستاره دارد. من قصد دارم از کتابخانه Robin_stocks استفاده کنم که در لحظه نوشتن این موضوع کمی بیش از 670 ستاره دارد. بیایید آن را نصب کنیم:

همه اقدامات نیاز به ورود به سیستم ندارند ، اما بیشتر آنها این کار را انجام می دهند ، بنابراین ورود به سیستم قبل از انجام هر کاری دیگر مفید است. Robinhood به MFA نیاز دارد ، بنابراین لازم است آن را تنظیم کنید: به حساب خود بروید ، تأیید هویت دو عامل را روشن کنید و وقتی در مورد برنامه ای که می خواهید استفاده کنید ، "دیگری" را انتخاب کنید. شما با یک کد الفبایی ارائه می شود ، که در کد زیر از آن استفاده خواهید کرد:

خرید یا فروش بسیار آسان است:

اسناد را برای استفاده پیشرفته و نمونه ها بررسی کنید.

الپاکا

برای Alpaca می خواهیم از کتابخانه Alpaca-Trade-API استفاده کنیم که بیش از 700 ستاره در Github دارد. برای نصب:

پس از ورود به حساب خود ، یک شناسه کلید API و یک کلید مخفی دریافت خواهید کرد. هر دو برای ورود به سیستم مورد نیاز هستند:

ارسال سفارشات کمی پیچیده تر از Robinhood است:

خودشه! توجه داشته باشید که ترک اعتبار شما در متن ساده یک کار بسیار بد است - هرچند نگران نباشید ، ما در مرحله بعدی به متغیرهای محیط ، که بسیار ایمن تر است ، تغییر خواهیم داد. اکنون بیایید همه چیز را به ابر مستقر کنیم و آن را رصد کنیم.

استقرار و نظارت

ما قصد داریم همه چیز را در AWS Lambda مستقر کنیم. بدیهی است که این بهترین گزینه برای یک سیستم تولید نخواهد بود ، زیرا Lambda دارای ذخیره سازی نیست و ما می خواهیم مدل آموزش دیده را در جایی ذخیره کنیم ، به عنوان مثال در S3. با این حال ، این کار در حال حاضر انجام خواهد شد - ما Lambda را برای اجرای روزانه برنامه ریزی خواهیم کرد ، هر بار که مدل را با داده های روز جاری آموزش می دهیم. برای اهداف نظارت ، ما یک ربات تلگرام را تنظیم خواهیم کرد که پیامی را برای انجام اقدامات و نتیجه آن ارسال می کند. توجه داشته باشید که AWS Lambda تا حد مشخصی آزاد است ، اما در صورت تمایل به ارسال پیام های زیادی از سهمیه ها آگاه باشید.

اولین چیزی که در لیست کارهای انجام شده ایجاد یک ربات است. من دستورالعمل های رسمی را از تلگرام دنبال کردم:

  • کاربر را در تلگرام جستجو کنید.
  • از دستور \ newbot استفاده کنید و یک نام و نام کاربری را برای ربات خود انتخاب کنید.
  • نشانه را بدست آورید و آن را در جایی ایمن ذخیره کنید ، به زودی به آن احتیاج دارید.

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

این یک پوشه برنامه ریزی شده_TG_BOT با سه پرونده ایجاد می کند: . gitignore ، serverless. yml و handler. py. پرونده بدون سرور استقرار را تعریف می کند: چه ، چه زمانی ، و چگونه قرار است اجرا شود. پرونده Handler شامل کد برای اجرا خواهد بود:

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

اکنون ، ما می خواهیم نحوه اجرای کد را تعریف کنیم. Serverless. yml را باز کنید و بنویسید:

این کد به AWS نوع اجرا را که ما می خواهیم می گوید و نشانه تلگرام را از محیط خودمان تبلیغ می کند ، بنابراین لازم نیست که آن را مستقر کنیم. پس از آن ، ما در حال تعریف Cron برای اجرای کارکرد روزانه در ساعت 21:00 UTC هستیم.

تنها چیزی که باقی مانده است ، دریافت اعتبار AWS و تنظیم آنها ، همراه با نشانه و بقیه متغیرها ، به عنوان متغیرهای محیط قبل از استقرار است. دریافت اعتبار بسیار آسان است:

از کنسول AWS شما:

  • به اعتبار امنیتی من بروید - کاربران - کاربر را اضافه کنید.
  • نام کاربری را انتخاب کنید و دسترسی برنامه نویسی را انتخاب کنید.
  • صفحه بعدی: پیوست سیاستهای موجود را مستقیماً انتخاب کنید - AdministratorAccess.
  • شناسه کلید دسترسی و کلید دسترسی مخفی را کپی کرده و آنها را ذخیره کنید.

خودشه. اکنون ، اجازه دهید اعتبار AWS و نشانه تلگرام را صادر کنیم. یک ترمینال را باز کنید و بنویسید:

بسته های لازم را به صورت محلی نصب کنید و در آخر ، همه چیز را در AWS مستقر کنید:

انجام شد! این ربات هر روز ساعت 21:00 UTC برای ما تجارت می کند و با اقدامی که انجام شده است به ما پیام می دهد. برای اثبات مفهوم بد نیست - اکنون می توانم به دوستم بگویم که او می تواند جلوی چک کردن تلفن خود را برای تجارت متوقف کند :)

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

توجه داشته باشید از ویرایشگران Data Science: در حالی که ما به نویسندگان مستقل اجازه می دهیم مقالات را مطابق با قوانین و دستورالعمل های خود منتشر کنند ، ما سهم هر نویسنده را تأیید نمی کنیم. در این حالت ، همانطور که خود نویسنده خاطرنشان می کند: بدون اینکه به دنبال مشاوره حرفه ای باشید ، سعی نکنید تجارت کنید. برای جزئیات بیشتر به شرایط خواننده ما مراجعه کنید.

ثبت دیدگاه

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