بک تست الگوهای کندل استیک در پایتون

ساخت وبلاگ

Backtesting Candlestick Pattes in Python

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

در حال آماده سازی اطلاعات قیمت ما

اگر منبع داده خود را دارید می توانید مستقیماً به بخش بعدی بروید. فقط مطمئن شوید که داده های OHLC کامل دارید، در غیر این صورت TA-lib نمی تواند شمع ها را بسازد یا الگوهایی را تشخیص دهد.

من از yfinance در اینجا استفاده خواهم کرد تا به سرعت برخی از داده های قیمت کریپتو را پاک کنم

 1وارد كردن پانداها as pd  2وارد كردن مالی as yf  3از جانب زمان قرار وارد كردن زمان قرار, زمان دلتا  4  5زمان پایان = زمان قرار.اکنون()  6زمان شروع = زمان پایان - زمان دلتا(روزها = 5)  7  8# Yfinance داده دقیقه خوبی ندارد  9داده ها = yf.دانلود( 10 "BTC-USD", 11 شروع کنید=زمان شروع, 12 پایان=زمان پایان, 13 فاصله="1 ساعت") 14 15چاپ(داده ها) 

این باید برای شما یک دیتافریم پاندا پر از داده های OHLCV بگذارد. می توانید مقدار timedelta را تغییر دهید تا مقدار متفاوتی از داده به دست آورید. هرچه بازه زمانی کمتری را انتخاب کنید، تاریخچه قیمت کمتری می توانید درخواست کنید. برای داده های ساعتی می توانید اطلاعات یک ماهه را درخواست کنید.

اگر می خواهید مقدار قابل توجهی از داده های تاریخی را خراش دهید، می توانید مقاله من در مورد خراش دادن از Bitstamp را بررسی کنید.

تشخیص الگوهای کندل استیک

هنگامی که داده های OHLC خود را به دست آوردیم، تشخیص الگوهای رایج یک خط در TA-lib است

1وارد كردن طالب 2چکش = طالب.CDLHAMMER(داده ها.باز کن, داده ها.بالا, داده ها.کم, داده ها.بستن) 

در این مورد ما به دنبال الگوی چکش هستیم. همانطور که در پایین ترین شمع سبز روی تصویر کوچک این مقاله می بینید، این (ظاهرا) نشان دهنده یک برگشت صعودی است. شما می توانید لیست بزرگی از تمام الگوهای کندل استیک و عملکردهای TA-lib مربوطه آنها را در صفحه TA-lib github پیدا کنید.

نصب TA-lib می تواند بسیار دردسرساز باشد. قبل از نصب با pip، باید مطمئن شوید که کتابخانه های زیرین C نصب شده اند. می توانید دستورالعمل ها را در صفحه TA-lib تحت وابستگی ها بیابید

اگر چکش را چاپ کنید، یک سری پاندا خواهید داشت که نشان می دهد آیا الگو شناسایی شده است یا خیر

 109-07-2022 19:00:00+00:00 0  209-07-2022 20:00:00+00:00 0  309-07-2022 21:00:00+00:00 0  409-07-2022 22:00:00+00:00 0  509-07-2022 23:00:00+00:00 0  6 ..  714-07-2022 16:00:00+00:00 0  814-07-2022 17:00:00+00:00 0  914-07-2022 18:00:00+00:00 0 102022-07-14 19:00:00+00:00 0 112022-07-14 19:06:00+00:00 0 

در اینجا متوجه خواهید شد که همه ورودی ها 0 هستند. برای اطمینان از کارکرد آن، می توانیم به دنبال ورودی هایی باشیم که مقدار آن برابر با 100 است.

1چاپ(چکش[چکش == 100]) 
 12022-07-10 11: 00: 00+00: 00 100  22022-07-11 00: 00: 00+00: 00 100  32022-07-11 02: 00: 00+00: 00 100  42022-07-11 23: 00: 00+00: 00 100  52022-07-12 17: 00: 00+00: 00 100  62022-07-13 10: 00: 00+00: 00 100  72022-07-13 16: 00: 00+00: 00 100  82022-07-14 09: 00: 00+00: 00 100  92022-07-14 11: 00: 00+00: 00 100 10dtype: int32 11سری ([] ، dtype: bool) 

اگر می خواهید طیف وسیعی از مقادیری را پیدا کنید که می توانند توسط یک عملکرد TA-Lib و همچنین ورودی های آن برگردانده شوند ، می توانید یک پوسته پایتون معمولی را باز کنید و موارد زیر را امتحان کنید:

1پایتون 3. 8. 10 (پیش فرض ، 22 ژوئن 2022 ، 20:18:18) 2[GCC 9. 4. 0] در لینوکس 3برای اطلاعات بیشتر "کمک" ، "کپی رایت" ، "اعتبار" یا "مجوز" را تایپ کنید. 4>>>واردات پالیب 5>>>راهنما (talib. cdlhammer) 
 1کمک به عملکرد CDLHAMMER در ماژول talib. _ta_lib:  2  3cdlhammer (.)  4 cdlhammer (باز ، بالا ، پایین ، نزدیک)  5  6 چکش (تشخیص الگوی)  7  8 ورودی ها:  9 قیمت ها: ['Open' ، 'High' ، 'Low' ، 'Close'] 10 خروجی ها: 11 عدد صحیح (مقادی ر-100 ، 0 یا 100) 

از آزمایش ، فهمیدم که مقدار 100 نشان دهنده یک سیگنال صعودی ، -100 یک سیگنال نزولی و 0 خنثی است.

بازگشت به استراتژی

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

1آویزان_من =طالب.سینمای(داده ها.باز کن, داده ها.بالا, داده ها.کم, داده ها.بستن) 

از اینجا می توانیم سری Buys and Sells خود را بسازیم ، که می توانیم از آنها برای تغذیه در VectorBT استفاده کنیم.

1خریدن = چکش == 100 2فروش = آویزان_من == -100 3pf = VBT.نمونه کارها.از _signals(داده ها.بستن, خریدن, فروش, هزینه = 0. 005) 

نحو ممکن است در آنجا کمی عجیب به نظر برسد اما ما فقط می خواهیم مقدار عددی خود را از سری خود به مقادیر واقعی/غلط تبدیل کنیم که VectorBT می تواند بپذیرد. حتماً VectorBT را به عنوان VBT وارد کنید.

در این مرحله می توانید با چاپ pf. stats () ، برخی از آمارها را از پشتی دریافت کنید ، یا می توانید آنچه را که تاکنون با pf. plot () بدست آورده ایم ترسیم کنید.

همچنین می توانید سوابق تجاری را با فرمت آسان برای خواندن چاپ کنید

1trade_records = pf.معاملات.رکورد_ قابل خواندن 2چاپ(trade_records.طبقه بندی_("Timestamp ورود").to_string()) 

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

آموزش ویدئویی

اگر یک آموزش ویدیویی را ترجیح می دهید ، کانال YouTube من را بررسی کنید:

پست های برجسته

  • Vectorbt vs backtrader
  • backtesting. py - یک راهنمای کامل
راهنمای تجارت فارکس...
ما را در سایت راهنمای تجارت فارکس دنبال می کنید

برچسب : نویسنده : نسیم خاکسار بازدید : <-PostHit-> تاريخ : چهارشنبه 4 مرداد 1402 ساعت: 21:03