دفتر خاطرات معاملات فارکس شماره 5 - تجارت چند جفت ارز
دفتر خاطرات معاملات فارکس شماره 5 - تجارت چند جفت ارز
دیروز برخی از تغییرات مهم را در نرم افزار QSforex منتشر کردم. این تغییرات سودمندی سیستم را به میزان قابل توجهی افزایش داده است تا جایی که تقریباً برای پشت پرده کنه چند روزه در طیف وسیعی از جفت های ارز آماده است.
تغییرات زیر به GitHub ارسال شده است:
- اصلاح بیشتر در هر دو موقعیت و اشیاء نمونه کارها به منظور امکان معامله چندین جفت ارز و همچنین ارزهایی که در ارز حساب نمی شوند. از این رو ، یک حساب کارشناسی ارشد GBP اکنون می تواند EUR/USD را تجارت کند ، به عنوان مثال.
- تعمیرات اساسی در مورد چگونگی محاسبه موقعیت و نمونه کارها باز می شود ، بسته می شود ، اضافات و حذف واحدها. اکنون شیء موقعیت "بلند کردن سنگین" را ترک می کند و یک شیء نمونه کارها نسبتاً لاغر را ترک می کند.
- علاوه بر این از اولین استراتژی غیر اصلی ، یعنی استراتژی متقاطع متوسط در حال حرکت با یک جفت میانگین حرکت ساده (SMA).
- اصلاح به backtest. py برای ایجاد تک رشته و قطعی. با وجود خوش بینی من که یک رویکرد چند رشته ای برای دقت شبیه سازی خیلی مضر نخواهد بود ، اما به دست آوردن نتایج پس زمینه رضایت بخش با یک رویکرد چند رشته ای دشوار است.
- یک اسکریپت خروجی مبتنی بر MATPLOTLIB بسیار اساسی را برای مشاهده منحنی عدالت نمونه کارها معرفی کرد. نسل منحنی سهام در مراحل اولیه است و هنوز هم به کار زیادی نیاز دارد.
همانطور که در مطالب قبلی ذکر کردم ، برای کسانی از شما که با QSforex ناآشنا هستید و برای اولین بار به این سری Diary Forex می آیید ، من اکیداً پیشنهاد می کنم که مطالب خاطرات زیر را بخوانید تا بتوانید با نرم افزار سرعت بگیرید:
و همچنین صفحه GitHub برای qsforex:
پشتیبانی چند ارز
ویژگی ای که من به طور مداوم در این مطالب دفتر خاطرات مورد بحث قرار گرفته ام ، قابلیت پشتیبانی از چندین جفت ارز است.
در این مرحله من اکنون نرم افزار را اصلاح کرده ام تا به فرقه های مختلف حساب اجازه دهم ، زیرا قبلاً GBP ارز هارد کد شده بود. همچنین اکنون می توان تجارت سایر جفت های ارزی را تجارت کرد ، به جز مواردی که از یک پایه یا نقل قول در ین ژاپنی (JPY) تشکیل شده است. مورد دوم به دلیل چگونگی اندازه گیری اندازه کک در ارزهای JPY است.
برای دستیابی به این هدف ، نحوه محاسبه سود هنگام حذف واحدها یا بسته شدن موقعیت را اصلاح کرده ام. در اینجا قطعه فعلی برای محاسبه PIP ها ، در پرونده Position. py قرار دارد:
اگر موقعیت را برای تحقق سود یا ضرر ببندیم ، باید از قطعه زیر برای close_position استفاده کنیم ، همچنین در پرونده position. py:
در مرحله اول ، ما پیشنهاد را بدست می آوریم و برای هر دو جفت ارز و همچنین جفت ارز "نقل قول/خانه" قیمت می خواهیم. به عنوان مثال ، برای یک حساب کاربری در GBP ، جایی که ما در حال تجارت EUR/USD هستیم ، باید قیمت "USD/GBP" را بدست آوریم ، زیرا EUR ارز پایه است و USD نقل قول است.
در این مرحله بررسی می کنیم که آیا موقعیت خود یک موقعیت طولانی یا کوتاه است و سپس "حذف قیمت" و نقل قول/خانه "حذف قیمت" را که به ترتیب توسط remove_price و qh_close داده می شود ، محاسبه می کنیم.
سپس قیمت های فعلی و متوسط را در موقعیت به روز می کنیم و در نهایت P& L را با ضرب PIP ها ، قیمت نقل قول/حذف خانه و سپس تعداد واحدهایی که در حال بسته شدن هستیم محاسبه می کنیم.
ما نیاز به بحث در مورد "قرار گرفتن در معرض" را که یک متغیر زائد بود ، کاملاً از بین برده ایم. این فرمول سپس به درستی P& L را در برابر هرگونه تجارت جفت ارز (غیر JPY) ارائه می دهد.
تعمیرات اساسی در موقعیت و دست زدن به نمونه کارها
علاوه بر توانایی تجارت در جفت های چند ارز ، من همچنین تصحیح کردم که چگونه موقعیت و نمونه کارها مسئولیت افتتاح و بسته شدن موقعیت ها و همچنین اضافه کردن و تفریق واحدهای را به اشتراک می گذارم.
به طور خاص ، من بسیاری از کد های دستیابی به موقعیت را که در Portfolio. py بود به Position. py منتقل کردم. این طبیعی تر است زیرا موقعیت باید از خود مراقبت کند و آن را به نمونه کارها واگذار نکند!
به طور خاص ، روشهای add_units ، remove_units و close_position ایجاد شده یا تقویت شده است:
در دو مورد اخیر می توانید ببینید که چگونه فرمول جدید برای محاسبه سود اجرا می شود.
بنابراین بسیاری از عملکردهای کلاس نمونه کارها به همین ترتیب کاهش یافته است. به طور خاص روشهای add_new_position ، add_position_units ، remove_position_units و close_position اصلاح شده اند تا این واقعیت را در نظر بگیرند که کار محاسبه در شیء موقعیت انجام می شود:
در اصل همه آنها (جدا از add_new_position) به سادگی بررسی کنید که آیا موقعیت برای آن جفت ارز وجود دارد و سپس با استفاده از روش موقعیت مربوطه ، در صورت لزوم سود را در نظر می گیرید.
حرکت استراتژی متقاطع متوسط
ما در مورد استراتژی متقاطع میانگین متحرک قبلا در QuantStart در زمینه معاملات سهام بحث کرده ایم. این یک استراتژی نشانگر بستر آزمون بسیار مفید است زیرا به راحتی می توان محاسبات را با دست تکرار کرد (حداقل در فرکانس های پایین تر!)، تا بررسی شود که بک تستر همانطور که باید رفتار می کند.
ایده اصلی استراتژی به شرح زیر است:
- دو فیلتر میانگین متحرک مجزا، با دورههای بازنگری متفاوت، از یک سری زمانی خاص ایجاد میشوند.
- سیگنالهای خرید دارایی زمانی اتفاق میافتد که میانگین متحرک بازگشت کوتاهتر از میانگین متحرک بازنگری طولانیتر بیشتر شود.
- اگر میانگین طولانیتر متعاقباً از میانگین کوتاهتر بیشتر شود، دارایی دوباره فروخته میشود.
وقتی یک سری زمانی وارد یک دوره روند قوی می شود و سپس به آرامی روند را معکوس می کند، این استراتژی به خوبی کار می کند.
پیاده سازی سرراست است. در مرحله اول، ما یک روش calc_rolling_sma ارائه میکنیم که به ما امکان میدهد تا به طور موثرتری از محاسبه SMA دوره زمانی قبلی به منظور تولید روش جدید، بدون نیاز به محاسبه مجدد کامل SMA در هر مرحله استفاده کنیم.
ثانیاً در دو حالت سیگنال تولید می کنیم. در حالت اول، اگر SMA کوتاه از SMA بلند بیشتر شود و جفت ارز طولانی نباشیم، سیگنالی تولید می کنیم. در حالت دوم، اگر SMA طولانی از SMA کوتاه بیشتر شود و ما در حال حاضر طولانی هستیم، سیگنالی تولید می کنیم.
من پنجره پیش فرض را برای SMA کوتاه 500 تیک و برای SMA طولانی 2000 تیک تنظیم کرده ام. بدیهی است که در یک تنظیم تولید، این پارامترها بهینه می شوند، اما برای اهداف آزمایشی ما به خوبی کار می کنند.
بک تستر تک رشته ای
تغییر عمده دیگر این بود که مؤلفه بک تست را به جای چند رشته ای، تک رشته ای تغییر داد.
من این تغییر را انجام دادم زیرا برای همگام سازی رشته ها برای اجرای به شیوه ای که در یک محیط زنده رخ می دهد، مشکل داشتم. اساساً به این معنی بود که قیمتهای ورودی و خروجی بسیار غیرواقعی بودند و اغلب (مجازی) ساعتها پس از دریافت تیک واقعی رخ میدادند.
از این رو من جریان اشیاء TickEvent را در حلقه بک تست گنجانده ام، همانطور که در قطعه زیر از backtest. py مشاهده می کنید:
به خط ticker. stream_next_tick() توجه کنید. این قبل از نظرسنجی از صف رویدادها فراخوانی می شود و به این ترتیب همیشه تضمین می کند که یک رویداد تیک جدید قبل از نظرسنجی مجدد صف رسیده است.
به ویژه به این معنی است که با رسیدن اطلاعات جدید بازار، سیگنالی اجرا میشود، حتی اگر در فرآیند سفارش به دلیل لغزش تاخیر وجود داشته باشد.
من همچنین یک مقدار max_iters را تنظیم کرده ام که کنترل می کند که حلقه پشتی چه مدت ادامه دارد. در عمل این امر هنگام برخورد با چند ارز در طی چند روز بسیار زیاد است ، اما من آن را به یک مقدار پیش فرض تنظیم کرده ام که داده های یک روزه یک جفت ارز را امکان پذیر می کند.
روش stream_next_tick کلاس Handler Price شبیه به stream_to_queue است به جز اینکه روش بعدی را به صورت دستی () به صورت دستی می نامد ، به جای اینکه جریان کنه را در یک حلقه برای یک حلقه انجام دهد:
توجه کنید که پس از دریافت یک استثناء توقف متوقف می شود. این اجازه می دهد تا کد به جای خراب شدن در استثناء ، از سر گرفته شود.
خروجی ماتپلوتلیب
من همچنین یک اسکریپت خروجی بسیار اساسی Matplotlib را برای نمایش منحنی سهام ایجاد کرده ام. Output. Py در حال حاضر در فهرست Backtest Qsforex زندگی می کند و در زیر آورده شده است:
توجه کنید که یک متغیر تنظیمات جدید وجود دارد. اکنون به نام output_results_dir گفته می شود ، که باید در تنظیمات شما تنظیم شود. من آن را به یک دایرکتوری موقت در جای دیگر در سیستم پرونده خود نشان می دهم زیرا نمی خواهم به طور تصادفی هیچ نتیجه ای از سهام سهام را به پایه کد اضافه کنم!
منحنی سهام با داشتن یک ارزش تعادل به لیستی از فرهنگ لغت ها کار می کند ، با یک فرهنگ لغت مربوط به یک تمبر زمانی است.
پس از اتمام آزمون پشتی ، لیست فرهنگ لغت ها به یک Pandas Dataframe تبدیل می شود و از روش TO_CSV برای خروجی سهام استفاده می شود. CSV.
این اسکریپت خروجی به سادگی در پرونده می خواند و ستون تعادل DataFrame بعدی را ترسیم می کند.
می توانید قطعه قطعه را برای روشهای APPEND_EQUITY_ROW و OUTPUT_RESULTS کلاس نمونه کارها در زیر مشاهده کنید:
هر بار که execute_signal خوانده می شود ، روش قبلی فراخوانی می شود و مقدار Timestamp/Balance را به عضو سهام اضافه می کند.
در پایان Backtest output_results نامیده می شود که به سادگی لیست فرهنگ لغت ها را به یک DataFrame تبدیل می کند و سپس به فهرست مشخص شده OUTPUT_RESULTS_DIR وارد می شود.
متأسفانه ، این یک روش مخصوصاً مناسب برای ایجاد منحنی سهام نیست زیرا فقط در هنگام تولید سیگنال اتفاق می افتد. این بدان معنی است که P& L غیر واقعی را در نظر نمی گیرد.
در حالی که اینگونه است که تجارت واقعی رخ می دهد (تا زمانی که موقعیتی را ببندید ، هیچ پولی کسب نکرده اید!) این بدان معنی است که منحنی حقوق صاحبان سهام بین بروزرسانی های موجودی کاملاً مسطح باقی خواهد ماند. از همه بدتر ، MATPLOTLIB به طور پیش فرض به خطی بین این نقاط می پردازد ، بنابراین تصور غلط از P& L غیر واقعی را فراهم می کند.
راه حل این مشکل ایجاد یک ردیاب P& L غیر واقعی برای کلاس موقعیت است که به درستی در هر کنه به روز می شود. این کمی از نظر محاسباتی گرانتر است ، اما اجازه می دهد منحنی عدالت مفیدتر باشد. این ویژگی برای تاریخ بعدی برنامه ریزی شده است!
مراحل بعدی
کار اصلی بعدی برای Qsforex اجازه دادن به پشتی چند روزه است. در حال حاضر شیء HistoricCSVPriceHandler فقط یک روز ارزش داده های Dukascopy را برای هر جفت ارز مشخص بارگیری می کند.
برای انجام آزمایش چند روزه ، لازم است هر روز به صورت متوالی بارگیری و جریان یابد تا از پر کردن رم با کل تاریخچه داده های کنه جلوگیری شود. این امر به اصلاح روش stream_next_tick نیاز دارد. پس از اتمام این کار ، اجازه می دهد تا استراتژی بلند مدت پشتی در چند جفت باشد.
کار دیگر بهبود خروجی منحنی سهام است. به منظور محاسبه هر یک از معیارهای عملکرد معمول (مانند نسبت شارپ) ، باید درصد بازده درصد را در یک دوره زمانی خاص محاسبه کنیم. با این حال ، این امر مستلزم آن است که ما داده های کنه را در میله ها قرار دهیم تا بتوانیم بازده را برای یک دوره زمانی خاص محاسبه کنیم.
چنین بارینگ باید در فرکانس نمونه برداری اتفاق بیفتد که مشابه فرکانس معاملات باشد یا نسبت شارپ منعکس کننده ریسک/پاداش واقعی استراتژی نخواهد بود. این binning یک تمرین بی اهمیت نیست زیرا فرضیات زیادی وجود دارد که برای تولید "قیمت" برای هر سطل وجود دارد.
پس از اتمام این دو کار ، و داده های کافی به دست آمد ، ما در موقعیتی قرار خواهیم گرفت تا از استراتژی های فارکس مبتنی بر طیف گسترده ای از بخش های مختلف استفاده کنیم و منحنی های سهام عدالت را از اکثر هزینه های معاملات تولید کنیم. علاوه بر این ، آزمایش این استراتژی ها در حساب کاربری کاغذ تمرین ارائه شده توسط Oanda بسیار ساده خواهد بود.
این امر به شما امکان می دهد تصمیمات بسیار بهتری در مورد اجرای یک استراتژی در مقایسه با یک سیستم پشتی "تحقیق بیشتر" داشته باشید.
qsalpha
به بستر تحقیق QSALPHA بپیوندید که به پر کردن خط لوله تحقیق استراتژی شما کمک می کند ، نمونه کارها را متنوع می کند و بازده تنظیم شده ریسک را برای افزایش سودآوری بهبود می بخشد.
کوانتین
به پورتال عضویت QuantCademy بپیوندید که به جامعه بازرگانان Quant Trader با سرعت در حال رشد می پردازد و یاد می گیرید که چگونه می توانید سودآوری استراتژی خود را افزایش دهید.
تجارت الگوریتمی موفق
نحوه یافتن ایده های جدید استراتژی تجارت و ارزیابی عینی آنها را برای نمونه کارها خود با استفاده از موتور پشتی مبتنی بر پایتون ارزیابی کنید.
تجارت الگوریتمی پیشرفته
نحوه اجرای استراتژی های تجاری پیشرفته با استفاده از تجزیه و تحلیل سری زمانی ، یادگیری ماشین و آمار بیزی با R و Python.