AminHP/gym-anytrading

  • 2022-08-14

این commit به هیچ شعبه ای در این مخزن تعلق ندارد و ممکن است به یک فورک خارج از مخزن تعلق داشته باشد.

نام در حال حاضر استفاده شده است

یک برچسب از قبل با نام شعبه ارائه شده وجود دارد. بسیاری از دستورات Git هر دو نام برچسب و شاخه را می پذیرند، بنابراین ایجاد این شاخه ممکن است باعث رفتار غیرمنتظره شود. آیا مطمئن هستید که می خواهید این شعبه را ایجاد کنید؟

  • محلی
  • فضاهای کد

از Git یا Checkout با SVN با استفاده از URL وب استفاده کنید.

با CLI رسمی ما سریع کار کنید. بیشتر بدانید.

ورود به سیستم لازم

برای استفاده از Codespace لطفا وارد شوید.

راه اندازی دسکتاپ GitHub

اگر اتفاقی نیفتاد، GitHub Desktop را دانلود کنید و دوباره امتحان کنید.

راه اندازی دسکتاپ GitHub

اگر اتفاقی نیفتاد، GitHub Desktop را دانلود کنید و دوباره امتحان کنید.

راه اندازی Xcode

اگر اتفاقی نیفتاد، Xcode را دانلود کنید و دوباره امتحان کنید.

راه اندازی کد ویژوال استودیو

پس از آماده شدن فضای کد شما باز می شود.

مشکلی در تهیه فضای کد شما وجود داشت، لطفاً دوباره امتحان کنید.

آخرین ارتکاب

آمار Git

فایل ها

آخرین اطلاعات commit بارگیری نشد.

README. md

AnyTrading مجموعه ای از محیط های OpenAI Gym برای تقویت الگوریتم های معاملاتی مبتنی بر یادگیری است.

الگوریتم های معاملاتی بیشتر در دو بازار FOREX و Stock پیاده سازی می شوند. هدف AnyTrading ارائه برخی از محیط های Gym برای بهبود و تسهیل روند توسعه و آزمایش الگوریتم های مبتنی بر RL در این زمینه است. این هدف با اجرای سه محیط Gym TradingEnv، ForexEnv و StocksEnv به دست می آید.

TradingEnv یک محیط انتزاعی است که برای پشتیبانی از انواع محیط های معاملاتی تعریف شده است. ForexEnv و StocksEnv به سادگی دو محیطی هستند که TradingEnv را به ارث برده و گسترش می دهند. در بخش های آینده توضیحات بیشتری در مورد آنها داده خواهد شد اما قبل از آن باید به برخی از ویژگی های محیط پرداخته شود.

توجه: برای کارشناسان توصیه می شود پروژه gym-mtsim را بررسی کنند.

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

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

بنابراین بعد از ماهها کار ، سرانجام فهمیدم که این اقدامات فقط چیزها را بدون تأثیر مثبت واقعی پیچیده می کند. در حقیقت ، آنها فقط زمان یادگیری را افزایش می دهند و عملی مانند Hold به سختی توسط یک عامل آموزش دیده استفاده می شود زیرا نمی خواهد یک پنی واحد را از دست بدهد. بنابراین نیازی به انجام چنین اقدامات بی شماری نیست و فقط فروش = 0 و خرید = 1 برای آموزش یک عامل نیز کافی است.

اگر با موقعیت های تجاری آشنا نیستید ، به اینجا مراجعه کنید. این یک مفهوم بسیار مهم است و شما باید در اسرع وقت آن را یاد بگیرید.

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

باز هم ، در برخی از الگوریتم های معاملاتی ، ممکن است موقعیت های بی شماری مانند کوتاه ، بلند ، مسطح و غیره را پیدا کنید ، همانطور که در ابتدا گفته شد ، من فقط از موقعیت های کوتاه = 0 و طولانی = 1 استفاده می کنم.

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

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

TradingEnv یک کلاس انتزاعی است که Gym. env را به ارث می برد. این کلاس با هدف فراهم کردن یک محیط عمومی برای انواع بازارهای تجاری انجام شده است. در اینجا خصوصیات و روشهای عمومی آن را توضیح می دهم. اما احساس راحتی کنید که به کد منبع کامل نگاهی بیندازید.

DF: مخفف DataFrame. این یک فریم پاندا است که حاوی مجموعه داده شما است و در سازنده کلاس منتقل می شود.

قیمت ها: قیمت های واقعی با گذشت زمان. برای محاسبه سود و ارائه محیط استفاده می شود.

Signal_features: ویژگی های استخراج شده با گذشت زمان. برای ایجاد مشاهدات بدنسازی استفاده می شود.

Window_Size: تعداد کنه (کنه های فعلی و قبلی) به عنوان یک سالن ورزشی بازگشت. در سازنده کلاس منتقل می شود.

Action_space: ویژگی Gym Action_space. حاوی مقادیر گسسته 0 = فروش و 1 = خرید.

Observation_space: ویژگی Gym Observation_space. هر مشاهده یک پنجره در Signal_features از فهرست index current_tick - windows_size + 1 تا current_tick است. بنابراین _start_tick از محیط برابر با Window_Size خواهد بود. علاوه بر این ، مقدار اولیه برای _last_trade_tick windows_size - 1 است.

شکل: شکل یک مشاهده واحد.

تاریخ: اطلاعات مربوط به همه مراحل را ذخیره می کند.

  • مواد و روش ها:

بذر: روش معمولی بذر سالن بدنسازی.

تنظیم مجدد: روش تنظیم مجدد سالن بدنسازی.

مرحله: روش معمولی مرحله سالن بدنسازی.

رندر: روش معمول ارائه سالن بدنسازی. اطلاعات مربوط به کنونی محیط زیست را ارائه می دهد.

render_all: کل محیط را ارائه می دهد.

CLOSE: روش نزدیک سالن بدنسازی.

  • روشهای انتزاعی:

_Process_Data: آن را در سازنده خوانده می شود و قیمت ها و سیگنال های signal_features را به عنوان یک tuple باز می گرداند. در بازارهای مختلف تجارت ، باید ویژگی های مختلفی بدست آید. بنابراین این روش TradingEnv ما را قادر می سازد یک محیط با هدف کلی باشد و ویژگی های خاص را می توان برای محیط های خاص مانند فارکس ، سهام و غیره بازگرداند.

_calculate_reward: عملکرد پاداش عامل RL.

_update_profit: سود کل را که عامل RL تاکنون به دست آورده است محاسبه و به روز می کند. سود نشان می دهد میزان واحدهای ارز شما با شروع 1. 0 واحد (سود = FinalMoney / StartMoney) به دست آورده اید.

MAX_POSSIBLE_PROFIT: حداکثر سود ممکن که یک عامل RL بدون در نظر گرفتن هزینه های تجارت می تواند به دست آورد.

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

frame_bound: یک تاپل که شروع و پایان DF را مشخص می کند. در سازنده کلاس منتقل می شود.

Unit_side: طرفی را که تجارت خود را شروع می کنید مشخص می کند. حاوی مقادیر رشته چپ (مقدار پیش فرض) و راست. همانطور که می دانید ، دو طرف در یک جفت ارز در فارکس وجود دارد. به عنوان مثال در جفت EUR/USD ، وقتی سمت چپ را انتخاب می کنید ، واحد ارز شما یورو است و تجارت خود را با 1 یورو شروع می کنید. در سازنده کلاس منتقل می شود.

Trade_fee: هزینه ثابت پیش فرض که از قیمت واقعی در هر تجارت کم می شود.

همانند forexenv اما برای بازار سهام. برای اطلاعات بیشتر به کد منبع مراجعه کنید.

frame_bound: یک تاپل که شروع و پایان DF را مشخص می کند. در سازنده کلاس منتقل می شود.

trade_fee_bid_percent: درصد هزینه ثابت پیش فرض برای پیشنهادات. به عنوان مثال با trade_fee_bid_percent = 0. 01 ، هر بار که سهام خود را می فروشید ، 1 ٪ از پول خود را از دست خواهید داد.

trade_fee_ask_percent: درصد هزینه ثابت پیش فرض برای Asks. به عنوان مثال با Trade_fee_ask_percent = 0. 005 ، هر بار که برخی از سهام را خریداری می کنید ، 0. 5 ٪ از پول خود را از دست خواهید داد.

علاوه بر این ، شما می توانید با گسترش TradingEnv یا حتی ForexenV یا StockSenV با سیاست های مورد نظر خود برای محاسبه پاداش ، سود ، هزینه و غیره ، محیط سفارشی خود را ایجاد کنید.

یک محیط ایجاد کنید

  • این باعث ایجاد محیط پیش فرض می شود. شما می توانید هر پارامتر مانند مجموعه داده ، frame_bound و غیره را تغییر دهید.

محیطی با پارامترهای سفارشی ایجاد کنید

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

  • لازم به ذکر است که اولین عنصر Frame_Bound باید بیشتر از یا مساوی با Window_Size باشد.

برخی از اطلاعات را چاپ کنید

  • در اینجا max_possible_profit نشان می دهد که اگر بازار هزینه تجارت نداشته باشد ، می توانستید با شروع 1. 0 ، 4. 054414887146586 (یا 1. 122900180008982) درآمد کسب کنید. به عبارت دیگر ، پول شما تقریباً چهار برابر است.

محیط را ترسیم کنید

png

  • موقعیت های کوتاه و طولانی به رنگ های قرمز و سبز نشان داده شده است.
  • همانطور که می بینید ، موقعیت شروع محیط همیشه کوتاه است.

یک مثال کامل

png

  • برای جلوگیری از ارائه در هر مرحله می توانید از روش Render_All استفاده کنید و از اتمام زمان جلوگیری کنید.
  • همانطور که می بینید ، 10 امتیاز اول (Window_Size = 10) در طرح موقعیتی ندارند. از آنجا که آنها در محاسبه پاداش ، سود و غیره نقش ندارند. آنها فقط اولین مشاهدات را نشان می دهند. بنابراین محیط _start_tick و اولیه _last_trade_tick 10 و 9 هستند.

با طبقه بندی های پایدار و Quantstats مخلوط کنید

در اینجا مثالی آورده شده است که سالن ورزشی را با کتابخانه های مشهور ذکر شده مخلوط می کند و نشان می دهد که چگونه می توان از محیط های تجاری ما در سایر کتابخانه های RL یا تجارت استفاده کرد.

تجارت و دستکاری TradingEnv

در صورتی که می خواهید داده ها را پردازش کنید و ویژگی های خارج از محیط را استخراج کنید ، می توان آن را به سادگی با دو روش انجام داد:

روش 1 (توصیه شده):

روش 2:

  • یک نسخه پیچیده تر از Anystrading با پنج عمل ، سه موقعیت و یک عملکرد پاداش بهتر در پروژه Di-Engine تهیه شده است. این یک ابزار سطح متوسط است (جایی بین Anystrading و MTSIM) ، مناسب برای متخصصان نیمه. اطلاعات بیشتر و مستندات را می توان در اینجا یافت.

در باره

ساده ترین ، انعطاف پذیر ترین و جامع ترین محیط تجاری OpenAi Gym (تصویب شده توسط Openai Gym) < Pan> در اینجا نمونه ای است که سالن ورزشی را با کتابخانه های مشهور ذکر شده مخلوط می کند و نحوه استفاده از محیط های تجاری ما را در سایر کتابخانه های RL یا تجارت نشان می دهد.

برچسب ها

ثبت دیدگاه

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