در قسمت اول این مقاله، به ارائه اطلاعات کلی درباره معاملات الگوریتمی، دلایل استفاده از پایتون برای طراحی این معاملات و ابزارهای مورد نیاز پرداختیم.
در ادامه این مطلب قصد داریم به نحوه ایجاد یک استراتژی معاملاتی و بهینهسازی آن در پایتون جهت انجام معاملات الگوریتمی بپردازیم.
ایجاد یک استراتژی معاملاتی در پایتون
پس از انجام تحلیلهای اولیه بر روی دادههای قیمتی به دست آمده از یک سهام یا کوین ارز دیجیتال، هدف بعدی ما ایجاد اولین استراتژی معاملاتی است.
عناوین مطلب:
اما برای طراحی یک استراتژی معاملاتی مناسب در پایتون، ابتدا باید با برخی از پرکاربردترین استراتژیهای معاملاتی موجود که در باتها و معاملات الگوریتمی استفاده میشوند آشنا شویم.
بیشتر بخوانید: استراتژی لبه معاملاتی (Trading Edge) چیست؟ + 9 گام برای ایجاد آن
استراتژیهای معاملاتی پرکاربرد
در ابتدای مقاله گفتیم استراتژی معاملاتی در واقع یک برنامه ثابت برای حرکت در بازار روی پوزیشنهای Long و Short است.
اما این همه ماجرا نیست، روش ورود به این پوزیشنها تشخیص نقاط ورود و خروج یکی از مباحث اساسی معاملهگری است. در هر استراتژی، نقاط ورود و خروج براساس اصول مخصوص به آن انتخاب و استفاده میشوند.
در کل دو نوع استراتژی معاملاتی وجود دارد. استراتژی مومنتوم و استراتژی معکوس:
استراتژی مومنتوم
استراتژی مومنتوم که با نامهای Divergence یا معامله ترند نیز شناخته میشود یکی از محبوبترین استراتژیها در انواع بازارهای معاملاتی است.
بیشتر بخوانید: مزایا و معایب تحلیل روند چیست؟ + استراتژیهای ترید در جهت روند
برخی از مثالهای خوب این استراتژی شامل استفاده از تقاطع اندیکاتور میانگین متحرک (Moving Average)، تقاطع میانگین متحرک دوگانه و معامله لاکپشتی است.
در تقاطع میانگین متحرک، قیمت یک دارایی از یک سمت اندیکاتور MA به سمت دیگر حرکت میکند. این تقاطع نشان دهنده تغییر در مومنتوم (حرکت) بازار است که میتوان از آن به عنوان نقطه اتخاذ تصمیم برای ورود یا خروج از بازار استفاده شود.
در تقاطع میانگین متحرک دوگانه، یک میانگین متحرک کوتاه مدت (مثلا 50 MA) از روی خط یک میانگین متحرک طولانیتر (مثلا 200 MA) عبور میکند.
زمانی که خط میانگین متحرک کوتاه مدت از روی میانگین متحرک بلند مدت به سمت بالا عبور کند یک سیگنال خرید صادر میشود و برعکس آن یعنی زمانی که میانگین متحرک کوتاهتر، میانگین متحرک طولانیتر را به سمت پایین قطع کند سیگنال فروش دریافت میکنیم.
به صورت خلاصه، استراتژی ترید لاکپشتی به معنای دنبال کردن ترند محبوب بازار پس از شکست قیمت (Breakout) است که توسط Richard Dennis ابداع شد.
اصول پایه این استراتژی به این شکل است که تریدر در بازار معاملات آتی (فیوچرز)، روی high 20 روزه وارد پوزیشن Long و در 20 روزه Low وارد پوزیشن Short میشود.
استراتژی معکوس
استراتژی معکوس که با نامهای Convergence یا معامله چرخه شناخته میشود از این عقیده نشات گرفته که در آن هر حرکت بازار در نهایت معکوس میشود.
این موضوع ممکن است کمی غیر عملی به نظر برسد اما زمانی که به مثالهای آن توجه کنیم، فرصتهای درون آن پدیدار میشود.
در این روش، شما منتظر بازگشت قیمت سهام مورد نظر به میانگین خود خواهید ماند که پس از انحراف از میانگین، از فرصت استفاده و در جهت ترند جدید وارد پوزیشن میشوید.
بیشتر بخوانید: منظور از ترید خلاف روند چیست؟
مثال دیگر استراتژی معکوس، معامله جفت میانگین معکوس است که مشابه میانگین معکوس، اما به شکل گستردهتر عمل میکند. همانطور که گفته شد در استراتژی معکوس ما برای بازگشت قیمت سهام به میانگین خود منتظر میمانیم اما در حالت معامله جفت، دو سهام مختلف را برای ارزیابی میزان همبستگی (Correlation) و نوع آن مورد بررسی قرار میدهیم.
پس از شناسایی همبستگی، تغییر در تفاوت قیمت دو سهام را میتوان به عنوان سیگنال معامله در نظر گرفت. با حرکت یک سهام، سهام دیگر نیز واکنش نشان خواهد داد و با شناسایی این وابستگی، میتوان از آن سود کسب کرد.
روش معامله در این استراتژی بدین شکل است که اگر همبستگی میان دو سهام کاهش پیدا کند، سهام با قیمت بالاتر را میتوان در موقعیت Short قرار دارد چرا که سهام با قیمت بالاتر همیشه به میانگین خود باز میگردد. در طرف دیگر، سهام با قیمت کمتر را باید در پوزیشن Long قرار داد چرا که با توجه به همبستگی، قیمت آن به حالت معمولی بازخواهد گشت.
البته این استراتژیها، تنها روشهای معامله در بازار نیستند و شما میتوانید با کمی جستجو موارد بیشتری بیابید. برای نمونه استراتژی پیشبینی بازار که در آن تریدر تلاش میکند براساس عوامل تاریخی گذشته، جهت یا ارزش یک سهام را در بازههای زمانی آینده پیشبینی کند.
یا استراتژی معامله فرکانس بالا یا HFT که در آن معاملات در کسری از ثانیه رخ میدهد، از دیگر استراتژیهای پرکابرد بازارهای مالی هستند.
به عنوان یک تحلیلگر بازارهای مالی، شما باید هر از چند گاهی، به جستجو و یافتن روشهای جدید معاملاتی بپردازید. موفقیت الگوریتمهای معاملاتی شما در گرو به کار گرفتن روشهای موثر و آزمایش آنها در سهام و نمادهای مختلف است.
ایجاد یک الگوریتم استراتژی معاملاتی ساده
اولین برنامه الگوریتم معاملاتی ما در پایتون، استفاده از استراتژی تقاطع میانگین متحرک استفاده میکنیم.
روش کار آن ساده است، ابتدا دو اندیکاتور متفاوت SMA (Simple moving Average) از دادههای قیمت سری زمانی ایجاد میکنیم. طول اندیکاتور اول میتواند 40 روز و دومی 100 روز باشد.
اگر اندیکاتور کوتاهتر از روی اندیکاتور بلند عبور کند، به معنای پوزیشن Long یا خرید است و اگر اندیکاتور بلندتر که در اینجا 100 روز است از روی اندیکاتور کوتاه ما عبور کند، ما از پوزیشن خارج میشویم.
آزمایش استراتژی معاملاتی
اکنون ما یک استراتژی معاملاتی اولیه داریم، برای ارزیابی کیفیت بازدهی این استراتژی، باید روی آن بک تست (Backtest) انجام دهیم.
بیشتر بخوانید: آموزش بکتست گرفتن (برای سنجش استراتژیهای معاملاتی)
بکتست علاوهبر یک روش آزمایش استراتژی معاملاتی، ارزیابی استراتژی با استفاده از دادههای تاریخی نیز هست. در این روش شما میتوانید بر روی قیمتهای گذشته نمودار، استراتژی خود را آزمایش کنید.
میتوان گفت Backtest روشی برای شبیه سازی و ارزیابی ریسک و میزان سود آوری یک استراتژی معاملاتی خاص در بازه زمانی مشخص است.
اما قبل از ورود به این مبحث باید به مشکلات و دامهای آن نگاهی بیندازیم:
دامهای موجود در Backtest
بکتست مزایای زیادی دارد چرا که ما از دادههای واقعی برای ارزیابی استراتژی بهره میبریم اما باید به دامهای آن نیز توجه شود. چرا که در هنگام کار با این روش ممکن است واضح نباشند.
مثلا تغییر قوانین و یا رویدادهای اقتصاد کلان مسلما بر روی خروجی آزمایشهای شما موثر هستند. اگر قوانین بازار مالی به شکلی تغییر کند که پوزیشنهای Short برای مدتی غیرفعال شوند، آزمایش استراتژی شما از حالت عادی خارج میشود و ممکن است بدون در نظر گرفتن رویدادهای مربوط به آن برهه تاریخی، بر روی نتایج به دست آمده تصمیم گیری کنید.
اما مشکلاتی نیز از سمت طراح استراتژی وجود دارند که بر روی نتیجه بکتست تاثیر قابل توجهی خواهد داشت. تعصب در بهینه سازی بیش از حد، نادیده گرفتن قوانین استراتژی(دخالت در مدل) یا حتی وارد کردن اطلاعات فعلی به دادههای قدیمی میتواند از مهمترین دامهایی باشد که ممکن است شما در آن گرفتار شوید.
اجزای بکتست
علاوهبر دامهایی که ممکن است در هنگام آزمایش استراتژی بر روی دادههای واقعی بازار مواجه شوید، لازم است تا با اجزای اصلی Backtest نیز آشنا شوید.
یک فرآیند Backtest شامل 4 قطعه است که هر کدام وظایف مخصوصی برعهده دارند:
- کنترلکننده دادهها: این بخش مجموعهای از دادهها را آماده میکند.
- استراتژی یا منطق: این بخش وظیفه تولید سیگنالهای خرید Long یا فروش Short را براساس دادههای قطعه اول برعهده دارد.
- پرتفوی: سفارشها را تولید و سود و زیان معاملات را مدیریت میکند. به این بخش مدیریت PnL نیز گفته میشود.
- کنترل کننده اجرایی: سفارشارت (Order) را به کارگزاری ارسال میکند. علاوهبر آن، این کنترل کننده سیگنالهای تکمیل سفارش خرید یا فروش سهام را دریافت و براساس آن گزارشات مربوطه را ذخیره میکند.
در کنار چهار اجزای عنوان شده در اینجا، شما میتوانید هر تعداد اجزای مورد نیاز را به بک تستر خودتان اضافه کنید. این مسئله کاملا به پیچیدگی و منطق پشت آن بستگی دارد و در صورت اضافه شدن بخشهای محاسباتی یا منطقی بیشتر، میتوان برنامههای پیچیدهتری نوشت.
با این حال، چهار قطعه عنوان شده از اجزای اصلی یک استراتژی الگوریتمی هستند که باید در هنگام شروع کار آنها را در نظر بگیرید.
ابزارهای مورد نیاز در پایتون
برای طراحی و پیاده سازی Backtest در پایتون تکیه به کتابخانه Pandas کافی نیست و به ابزارهای دیگری برای بهینه سازی نیاز خواهید داشت.
کتابخانههایی مثل NumPy و SciPy، ویژگی و عملکردهایی مانند بهینهسازی، محاسبات برداری (Vectorization) و روالهای جبر خطی را برای توسعه استراتژی معاملاتی پیشرفته در اختیار شما قرار میدهند.
کتابخانه Scikit-Learn که یکی ابزارهای یادگیری ماشین در پایتون است نیز در هنگام کار با استراتژیهای Forecasting یا پیشبینی بازار به کمک شما میآید. این کتابخانه به شما کمک میکند تا مدلهای طبقهبندی شده و برگشتی ایجاد کنید.
با این حال اگر قصد دارید بر روی دادههای به دست آمده تحلیل آماری انجام دهید، کتابخانه Statsmodel کار شما را راه میاندازد. محاسبه شاخص OLS یکی از کاربردهای این کتابخانه است که قبلا به آن اشاره شد.
در آخر کتابخانههای lbPy و ZipLine نیز امکان اتصال و تعامل با صرافیها و سیستمهای معاملاتی آن را فراهم میکند. این کتابخانهها به شما کمک میکنند تا علاوهبر مدیریت داراییها، سفارشهای خود را برای سهامهای مختلف ثبت و کنترل کنید.
بکتست توسط کتابخانههای Zipline و Quantopian
همانطور که گفته شد، وقتی صحبت از بازارهای مالی در پایتون میشود، کتابخانه Pandas یکی از بهترین روشهای مدیریت داده و ارزیابی آن است.
با این حال، از آنجایی که شما باید همه اجزای یک مدل استراتژی را از پایه توسعه دهید، اشتباهات انسانی یا باگ در آنها وجود خواهد داشت. حتی با وجود کتابخانههایی مانند Pandas، خطاهایی که یک برنامه نویس میتواند حین نوشتن یک برنامه مرتکب شوند غیر قابل انکار هستند.
به همین دلیل در هنگام توسعه معاملات الگوریتمی در پایتون بهتر است از یک بستر بک تست برای آزمایش استراتژی و رفع باگ استفاده کنیم.
کتابخانه Quantopian، قدرت خود را از Zipline که یک کتابخانه پایتون برای معاملات الگوریتمی است دریافت میکند. نیازی به خرید سرور و یا هاست وب نیست، شما میتوانید این کتابخانه را در سیستم خودتان اجرا و از قابلیتهای آن برای نوشتن الگوریتم بک تست بهره ببرید. اما قبل از آن باید در وبسایت آن ثبت نام و وارد شوید.
پس از ورود به حساب کاربری خود، در این وبسایت یک الگوریتم جدید ایجاد و کدهای آن را بنویسید. البته میتوانید از مثالهای موجود برای آزمایش استراتژی استفاده کنید.
بهبود استراتژی معاملاتی
پس از ایجاد یک استراتژی معاملاتی برپایه یک الگوریتم ساده و پیاده سازی backtest مورد نظر توسط کتابخانههای Pandas ،Zipline و Quantopian نوبت به بررسی روشهای بهبود استراتژی پیاده شده میرسد.
تا اینجای مقاله شما با الگوریتم کلی معاملهگری در پایتون آشنایی پیدا کردهاید اما این کافی نیست.
اتمام کد نویسی و تست یک الگوریتم معاملاتی به معنای پایان پروژه نیست بلکه سرآغاز فرآیند توسعه و بهبود استراتژی مورد استفاده در آن است.
استفاده از یک یا چند الگوریتم دیگر در کنار الگوریتمهای فعلی با هدف بهبود بازدهی معاملات چیزی است که هر برنامه نویسی باید روی آن تمرکز کند. آشنایی و استفاده از الگوریتمهایی مانند KMeans ،k-Nearest Neighbors ،Classification یا درخت بازگشتی و ژنتیک از مهمترین زمینههایی است که باید در گامهای بعد به آن توجه شود.
اما الگوریتمها همه پروژه نیستند و شما باید با کار بر روی سهامهای دیگر در سایر صنایع و زمینهها، استراتژی معاملاتی خود را بهبود دهید.
فقط تکیه به سهام یک شرکت یا نماد در بازار بورس یا ارز دیجیتال کمک چندانی به شما نمیکند چرا که از سایر فرصتهای بازار عقب خواهید ماند.
در این مقاله ما یک استراتژی ساده مانند استفاده از میانگین متحرک را معرفی کردیم اما اضافه کردن چیزهای دیگر برای مدیریت ریسک یا حتی یک سیستم Backtest رویداد محور میتواند سوگیریها و دامهای پیش رو را کاهش دهد.
نتیجه گیری
معاملات الگوریتمی در زبان برنامه نویسی پایتون به عنوان یکی از راحتترین زبانهای برنامه نویسی، میتواند نقطه شروعی برای خودکار سازی فرآیند معامله بدون استرس باشد. با طراحی یک استراتژی مناسب و آزمایش آن در بازارهای واقعی شما میتوانید در هنگام خواب نیز کسب درآمد کنید.
البته طراحی یک استراتژی جامع با الگوریتمهای بینقص در کنار برنامههای مدیریت ریسک از آنچه که به نظر میرسد مشکلتر است. در گام اول شما باید به اندیکاتورهای رایج در بازارهای مالی و نحوه تحلیل بازار تسلط کافی داشته باشید.
یادگیری زبان برنامه نویسی پایتون آسان است اما طراحی و صیغل یک استراتژی مالی که به صورت خودکار به صرافی یا کارگزاریهای آنلاین متصل و اقدام به معاملهگری کند کار مشکلی است. شما باید در طراحی استراتژی خود به اندازه کافی اعتماد به نفس به خرج دهید تا در زمانهایی اسکریپت شما اقدام به معاملهگری میکند، خیال شما از بابت خطرات آن آسوده باشد.
در این مقاله ما فقط به مباحث کلی معاملات الگوریتمی در پایتون پرداختهایم و مسلما بخش کدنویسی، تست و بهبود آن به همراه جزییات فنی خارج از حوصله این مقاله است و شما باید از منابع زبان اصلی برای آغاز این مسیر کمک بگیرید.
شما در بورس، علاوه بر خرید و فروش سهام:
- میتوانید در داراییهایی مانند طلا و مسکن سرمایهگذاری کنید
- در صندوقهای سرمایه گذاری بدون ریسک، سود ثابت بگیرید
برای شروع سرمایهگذاری، افتتاح حساب رایگان را در یکی از کارگزاریها انجام دهید:
نام شرکت | ویژگیها | امتیاز | لینک ثبتنام |
---|---|---|---|
کارگزاری آگاه |
|
برای سرمایهگذاری و معامله موفق، نیاز به آموزش دارید. خدمات آموزشی زیر از طریق کارگزاری آگاه ارائه میشود: