تجارت خودکار ارزها

  • 2022-02-11

خاطرات معاملات فارکس شماره 2 - اضافه کردن یک نمونه کار به سیستم معاملاتی خودکار Oanda

خاطرات معاملات فارکس شماره 2 - اضافه کردن یک نمونه کار به سیستم معاملاتی خودکار Oanda

در آخرین ورودی خاطرات معاملات فارکس (شماره 1) من نحوه ساخت یک سیستم معاملاتی خودکار را که به API کارگزاری Oanda Forex متصل می شود ، توضیح دادم. من همچنین اشاره کردم که مراحل بعدی شامل ساخت یک نمونه کارها و پوشش مدیریت ریسک برای همه سیگنال های پیشنهادی تولید شده توسط مؤلفه استراتژی است. در این دفتر خاطرات می خواهم در مورد تلاش خود برای ساختن یک مؤلفه پرتفوی عملکردی و تا چه اندازه پیشرفت کرده ام.

بعد از نوشتن آخرین مطلب ، فهمیدم که واقعاً می خواهم راهی را داشته باشم که بتوانم استراتژی های فارکس را به همان روشی که قبلاً با سهام خود از طریق پشتوانه رویداد محور نشان داده بودم ، پشت سر بگذارم. من می خواستم در آنجا تفاوت بین محیط تجارت زنده و سیستم پشتی داشته باشد. از این رو تصمیم گرفتم که نیاز به ساختن یک مؤلفه نمونه کارها داشته باشم که وضعیت فعلی حساب تجارت را مطابق آنچه توسط OANDA آورده شده است منعکس کند.

دلیل این امر این است که حساب تجارت "عمل" و اجزای محلی نمونه کارها باید دارای مقادیر مشابه ، اگر برابر نباشند ، برای ویژگی هایی مانند مانده حساب ، سود و زیان غیر واقعی (P&L) ، P&L تحقق یافته و هر موقعیت باز داشته باشندواداگر من می توانم به این هدف برسم و برخی از استراتژی های آزمایشی را از طریق آن اجرا کنم ، و اگر به نظر می رسد که این ویژگی ها در هر دو شیء محلی نمونه کارها و OANDA برابر هستند ، می توانم به توانایی Backtester در تولید نتایج واقع بینانه تر به عنوان و چه زمانی استراتژی ها اعتماد کنم. مستقر شدند

من دو روز گذشته را صرف تلاش برای اجرای چنین شیء نمونه کارها کردم و معتقدم که تقریباً موفق شده ام. من هنوز هم بعد از انجام تعدادی از معاملات ، بین مانده حساب محلی و مانده حساب OANDA تفاوت هایی را مشاهده می کنم.

محدودیت های فعلی این اجرای چیست؟

  • ارز پایه و در نتیجه قرار گرفتن در معرض ، سخت است که GBP باشد (از آنجا که من در لندن هستم!). من به زودی این کار را می کنم تا هرگونه انتخاب ارز پایه را انتخاب کنم.
  • در حال حاضر من فقط این کار را در برابر GBP/USD آزمایش کرده ام ، زیرا ارز پایه من GBP است. به زودی محاسبات قرار گرفتن در معرض را اصلاح می کنم تا هر جفت ارز اجازه دهد.
  • در حالی که برخی از آزمایشات واحد نشان داده است که علاوه بر این و حذف موقعیت ها و واحدها همانطور که انتظار دارم کار می کند ، هنوز آزمایش نشده است.
  • من تاکنون فقط آن را با باز و بسته شدن موقعیت های طولانی آزمایش کرده ام ، موقعیت های کوتاه را آزمایش نکرده ام. برای رسیدگی به موقعیت های کوتاه ، باید برخی از تست های واحد را بنویسم.

ممکن است کسی به طور معقول بپرسد که چرا من این همه محدودیت ها را دارد؟دلیل منطقی در اینجا این است که من می خواهم افراد در تمام سطوح بدانند که ساخت سیستم های تجارت الگوریتمی کار سختی است و به جزئیات نیاز به توجه زیادی دارد!دامنه قابل توجهی برای معرفی اشکالات و رفتار نادرست وجود دارد. من می خواهم تشریح کنم که چگونه سیستم های "دنیای واقعی" ساخته شده اند و به شما نشان می دهم که چگونه می توانید برای این خطاها آزمایش کنید و آنها را اصلاح کنید.

من با توصیف چگونگی ساخت مجموعه فعلی نمونه کارها شروع می کنم و سپس آن را در سیستم تجارت تمرین که در ورودی قبلی به آن نگاه می کنیم ، ادغام کردم. سپس دلایلی را برای آنچه فکر می کنم اختلافات ممکن است ارائه می دهم.

من تمام کد "همانطور که هست" را تحت ضمانتی که در ورودی قبلی بیان کردم ارائه داده ام. اگر می خواهید یک نمایشنامه با آن داشته باشید و سعی کنید بفهمید چه اشتباهی ممکن است انجام شود ، بسیار جالب است که در مورد نظرات Disqus در زیر بحث کنید!

ایجاد نمونه کارها

به منظور تولید یک شیء نمونه کارها ، لازم است در مورد نحوه انجام معاملات ارزی بحث شود ، زیرا آنها کاملاً قابل ملاحظه ای با سهام هستند.

محاسبه پیپ و واحدها

در سایر کلاس های دارایی ، کوچکترین افزایش تغییر در قیمت دارایی به عنوان "کنه" شناخته می شود. در معاملات ارزی به عنوان "پیپ" (نقطه بهره قیمت) شناخته می شود. این کوچکترین افزایش در هر جفت ارز است و (معمولاً) 1/100 درصد درصد است که به عنوان یک نقطه پایه نیز شناخته می شود. از آنجا که اکثر جفت های اصلی ارز به چهار مکان اعشاری قیمت گذاری می شوند ، کوچکترین تغییر در آخرین نقطه اعشاری رخ می دهد.

به عنوان مثال ، در GPB/USD ، حرکتی از 1. 5184 به 1. 5185 یک PIP (4 مکان اعشاری) است و بنابراین یک PIP برابر با 0. 0001 است. هر ارز مبتنی بر ین ژاپنی از دو پیپ مکان اعشاری استفاده می کند ، بنابراین یک PIP برابر با 0. 01 خواهد بود.

سوالی که اکنون می توانیم بپرسیم این است که چقدر در استرلینگ (GBP) حرکت 20 پیپ (20 0. 0001 = 0. 002) معادل با مقداری ثابت از واحدهای GBP/USD است؟اگر 2،000 واحد از ارز پایه (به عنوان مثال 2000 پوند) بگیریم ، می توانیم P&L را در استرلینگ به شرح زیر محاسبه کنیم:

سود (GBP) = PIPS x قرار گرفتن در معرض / GBPUSD = 0. 002 x 2،000 / 1. 5185 = 2. 63

با OANDA ما می توانیم تعداد واحدهای معامله شده را انتخاب کنیم (و در نتیجه قرار گرفتن در معرض ایجاد شده). از آنجا که من یک حساب مبتنی بر استرلینگ (GBP) دارم و برای این مثال GBP/USD را تجارت می کنم ، قرار گرفتن در معرض همیشه با تعداد واحدها برابر خواهد بود. این در حال حاضر به سیستم زیر "هارد کد" شده است. هنگامی که چندین گزینه جفت ارز ایجاد می کنم ، محاسبه قرار گرفتن در معرض را تغییر می دهم تا ارزهای پایه متفاوتی را در نظر بگیرم.

از آنجا که ارزش سود توضیح داده شده در بالا بسیار اندک است ، و ارزها مقدار زیادی نوسان نمی کنند (به جز هنگامی که آنها انجام می دهند!) ، معمولاً لازم است که اهرم را به حساب وارد کنید. من در مقاله های بعدی در مورد این موضوع بحث خواهم کرد. در حال حاضر ، ما نیازی به نگرانی در مورد آن نخواهیم داشت.

نمای کلی از سیستم پشتی/تجارت

سیستم فعلی از مؤلفه های زیر تشکیل شده است:

  • رویداد - مؤلفه های رویداد "پیام ها" (مانند کنه ، سیگنال و سفارشات) را بین استراتژی ، نمونه کارها و اشیاء اجرا حمل می کنند.
  • موقعیت - مؤلفه موقعیت نشان دهنده مفهوم "موقعیت" فارکس است ، که یک "طولانی" یا "کوتاه" در یک جفت ارز با تعداد واحدهای مرتبط است.
  • نمونه کارها - مؤلفه نمونه کارها حاوی اشیاء موقعیت چندگانه است ، یکی برای هر جفت ارز که معامله می شود. این P&L فعلی هر موقعیت را ردیابی می کند ، حتی پس از افزودنیهای بعدی و کاهش در واحدها.
  • استراتژی - شیء استراتژی اطلاعات سری زمانی (کنه های جفت کورنی) را می گیرد و سپس رویدادهای سیگنال را به نمونه کارها محاسبه و ارسال می کند ، که تصمیم می گیرند چگونه بر روی آنها عمل کنند.
  • جریان قیمت فارکس-این مؤلفه از طریق یک سوکت وب جریان به Oanda متصل می شود و داده های تیک تیک در زمان واقعی (یعنی پیشنهاد/سؤال) را از هر جفت ارز مشترک دریافت می کند.
  • اعدام - اعدام رویدادهای سفارش را انجام می دهد و آنها را به Oanda ارسال می کند تا پر شود.
  • Trading Loop - حلقه معاملاتی تمام اجزای فوق را به هم می پیوندد و دو موضوع را اجرا می کند: یکی برای قیمت های جریان و دیگری برای کنترل کننده رویداد.

برای به دست آوردن بینش بیشتر در مورد نحوه اتصال سیستم ، ارزش خواندن ورودی قبلی در دفتر خاطرات را دارد.

اجرای پایتون

اکنون در مورد نحوه اجرای سیستم فوق در پایتون بحث خواهیم کرد.

موقعیت

اولین مؤلفه جدید شیء موقعیت است. این برنامه برای تکرار رفتار یک موقعیت باز در سیستم تمرین Oanda FXTRADE طراحی شده است. برگه موقعیت در نرم افزار fxtrade شامل 8 ستون است:

  • نوع - آیا موقعیت "طولانی" یا "کوتاه" است
  • بازار - کدام جفت ارز برای تجارت ، به عنوان مثال"GBP/USD"
  • واحدها - تعداد واحدهای ارز (به بالا مراجعه کنید)
  • قرار گرفتن در معرض (پایه) - قرار گرفتن در معرض ارز پایه موقعیت
  • Avg. Price - The average price achieved for multiple purchases. If there are $P$ purchases, this is calculated as $\frac^P c_p u_p >^ u_p>$ ، جایی که $ c_p $ هزینه خرید $ p $ و $ u_p $ واحدهای به دست آمده برای خرید $ p $ است.
  • فعلی - قیمت فروش فعلی.
  • سود (پایه) - P&L فعلی در ارز پایه موقعیت.
  • سود (٪) - درصد فعلی P&L موقعیت.

همانطور که در کد زیر مشاهده می کنید ، این ویژگی ها در اعضای کلاس موقعیت منعکس شده است ، به استثنای "نوع" ، که من به "طرف" تغییر نام داده ام ، زیرا نوع یک کلمه محفوظ در پایتون است!

این کلاس چهار روش غیر استیضاح دارد: محاسبه_پپس ، محاسبه_پروفیت_باز ، محاسبه_پروفیت_پر و به روز رسانی_پریس.

روش اول ، محاسبه_PIPS ، تعداد پیپ هایی را که از زمان باز شدن توسط این موقعیت ایجاد شده است تعیین می کند (با در نظر گرفتن هر واحد جدید اضافه شده به موقعیت). روش دوم ، محاسبه_پروفیت_Base ، سود فعلی (یا ضرر!) را در این موقعیت محاسبه می کند. روش سوم ، محاسبه_پروفیت_پر ، درصد سود این موقعیت را تعیین می کند. سرانجام ، به روز رسانی_position_price دو مقدار قبلی را بر اساس داده های فعلی بازار به روز می کند.

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

اکنون بیایید در مورد نحوه تنظیم یک محیط مجازی اساسی برای پایتون و سپس نحوه عملکرد نمونه کارها بحث کنیم.

محیط مجازی

در ماژول شیء نمونه کارها زیر نحوه عملکرد واردات را اصلاح کرده ام. من یک محیط مجازی ایجاد کرده ام ، به موجب آن من یک Symlink را به فهرست Qsforex خود اضافه کرده ام. این به من اجازه می دهد تا یک سلسله مراتب تو در تو از پرونده های پروژه را در هر ماژول پایتون ارجاع دهم. کد برای دستیابی به این هدف در اوبونتو چیزی شبیه به این است:

بدیهی است که شما باید مکان های محیط مجازی و محل کد منبع خود را جایگزین کنید. من محیط های مجازی خود را در زیر فهرست خانه ذخیره می کنم~/ venv/ dir. من پروژه هایم را در زیر فهرست خانه در آن ذخیره می کنم~/ سایت ها/ DIR.

این به من اجازه می دهد ، به عنوان مثال ، از qsforex. event. event واردات Orderevent را از هر پرونده در پروژه ارجاع دهم.

نمونه کارها

سازنده __init__ نمونه کارها به استدلال های زیر نیاز دارد:

  • Ticker - این استیلر تیکت قیمت فرکس است. از آن برای به دست آوردن آخرین قیمت پیشنهاد/درخواست استفاده می شود.
  • رویدادها - این صف رویدادها است که نمونه کارها برای ایجاد رویدادها به آن نیاز دارد.
  • پایه - این ارز پایه است ، در مورد من این GBP است.
  • اهرم - این عامل اهرم است. در حال حاضر آن 1:20 است.
  • حقوق صاحبان سهام - این مقدار سهام واقعی در حساب است که من به 100000 پوند پیش فرض کرده ام.
  • Risk_Per_Trade - این درصد از سهام حساب برای ریسک در هر تجارت است که من به 2 ٪ پیش فرض کرده ام. این بدان معنی است که واحدهای تجاری با اندازه 2،000 برای اندازه اولیه 100000 پوند برابر خواهند بود.

پس از اولیه سازی ، کلاس Trade_Units را محاسبه می کند ، که حداکثر واحدهای مجاز در هر موقعیت ، و همچنین اعلام فرهنگ لغت موقعیت ها (هر بازار یک کلیدی است) که شامل تمام موقعیت های باز در نمونه کارها است:

در این مرحله "مدیریت ریسک" کاملاً ناخوشایند است!در روش calc_risk_position_size در زیر ما به سادگی اطمینان می دهیم که قرار گرفتن در معرض هر موقعیت از Risk_Per_Trade ٪ از سهام حساب جاری تجاوز نمی کند. Risk_Per_Trade با استدلال کلمه کلیدی به 2 ٪ پیش فرض می کند ، اگرچه این امر بدیهی است که می تواند تغییر کند. از این رو برای یک حساب 100000 پوند ، ریسک در هر تجارت از 2000 پوند در هر موقعیت تجاوز نمی کند.

توجه داشته باشید که این رقم با اندازه مانده حساب به صورت پویا مقیاس نخواهد بود ، فقط از مانده حساب اولیه استفاده می کند. پیاده سازی های بعدی شامل ریسک و اندازه موقعیت پیشرفته تر خواهد بود.

روش بعدی ، add_new_position ، پارامترهای لازم را برای اضافه کردن موقعیت جدید به نمونه کارها می گیرد. نکته قابل توجه این است که add_price و remove_price را می گیرد. من از پیشنهاد استفاده نکرده ام و قیمت ها را مستقیماً از آنها سؤال نکرده ام زیرا قیمت افزودن و حذف بستگی به این دارد که طرف "طولانی" یا "کوتاه" باشد. از این رو ما باید به درستی مشخص کنیم که قیمت آن برای به دست آوردن یک پشتی واقع بینانه است:

ما همچنین به یک روش ، add_position_units نیاز داریم ، که اجازه می دهد واحدها پس از ایجاد موقعیت به یک موقعیت اضافه شوند. برای انجام این کار باید میانگین قیمت جدید واحدهای خریداری شده را محاسبه کنیم. به یاد بیاورید که این با عبارت زیر محاسبه می شود:

در جایی که $ p $ تعداد خریدها است ، $ c_p $ هزینه خرید $ p $ و $ u_p $ واحدهای خریداری شده با خرید $ p $ است.

پس از محاسبه قیمت متوسط جدید ، واحدها در موقعیت به روز می شوند و سپس P&L مرتبط با موقعیت محاسبه می شود:

به همین ترتیب ، ما به روشی نیاز داریم تا واحدها را از یک موقعیت خارج کنیم (اما آن را به طور کامل ببندید). این توسط remove_position_units داده می شود. پس از کاهش واحدها و قرار گرفتن در معرض ، P&L برای واحدهای حذف شده محاسبه می شود و سپس از تعادل نمونه کارها اضافه می شود (یا کم می شود!):

ما همچنین به راهی برای بستن کامل یک موقعیت نیاز داریم. این توسط close_position داده شده است. این شبیه به remove_position_units است به جز اینکه موقعیت از فرهنگ لغت موقعیت ها حذف می شود:

بخش عمده ای از کار برای کلاس به روش Execute_Signal انجام می شود. این اشیاء Signalevent ایجاد شده از اشیاء استراتژی را می گیرد و از اینها برای تولید اشیاء Orderevent استفاده می کند تا به صف رویدادها بازگردند.

منطق اساسی به شرح زیر است:

  • اگر موقعیت فعلی برای این جفت ارز وجود ندارد ، یکی را ایجاد کنید.
  • اگر موقعیتی از قبل وجود دارد ، بررسی کنید که آیا واحدهای اضافه یا تفریق است.
  • اگر در حال اضافه کردن واحدها است ، به سادگی مقدار صحیح واحدها را اضافه کنید.
  • اگر واحدها را اضافه نمی کند ، بررسی کنید که آیا کاهش واحد مخالف جدید تجارت را بسته می کند ، در این صورت ، پس این کار را انجام دهید.
  • اگر واحدهای کاهش دهنده کمتر از واحدهای موقعیت هستند ، به سادگی آن مقدار را از موقعیت خارج کنید.
  • با این حال ، اگر واحدهای کاهش دهنده از موقعیت فعلی فراتر رود ، لازم است موقعیت فعلی را با واحدهای کاهش دهنده ببندید و سپس با واحدهای باقیمانده موقعیت مخالف جدیدی ایجاد کنید. من هنوز این کار را به طور گسترده آزمایش نکرده ام ، بنابراین ممکن است هنوز اشکالات وجود داشته باشد!

کد برای EXECUTE_SIGNAL به شرح زیر است:

این نتیجه را برای کلاس نمونه کارها به پایان می رساند. اکنون در مورد رسیدگی به رویداد بحث می کنیم.

رویداد

برای اینکه این نمونه کارها با وسایل جدید تولید سیگنال ها و سفارشات کار کند ، اصلاح Event. py لازم است. به طور خاص من مؤلفه Signalevent را که اکنون توسط شیء استراتژی تولید می شود ، به جای یک Orderevent اضافه کردم. این به سادگی بیان می کند که آیا یک "ابزار" خاص ، یعنی جفت ارز ، طولانی یا کوتاه پیش برویم. Order_Type به این نکته اشاره می کند که آیا سفارش یک سفارش بازار یا سفارش محدود است. من هنوز دومی را اجرا نکرده ام ، بنابراین این به عنوان "بازار" در حال حاضر باقی خواهد ماند:

استراتژی

با تعریف شیء Signalevent ، ما همچنین باید نحوه عملکرد کلاس استراتژی را تغییر دهیم. به طور خاص ، اکنون باید به جای Orderevent S ، رویدادهای Signalevent ایجاد کند.

من همچنین نحوه عملکرد "استراتژی" را تغییر داده ام. به جای ایجاد سیگنال های خرید تصادفی یا فروش ، اکنون در هر کنه 5 خرید ایجاد می کند و سپس "سرمایه گذاری" می شود. در پنجم بعدی ، اگر سرمایه گذاری شود ، به سادگی می فروشد و "ناخواسته" می شود. این روند به طور نامحدود تکرار می شود:

streamingforexprices

شیء نمونه کارها به یک شیء تیک نیاز دارد که شامل آخرین پیشنهاد و قیمت ها است. من به سادگی StreamforexPrices را در جریان تغییر داده ام.

اینها در روش stream_to_queue تنظیم شده اند:

مانند هر شیء در اینجا ، کد کامل را می توان در زیر ، در انتهای ورودی دفتر خاطرات یافت.

تجارت

مجموعه نهایی اصلاحات در پرونده Trading. py رخ می دهد. در مرحله اول ، ما واردات را تغییر می دهیم تا ساختار دایرکتوری جدید را در نظر بگیریم و این واقعیت که اکنون در حال وارد کردن یک شیء نمونه کارها هستیم:

سپس ما Handler Events را برای هدایت Signalevent S به نمونه نمونه کارها تغییر می دهیم:

نقطه اعدام اصلی

سرانجام ما عملکرد __main__ را برای ایجاد نمونه کارها و تنظیم Trade_Thread تغییر می دهیم تا نمونه کارها را به عنوان یک استدلال در نظر بگیریم:

متغیرهای محیط در تنظیمات

من همچنین در مقاله قبلی ذکر کردم که ایده خوبی برای ذخیره رمزهای عبور یا سایر اطلاعات احراز هویت ، از جمله نشانه های API ، در نسخه Code Code Code نیست. از این رو من پرونده تنظیمات را اصلاح کرده ام تا به این شکل باشد:

به طور خاص ، دو خط زیر:

من از کتابخانه سیستم عامل برای بازیابی دو متغیر محیط (Envvars) استفاده کردم. مورد اول نشانه API Access و دوم شناسه حساب Oanda است. اینها را می توان در یک فایل محیط مناسب که در بوت شدن سیستم بارگذاری شده است ذخیره کرد. در اوبونتو می توانید از پرونده پنهان . bash_profile در فهرست خانه خود استفاده کنید. به عنوان مثال ، با استفاده از ویرایشگر متن مورد علاقه خود (معدن emacs است) ، می توانید تایپ کنید:

و دو خط زیر را اضافه کنید ، مطمئن شوید که متغیرها را با جزئیات حساب خود جایگزین کنید:

شاید لازم باشد با اجرای موارد زیر از خط فرمان ، ترمینال به این متغیرها دسترسی داشته باشید:

اجرای کد

برای به دست آوردن کد ، باید اطمینان حاصل کنید که محیط مجازی شما تنظیم شده است. من این کار را با دستور زیر انجام می دهم (شما باید این کار را برای دایرکتوری خاص خود تغییر دهید):

اگر در مقاله قبلی این کار را نکردید ، باید کتابخانه درخواست ها را یک بار تنظیم کنید:

در آخر ، می توانید کد را اجرا کنید (مطمئن شوید که مسیر خود را با کد منبع پروژه تنظیم کنید):

در این مرحله ، ما اکنون تجارت تمرین خود را انجام می دهیم!همانطور که قبلاً در ورودی قبلی بیان کردم ، از دست دادن پول با سیستمی مانند این که به یک حساب معاملاتی زنده وصل شده است بسیار آسان است!حتماً سلب مسئولیت موجود در پست را مشاهده کنید و همچنین با اشیاء استراتژی خود بسیار مراقب باشید. من به شدت توصیه می کنم قبل از اجرای زنده ، این کار را در ماسهبازی یا حسابهای تمرین انجام دهید.

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

منابع خطای احتمالی

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

  • اشکالات - اشکالات به وضوح می توانند در هر مکانی خزنده شوند. بهترین راه برای از بین بردن آنها ، داشتن مشخصات قوی در مورد آنچه برنامه باید انجام دهد و تست های واحد جامد ایجاد کند. من این کار را برای بعضی از کلاس ها انجام داده ام ، اما نه همه. کار بیشتر لازم است تا واحد کلاس ها به مشخصات خوبی آزمایش شود.
  • خطاهای گرد - از آنجا که من از متغیرهای نقطه شناور برای ذخیره تمام داده های مالی استفاده می کنم ، در گرد شدن خطایی وجود خواهد داشت. راه اطراف این استفاده از نوع اعشاری پایتون است. پیاده سازی های بعدی از اعشاری استفاده می کنند.
  • لغزش - لغزش تفاوت بین قیمتی است که شیء استراتژی هنگام تصمیم گیری برای خرید یا فروش و قیمت واقعی به دست آمده هنگام کارگزار که یک پر کردن را انجام می دهد ، دید. با توجه به ماهیت چند رشته برنامه ، لغزش به احتمال زیاد یکی از دلایل تفاوت بین تعادل محلی و مانده حساب OANDA است.

من همچنان که به کار روی سیستم فارکس ادامه می دهم ، در مورد این مسائل تحقیق خواهم کرد. در ورودی خاطرات بعدی من در مورد پیشرفت خود بحث خواهم کرد.

بعد چیست؟

در مقالات بعدی ما در مورد پیشرفت های زیر بحث خواهیم کرد:

  • تعادل حساب متفاوت - اولین کار تعیین اینکه چرا مانده حساب بین OANDA و این اجرای محلی متفاوت است. اگر کسی ایده دیگری دارد ، لطفاً آنها را در نظرات اضافه کنید!
  • استراتژی های واقعی - من چند مقاله در مورد نحوه استفاده از یادگیری ماشین در بازارهای فارکس اخیراً خوانده ام. تبدیل برخی از این موارد به استراتژی های واقعی که می توانیم از آن استفاده کنیم جالب است (و سرگرم کننده!).
  • چند ارز - اضافه کردن چندین جفت ارز و ارزهای پایه جایگزین.
  • هزینه های معاملات - رسیدگی واقعی هزینه های معاملات ، فراتر از گسترش پیشنهاد. این شامل مدل سازی لغزش بهتر و تأثیر بازار خواهد بود.

پیشرفت های زیادی نیز وجود دارد. این پروژه به طور مداوم در حال بهبود خواهد بود!

رمز کامل

همانطور که در بالا برای به دست آوردن این کار اشاره کردم ، باید یک محیط مجازی جدید ایجاد کنید و آن را به دایرکتوری که در آن کد زندگی می کند ، Symlink کنید. من این دایرکتوری qsforex را خوانده ام. من به این ترتیب در زیر ارجاع داده ام.

ویرایش: برای کار کردن این کار ، لازم است پرونده ای در هر فهرست و زیر مجموعه کد به نام __init__. py ایجاد کنید. من فراموش کردم که این را در مقاله اصلی ذکر کنم. شما می توانید با تایپ Touch __init__. py در هر یک از دایرکتوری ها این کار را در Mac/Linux انجام دهید. این امر باعث جلوگیری از بروز وارد کننده ها می شود.

همچنین ، به یاد داشته باشید که این کد کاری در حال انجام است!من مطمئناً در هفته آینده تغییراتی ایجاد خواهم کرد و کد را به روز می کنم تا منعکس کننده آن باشد. لطفاً اطمینان حاصل کنید که همه این موارد را در سیستم های خود آزمایش کرده اید و قبل از استفاده از آن در یک حساب تجارت زنده خوشحال هستید.

QSAlpha

qsalpha

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

Quantcademy

کوانتین

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

Successful Algorithmic Trading

تجارت الگوریتمی موفق

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

Advanced Algorithmic Trading

تجارت الگوریتمی پیشرفته

نحوه اجرای استراتژی های تجاری پیشرفته با استفاده از تجزیه و تحلیل سری زمانی ، یادگیری ماشین و آمار بیزی با R و Python.<Span> همچنین ، به یاد داشته باشید که این کد اثری در حال انجام است!من مطمئناً در هفته آینده تغییراتی ایجاد خواهم کرد و کد را به روز می کنم تا منعکس کننده آن باشد. لطفاً اطمینان حاصل کنید که همه این موارد را در سیستم های خود آزمایش کرده اید و قبل از استفاده از آن در یک حساب تجارت زنده خوشحال هستید.

ثبت دیدگاه

مجموع دیدگاهها : 0در انتظار بررسی : 0انتشار یافته : ۰
قوانین ارسال دیدگاه
  • دیدگاه های ارسال شده توسط شما، پس از تایید توسط تیم مدیریت در وب منتشر خواهد شد.
  • پیام هایی که حاوی تهمت یا افترا باشد منتشر نخواهد شد.
  • پیام هایی که به غیر از زبان فارسی یا غیر مرتبط باشد منتشر نخواهد شد.