یک راهنمای گام به گام برای انجام معاملات سهام یکپارچه توسط تجارت الگوریتمی با یک شاخص فنی قدرتمند در پایتون
مقدمه
با افزایش مقدار اختراعات فناوری ، روش های معاملات سهام نیز از آن زمان به بعد تکامل یافته است. هنگامی که ما مانند دهه 1980 یا حتی 1990 به گذشته های دور نگاه می کنیم ، وال استریت چیزی شبیه به زمین برای شلوغی در بین معامله گران خواهد بود. ما به سختی می توانستیم بفهمیم که چه چیزی اتفاق می افتد و معامله گران فریاد می زنند و در میان خود فریاد می زنند تا سهام را در حراج بخرند. آیا می توانید باور کنید که سهام در حراج خریداری می شود؟با تشکر از محققان و مهندسانی که با معرفی آن به دنیای فناوری ، بخش بورس اوراق بهادار را ساخته و انقلابی ایجاد کرده اند.
حتی اگر فناوری هایی مانند سیستم عامل های تجاری با فرکانس بالا در طی یک دوره زمانی معرفی شوند ، ما به عنوان انسان عوامل ابتدایی را به ویژه احساسات برای تأثیرگذاری در تجارت که گاهی اوقات منجر به خسارات چشمگیر می شد ، در نظر گرفتیم. برای مبدل کردن این عوامل شخصی در نظر گرفته شده توسط معامله گران ، تجارت الگوریتمی معرفی شد. این مفهوم بسیار مؤثر و مورد پسند معامله گران بود. این چیزی نیست جز ایجاد یک ربات برای خودکارسازی روند معاملات سهام. این ربات توسط معامله گران ساخته و کنترل می شود و پس از رضایت شرایط فنی داده شده ، معاملات را اجرا می کند. به عنوان نمونه ، تصور کنید که شما برنامه ای را برای تجارت سهام ایجاد می کنید. شرایطی که شما به آن ربات می دهید این است که سهام به قیمت زیر می گوید 250 دلار ، آن را بخرید ، به همین ترتیب ، وقتی سهام به قیمت بالاتر از 400 دلار رسید ، آن را بفروشید. این فقط نمونه ای از نحوه کار تجارت الگوریتمی است و در واقع ، این نوع شرایط با توجه به سطح کارآیی توسط معامله گران منتقل نمی شود.
در عوض ، آنها با استفاده از ابزاری به نام شاخص های فنی ، شرایط یا الگوریتم های خود را می سازند. یک سبد از شاخص های فنی در آنجا وجود دارد ، اما در این مقاله ، ما قصد داریم مورد بحث ویژه ای به نام شاخص کانال کالا ، که به زودی به عنوان CCI شناخته می شود ، بحث کنیم و چگونه می توان آن را برای تجارت سهام در پایتون اجرا کرد. بدون آزار و اذیت بیشتر ، اجازه دهید وارد مقاله شویم.
قبل از ادامه کار ، اگر می خواهید استراتژی های معاملاتی خود را بدون هیچ گونه برنامه نویسی پشت سر بگذارید ، راه حلی برای آن وجود دارد. این backtestzone است. این یک بستر برای حمایت از هر تعداد استراتژی معاملاتی در انواع مختلف دارایی های قابل تجارت به صورت رایگان و بدون برنامه نویسی است. می توانید بلافاصله با استفاده از پیوند در اینجا از ابزار استفاده کنید: https://www. backtestzone. com/
شاخص کانال کالا (CCI)
CCI یک شاخص برجسته است که تفاوت بین قیمت فعلی و قیمت متوسط تاریخی را در یک دوره زمانی مشخص اندازه گیری می کند ، یعنی وقتی ارزش CCI قرائت های مثبت شدید را نشان می دهد ، در نظر گرفته می شود که قیمت فعلی بسیار بالاتر از تاریخی استمیانگین. به همین ترتیب ، هنگامی که ارزش CCI قرائت های منفی شدید را نشان می دهد ، در نظر گرفته می شود که قیمت فعلی زیر میانگین تاریخی است. با قضاوت در مورد نام آن ، مردم ممکن است فکر کنند CCI برای تجارت کالاها فقط استفاده می شود اما این طور نیست. می توان از آن برای تجارت در هر نوع بازار استفاده کرد و اجازه دهید آن را عدالت یا فارکس کند. عمومی ترین تنظیم CCI 20 به عنوان تعداد مشخصی از دوره است. فرمول محاسبه CCI با 20 به عنوان تعداد دوره ها می تواند به شرح زیر باشد:
این شاخص از بقیه شاخص های پیشرو بی نظیر است زیرا بسیاری از موارد پیشرو مقادیر بین 0 تا 100 دارند اما CCI می تواند به مقادیر شدید عمل کند که به عنوان یک نوسان ساز بی حد و حصر عمل می کند. از آنجا که CCI دارای مقادیر نامحدود است ، معامله گران با جستجوی نقاط شدید CCI که در آن قیمت معکوس می شود ، سطح بیش از حد و بیش از حد برای دارایی های فردی را تعیین می کنند. به عنوان مثال ، جفت فارکس EURUSD (یورو/USD) را تصور کنید که به سطح CCI شدید 150 می رسد و ناگهان تغییر روند رخ می دهد (معکوس قیمت) ، و از این رو سطح بیش از حد ما برای EURUSD 150 خواهد بود. به طور مشابه ، همان جفت را تصور کنیدبه سطح CCI منفی شدی د-150 رسیده است و ناگهان تغییر روند رخ می دهد ، و بنابراین سطح فراتر از حد ما برای EURUS D-150 خواهد بود. به این روش تعیین سطح بیش از حد و بیش از حد ، یک استراتژی معکوس گفته می شود.
درباره استراتژی معاملاتی ما: استراتژی معاملاتی ما یک استراتژی معکوس خواهد بود که در آن می خواهیم ارزش های CCI فیس بوک را تحلیل کنیم و سطح بیش از حد و بیش از حد را تعیین کنیم. این استراتژی سیگنال خرید را نشان می دهد که مقدار CCI قبلی فیس بوک بیشتر از سطح بیش از حد باشد و مقدار CCI فعلی از سطح بیش از حد کمتر باشد. به همین ترتیب ، این استراتژی سیگنال فروش را نشان می دهد که مقدار CCI قبلی فیس بوک کمتر از سطح بیش از حد باشد و مقدار CCI فعلی از سطح بیش از حد بیشتر باشد. استراتژی معاملاتی ما را می توان به شرح زیر نشان داد:
اکنون که ما درک می کنیم که CCI به چه معناست و چگونه می توان از آن برای ایجاد یک استراتژی تجارت استفاده کرد. بیایید از Python برای اجرای استراتژی تجاری مبتنی بر CCI خود و Backtest IT استفاده کنیم تا ببینیم که در بازار دنیای واقعی چقدر خوب عمل می کند.
قبل از حرکت، یادداشتی در مورد سلب مسئولیت: هدف این مقاله تنها آموزش افراد است و باید به عنوان یک بخش اطلاعاتی در نظر گرفته شود، اما نه به عنوان توصیه سرمایه گذاری.
پیاده سازی پایتون
بخش کد نویسی به مراحل مختلف به شرح زیر طبقه بندی می شود:
ما از ترتیب ذکر شده در لیست بالا پیروی می کنیم و کمربندهای ایمنی شما را بسته می کنیم تا هر قسمت کدگذاری بعدی را دنبال کنیم.
مرحله 1: واردات بسته ها
وارد کردن بسته های مورد نیاز به محیط پایتون یک مرحله غیرقابل پرش است. بسته های اولیه Panda ها برای کار با داده ها، NumPy برای کار با آرایه ها و توابع پیچیده، Matplotlib برای اهداف رسم و درخواست برای برقراری تماس های API هستند. بستههای ثانویه ریاضی برای توابع ریاضی و Termcolor برای سفارشیسازی فونت (اختیاری) خواهند بود.
پیاده سازی پایتون:
اکنون که همه بسته های ضروری را به محیط پایتون خود وارد کرده ایم. بیایید به استخراج داده های تاریخی فیس بوک با API سهام قدرتمند Alpha Vantage ادامه دهیم.
مرحله 2: استخراج داده ها از Alpha Vantage
در این مرحله، ما قصد داریم داده های تاریخی فیس بوک را با استفاده از یک نقطه پایانی API ارائه شده توسط Alpha Vantage استخراج کنیم. قبل از آن، یادداشتی در مورد Alpha Vantage: Alpha Vantage API های سهام رایگان را ارائه می دهد که از طریق آن کاربران می توانند به طیف گسترده ای از داده ها مانند به روز رسانی های بلادرنگ، و داده های تاریخی در مورد سهام، ارزها و ارزهای دیجیتال دسترسی داشته باشند. مطمئن شوید که یک حساب کاربری در Alpha Vantage دارید، تنها در این صورت میتوانید به کلید مخفی API خود (یک عنصر مهم برای کشیدن دادهها با استفاده از یک API) دسترسی پیدا کنید.
پیاده سازی پایتون:
خروجی:
توضیح کد: اولین کاری که انجام دادیم این بود که تابعی به نام «get_historical_data» تعریف کردیم که نماد سهام («نماد») را به عنوان پارامتر مورد نیاز و تاریخ شروع داده های تاریخی («start_date») را به عنوان پارامتر اختیاری می گیرد. در داخل تابع، ما کلید API و URL را تعریف کرده و آنها را در متغیر مربوطه خود ذخیره می کنیم. سپس، دادههای تاریخی را با فرمت JSON با استفاده از تابع «get» استخراج میکنیم و آن را در متغیر «raw_df» ذخیره میکنیم. پس از انجام برخی فرآیندها برای تمیز کردن و قالببندی دادههای خام JSON، آنها را در قالب یک دیتافریم تمیز Pandas برمیگردانیم. در نهایت، ما تابع ایجاد شده را فراخوانی می کنیم تا داده های تاریخی فیس بوک را از ابتدای سال 2020 جمع آوری کرده و در متغیر "fb" ذخیره کنیم.
مرحله 3: استخراج مقادیر CCI
در این مرحله ، ما می خواهیم مقادیر شاخص کانال کالای Facebook را با کمک یک نقطه پایانی API ارائه شده توسط Alpha Vantage بکشیم. این مرحله تقریباً شبیه به کاری است که ما در مرحله قبل انجام دادیم.
پیاده سازی پایتون:
خروجی:
توضیح کد: اولا ، ما تابعی به نام "GET_CCI" را تعریف می کنیم که نماد سهام ("نماد") ، تعداد دوره های CCI ('N') و تاریخ شروع داده ها ("start_date") را می گیرد. به عنوان پارامترهادر داخل عملکرد ، ما ابتدا دو متغیر به نام "API_KEY" و "URL" را برای ذخیره کلید API و URL API اختصاص می دهیم. با استفاده از تابع "دریافت" ارائه شده توسط بسته درخواست ها ، ما به API فراخوانی می کنیم و پاسخ را در متغیر "خام" ذخیره می کنیم. پس از انجام برخی از دستکاری های داده ، ما مقادیر CCI را برمی گردانیم. سرانجام ، ما این تابع را برای استخراج مقادیر شاخص کانال کالای فیس بوک فراخوانی می کنیم.
مرحله 4: طرح CCI
در این مرحله ، ما قصد داریم مقادیر شاخص کانال کالای استخراج شده از فیس بوک را ترسیم کنیم تا بیشتر از آن حس کنیم. هدف اصلی این قسمت در بخش برنامه نویسی نیست بلکه در عوض مشاهده طرح برای به دست آوردن درک کاملی از شاخص کانال کالا است.
پیاده سازی پایتون:
خروجی:
نمودار فوق به دو صفحه تقسیم می شود: پانل فوق که قیمت بسته شدن فیس بوک و پنل پایین را با مقادیر CCI نشان می دهد. به عنوان یک شاخص اصلی ، CCI را نمی توان در همان پانل ترسیم کرد که در آن قیمت بسته شدن به عنوان مقادیر شاخص ترسیم شده و قیمت بسته شدن بسیار متفاوت است. بنابراین ، جدا از قیمت بسته شدن (زیر قیمت بسته شدن در مورد ما) ترسیم شده است. همانطور که مشاهده می کنید ، مقادیر CCI بسیار نامشخص است و در بعضی مواقع به مقادیر شدید رسیده است. شما می توانید دو خط نقطه ای را در بالا و زیر طرح CCI مشاهده کنید که چیزی جز سطح بیش از حد و بیش از حد نیست. این انتخاب ما برای تعیین سطح باند است و در مورد ما ، ما سطح بیش از حد را به 150 و سطح بیش از حد ب ه-150 تعیین می کنیم ، یعنی سهام در هنگام عبور از CCI از بالای 150 و به همین ترتیب ، در حالت بیش از حد در نظر گرفته می شود. هنگامی که CCI زی ر-150 می رود ، بازار در وضعیت فراوان در نظر گرفته می شود. ما برای ساختن استراتژی معاملاتی خود از همین سطوح استفاده خواهیم کرد.
مرحله 5: ایجاد استراتژی تجارت
در این مرحله ، ما قصد داریم استراتژی تجاری CCI مورد بحث در پایتون را با سطح بیش از حد و بیش از حد به عنوان 150 و-150 اجرا کنیم.
پیاده سازی پایتون:
توضیح کد: ابتدا، ما تابعی به نام "implement_cci_strategy" تعریف می کنیم که قیمت سهام ("قیمت") و مقادیر CCI ("cci") را به عنوان پارامتر در نظر می گیرد.
در داخل تابع، ما در حال ایجاد سه لیست خالی (buy_price، sell_price، و cci_signal) هستیم که در آن مقادیر هنگام ایجاد استراتژی معاملاتی اضافه میشوند.
پس از آن، استراتژی معاملاتی را از طریق یک حلقه for اجرا می کنیم. در داخل حلقه for، ما در حال عبور از شرایط خاصی هستیم و در صورت برآورده شدن شرایط، مقادیر مربوطه به لیست های خالی اضافه می شود. اگر شرط خرید سهام برآورده شود، قیمت خرید به لیست "buy_price" اضافه می شود و ارزش سیگنال به عنوان 1 که نشان دهنده خرید سهام است، اضافه می شود. به همین ترتیب، اگر شرط فروش سهام برآورده شود، قیمت فروش به لیست «قیمت_فروش» اضافه میشود و ارزش سیگنال به صور ت-1 که نشان دهنده فروش سهام است، اضافه میشود.
در نهایت، ما لیست های اضافه شده با مقادیر را برمی گردانیم. سپس، تابع ایجاد شده را فراخوانی می کنیم و مقادیر را در متغیرهای مربوطه ذخیره می کنیم. لیست هیچ معنایی ندارد مگر اینکه مقادیر را رسم کنیم. بنابراین، بیایید مقادیر لیست های معاملاتی ایجاد شده را رسم کنیم.
مرحله 6: ترسیم سیگنال های معاملاتی
در این مرحله میخواهیم فهرستهای معاملاتی ایجاد شده را ترسیم کنیم تا از آنها معنا پیدا کنیم.
پیاده سازی پایتون:
خروجی:
توضیح کد: ما مقادیر شاخص کانال کالا را به همراه سیگنال های خرید و فروش تولید شده توسط استراتژی معاملات ترسیم می کنیم. میتوانیم مشاهده کنیم که هرگاه CCI به زیر سطح فروش بیش از حد میرود، سیگنال خرید سبز رنگ در نمودار رسم میشود. به طور مشابه، هر زمان که CCI از سطح خرید بیش از حد عبور کند، یک سیگنال فروش قرمز رنگ در نمودار رسم می شود.
مرحله 7: ایجاد موقعیت ما
در این مرحله، میخواهیم فهرستی ایجاد کنیم که اگر سهام را در اختیار داریم، عدد 1 را نشان میدهد یا اگر سهام را در اختیار نداریم، عدد 0 را نشان میدهد.
پیاده سازی پایتون:
خروجی:
توضیح کد: اول ، ما یک لیست خالی به نام "موقعیت" ایجاد می کنیم. ما در حال عبور از دو حلقه برای ما هستیم ، یکی این است که مقادیر لیست "موقعیت" را تولید کنیم تا فقط با طول لیست "سیگنال" مطابقت داشته باشد. حلقه دیگر موردی است که ما برای تولید مقادیر موقعیت واقعی از آن استفاده می کنیم. در داخل حلقه دوم ، ما در حال تکرار مقادیر لیست "سیگنال" هستیم و مقادیر لیست "موقعیت" در مورد اینکه چه وضعیتی راضی می شود ، ضمیمه می شوند. اگر سهام خود را نگه داریم یا اگر سهام خود را بفروشیم یا سهام خود را نداشته باشیم ، ارزش موقعیت باقی می ماند. سرانجام ، ما در حال انجام برخی از دستکاری های داده برای ترکیب همه لیست های ایجاد شده در یک DataFrame هستیم.
از خروجی که نشان داده شده است ، می بینیم که در سه ردیف موقعیت ما در سهام 1 باقی مانده است (از آنجا که هیچ تغییری در سیگنال CCI وجود ندارد) اما موقعیت ما به طور ناگهانی به 0 تبدیل شد زیرا ما وقتی سهام را فروختیم ، سهام را فروختیم. سیگنال یک سیگنال فروش (-1) را نشان می دهد. موقعیت ما تا زمانی که برخی از تغییرات در سیگنال معاملاتی رخ دهد ، 0 باقی خواهد ماند. اکنون زمان آن رسیده است که برخی از مراحل پشتی را اجرا کنیم!
مرحله 8: پشتی
قبل از حرکت ، ضروری است بدانید که پشتی چیست. Backtesting فرایندی است که می بینیم استراتژی معاملاتی ما در داده های سهام داده شده چگونه انجام داده است. در مورد ما ، ما قصد داریم یک فرآیند پشتی برای استراتژی تجارت CCI خود را از طریق داده های سهام فیس بوک اجرا کنیم.
پیاده سازی پایتون:
خروجی:
توضیح کد: اول ، ما بازده سهام فیس بوک را با استفاده از عملکرد "تفاوت" ارائه شده توسط بسته NUMPY محاسبه می کنیم و ما آن را به عنوان یک DataFrame در متغیر "FB_RET" ذخیره کرده ایم. در مرحله بعد ، ما برای محاسبه بازده هایی که از استراتژی معاملاتی CCI به دست آورده ایم ، یک حلقه را برای تکرار مقادیر متغیر "fb_ret" می گذرانیم ، و این مقادیر بازده به لیست "fb_strategy_ret" اضافه می شود. در مرحله بعد ، ما لیست "cci_strategy_ret" را به یک dataframe تبدیل می کنیم و آن را در متغیر "cci_strategy_ret_df" ذخیره می کنیم.
بعد فرآیند بک تست می آید. ما میخواهیم با سرمایهگذاری صد هزار دلاری در استراتژی معاملاتی خود، استراتژی خود را پسآزمایی کنیم. بنابراین ابتدا، مقدار سرمایه گذاری را در متغیر "ارزش_سرمایه گذاری" ذخیره می کنیم. پس از آن، ما در حال محاسبه تعداد سهام فیس بوک هستیم که می توانیم با استفاده از مبلغ سرمایه گذاری بخریم. می توانید متوجه شوید که من از تابع "طبقه" ارائه شده توسط بسته ریاضی استفاده کرده ام زیرا در حالی که مبلغ سرمایه گذاری را بر قیمت بسته شدن سهام فیس بوک تقسیم می کنم، خروجی با اعداد اعشاری را بیرون می دهد. تعداد سهام باید یک عدد صحیح باشد اما عدد اعشاری نباشد. با استفاده از تابع "floor" می توانیم اعداد اعشاری را برش دهیم. به یاد داشته باشید که تابع "طبقه" بسیار پیچیده تر از تابع "گرد" است. سپس، ما در حال عبور از یک حلقه برای یافتن بازده سرمایه گذاری و به دنبال آن برخی از کارهای دستکاری داده ها هستیم.
در نهایت، کل بازدهی را که با سرمایه گذاری صد هزار تومانی در استراتژی معاملاتی خود به دست آورده ایم چاپ می کنیم و مشخص می شود که در یک سال تقریباً شانزده هزار و پانصد دلار سود کرده ایم. این بد نیست!
افکار نهایی!
خیلی پیشتر، ما با موفقیت مطالعه کردهایم که شاخص کانال کالا چیست و یک استراتژی معاملاتی مبتنی بر آن را میتوان در پایتون پیادهسازی کرد. اما هنوز فضاهایی برای بهبود این مقاله وجود دارد:
- مدیریت ریسک: این مهم ترین عاملی است که باید برای تجارت یا سرمایه گذاری در نظر گرفت و اقدامات متعددی باید انجام شود تا اطمینان حاصل شود که معاملات ما به سطح خاصی از ریسک محدود می شوند. ریسک کردن در واقع یک وظیفه ضروری برای انجام معاملات سودآور است، اما حفظ آن تا حدی برای جلوگیری از معاملات کشنده نیز اهمیت دارد.
- تنظیم استراتژی: استراتژی معاملاتی که در این مقاله ساختهایم را میتوان به عنوان حداقل پایه در نظر گرفت و برای پیادهسازی آن در بازار واقعی باید بداهه باشد. معامله گران شهودی که از معاملات الگوریتمی برای اهداف معاملات سهام استفاده می کنند، استراتژی خود را با ترکیب ویژگی های مختلف مرتبط با اندیکاتورهای مختلف فیلتر می کنند و شما می توانید آن را نیز امتحان کنید. ما آن را پوشش ندادیم زیرا تنها هدف مقاله آموزش دادن به مردم در مورد معنای CCI است.
همچنین یک مورد وجود دارد که در این مقاله به آن اهمیت بیشتری ندادیم، بخش ریاضی شاخص کانال کالا است. به شدت توصیه میشود که ریاضیات پشت این شاخص را مرور کنید، زیرا به کسب دانش بیشتر در مورد شاخص خاص کمک میکند و ما را قادر میسازد تا استراتژی را بهبود ببخشیم. همچنین، تسلط بر ریاضیات پشت نشانگر به شما کمک می کند تا اعتماد به نفس را برای ساختن شاخص از ابتدا با برنامه نویسی افزایش دهید. بنابراین، سعی کنید سطح خود را برای پیگیری بخش ریاضی حتی اگر در این مقاله زیاد بررسی نکردیم، سعی کنید.
خودشه! شما به پایان مقاله رسیده اید. امیدوارم از این مقاله چیز مفیدی یاد گرفته باشید. اگر فراموش کردید هر یک از قسمت های کدنویسی را دنبال کنید، نگران نباشید. من کد منبع کامل را در پایان مقاله ارائه کرده ام.