دفتر خاطرات معاملات فارکس شماره 6 - نتایج معاملات چند روزه و ترسیم
دفتر خاطرات معاملات فارکس شماره 6 - نتایج معاملات چند روزه و ترسیم
در این مقاله به روزرسانی پروژه QSforex را برای شما ارائه می دهم. به طور خاص من توانسته ام برخی از ویژگی های جدید را اضافه کنم از جمله:
- مستندات - من پروژه GitHub را به روز کرده ام تا مستندات QSForex را شامل شود. به طور خاص ، این شامل دستورالعمل های نصب دقیق و راهنمای استفاده برای پشتی و تجارت زنده است.
- تولید داده های شبیه سازی شده تیک - از آنجا که بارگیری داده های Forex Tick به صورت فله ای چالش برانگیز است (یا حداقل از فروشندگان خاصی که من از آنها استفاده می کنم!) تصمیم گرفتم که ساده تر باشد که به سادگی برخی از داده های کنه تصادفی را برای آزمایش سیستم تولید کنیم.
- پشتی چند روزه-یک درخواست ویژگی دیرینه در QSforex امکان تست پشت در طی روزهای مختلف داده های کنه است. در آخرین نسخه Qsforex اکنون از پشتی چند روزه و چند جفت پشتیبانی می کند و آن را از نظر قابل ملاحظه ای مفیدتر می کند.
- ترسیم نتایج پشتی - در حالی که خروجی کنسول مفید است ، هیچ چیز نمی تواند یک منحنی عدالت یا پیش بینی تاریخی را تجسم کند. من از کتابخانه Seabo برای ترسیم نمودارهای مختلف عملکرد استفاده کرده ام.
در این مطلب تمام ویژگی های جدید را با جزئیات زیر شرح می دهم.
اگر نتوانسته اید این سریال را تا به امروز دنبال کنید ، می توانید به بخش معاملاتی سیستماتیک بروید تا بتوانید ورودی های قبلی را بدست آورید.
اسکریپت داده تیک شبیه سازی شده
یک ویژگی بسیار مهم درخواست شده برای Qsforex ، توانایی پشتی در طی چند روز بوده است. پیش از این سیستم فقط از طریق یک پرونده واحد از پشتی پشتیبانی می کرد. این یک راه حل مقیاس پذیر نبود زیرا چنین پرونده ای باید در حافظه خوانده شود و متعاقباً در یک Pandas Dataframe. در حالی که پرونده های داده کنه تولید شده بسیار زیاد نیستند (تقریباً 3. 5 مگابایت) ، اگر چندین جفت را در طی دوره های ماه یا بیشتر در نظر بگیریم ، به سرعت اضافه می شوند.
برای شروع ایجاد یک قابلیت چند روزه/چند پرونده ، سعی کردم پرونده های بیشتری را از فید تاریخی Dukascopy بارگیری کنم. متأسفانه ، من به دردسر افتادم و برای آزمایش سیستم نتوانستم پرونده های لازم را بارگیری کنم.
از آنجا که من در مورد سری زمانی واقعی خود خیلی سر و صدا نمی کردم ، احساس می کردم نوشتن یک اسکریپت برای تولید داده های شبیه سازی شده فارکس خودم ساده تر است. من این اسکریپت را در پرونده اسکریپت ها/generate_simulated_pair. py قرار داده ام. کد فعلی را می توان در اینجا یافت.
ایده اصلی اسکریپت تولید لیستی از جدول زمانی به طور تصادفی توزیع شده است که هرکدام دارای مقادیر پیشنهاد/سؤال هستند و مقادیر حجم پیشنهاد/درخواست/درخواست را دارند. گسترش بین پیشنهاد و سؤال ثابت است ، در حالی که ارزش های پیشنهاد/پرسیدن خود به عنوان یک پیاده روی تصادفی تولید می شوند.
از آنجا که من در واقع هرگز هیچ استراتژی واقعی را در مورد این داده ها آزمایش نمی کنم ، من در مورد خصوصیات آماری آن یا مقادیر مطلق آن در رابطه با جفت های ارز واقعی فارکس بیش از حد زحمت کشیدم. تا زمانی که قالب صحیح و طول تقریبی داشته باشد ، می توانم از آن برای آزمایش سیستم پشتی چند روزه استفاده کنم.
این اسکریپت در حال حاضر برای تولید داده های فارکس برای کل ماه ژانویه 2014 سخت است. از کتابخانه تقویم پایتون به منظور تعیین روزهای کاری استفاده می کند (اگرچه من هنوز تعطیلات را حذف نکرده ام) و سپس مجموعه ای از پرونده های فرم BBBQQ_YYYYMMDDD را تولید می کند. CSV ، که در آن BBBQQQ جفت ارز مشخص (به عنوان مثال GBPUSD) و Yyyymmdd تاریخ مشخص شده است (به عنوان مثال 20140112).
این پرونده ها در دایرکتوری CSV_DATA_DIR قرار می گیرند ، که در تنظیمات در Root Application مشخص شده است.
برای تولید داده ها ، دستور زیر باید اجرا شود ، جایی که باید BBBQQQ با نام خاص ارز مورد علاقه جایگزین شود ، به عنوان مثال. GBPUSD:
اسکریپت های پایتون/generate_simulated_pair. py bbbqqq
برای تولید چندین ماه یا سالها داده ، این پرونده به اصلاح نیاز دارد. هر پرونده روزانه کیک به ترتیب 3. 2 مگابایت است.
در آینده من این اسکریپت را برای تولید چندین ماه یا سالها بر اساس لیستی از جفت های ارز ارائه شده ، به جای مقادیر سخت بودن ، اصلاح می کنم. با این حال ، در حال حاضر این باید به شما در شروع کار کمک کند.
لطفاً توجه داشته باشید که این قالب دقیقاً مطابق با داده های تاریخی Dukascopy است ، که مجموعه ای از مجموعه داده هایی است که من در حال حاضر از آن استفاده می کنم.
پشتی چند روزه اجرا شد
به طور مستقیم از تولید داده های شبیه سازی شده کنه ، اجرای پشتی چند روزه است.
در حالی که برنامه بلند مدت من استفاده از یک سیستم ذخیره سازی تاریخی قوی تر مانند Pytables با HDF5 است ، در حال حاضر من قصد دارم از مجموعه ای از پرونده های CSV استفاده کنم ، یک پرونده در روز برای هر جفت ارز.
با افزایش تعداد روزها ، این یک راه حل مقیاس پذیر است. ماهیت رویداد محور سیستم فقط به یک بار به پرونده های $ n $ نیاز دارد ، جایی که n $ $ تعداد جفت ارز در یک روز خاص معامله می شود.
ایده اصلی این سیستم برای این است که تاریخ فعلی HistoricCSVPriceHandler به استفاده از روش stream_next_tick ادامه دهد ، اما با اصلاح برای چندین روز از داده ها از طریق بارگیری هر روز از داده ها به صورت متوالی حساب می شود.
اجرای فعلی پس از دریافت استثناء توقف که توسط تماس بعدی (..) به Self. all_pairs منتقل شده است ، از پشتی خارج می شود. همانطور که در این قطعه شبه کد نشان داده شده است:
# price. py def stream_next_tick (خود): .. .. سعی کنید: فهرست ، ردیف = بعدی (self. all_pairs) به جز توقف: بازگشت دیگر: .. .. # تیک را به صف اضافه کنید
در اجرای جدید ، این قطعه به موارد زیر اصلاح شده است:
# price. py def stream_next_tick (خود): .. .. سعی کنید: فهرست ، ردیف = بعدی (self. cur_date_pairs) به جز توقف: # پایان داده های روز جاری اگر self. _update_csv_for_day (): index ، row = next (خود خود. cur_date_pairs) other: # پایان داده خود
در این قطعه ، هنگامی که توقف مطرح می شود ، کد نتیجه خود را بررسی می کند . _UPDATE_CSV_FOR_DAY (). اگر نتیجه صحیح باشد ، Backtest ادامه می یابد (در Self. cur_date_pairs ، که می توانست به داده های روزهای بعدی تغییر یابد). اگر نتیجه نادرست باشد ، پشتی به پایان می رسد.
این رویکرد بسیار کارآمد است زیرا فقط یک روز خاص ارزش داده ها در هر نقطه بارگذاری می شود. این بدان معناست که ما به طور بالقوه می توانیم ماههای پشتی را انجام دهیم و فقط با سرعت پردازش CPU و میزان داده هایی که می توانیم تولید کنیم یا بدست آوریم محدود می کنیم.
من مستندات را به روز کرده ام تا این واقعیت را منعکس کنم که سیستم اکنون انتظار دارد چندین روز از داده ها را در یک قالب خاص ، در یک فهرست خاص که باید مشخص شود ، نشان دهد.
ترسیم نتایج پشتی با کتابخانه Seabo
اگر نتوانیم عملکرد استراتژی را با گذشت زمان تجسم کنیم ، یک پشتی نسبتاً بی فایده است. در حالی که این سیستم تا به امروز بیشتر مبتنی بر کنسول بوده است ، من انتقال به یک رابط کاربری گرافیکی (GUI) را با این نسخه آغاز کرده ام.
به طور خاص ، من "سه صفحه" معمول از نمودارهایی را ایجاد کرده ام که اغلب با معیارهای عملکرد برای سیستم های تجاری کمی همراه هستند ، یعنی منحنی سهام ، مشخصات بازده و منحنی کشش. هر سه برای هر کنه محاسبه می شوند و در پرونده ای به نام سهام. csv در خروجی_Results_dir موجود در تنظیمات . py قرار دارند.
برای مشاهده داده ها، از کتابخانه ای به نام Seabo استفاده می کنیم که گرافیک هایی با کیفیت انتشار (بله، با کیفیت انتشار واقعی) تولید می کند که به طور قابل توجهی بهتر از نمودارهای پیش فرض تولید شده توسط Matplotlib هستند.
گرافیک بسیار نزدیک به گرافیک های تولید شده توسط بسته R ggplot2 به نظر می رسد. علاوه بر این Seabo در واقع از Matplotlib در زیر استفاده می کند، بنابراین شما همچنان می توانید از Matplotlib API استفاده کنید.
به منظور اجازه خروجی، اسکریپت output. py را نوشته ام که در دایرکتوری backtest/ زندگی می کند. لیست اسکریپت به شرح زیر است:
# output. py وارد کردن سیستم عامل، os. path وارد کردن پانداها به عنوان pd واردات matplotlib امتحان کنید: matplotlib. use('TkAgg') به جز: وارد کردن matplotlib. pyplot را به عنوان وارد کردن plt به عنوان sns از qsforex. settings وارد کنید OUTPUT_RESULTS_DIR اگر __name___="__main__": """ یک اسکریپت ساده برای رسم تعادل پورتفولیو یا "منحنی حقوق صاحبان سهام" به عنوان تابعی از زمان. لازم است OUTPUT_RESULTS_DIR در تنظیمات پروژه تنظیم شود. """ sns. set_palette("deep", desat=. 6) sns. set_context(rc=) equity_file = os. path. join(OUTPUT_RESULTS_DIR, "equity. csv") equity = pd. io. parsers. read_csv( equity_file, parse_dates=0, index_color=True, index_= 0 ) # سه نمودار را رسم کنید: منحنی ارزش، بازده دوره، کاهش fig = plt. figure() fig. patch. set_facecolor('white') # رنگ بیرونی را سفید تنظیم کنید # منحنی ارزش را رسم کنید ax1 = fig. add_subplot(311, ylabel='ارزش نمونه کارها') equity["Equity"]. plot(ax=ax1, color=sns. color_palette()[0]) # بازده را رسم کنید ax2 = fig. add_subplot(312, ylabel='بازده دوره') equity['Retus']. plot(ax=ax2, color=sns. color_palette()[1]) # بازده را رسم کنید ax3 = fig. add_subplot(313, ylabel='Drawdowns') equity['Drawdown']. plot(ax=ax3, color=sns. color_palette()[2]) # شکل plt. show() را رسم کنید
همانطور که می بینید اسکریپت Seabo را وارد می کند و فایل equity. csv را به عنوان یک Pandas DataFrame باز می کند، سپس به سادگی سه طرح فرعی ایجاد می کند که هر کدام یکی برای منحنی ارزش سهام، برگرداندن و کاهش ارزش است.
توجه داشته باشید که نمودار کاوش در واقع از یک تابع کمکی محاسبه می شود که در performance/performance. py زندگی می کند، که از کلاس Portfolio در انتهای یک آزمون بک آست فراخوانی می شود.
نمونه ای از خروجی استراتژی MovingAverageCrossStrategy در مجموعه ای از داده های GBPUSD که به طور تصادفی برای ماه ژانویه 2014 تولید شده است، به شرح زیر است:

منحنی ارزش پورتفولیو / ارزش ویژه، نمایه بازده و منحنی نزول برای تست MovingAverageCrossStrategy
به طور خاص ، می توانید بخش های مسطح منحنی سهام را در آخر هفته ها مشاهده کنید که هیچ داده ای در آن وجود ندارد (حداقل برای این مجموعه داده شبیه سازی شده). علاوه بر این می بینید که این استراتژی به سادگی پول را با روشی نسبتاً قابل پیش بینی در این مجموعه داده شبیه سازی شده تصادفی از دست می دهد.
این یک آزمایش خوب از سیستم است. ما به سادگی در تلاش هستیم تا یک روند را در یک سری زمانی تولید شده به طور تصادفی دنبال کنیم. تلفات به دلیل گسترش ثابت در فرآیند شبیه سازی رخ می دهد.
این امر به وفور روشن می کند که اگر بخواهیم در تجارت با فرکانس بالاتر فرکانس با فرکانس بالاتر سود خود را بدست آوریم ، به یک لبه قابل اندازه گیری خاص نیاز خواهیم داشت که بازده مثبتی را بیش از هزینه های معامله مانند گسترش و لغزش ایجاد می کند.
ما در مورد این نکته بسیار مهم در ورودی های بعدی دفتر خاطرات تجارت فارکس چیزهای بیشتری خواهیم گفت.
مراحل بعدی
رفع محاسبات موقعیت
من اخیراً مکاتبات بسیار مفیدی با کاربران QSforex از طریق نظرات Disqus و صفحه مسائل QSForex در مورد صحت محاسبات در کلاس موقعیت داشته ام.
برخی خاطرنشان كردند كه محاسبات ممكن است دقیقاً آینه نشود كه چگونه OANDA (كارگزار مورد استفاده برای سیستم Trading. py) خود معاملات ارز متقابل را محاسبه می كند.
از این رو ، یکی از مهمترین مراحل بعدی این است که در واقع ساخت و آزمایش این اصلاحات پیشنهادی در Position. py و همچنین تست های واحد که در POSIT_TEST. PY زندگی می کنند ، به روز کنید. این یک اثر ضرب و شتم با Portfolio. py و همچنین Portfolio_Test. py خواهد داشت.
اندازه گیری عملکرد
در حالی که اکنون ما یک مجموعه اساسی از شاخص های عملکرد بصری را از طریق منحنی سهام ، مشخصات بازده و سری های عقب نشینی داریم ، ما به اقدامات عملکردی کمتری نیاز داریم.
به طور خاص ، ما به معیارهای سطح استراتژی ، از جمله نسبت ریسک/پاداش مشترک مانند نسبت شارپ ، نسبت اطلاعات و نسبت Sortino نیاز خواهیم داشت. ما همچنین به آمار کشش از جمله توزیع پیش بینی ها و همچنین آمار توصیفی مانند حداکثر کشش نیاز خواهیم داشت. معیارهای مفید دیگر شامل نرخ رشد سالانه مرکب (CAGR) و بازده کل است.
در سطح تجارت/موقعیت می خواهیم معیارهایی از قبیل سود/زیان AVG ، حداکثر سود/ضرر ، نسبت سود و نسبت برد/ضرر را ببینیم. از آنجا که ما از ابتدا کلاس موقعیت را به عنوان بخش اساسی نرم افزار ساخته ایم ، برای تولید این معیارها از طریق برخی از روش های اضافی نباید خیلی مشکل ساز باشد. با این حال ، اطلاعات بیشتر در مورد این موضوع!

qsalpha
به پلت فرم تحقیق QSALPHA بپیوندید که به پر کردن خط لوله تحقیق استراتژی شما کمک می کند ، نمونه کارها را متنوع می کند و بازده تنظیم شده ریسک را برای افزایش سودآوری بهبود می بخشد.

کوانتین
به پورتال عضویت QuantCademy بپیوندید که به جامعه بازرگان Quant Trader در حال رشد سریع در حال رشد است و یاد می گیرید که چگونه می توانید سودآوری استراتژی خود را افزایش دهید.

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

تجارت الگوریتمی پیشرفته
نحوه اجرای استراتژی های تجاری پیشرفته با استفاده از تجزیه و تحلیل سری زمانی ، یادگیری ماشین و آمار بیزی با R و Python.< SPAN> به پلت فرم تحقیق QSALPHA بپیوندید که به پر کردن خط لوله تحقیق استراتژی شما کمک می کند ، نمونه کارها را متنوع می کند و بازده تنظیم شده در ریسک را برای افزایش سودآوری بهبود می بخشد.
استراتژیهای اسکالپ...
ما را در سایت استراتژیهای اسکالپ دنبال می کنید
برچسب :
نویسنده : جعفر بدیعی
بازدید : <-PostHit->
تاريخ : دوشنبه
13 شهريور
1402 ساعت: 10:45