تجارت روزانه Martingale با API تجارت Alpaca

ساخت وبلاگ

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

در این مقاله در مورد استفاده از یک استراتژی شرط بندی نظری برای اندازه گیری موقعیت الگوریتم روز. یک نمونه اجرای پایتون ارائه شده است. شما می توانید در مورد منطق زیر بخوانید و اجازه دهید من شما را از طریق کد قدم بزنم ، یا اگر قبلاً با استفاده از API تجارت Alpaca آشنا هستید ، می توانید به سمت راست به کد موجود در GitHub بروید!

شرط بندی Martingale الگوریتمی در بورس

سیستم Martingale چیست؟

مردم سعی کرده اند برای مدت طولانی و طولانی "استراتژی های برنده" را در بازی های شانس ارائه دهند. استراتژی های به اصطلاح "Martingale" ، که از فرانسه در قرن 18th سرچشمه گرفته است ، قصد دارد سناریویی را ایجاد کند که در آن یک قمارباز به احتمال زیاد با یک سود از یک بازی حتی شانس دور می شود. به عنوان مثال ، می گویند بازی ساده است - ما هر یک دلار در نتیجه یک تلنگر سکه شرط می بندیم. اگر روی سر قرار بگیرد ، من دلار شما را می گیرم ، اما اگر روی دم قرار بگیرد ، شما را می گیرید. اگر یک استراتژی Martingale را دنبال کنید ، برنامه بازی شما این است که اگر از دست بدهید ، اندازه شرط بندی را دو برابر می کنید و دوباره بازی می کنید. بنابراین اگر سکه در بازی اول روی سر به زمین نشست ، به این معنی که من یک دلار برنده شده بودم و شما یکی را از دست داده بودم ، در بازی دوم ، شما دو دلار شرط می بندید. اگر دوباره روی سر به زمین نشست ، در مجموع سه دلار کاهش می یابد ، و بنابراین در بازی سوم شما چهار دلار شرط می بندید تا ضرر خود را جبران کنید.

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

این چه ارتباطی با بازار سهام دارد؟

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

در اینجا، از نظر تحلیل فنی، چیز کمی متفاوت را امتحان خواهیم کرد. به عنوان مثال، ما یک الگوریتم ساده را گرد هم می آوریم که S& P 500 را به صورت روزانه معامله می کند. به جای استفاده از شاخص های سنتی برای حدس زدن اینکه آیا قیمت بالا می رود یا پایین، سعی می کنیم از استراتژی Martingale که قبلاً بحث شد استفاده کنیم. اگر شرط ببندیم که در یک جهت حرکت می کند (با خرید یا کوتاه کردن سهام) و اگر اینطور نباشد، شرط خود را دو برابر می کنیم تا زمانی که این اتفاق نیفتد. ما آن را با استفاده از API تجارت کاغذ Alpaca آزمایش خواهیم کرد و در مورد برخی از تنظیماتی که ممکن است برای بهبود عملکرد آن انجام دهید صحبت خواهم کرد.

در حالی که من از API تجارت کاغذی Alpaca استفاده خواهم کرد، که برای هرکسی که با ایمیل در وب سایت خود ثبت نام می کند در دسترس است، از Polygon به عنوان منبع داده برای پیاده سازی Python نیز استفاده خواهم کرد، که فقط به صورت رایگان برای کسانی که ارائه می شود. یک حساب کارگزاری مالی با Alpaca داشته باشید. بنابراین، اگر می خواهید این کد را اجرا کنید، یا باید یک حساب کارگزاری داشته باشید یا مستقیماً برای داده های Polygon پرداخت کنید.

اصول کار با Trading API

حتی اگر در تجارت الگوریتمی تازه کار هستید، شروع به کار با API Alpaca آسان است. بیایید آنچه را که باید بتوانیم انجام دهیم تجزیه کنیم. بدیهی است که ما باید بتوانیم به صورت برنامه ریزی شده سفارش خرید و فروش را انجام دهیم. ما همچنین باید بتوانیم بدانیم چه اتفاقی برای سفارش هایی که می دهیم می افتد به خصوص می خواهیم بدانیم چه زمانی تکمیل شده اند. ما همچنین باید بتوانیم به روزرسانی های قیمت S& P 500 را دریافت کنیم از آنجایی که در معاملات روزانه هستیم، اغلب آنها را می خواهیم، و می خواهیم تا جایی که بتوانیم آنها را به روز کنیم.

خرید و فروش با API استراحت آنها بسیار آسان است ، بنابراین بیایید از آنجا شروع کنیم. ما به عنوان نمونه ای که من فقط به آن پیوند داده ام گسترش خواهیم داد و تابعی را می نویسیم که نظمی را ارائه می دهد که سعی می کند ما را از موقعیت فعلی خود - که می تواند مثبت یا منفی باشد - به سمت تعداد هدف سهام برساند. نکته ای که باید در مورد ALPACA API به آن توجه داشته باشید این است که شما نمی توانید مستقیماً از موقعیت طولانی به موقعیت کوتاه بروید - ابتدا باید موقعیت باز خود را ببندید. یعنی ، شما باید در صفر متوقف شوید ، وگرنه خطای API را دریافت خواهید کرد. من چند کد نمونه را در اینجا قرار داده ام که از همه اینها برای شما مراقبت می کند.(می توانید پرونده خود را همانطور که می خواهید بسازید ، یا می توانید منبع کامل را از GitHub کپی کنید.)

ممکن است تعجب کنید که متغیر self. position به روز می شود - ما این کار را با کد بعدی بعدی خود انجام خواهیم داد. به منظور نگه داشتن برگه ها بر روی سفارشاتی که قرار داده ایم ، ما با ALPACA API یک اتصال جریان را باز خواهیم کرد و کانال "Trade_Updates" را برای به روزرسانی در معاملات مورد نظر خود تماشا خواهیم کرد. با استفاده از هر سفارش ، یک متغیر "posit_qty" وجود دارد که ما را از تعداد کل سهام ما برای امنیت آگاه می کند و ما از آن استفاده خواهیم کرد تا تعداد سهام خود را پیگیری کنیم.

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

اجرای استراتژی تجارت مارتینگاله ما

بیایید به رفتار اولیه ما برای اجرای این استراتژی بپردازیم. به یاد داشته باشید که چگونه من قبلاً در مورد نمودار شمعدان صحبت کردم؟بیایید پیش برویم و مدت زمان "شمع" را انتخاب کنیم - 5 ثانیه می رویم تا با آن شروع کنیم. بنابراین هر 5 ثانیه ، ما قیمت را بررسی می کنیم و روال را اجرا می کنیم. سه مورد وجود دارد که باید در نظر گرفته شود.

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

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

در اینجا ، در GitHub ، کد کامل این اجرای است. حتماً از طریق آن بخوانید و سعی کنید درک کنید که چه خبر است. ما تمام متغیرهای ردیابی خود را با شیء Martingaletrader آغاز می کنیم ، و پس از آماده شدن ، روش start_trading () شنوندگان را به فیدهای داده ای که ما تماشا خواهیم کرد باز می کند. Handle_agg () وقتی داده ها از چند ضلعی تهیه می شود ، هر ثانیه اجرا می شود و تصمیم می گیرد که در مورد آن چه کاری انجام دهد ، و Handle_Trade () هر زمان که Alpaca به روزرسانی یکی از سفارشات ما را اجرا کند ، اجرا می شود. برای اجرای خود اسکریپت ، باید با تنظیم آنها در روش Martingaletrader '__init __ () ، اسکریپت را با کلیدهای API خود ، که می توان در داشبورد Alpaca ایجاد کرد ، تهیه کنید. اگر می خواهید در نهایت الگوریتم را به صورت زنده ببرید ، فقط باید به جای آن اطلاعات را از داشبورد زنده تهیه کنید.

پیشرفت های احتمالی

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

  • این الگوریتم به طور مؤثر به "میانگین برگشت" شرط می بندد ، زیرا شرط می بندد که "رگه ها" در قیمت سهام احتمالاً زودتر از موعد شکسته می شود تا قیمت به ارزش متوسط آن بازگردد. چه اتفاقی می افتد اگر ما آن را تغییر دهیم تا به جای آن بر روی "حرکت" شرط بندی کنیم ، با این که حدس می زنم که رگه های داغ در واقع بیشتر از شکستن ادامه می یابد؟اگر می خواهید آن را برای خودتان آزمایش کنید ، این یک تغییر کد ساده است: در handle_agg () ، درست قبل از ارسال سفارش ، در صورت افزایش خط ، تعداد سهام مورد نظر خود را می خواهد یا بفروشد یا بفروشد. درعوض ، اگر این خط در حال افزایش نباشد ، "Target_qty" را ب ا-1 ضرب کنید.
  • 5 ثانیه به عنوان یک بازه کنه به طور خودسرانه انتخاب شد. تنظیم "self. tick_size" در __init __ () به مقدار بالاتر یا پایین تر ممکن است نتایج بهتری داشته باشد.(به طور متوسط اندازه تیک طولانی تر به معنای تغییر قیمت بزرگتر بین هر بروزرسانی است. آیا این تفاوت در الگوریتم ما ایجاد می کند؟)
  • 10 ٪ از کل قدرت خرید ما "شرط بندی پایه" نیز به طور خودسرانه انتخاب شد. مقدار پایین تر احتمالاً ثبات الگوریتم را افزایش می دهد ، در حالی که احتمالاً مقدار بالاتری باعث افزایش نوسانات می شود. آیا هر یک از آنها به آن کمک می کنند یا به آن آسیب می رسانند؟
  • این الگوریتم S& P 500 را معامله می کند. آیا می توانید به هر اوراق بهادار با حجم بالا دیگری که به ارزش DayTrading که ممکن است کار کند نیز فکر کنید؟(سطح درصد با سهام کم هزینه کمتر عبور می کند ، اما آنها درصد بیشتری اختلاف در قیمت را نشان می دهند. از آنجا که ما هرگونه تغییر قیمتی را که از سطح درصد عبور نمی کند ، نادیده می گیریم ، یک سهام ارزان تر تغییرات "بزرگتر" خواهد داشتکنه هایی که بخشی از یک خط هستند.)
  • این پیاده سازی به بزرگی تغییرات در قیمت ، فقط جهت اهمیت نمی دهد. فکر می کند که افزایش دو درصدی همان افزایش ده درصد است. آیا راهی برای استفاده از اندازه تغییرات قیمت در وزن هر یک از "شرط بندی های ما" وجود دارد؟(غیرممکن است که واقعاً بازی Flipping Coin را که در بالا در بازار بحث کردم ، بازآفرینی کنیم ، زیرا نمی توانیم بدانیم که اندازه شمع بعدی چقدر خواهد بود. با این حال ، ما ممکن است با ردیابی میانگین متحرک ، بتوانیم در عملکرد الگوریتم خود مزایایی کسب کنیم، یا حتی یک میانگین متحرک نمایی ، تغییر قیمت و با فرض اینکه اندازه تغییر بعدی تقریباً معادل آن مقدار خواهد بود.)

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

فناوری و خدمات توسط Alpacadb ، Inc. خدمات کارگزاری توسط Alpaca Securities LLC (Alpaca. markets) ، عضو FINRA/SIPC ارائه شده است. Alpaca Securities LLC یک شرکت تابعه کاملاً متعلق به Alpacadb ، Inc.

استراتژی‌های اسکالپ...
ما را در سایت استراتژی‌های اسکالپ دنبال می کنید

برچسب : نویسنده : ناصر تقوایی بازدید : <-PostHit-> تاريخ : جمعه 6 مرداد 1402 ساعت: 19:10