در این پست ، ما تنظیمات دیگری را برای سفارشی سازی استراتژی تجارت به شرح زیر معرفی می کنیم:
- ایجاد یک توپی برای تغییر به راحتی پارامترهای استاتیک در استراتژی تجارت ما.
- اندازه موقعیت هر تجارت را تغییر دهید.
افزودنیهای کد در اینجا در سلولهای زیر است:
- کلاس استراتژی
- تنظیمات پشتی
وارد کردن ماژول ها
در [6]:
وارد كردن زمان قرار وارد كردن os. path وارد كردن سید وارد كردن پیشرو as bt وارد كردن matplotlib. pyplot as PLT
داده ها¶
در [7]:
مسکن = os.گچ("خانه") مسیر داده = os.مسیر.پیوستن(مسکن, 'Github/backtrader/datas/orcl-1995-2014. txt') داده ها = bt.فید.yahoofinancecsvdata( دیتان=مسیر داده, از تاریخ=زمان قرار.زمان قرار(2000,1,1), به روز = زمان قرار.زمان قرار(2000,12,31), معکوس=دروغ) کلاس استراتژی
ما در بالای کلاس یک تاپل به نام پارامترها اضافه می کنیم تا بتوانیم به راحتی این متغیرهای استراتژی را به روز کنیم. Exitbars به جای 5 روی 10 تنظیم شده است.
ما همچنین سیگنال فروش را از (self. bar_exeded+5) به (self. bar_exeded+self. params. exitbars) به روز می کنیم.
در [8]:
طبقه Strat1_2bd_5bh(bt.استراتژی): پارامت = ( ('Exitbars',10), # tuple از Tuples حاوی هر تنظیم متغیر مورد نیاز استراتژی. ) دنباله __init__(خود): خود.دیتاکلوز= خود.مجموعه داده ها[0].بستن # در داده های داده [0] به خط "بستن" مراجعه کنید خود.سفارش = هیچ یک # املاک برای پیگیری سفارشات در انتظار. هنگام تنظیم استراتژی هیچ سفارش وجود ندارد. خود.قیمت = هیچ یک خود.خریدار = هیچ یک دنباله ورود به سیستم(خود, txt, dt=هیچ یک): # عملکرد ورود به سیستم برای استراتژی."txt" عبارت است و "dt" می تواند برای مشخص کردن یک dateTime خاص استفاده شود dt = dt or خود.مجموعه داده ها[0].زمان قرار.تاریخ(0) چاپ(' , '.قالب(dt.ایزوفرمات(),txt)) دنباله notify_order(خود, سفارش): # 1. اگر سفارش ارسال و پذیرفته شده است ، هیچ کاری نکنید if سفارش.وضعیت in [سفارش.ارسال شده, سفارش.پذیرفته شده]: برگشت # 2. اگر سفارش خرید/فروش اجرا شده است ، قیمت را اجرا کنید if سفارش.وضعیت in [سفارش.کامل]: if سفارش.isbuy(): خود.ورود به سیستم('خرید اعدام شده ، قیمت: ، هزینه: ، کمیته: '.قالب( سفارش.اجرا شده.قیمت, سفارش.اجرا شده.ارزش, سفارش.اجرا شده.کماندار)) خود.قیمت = سفارش.اجرا شده.قیمت خود.خریدار = سفارش.اجرا شده.کماندار دیگر: خود.ورود به سیستم('فروش اعدام شده ، ، هزینه: ، کمیته '.قالب( سفارش.اجرا شده.قیمت, سفارش.اجرا شده.ارزش, سفارش.اجرا شده.کماندار)) خود.BAR_EXEDED = لن(خود) #وقتی تجارت اجرا شد # 3. اگر سفارش لغو شده/حاشیه/رد شده است ، گزارش گزارش لغو شده است الیف سفارش.وضعیت in [سفارش.لغو شد, سفارش.لبه, سفارش.رد شده]: خود.ورود به سیستم("سفارش لغو/حاشیه/رد شده") خود.سفارش = هیچ یک دنباله notify_trade(خود,تجارت): if نه تجارت.بسته است: برگشت خود.ورود به سیستم(سود بهره برداری ، ناخالص ، خالص '.قالب( تجارت.PNL, تجارت.pnlcomm)) دنباله بعد(خود): # قیمت های پایانی سری را از مرجع وارد کنید خود.ورود به سیستم('بستن، '.قالب(خود.دیتاکلوز[0])) if خود.سفارش: # بررسی کنید که آیا سفارش در حال تعلیق است یا خیر، اگر چنین است، سپس خارج شوید برگشت # از آنجایی که هیچ سفارشی در انتظار نیست، آیا ما در بازار هستیم؟ if نه خود.موقعیت: # در بازار نیست if خود.دیتاکلوز[0] خود.دیتاکلوز[-1]: if خود.دیتاکلوز[-1] خود.دیتاکلوز[-2]: خود.ورود به سیستم(«خرید ایجاد کنید '.قالب(خود.دیتاکلوز[0])) خود.سفارش = خود.خرید() دیگر: # در بازار if لن(خود) >= (خود.BAR_EXEDED+خود.پارامت.میله های خروجی): خود.ورود به سیستم(فروش ایجاد، '.قالب(خود.دیتاکلوز[0])) خود.سفارش = خود.فروش() تنظیمات بک تست¶
پارامترهایی که در استراتژی معاملاتی تعریف می شوند را می توان در تابع cerebro. addstrategy() نیز تغییر داد و این پارامترهای تنظیم شده در کلاس Strategy را لغو می کند. می بینیم که exitbars=10 را تنظیم کرده ایم.
برای اندازه هر معامله، ما یک cerebro. addsizer تنظیم کرده ایم که تعداد واحدهایی را که باید خریداری شوند (مثلاً قراردادهای آتی، لات سهام) تعیین می کند. در کد زیر، stake=10 را طوری تنظیم کرده ایم که هر بار که سیگنال خرید موفقیت آمیز وجود دارد، 10 واحد از دارایی خریداری می شود.
در [9]:
مغز = bt.سربرو() مغز.داده های اضافی(داده ها) مغز.استراتژی اضافه(Strat1_2bd_5bh, میله های خروجی=10) مغز.اضافه کننده(bt.اندازه گیرها.FixedSize,سهام=10) مغز.دلال.وجه نقد(100000. 0) مغز.دلال.تعیین کمیسیون(کمیسیون=0. 001)
اجرای بک تست¶
از پایین می بینیم که سیگنال خرید همچنان همان است که سفارش های خرید پس از دو بار کاهش متوالی قیمت بسته شدن ایجاد می شوند، با این تفاوت که سیگنال فروش تنها پس از 10 روز معاملاتی فعال می شود (یعنی خرید در 01-2000 است. 06، و فروش در 2000-01-21). استراتژی معاملاتی همچنان با ارزش نهایی 100155 دلار سودآور است.
در [10]:
چاپ(ارزش نمونه کارها شروع: '.قالب(مغز.دلال.ارزش دریافتی())) مغز.اجرا کن() چاپ(ارزش نهایی نمونه کارها: '.قالب(مغز.دلال.ارزش دریافتی()))
شروع ارزش نمونه کارها: 100000. 00 2000-01-03 ، نزدیک ، 26. 27 2000-01-04 ، نزدیک ، 23. 95 2000-01-05 ، نزدیک ، 22. 68 2000-01-05 ، خرید ایجاد 22. 68 2000-01-06 ، خرید اعدام شده ،قیمت: 22. 27 ، هزینه: 222. 70 ، Comm: 0. 22 2000-01-06 ، نزدیک ، 21. 35 2000-01-07 ، نزدیک ، 22. 99 2000-01-10 ، نزدیک ، 25. 74 2000-01-11 ، نزدیک ، 24. 99 2000-01-12 ، نزدیک ، 23. 49 2000-01-13 ، نزدیک ، 23. 36 2000-01-14 ، نزدیک ، 23. 75 2000-01-18 ، نزدیک ، 24. 74 2000-01-19 ، نزدیک ، 25. 41 2000-01-20 ، نزدیک ،26. 35 2000-01-21 ، نزدیک ، 26. 55 2000-01-21 ، فروش ایجاد ، 26. 55 2000-01-24 ، فروش اعدام شده ، 26. 80 ، هزینه: 222. 70 ، Comm 0. 27 2000-01-24 ، سود عملیات ، ناخالص 45. 30 ، خالص44. 81 2000-01-24 ، نزدیک ، 24. 10 2000-01-25 ، نزدیک ، 25. 10 2000-01-26 ، نزدیک ، 24. 49 2000-01-27 ، نزدیک ، 23. 04 2000-01-27 ، خرید ایجاد 23. 04 2000-01-28 ، خرید اعدام شده ، قیمت: 22. 90 ، هزینه: 229. 00 ، Comm: 0. 23 2000-01-28 ، نزدیک ، 21. 07 2000-01-31 ، نزدیک ، 22. 22 2000-02-01 ، نزدیک ، 24. 02 2000-02-02 ، Close، 24. 16 2000-02-03 ، نزدیک ، 25. 21 2000-02-04 ، نزدیک ، 25. 71 2000-02-07 ، نزدیک ، 26. 66 2000-02-08 ، نزدیک ، 26. 49 2000-02-09 ، نزدیک ، 26. 66 2000-02-10 ، نزدیک ، 27. 71 2000-02-11 ، نزدیک ، 26. 55 2000-02-11 ، فروش ایجاد ، 26. 55 2000-02-14 ، فروش اعدام شده ، 27. 07 ، هزینه: 229. 00 ، Comm 0. 27 2000-02-14 ، سود بهره برداری، ناخالص 41. 70 ، خالص 41. 20 2000-02-14 ، نزدیک ، 27. 66 2000-02-15 ، نزدیک ، 27. 30 2000-02-16 ، نزدیک ، 27. 24 2000-02-16 ، خرید ایجاد 27. 24 2000-02-17 ، خرید اعدام شده، قیمت: 27. 46 ، هزینه: 274. 60 ، Comm: 0. 27 2000-02-17 ، نزدیک ، 27. 41 2000-02-18 ، نزدیک ، 26. 05 2000-02-22 ، نزدیک ، 26. 38 2000-02-23 ، نزدیک ، 28. 05 2000-02-24 ، نزدیک ، 27. 55 2000-02-25 ، نزدیک ، 31. 41 2000-02-28 ، نزدیک ، 30. 52 2000-02-29 ، نزدیک ، 33. 02 2000-03-01 ، نزدیک ، 31. 80 2000-03-02 ، بستن، 30. 47 2000-03-03 ، نزدیک ، 33. 36 2000-03-03 ، فروش ، 33. 36 2000-03-06 ، فروش اعدام شده ، 33. 27 ، هزینه: 274. 60 ، Comm 0. 33 2000-03-06 ، سود عملیات ، ناخالص 58. 10 ،خالص 57. 49 2000-03-06 ، نزدیک ، 33. 69 2000-03-07 ، نزدیک ، 33. 33 2000-03-08 ، نزدیک ، 36. 97 2000-03-09 ، نزدیک ، 37. 36 2000-03-10 ، نزدیک ، 36. 30 2000-03030-03-13 ، نزدیک ، 35. 02 2000-03-13 ، خرید 35. 02 2000-03-14 ، خرید اعدام شده ، قیمت: 36. 41 ، هزینه: 364. 10 ، Comm: 0. 36 2000-03-14 ، نزدیک ، 34. 25 2000-03-15 ،Close ، 34. 97 2000-03-16 ، Close ، 36. 44 2000-03-17 ، Close ، 35. 50 2000-03-20 ، Close ، 34. 75 2000-03-21 ، Close ، 35. 89 2000-03-22 ، Close ، 37. 39 2000-03-23 ، Close ، 38. 64 2000-03-24 ، Close ، 38. 69 2000-03-27 ، Close ، 39. 33 2000-03-28 ، Close ، 38. 50 2000-03-28 ، Sell Create ، 38. 50 2000-03-29 ،فروش اعدام شده ، 38. 28 ، هزینه: 364. 10 ، Comm 0. 38 2000-03-29 ، سود عملیاتی ، ناخالص 18. 70 ، خالص 17. 95 2000-03-29 ، نزدیک ، 36. 69 2000-03-29 ، خرید 36. 69 2000-03-30 ، خریداعدام ، قیمت: 34. 91 ،
فارکس کاران ایران...
ما را در سایت فارکس کاران ایران دنبال می کنید
برچسب :
نویسنده : ديناروند فهيمه
بازدید : <-PostHit->
تاريخ : دوشنبه
9 مرداد
1402 ساعت: 12:35