آموزش

چگونه یک ربات تریدر بسازیم؟

چگونه یک ربات تریدر بسازیم؟

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

از این گذشته شما خودتان باید بتوانید پروژه را به صورت کامل کد بزنید. در این مقاله تمام مواردی که برای ساخت یک ربات تریدر نیاز است بدانید را خواهید دید. (از مبادله تا استراتژی یک تجارت ساده)‌

۱. یک زبان برنامه نویسی انتخاب کنید

اولین قدم در ساخت این پروژه این است که یک زبان برنامه نویسی انتخاب کنید. این موضوع کاملا بستگی به شما دارد و می توانید با هر زبانی که راحت هستید شروع کنید. البته پیشنهاد من این است که از زبان پایتون استفاده کنید چون اگر بخواهید از ML در ربات خود استفاده کنید کار راحتی خواهید داشت.

۲. حوزه کار ربات را تعیین کنید

این مرحله معمولا در آموزش های مربوط به ساخت ربات نادیده گرفته می شود. برای کار با ربات باید به صرافی یا بازار دسترسی داشته باشید تا بتوانید دارایی ها را معامله کنید. در واقع این موضوع به اندازه دانستن نحوه برنامه نویسی مهم است. بنابراین، برای این مرحله باید تصمیم بگیرد که می خواهید چه دارایی هایی را معامله کنید (به عنوان مثال سهام،‌ ارزها، رمزارزها و…)

در این مرحله من به شدت رمزارزها را پیشنهاد می کنم. دلیل این حرف این نیست که من طرفدار رمزارزها باشم بلکه به این دلیل است بازار رمزارز ها هر ۲۴ ساعت روز و هر ۷ روز هفته فعال است و ربات می تواند کار کند.

بیشتر دارایی ها در برخی ساعات خاص روز یا حتی برخی روز های خاص هفته امکان معامله و ترید کردن را دارند. به عنوان مثال معمولا بازارهای سهام بین ساعات ۹ تا ۴ باز هستند و در آخر هفته ها نیز فعالیت نمی کنند. یا اینکه بازار فارکس هر ۲۴ ساعت روز فعال است اما در آخر هفته ها امکان فعالیت ندارد.

به این دلایل شما اگر یکی از رمزارزها را انتخاب کنید ربات شما می تواند به صورت همیشگی در حال معامله باشد. اما این موضوع مشکلاتی نیز دارد به عنوان مثال بازار رمزارزها بسیار بی ثبات است،‌ این بدان معنی است که امکان ضرر کردن زیاد نیز وجود دارد اما در این بازار شما می توانید استراتژی های خوبی برای معامله کردن یاد بگیرید.

طبق گقته های بالا اگر تصمیم دارید ربات خود را در زمینه رمزارزها بسازید در این لیست می توانید رمزارزهای مهم با حجم معاملاتی بالا را ببینید.

۳. یک سرور انتخاب کنید

اگر صرافی را یک میدان جنگ در نظر بگیریم شما به یک مکان برای حمل نیروهای خود نیاز دارید. (سعی کنید با این تشبیه احمقانه کنار بیایید!)‌ آنچه که در مورد آن صحبت می کنم یک سرور است. شما برای ارسال درخواست به API صرافی به یک سرور نیاز دارید.

البته در مرحله ساخت و آزمایش ربات بدیهی است که می توانید از کامپیوتر خود به عنوان سرور استفاده کنید (یا هاست رایگان تهیه کنید) اما در مرحله کار ربات که نیاز به کار کردن ۲۴ ساعته ربات است کامپیوتر شما انتخاب مناسبی نیست.
از این رو من دو پیشنهاد دارم:

  • از Raspberry Pi به عنوان سرور استفاده کنید.
  • از Cloud استفاده کنید.

من فکر می کنم اجرای ربات با استفاده از Pi ایده جالبی است. بهتر است آن را امتحان کنید. با این حال بیشتر افراد به یک سرویس میزبانی ابری مانند AWS،‌ Azure یا Digital Ocean متوسل می شوند. اکثر میزبانان خدمات ابری، یک سطح از خدمات خود را به صورت رایگان عرضه می کنند. بنابراین حتی ممکن است بتوانید ربات خود را به صورت رایگان میزبانی کنید.

در مورد سرورها من نمی توانم بیشتر از این راهنمایی کنم چون این کاملا به شما بستگی دارد و برای پروژه کوچکی مثل این نباید زیاد تفاوتی ایجاد کند.

۴. ربات را بسازید

اکنون در حال رسیدن به قسمت جالب این پروژه هستیم. قبل از ورود به این مرحله باید مراحل زیر را گذرانده باشید:

  • در صرافی تایید هویت شده باشید.
  • برای انجام معاملات یک کلید API بگیرید و آن را فعال کنید.
  • تصمیم بگیرید چگونه می خواهید ربات خود را میزبانی کنید.

خب! بریم سراغ اصل مطلب:

یک ربات ساده

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

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

این ربات از آستانه های ثابت خرید و فروش استفاده خواهد کرد. یک ربات باهوش تر ممکن است بتواند آستانه ها را بر اساس شاخص های مختلف خرد کند. اما در ربات ما باید استراتژی و آستانه ها را به صورت دستی تنظیم کرد. این ربات فقط یک جفت BTC/USD را معامله می کند.

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

جریان تصمیم گیری ربات

در اینجا یک نمودار ساده داریم که نمای کلی و نحوه کارکرد ربات را به ما نشان می دهد:

نمودار کارکرد ربات تریدر
نمودار کارکرد ربات تریدر

اینجا می توانیم تعیین کنیم که معماری و طرز عملکرد ربات ما چگونه خواهد بود. اول از همه یه یک متغیر bool برای نمایش وضعیت فعلی ربات استفاده می کنیم. (برای تعیین وضعیت خرید یا فروش ربات) سپس باید آستانه خرید یا فروش را تعیین کنیم. (‌یعنی تعیین درصد افزایش یا کاهش از زمان آخرین فعالیت ربات)

به عنوان مثال فرض کنید یک دارایی را با قیمت ۱۰۰ دلار خریداری کرده ایم و اکنون قیمت آن ۱۰۲ دلار است. اگر در ربات آستانه فروش را روی ۱ درصد تنظیم کرده باشیم چون در اینجا ۲ درصد افزایش قیمت داشته ایم ربات دارایی را می فروشد. (چون این سود ۲ درصدی بالاتر از آستانه تعیین شده است)

آستانه های خرید(اگر ربات در حالت فروش باشد)

  • DIP_THRESHOLD: اگر قیمت دارایی بیش از آستانه تعیین شده کاهش یابد آن را خریداری می کند. در واقع این ایده همان استراتژی «خرید در ارزانترین قیمت و فروش در گرانترین قیمت»‌ است. در واقع شما در جایی که دارایی ارزش آن کم می شود آن را خریداری می کنید و توقع دارید پس از افزایش قیمت آن را بفروشید و سود کنید.
  • UPWARD_TREND_THRESHOLD: اگر قیمت دارایی بیش از حد مجاز افزایش یابد آن را خریداری می کند. این هم مانند حالت قبل است. در واقع هدف آن این است که مشخص کند چه زمانی قیمت ها بالا می روند چون نمی خواهیم هیج فرصتی برای خرید را از دست بدهیم.

تصویر زیر می تواند در فهم این موضوع کمک بیشتری کند:

آستانه های خرید
آستانه های خرید

آستانه های فروش(اگر ربات در حالت خرید باشد)

  • PROFIT_THRESHOLD: اگر از آن زمانی که دارایی را خریداری کرده ایم بیش از حد مجاز افزایش قیمت داشته باشد آن را می فروشد. با فروش در قیمتی بالاتر از آنچه که خریده ایم سود خود را چندین برابر می کنیم.
  • STOP_LOSS_THRESHOLD:‌ در حالت ایده آل وقتی ربات سود می برد فروش را انجام می دهد. با این حال شاید قیمت ها در حال افت شدید باشند و می خواهیم قبل از آنکه خیلی دیر شود از بازار خارج شویم و سپس با قیمت پایین تری بخریم. پس از این آستانه برای فروش با ضرر استفاده می شود،‌ تا از ضررهای بزرگتری جلوگیری کند.

به تصویر زیر دقت کنید:‌

آستانه های فروش
آستانه های فروش

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

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

توابع کمکی API

اولین چیزی که ربات ما نیاز دارد دریافت اطلاعات و داده ها از API صرافی است. تصویر زیر را ببینید:

توابع کمکی API
توابع کمکی API

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

حلقه تکرار ربات تریدر

اکنون که توابع کمکی را داریم می توانیم شروع کنیم و ربات خود را بسازیم. اولین چیزی که نیاز داریم یک حلقه بی نهایت با مقدار کمی زمان خواب است. بیایید تعیین کنیم که ربات در هر ۳۰ ثانیه یک عمل انجام دهد. شبه کد این عمل را می توانید در تصویر زیر ببینید.

kaliboys loop - چگونه یک ربات تریدر بسازیم؟

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

شبه کد ربات
شبه کد ربات

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

۵. توسعه ربات تریدر

معماری کلی ربات آماده است. اما ممکن است موارد ضروری دیگر را بخواهید به آن اضافه کنید و ربات را توسعه دهید.

لاگ ها

وقتی برای اولین بار این چنین رباتی را ساختم چیزی که خیلی برای من مهم بود ثبت و ذخیره اطلاعات مربوط به ربات بود. (چه در ترمینال چه در یک پرونده جداگانه) برای مثال نمونه زیر را ببینید:

[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

ربات هر گزارشی را که ذخیره می کند باید دارای یک تاریخ و زمان ثبت باشد. به عنوان مثال اگر پس از یک روز به سرور ربات برگشتید و خطایی را دیدید بتوانید زمان دقیق رخ دادن خطا را هم پیدا کنید و همچنین بتوانید تمام کارهایی که ربات در نبود شما انجام داده است را ببینید. در واقع به تابعی مانند شکل زیر نیاز داریم

تابع لاگ ربات تریدر
تابع لاگ ربات تریدر

پایگاه داده

این ربات تا زمانی که در حال اجراست به پایگاه داده نیازی ندارد. در واقع اطلاعات کمی را پردازش می کند و می تواند آنها را در حافظه ذخیره کند.
با این حال وقتی که ربات از کار می افتد چه اتفاقی رخ می دهد؟ چگونه می توانید بدون تنظیم دستی مقدار lastOpPrice را پیدا کنید.

برای جلوگیری از کار دستی بهتر است یک پایگاه داده سبک برای ذخیره موارد مختلف lastOpPrice تشکیل دهید. بدین ترتیب پس از راه اندازی ربات به جای استقاده از مقادیر پیش فرض،‌ در واقع مقادیر ذخیره شده خود را بررسی می کند و از همان جا کار خود را ادامه می دهد. حتی می توانید این پایگاه داده را با کمک پرونده های txt یا json پیاده سازی کنید زیرا به ذخیره بیش از چندین مقدار محدود را نیاز نیست.

داشبورد

اگر می خواهید کار کردن با ربات را ساده تر کنید. همجنین بدون ورود به کد ها و دستکاری آن ها آستانه ها و مقادیرشان را تغییر دهید باید برای ربات خود یک رابط کاربری یا یک داشبورد بسازید. این امر مستلزم اتصال ربات به یک وب سرور مخصوص به خود است که به شما این امکان را می دهد که به راحتی ربات را مدیریت کنید.
حتی بسیاری از الگوهای داشبورد رایگان در دسترس است و نیازی نیست شما خودتان آن را بسازید. برای مثال می توانید برای شروع از Bootstrap و Creative Tim استفاده کنید.

استراتژی تست داده های گذشته

در بسیاری از موارد دسترسی به داده های گذشته کار ساده ای خواهد بود. اگر می خواهید استراتژی خود را قبل از عملیاتی کردن امتحان کنید بهتر است با داده های گذشته (پول جعلی) شروع کنید.

سخن آخر

ساخت چنین رباتی بیشتر از برنامه نویسی به استراتژی خوب برای خرید و فروش نیاز دارد. بنابراین بهتر است برای خودتان یک استراتژی مناسب تدارک ببینید و سپس وارد مباحث مربوط به پیاده سازی ربات شوید.
مواردی که در بالا گفته شد ساده ترین استراتژی و ساده ترین پیاده سازی برای ساخت یک ربات تریدر بود می توانید از همین مقاله کار خود را شروع کنید و به مرور ربات را توسعه دهید و در نهایت تکنولوژی مربوط به هوش مصنوعی و یادگیری ماشین را در آن استقاده کنید تا از نهایت سود و کمترین ضرر لذت ببرید. موفق باشید;)

برای مطالعه بیشتر:‌ معرفی 10 ایده پولساز در اینترنت

محمود احمدی

در حال یادگیری...

‫11 دیدگاه ها

  1. سلام من برای اینکار باید ماشین لرنینگ پایتون رو یاد بگیرم یا هوش مصنوعی ؟ ( یاهردو؟ )

    1. سلام! برای ساخت ربات تریدر با پایتون، نیازی به یادگیری کامل ماشین لرنینگ یا هوش مصنوعی نیست. اما دانستن مفاهیم اصلی ماشین لرنینگ و هوش مصنوعی می‌تواند بسیار مفید باشد.

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

      برای ساخت ربات تریدر با پایتون، نیاز دارید تا مفاهیم پایه‌ای در زمینه بورس و تجارت را فهمیده و نیز برنامه‌نویسی پایتون را بدانید. برای تحلیل داده‌ها و تصمیم‌گیری در معاملات بورسی، می‌توانید از الگوریتم‌های ساده مانند میانگین متحرک یا الگوریتم‌های پیشرفته‌تری مانند الگوریتم‌های شبکه‌های عصبی استفاده کنید. برای پیاده‌سازی این الگوریتم‌ها در پایتون، می‌توانید از کتابخانه‌های ماشین لرنینگ موجود مانند Scikit-learn، TensorFlow یا Keras استفاده کنید.

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

  2. آسون ترین زبان برای نوشتن همچین رباتی چیه؟ پیشنهادت کدوم زبانه و اگه میشه بیشتر راهنمایی کن در رابطه با آموزش ویادگیری زبان پیشنهادیت.
    و در آخر، خیلی مشتی توضیح دادی دمت گرم.

  3. سلام برای ساخت و استفاده از ربات چه لپ تاپی با چه حافظه گرافیک و نوع گرافیک نیاز داریم؟

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

    با‌ تشکر

  5. سلام
    کسی تا حالا این ربات رو امتحان کرده؟
    بازدهی داشته؟ اگه داشته چقدر بوده؟

  6. با سلام
    ممنون از آموزش مفیدتون
    میخواستم ببینم با زبان c هم میشه ربات رو ساخت ؟؟؟

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


دکمه بازگشت به بالا