خاطرات معاملات فارکس شماره 3 - منابع باز کردن سیستم معاملات فارکس
خاطرات معاملات فارکس شماره 3 - منابع باز کردن سیستم معاملات فارکس
در ورود امروز به دفتر خاطرات تجارت فارکس می خواهم در مورد برنامه طولانی مدت سیستم تجارت فارکس بحث کنم. علاوه بر این می خواهم تشریح کنم که چگونه از نوع داده های اعشاری پایتون استفاده کرده ام تا محاسبات دقیق تر شود.
تا به امروز ، ما در حال آزمایش با API Oanda REST بودیم تا ببینیم که چگونه با API ارائه شده توسط کارگزاران تعاملی مقایسه می شود. ما همچنین دیده ایم که چگونه می توان یک عنصر اصلی تکثیر نمونه کارها را به عنوان اولین گام به سوی یک سیستم مناسب برای پشت سر هم رویداد اختصاص داد. من همچنین در مورد هر دو مقاله قبلی نظرات مفیدی داشته ام (شماره 1 و شماره 2) ، که نشان می دهد بسیاری از شما علاقه مند به تغییر و گسترش کد خودتان هستید.
باز کردن سیستم تجارت فارکس
به دلایلی که در بالا ذکر شد ، تصمیم گرفتم سیستم معاملات فارکس را منبع باز کنم. این یعنی چی؟این بدان معناست که تمام کد های فعلی و آینده به صورت رایگان ، تحت مجوز منبع باز Liberal MIT ، در وب سایت کنترل نسخه GitHub در URL زیر در دسترس خواهند بود: https://github.com/mhallsmoore/qsforex.
برای کسانی از شما که قبلاً از Git و GitHub استفاده کرده اید ، می توانید کلون را از repo استفاده کنید و شروع به اصلاح آن برای اهداف خود کنید.
سیستم معاملاتی خودکار Quantstart Forex اکنون تحت مجوز MIT لیبرال منبع باز است. می توانید آخرین کد را در مورد GitHub تحت مخزن QSforex در https://github.com/mhallsmoore/qsforex پیدا کنید.
برای کسانی از شما که تازه وارد کنترل نسخه منبع هستند ، احتمالاً می خواهید در مورد نحوه عملکرد Git (و کنترل نسخه به طور کلی) با Ebastastic Ebook Pro Git بخوانید. اگر در صورت صرف زمان زیادی برای برنامه نویسی و به روزرسانی پروژه ها ، ارزش زیادی را برای یادگیری در مورد کنترل منبع صرف کنید ، زیرا باعث می شود سردرد عظیمی از سردرد در آینده صرفه جویی کنید!
"شروع سریع" برای یک سیستم اوبونتو نصب git است:
پس از آن شما نیاز به تهیه دایرکتوری برای پروژه Qsforex برای زندگی در و "کلون" پروژه از سایت GitHub به شرح زیر دارید:
در این مرحله شما نیاز به ایجاد یک محیط مجازی برای اجرای کد دارید:
سپس شما نیاز به نصب الزامات دارید (این کار مدتی طول خواهد کشید!):
سرانجام شما نیاز به ایجاد یک پیوند نمادین در محیط مجازی Python خود دارید تا به شما امکان دهد واردات qsforex را در کد خود تایپ کنید (و آن را اجرا کنید!):
همانطور که در نوشته های قبلی اشاره کردم ، باید متغیرهای محیط لازم را برای اعتبار احراز هویت OANDA خود ایجاد کنید. لطفاً برای راهنمایی در مورد نحوه انجام این کار به دفتر خاطرات شماره 2 مراجعه کنید.
لطفاً به Readme مرتبط با repo توجه کنید ، زیرا حاوی دستورالعمل های نصب ، سلب مسئولیت و ضمانت استفاده از کد است.
از آنجا که این نرم افزار در حالت "آلفا" قرار دارد ، با پیشرفت زمان ، این دستورالعمل ها ساده تر می شوند. به طور خاص سعی خواهم کرد که پروژه را به یک بسته پایتون بپیچم تا بتواند به راحتی از طریق PIP نصب شود.
اگر در مورد روش نصب سؤالی دارید ، لطفاً با تیم ما در [email protected] تماس بگیرید.
برنامه بلند مدت
"فلسفه" سیستم تجارت فارکس ، مانند بقیه سایت Quantstart ، تلاش و تقلید از معاملات زندگی واقعی تا حد امکان در پشتی ما است. این بدان معناست که شامل جزئیاتی است که اغلب از موقعیت های پشتی "تحقیق گرا" بیشتر حذف می شوند. تأخیر ، قطع سرور ، اتوماسیون ، نظارت ، هزینه های معامله واقع بینانه همه در مدل ها گنجانده می شوند تا ایده خوبی در مورد چگونگی عملکرد یک استراتژی به ما ارائه دهند.
از آنجا که ما به داده های تیک دسترسی خواهیم داشت (پیشنهادات/زمان بندی پیشنهادات) ما قادر خواهیم بود گسترش را در هزینه های معامله گنجانیم. ما همچنین می توانیم لغزش را مدل کنیم. برای مدل سازی تأثیر بازار کمتر از این امر کم است ، اگرچه این نگرانی در مبالغ معاملات کوچکتر کمتر است.
علاوه بر هزینه های معامله ، ما می خواهیم با استفاده از پوشش ریسک و اندازه موقعیت ، مدیریت نمونه کارها قوی را مدل کنیم.
بنابراین چه چیزی در حال حاضر در سیستم تجارت فارکس تا به امروز گنجانده شده است؟
- معماری مبتنی بر رویداد-سیستم معاملات فارکس به عنوان یک سیستم رویداد محور از زمین به بالا طراحی شده است ، زیرا اینگونه است که یک سیستم معاملاتی Intraday در یک محیط زنده اجرا می شود.
- جریان قیمت - ما یک شیء اصلی جریان قیمت داریم. این در حال حاضر اشتراک فقط به یک جفت واحد است ، اما ما می توانیم به راحتی این کار را برای عضویت در چندین جفت ارز تغییر دهیم.
- تولید سیگنال - ما می توانیم با استفاده از شیء استراتژی ، استراتژی های معاملاتی (مستقیماً از قیمت های گذشته و کنونی) استفاده کنیم ، که باعث ایجاد اشیاء Signalevent می شود.
- اجرای سفارش - ما یک سیستم اجرای سفارش ساده لوحانه داریم که کورکورانه سفارشات را از نمونه کارها به Oanda ارسال می کند. منظور من از "کورکورانه" نیست که هیچگونه مدیریت ریسک یا اندازه موقعیت انجام نشده است ، و نه اجرای الگوریتمی که ممکن است منجر به کاهش هزینه های معامله شود.
- ارز پایه GBP - برای ساده نگه داشتن همه چیز، من فقط سیستم را برای ارز پایه GBP نوشته ام. این شاید مهم ترین جنبه ای باشد که باید تغییر دهید، با توجه به اینکه چه تعداد از شما حساب های عملی به USD، EUR، CAD، JPY، AUD و NZD خواهید داشت!
- معاملات GBP/USD - من "کابل" را به عنوان جفت ارز برای آزمایش موقعیت اولیه و اشیاء نمونه کارها انتخاب کردم. مدیریت چندین جفت ارز یک گام مهم بعدی است. این شامل اصلاح موقعیت و محاسبات پورتفولیو است.
- مدیریت اعشاری - هر سیستم معاملاتی تولید باید محاسبات ارز را به درستی انجام دهد. به ویژه، مقادیر ارز نباید به عنوان انواع داده های ممیز شناور ذخیره شوند، زیرا خطاهای گرد کردن انباشته می شوند. لطفاً برای جزئیات بیشتر این مقاله فوق العاده در مورد نمایش ممیز شناور را ببینید.
- معاملات طولانی/کوتاه - بین ورودی های دفتر خاطرات شماره 2 و شماره 3، من توانایی کوتاه کردن یک جفت ارز را اضافه کردم (برخلاف اینکه فقط می توانید طولانی شوید). مهمتر از همه، این نیز واحد تست شده است.
- مدیریت پورتفولیو محلی - به نظر من انجام یک بک آزمون که عملکرد استراتژی را به دلیل مفروضات غیر واقعی افزایش می دهد در بهترین حالت آزاردهنده و در بدترین حالت بسیار بی سود است! معرفی یک شیء پورتفولیوی محلی که محاسبات OANDA را تکرار می کند به این معنی است که می توانیم محاسبات داخلی خود را در حین انجام معاملات عملی بررسی کنیم، که وقتی بعداً از همان شی پورتفولیو برای بک آزمایش داده های تاریخی استفاده می کنیم، اطمینان بیشتری به ما می دهد.
- تست های واحد برای موقعیت/پورتفولیو - در حالی که من مستقیماً به آن در نوشته های خاطرات شماره 1 و شماره 2 اشاره نکرده ام، در واقع در حال نوشتن چند آزمون واحد برای اشیاء Portfolio و Position بوده ام. از آنجایی که اینها برای محاسبات استراتژی بسیار مهم هستند، باید بسیار مطمئن بود که آنها مطابق انتظار عمل می کنند. یکی دیگر از مزایای این آزمایش ها این است که امکان اصلاح محاسبات اساسی را فراهم می کنند، به طوری که اگر همه آزمایش ها همچنان موفق شوند، می توانیم مطمئن باشیم که سیستم کلی به رفتار مورد انتظار ادامه می دهد.
در این مرحله سیستم معاملاتی فارکس فاقد عملکرد زیر است:
- Slippage Handling - این سیستم در حال حاضر لغزش های زیادی را به دلیل ماهیت فرکانس بالای داده های تیک ارائه شده از OANDA ایجاد می کند. این بدان معنی است که موجودی پرتفوی محاسبه شده به صورت محلی منعکس کننده مانده محاسبه شده توسط OANDA نیست. تا زمانی که مدیریت رویداد و تنظیم لغزش درست انجام نشود، این بدان معنی است که یک بک تست واقعیت را به درستی منعکس نخواهد کرد.
- ارزهای چند پایه - ما در حال حاضر به GBP محدود شده ایم. حداقل ما باید شامل فرقه های اصلی ارز - USD ، EUR ، CAD ، AUD ، JPY و NZD شویم.
- چند جفت ارز - به همین ترتیب ما باید از جفت های اصلی ارز فراتر از "کابل" (GBP/USD) پشتیبانی کنیم. دو جنبه برای این وجود دارد. اولین مورد این است که محاسبات را به درستی انجام دهیم که هیچ پایه یا نقل قول یک جفت ارز برابر با ارز فرقه حساب نباشد. جنبه دوم پشتیبانی از چندین موقعیت است تا بتوانیم یک نمونه کارها از جفت ارز را تجارت کنیم.
- مدیریت ریسک - بسیاری از آزمونهای "تحقیق" به طور کامل مدیریت ریسک را نادیده می گیرند. متأسفانه این به طور کلی برای کوتاه بودن در توصیف قوانین یک استراتژی ضروری است. در واقعیت ، ما در هنگام تجارت از پوشش ریسک استفاده می کنیم ، در غیر این صورت بسیار محتمل است که در برخی از مراحل متحمل ضرر قابل توجهی شویم. این بدان معنا نیست که مدیریت ریسک می تواند کاملاً از این امر جلوگیری کند ، اما مطمئناً آن را کمتر می کند!
- بهینه سازی نمونه کارها - در یک محیط نهادی ما یک دستورالعمل سرمایه گذاری خواهیم داشت که یک سیستم مدیریت نمونه کارها را با قوانین مختلف تخصیص دیکته می کند. در یک محیط خرده فروشی/شخصی ممکن است بخواهیم از یک رویکرد اندازه گیری موقعیت مانند معیار کلی استفاده کنیم تا حداکثر سرعت رشد مرکب بلند مدت خود را به حداکثر برسانیم.
- استراتژی های قوی - من فقط برخی از سیگنال های تصادفی ساده را نشان داده ام که استراتژی های "اسباب بازی" را تا به امروز تولید می کنند. اکنون که ما شروع به ایجاد یک سیستم معاملاتی قابل اعتماد در داخل فارکس می کنیم ، باید شروع به انجام برخی از استراتژی های جالب تر کنیم. ورودی های خاطرات آینده بر استراتژی های تهیه شده از ترکیبی از شاخص ها/فیلترهای "فنی" و همچنین مدل های سری زمانی و تکنیک های یادگیری ماشین متمرکز خواهد شد.
- استقرار از راه دور - از آنجا که ما به طور بالقوه علاقه مند به معامله 24 ساعته هستیم (حداقل در طول هفته!) ما به یک تنظیم پیشرفته تر از اجرای Backtester در دستگاه دسک تاپ/لپ تاپ محلی در خانه نیاز داریم. بسیار مهم است که ما یک سرور از راه دور قوی از سیستم خود را با افزونگی و نظارت مناسب ایجاد کنیم.
- Backtesting تاریخی - ما شیء نمونه کارها را ساخته ایم تا به ما اجازه دهد تا پشتوانه واقع بینانه را انجام دهیم. در این مرحله ما یک سیستم ذخیره سازی داده های کنه تاریخی را از دست نمی دهیم. در مقالات بعدی به دنبال به دست آوردن داده های کنه تاریخی و ذخیره آن در یک پایگاه داده مناسب ، مانند HDF5 خواهیم بود.
- بانک اطلاعاتی تجارت - در نهایت ما می خواهیم معاملات زنده خود را در پایگاه داده خودمان ذخیره کنیم. این به ما امکان می دهد تا تجزیه و تحلیل های خود را در داده های معاملاتی زنده انجام دهیم. یک توصیه خوب برای یک بانک اطلاعاتی رابطه ای می تواند PostgreSQL یا MySQL باشد.
- نظارت و در دسترس بودن بالا - از آنجا که ما در حال بررسی یک سیستم داخلی با فرکانس بالا هستیم ، باید نظارت جامع و افزونگی در دسترس را انجام دهیم. این به معنای گزارش در استفاده از CPU ، استفاده از دیسک ، شبکه I/O ، تأخیر و بررسی اینکه هر اسکریپت های دوره ای برای ادامه کار تنظیم شده است. علاوه بر این ما به یک پشتیبان گیری و بازیابی استراتژی نیاز داریم. از خود بپرسید که اگر موقعیت های باز بزرگ ، در یک بازار بی ثبات داشته باشید ، چه برنامه های پشتیبان دارید و سرور شما به طور ناگهانی درگذشت. باور کنید ، این اتفاق می افتد!
- ادغام چندگانه/رفع - در حال حاضر ما به شدت با کارگزار Oanda همراه هستیم. همانطور که گفتم این فقط به این دلیل است که من به API آنها رسیدم و فهمیدم که یک پیشنهاد مدرن است. تعداد زیادی از کارگزاران دیگر در آنجا وجود دارند که بسیاری از آنها از پروتکل رفع پشتیبانی می کنند. اضافه کردن قابلیت رفع باعث افزایش تعداد کارگزاران می شود که می توانند با سیستم استفاده شوند.
- کنترل و گزارشگری GUI - در حال حاضر سیستم کاملاً کنسول/خط فرمان مبتنی بر است. حداقل برای نمایش نتایج پشتی به برخی از نمودارهای اساسی نیاز خواهیم داشت. یک سیستم پیشرفته تر آمار خلاصه ای از معاملات ، معیارهای عملکرد سطح استراتژی و همچنین عملکرد کلی نمونه کارها را در بر می گیرد. این رابط کاربری گرافیکی می تواند با استفاده از یک سیستم پنجره ای متقاطع مانند QT یا Tkinter اجرا شود. همچنین می تواند با استفاده از یک قسمت جلویی مبتنی بر وب ، با استفاده از یک چارچوب وب مانند Django ارائه شود.
همانطور که مشاهده می شود عملکرد زیادی در نقشه راه باقی مانده است! گفته می شود ، هر ورودی خاطرات جدید (و کمک های بالقوه جامعه!) پروژه را به جلو سوق می دهد.
داده های اعشاری
اکنون که ما در مورد برنامه بلند مدت بحث کرده ایم ، می خواهم برخی از تغییراتی را که از زمان ورود خاطرات شماره 2 به کد ایجاد کرده ام ارائه دهم. به طور خاص ، من می خواهم توصیف کنم که چگونه کد را اصلاح کردم تا به جای استفاده از ذخیره نقطه شناور ، نوع داده های اعشاری را اداره کنم. این یک تغییر بسیار مهم است زیرا بازنمایی های نقطه شناور منبع قابل توجهی از خطای بلند مدت در سیستم های مدیریت نمونه کارها و سفارشات هستند.
پایتون به طور بومی از بازنمایی اعشاری به دقت دلخواه پشتیبانی می کند. عملکرد در کتابخانه اعشاری موجود است.
به طور خاص ما باید مقدار-هر مقدار را تغییر دهیم که در یک محاسبه موقعیت به یک نوع داده اعشاری ظاهر می شود. این شامل واحدها ، قرار گرفتن در معرض ، پیپ ، سود و درصد سود است. این تضمین می کند که ما در کنترل چگونگی رسیدگی به مسائل گرد در هنگام برخورد با بازنمایی های ارز که دارای دو مکان اعشاری دقیق هستند ، کنترل می کنیم. به طور خاص ما باید روش گرد را انتخاب کنیم. پایتون از چند نوع مختلف پشتیبانی می کند ، اما ما قصد داریم با Round_Half_Down برویم ، که با پیوندها به سمت صفر می رود.
در اینجا نمونه ای از نحوه اصلاح کد برای رسیدگی به انواع داده های اعشاری از بازنمایی های نقطه شناور قبلی آنها آورده شده است. در زیر لیستی از موقعیت . py وجود دارد:
توجه داشته باشید که ما باید یک استدلال رشته ای را به جای یک استدلال نقطه شناور ارائه دهیم. این امر به این دلیل است که یک رشته دقیقاً دقت مقدار را مشخص می کند ، در حالی که یک نوع نقطه شناور نخواهد بود.
همچنین توجه داشته باشید که وقتی شروع به ذخیره معاملات خود در یک پایگاه داده رابطه ای می کنیم (همانطور که در نقشه راه توضیح داده شده است) باید اطمینان حاصل کنیم که یک بار دیگر از نوع داده صحیح استفاده می کنیم. PostgreSQL و MySQL از بازنمایی اعشاری پشتیبانی می کنند. بسیار مهم است که ما هنگام ایجاد طرحواره پایگاه داده خود از این داده ها استفاده کنیم ، در غیر این صورت به خطاهای گرد خواهیم رسید که تشخیص آن بسیار دشوار است!
برای کسانی که علاقه مند به بحث عمیق تر در مورد این موضوعات هستند ، در ریاضیات و علوم کامپیوتر ، موضوع تجزیه و تحلیل عددی شامل موضوعات ذخیره سازی نقطه شناور ، از جمله بسیاری دیگر از موضوعات جالب است.
در ورودی های خاطرات بعدی ، ما می خواهیم در مورد چگونگی استفاده از آزمایش واحد به کد و اینکه چگونه می توانیم با اصلاح محاسبات موقعیت ، نرم افزار را به جفت های ارز بیشتر گسترش دهیم ، بحث کنیم.
کد کامل پایتون
از آنجا که کد منبع کامل این پروژه اکنون منبع باز است ، تحت مجوز MIT ، همیشه می توانید در https://github.com/mhallsmoore/qsforex ، با مستندات همراه پیدا کنید.
اگر مایل به خواندن مطالب دیگر این سریال هستید ، لطفاً پیوندهای زیر را دنبال کنید:

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

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

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

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