استراتژی ها¶

ساخت وبلاگ

یک استراتژی یک اسکریپت کاج است که می تواند سفارشات خرید/فروش را ارسال ، اصلاح و لغو کند. استراتژی ها به شما امکان می دهد تا با توجه به الگوریتم های خود ، پشتوانه (تقلید یک تجارت استراتژی بر روی داده های تاریخی) و پیشبرد (تقلید یک تجارت استراتژی در داده های زمان واقعی) را انجام دهید.

استراتژی نوشته شده در Pine Script ™ بسیاری از قابلیت های یکسان با شاخص Pine Script را دارد. هنگامی که شما یک استراتژی می نویسید ، باید با تماس عملکرد استراتژی () شروع شود. استراتژی ها ممکن است داده ها را ترسیم کنند ، اما آنها همچنین می توانند سفارشات را تغییر داده و لغو کنند. آنها همچنین از طریق کلمات کلیدی خاص به اطلاعات مربوط به عملکرد استراتژی ضروری دسترسی دارند. همین اطلاعات در خارج از خارج در برگه استراتژی تستر در دسترس است. هنگامی که یک استراتژی در مورد داده های تاریخی محاسبه می شود ، می توانید پر کردن نظم فرضی را مشاهده کنید.

یک مثال استراتژی ساده

// نسخه @= 5 استراتژی("تست") if BAR_INDEX  100 if Strategy. Position_Size  0 استراتژی("خرید", استراتژی, 10) دیگر استراتژی("فروش", استراتژی, 10) طرح(استراتژی. initial_capital + استراتژی. netprofit + استراتژی. openprofit) 

به محض اینکه اسکریپت تدوین شده و روی یک نمودار اعمال می شود ، می توانید علائم سفارش پر شده را روی آن مشاهده کنید و چگونه تعادل شما در طول پشتی (منحنی سهام) تغییر می کند. این یک استراتژی بسیار اساسی است که در هر نوار خریداری و فروش می کند.

خط استراتژی ("آزمون") بیان می کند که فیلمنامه استراتژی به نام "آزمون" است. استراتژی. entry () فرمان است که می تواند برای ارسال سفارشات "خرید" و "فروش" استفاده شود. طرح (استراتژی. Equity) منحنی سهام را ترسیم می کند.

استفاده از یک استراتژی برای یک نمودار

برای آزمایش استراتژی خود ، آن را در نمودار اعمال کنید. از نماد و فواصل زمانی که می خواهید آزمایش کنید استفاده کنید. می توانید از کادر گفتگوی Indications & Strategies یک استراتژی داخلی استفاده کنید ، یا خود را بنویسید.

../_images/Strategy_tester.png

هنگام استفاده از استراتژی ها در نمودارهای غیر استاندارد (Heikin Ashi ، Renko و غیره) ، درک این نکته که نتایج منعکس کننده شرایط واقعی بازار نخواهد بود ، بسیار مهم است. سفارشات مربوط به این نوع نمودارها در سطح قیمت مصنوعی مورد استفاده در این نمودارها اجرا می شود ، که اغلب قیمت واقعی بازار را منعکس نمی کند و در نتیجه منجر به نتایج غیر واقعی پشتی می شود. بنابراین ما به شدت توصیه می کنیم فقط از انواع نمودار استاندارد برای استراتژی های پشتی استفاده کنید.

پشتی و پیشگیری

در TradingView ، استراتژی ها در مورد تمام داده های تاریخی موجود نمودار (Backtesting) محاسبه می شود ، و سپس هنگام ورود داده های زمان واقعی (Forwardting) به طور خودکار محاسبات را ادامه می دهد.

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

هنگام پیشبرد ، شما می توانید پیکربندی محاسبه اسکریپت را در هر کنه در زمان واقعی انجام دهید. برای فعال کردن این امر ، محاسبه مجدد را در هر گزینه تیک در تنظیمات/خصوصیات استراتژی بررسی کنید ، یا آن را در کد اسکریپت با استفاده از: استراتژی (. calc_on_every_tick = true) مشخص کنید.

شما می توانید پس از پر شدن سفارش ، استراتژی را برای انجام یک محاسبه اضافی تنظیم کنید. برای این کار باید پس از سفارش پر شده در تنظیمات/خصوصیات استراتژی ، محاسبه مجدد را بررسی کنید ، یا این کار را در کد اسکریپت با استفاده از: استراتژی (. calc_on_order_fills = true) انجام دهید.

شبیه ساز کارگزار

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

منطق زیر برای تقلید از سفارشات استفاده می شود:

../_images/Filled_stategy.png

 

  1. اگر نوار نوار نزدیک به نوار بازتر از نوار کم باشد ، شبیه ساز کارگزار فرض می کند که قیمت intrabar به این روش حرکت می کند: باز → بالا → کم → نزدیک.
  2. اگر کمترین نوار به نوار بازتر از نوار نزدیک باشد ، شبیه ساز کارگزار فرض می کند که قیمت intrabar به این روش حرکت می کند: باز → کم → بالا → نزدیک.
  3. شبیه ساز کارگزار فرض می کند که هیچ شکافی در داخل میله وجود ندارد ، به این معنی که طیف کاملی از قیمت های داخل intrabar برای اجرای سفارش در دسترس است.
  4. حتی اگر محاسبه مجدد در هر گزینه تیک در ویژگی های استراتژی فعال باشد (یا تماس استراتژی اسکریپت از calc_on_every_tick = true استفاده می کند) ، رفتار شبیه ساز کارگزار هنوز از منطق فوق استفاده می کند.

 

در اینجا یک استراتژی نشان می دهد که چگونه سفارشات توسط شبیه ساز کارگزار پر می شوند:

// نسخه@= 5 استراتژی("تاریخ نمایش نسخه ی نمایشی", روکش کردن = درست است، واقعی, هرمی = 100, calc_on_order_fills = درست است، واقعی) استراتژی("لو", استراتژی) 

این کد یک بار در هر نوار در نزدیکی محاسبه می شود ، اما به محض پر شدن سفارش ، یک محاسبه اضافی رخ می دهد. به همین دلیل می توانید 4 سفارش پر شده را در هر نوار مشاهده کنید: 2 سفارش در باز ، 1 سفارش در بالا و 1 سفارش در پایین. این برای پشتی است. در زمان واقعی ، سفارشات در هر کنه جدید اجرا می شود.

همچنین می توان از صف سفارش تقلید کرد. این تنظیمات را تأیید می کند برای سفارشات محدودیت و می توان در خصوصیات استراتژی یافت ، یا کد اسکریپت را با استراتژی تنظیم کرد (. backtest_fill_limits_assument = x). مقدار مشخص شده حداقل حرکات قیمت در تعداد امتیازات/PIP ها است (مقدار پیش فرض 0 است). در صورت بهتر بودن قیمت فعلی (بالاتر برای سفارشات فروش ، برای سفارشات خرید) با تعداد مشخصی از امتیازات/پیپ ها ، یک سفارش محدود پر می شود. قیمت اعدام هنوز با قیمت سفارش محدود مطابقت دارد. مثال:

  • backtest_fill_limits_assome = 1. حداقل حرکت قیمت 0. 25 است.
  • سفارش محدودیت خرید با قیمت 12. 50 قرار می گیرد.
  • قیمت فعلی 12. 50 است.
  • این سفارش را نمی توان با قیمت فعلی پر کرد زیرا backtest_fill_limits_assome = 1. برای پر کردن سفارش ، قیمت باید 0. 25*1 پایین تر باشد. سفارش در صف قرار داده شده است.
  • فرض کنید که کنه بعدی با قیمت 12:00 به دست می آید. این قیمت 2 امتیاز پایین تر است ، به این معنی که شرط backtest_fill_limits_assome = 1 راضی است ، بنابراین سفارش باید پر شود. سفارش در 12. 50 (قیمت سفارش اصلی) پر می شود ، حتی اگر قیمت دیگر در دسترس نباشد.

دستورات قرار دادن سفارش

تمام کلمات کلیدی مربوط به استراتژی ها با یک استراتژی شروع می شوند. پیشونددستورات زیر برای قرار دادن سفارشات استفاده می شود: Strategy. Entry ، Strategy. order و Strategy. exit.

Strategy. entry() این دستور فقط دستورهای ورودی را قرار می دهد. تحت تأثیر تنظیمات هرمی در ویژگی های استراتژی و تابع strateg. risk. allow_entry_in قرار می گیرد. اگر هنگام ایجاد یک سفارش جهت مخالف، موقعیت بازار باز وجود داشته باشد، تعداد قراردادها/سهم ها/لات/واحدها به تعداد قراردادهای باز فعلی افزایش می یابد (معادل اسکریپت: strategi. position_size + quantity). در نتیجه، اندازه موقعیت بازار باز برابر با اندازه سفارش مشخص شده در دستور strategi. entry خواهد بود. Strategy. order() این دستور هر دو دستور ورود و خروج را قرار می دهد. تحت تأثیر تنظیمات هرمی یا تابع strateg. risk. allow_entry_in قرار نمی گیرد. این به شما امکان می دهد ساختارهای سفارش ورودی و خروجی پیچیده ای ایجاد کنید، زمانی که عملکرد استراتژی. ورود و استراتژی. خروج انجام نمی شود. Strategy. exit() این دستور به شما این امکان را می دهد که از موقعیت بازار خارج شوید یا چندین استراتژی سفارش خروج را با استفاده از توقف ضرر، هدف سود یا توقف پایانی تشکیل دهید. همه این سفارشات بخشی از یک گروه استراتژی. oca. reduce هستند. اگر موقعیت بازار آزاد وجود نداشته باشد یا سفارش ورود فعال وجود نداشته باشد، نمی توان سفارش خروج داد (دستور خروج به شناسه سفارش ورود محدود می شود). خروج از یک موقعیت با دستور بازار با استفاده از دستور استراتژی. exit امکان پذیر نیست. برای این کار باید از دستورات strategi. close یا strategi. close_all() استفاده شود. اگر تعداد قراردادها/سهم ها/لات/واحدهای مشخص شده برای استراتژی. خروج کمتر از اندازه موقعیت های باز فعلی باشد، خروج جزئی خواهد بود. امکان خروج از یک دستور ورودی یکسان با استفاده از شناسه سفارش خروج یکسان وجود دارد که به شما امکان می دهد استراتژی های خروج را با سطوح مختلف ایجاد کنید. در مواردی که موقعیت بازار با دستورهای ورودی متعدد (هرمی فعال است) تشکیل می شود، هر دستور خروج باید به یک سفارش ورودی منطبق مرتبط شود.

// نسخه@= 5 استراتژی("دمو معکوس") if BAR_INDEX  100 if Strategy. Position_Size  0 استراتژی("خرید", استراتژی, 4) دیگر استراتژی("فروش", استراتژی, 6) طرح(استراتژی. initial_capital + استراتژی. netprofit + استراتژی. openprofit) 

استراتژی فوق به طور مداوم موقعیت بازار را از +4 ب ه-6 به عقب و جلو تغییر می دهد، که نمودار نشان می دهد.

// نسخه@= 5 استراتژی("یکبار خروج از دمو") if Strategy. Position_Size  0 استراتژی("خرید", استراتژی, 4) استراتژی. خروج("براکت", "خرید", 2, سود = 10, متوقف کردن = 10) 

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

// نسخه@= 5 استراتژی("نسخه ی نمایشی خروجی جزئی") if BAR_INDEX  100 وت Strategy. Position_Size  0 استراتژی("خرید", استراتژی, 4) استراتژی. خروج("Bracket1", "خرید", 2, سود = 10, متوقف کردن = 10) استراتژی. خروج("Bracket2", "خرید", سود = 20, متوقف کردن = 20) 

این کد 2 سطح براکت ایجاد می کند (2 سفارش سود و 2 سفارش ضرر را متوقف کنید). هر دو سطح به طور همزمان فعال می شوند: سطح اول برای خروج از 2 قرارداد و دومین مورد برای خروج از بقیه.

../_images/Levels_brackets.png

اولین سفارشات ضرر و زیان سود و توقف (سطح 1) در یک گروه OCA قرار دارند. سفارشات دیگر (سطح 2) در گروه OCA دیگری قرار دارند. این بدان معنی است که هرچه ترتیب از سطح 1 پر شود ، سفارشات از سطح 2 لغو نمی شوند. آنها فعال می مانند.

هر دستور قرار دادن سفارش دارای شناسه (مقدار رشته) است که یک شناسه سفارش منحصر به فرد است. اگر سفارش با همان شناسه در حال حاضر قرار داده شده باشد اما هنوز پر نشده باشد ، آخرین دستور سفارش موجود را اصلاح می کند. اگر اصلاح امکان پذیر نباشد (تبدیل از خرید به فروش) ، سفارش قدیمی لغو می شود و سفارش جدید قرار می گیرد. استراتژی. entry و استراتژی. کار با همان شناسه ها (آنها می توانند همان سفارش ورود را تغییر دهند). Strategy. Exit با سایر شناسه های سفارش کار می کند (امکان ورود به سفارش و سفارش خروج با همان شناسه وجود دارد).

برای لغو یک سفارش خاص با استفاده از شناسه آن ، باید از دستور Strategy. Cancel (String ID) استفاده شود. برای لغو تمام سفارشات در انتظار استراتژی. cancel_all () باید استفاده شود. سفارشات استراتژی به محض رضایت شرایط آنها قرار می گیرند و فرمان به صورت کد خوانده می شوند. شبیه ساز کارگزار قبل از محاسبه کد ، سفارشات را اجرا نمی کند ، در حالی که در معاملات واقعی یک سفارش می تواند زودتر پر شود. هنگامی که یک سفارش بازار در نزدیکی نوار فعلی ایجاد می شود ، شبیه ساز کارگزار فقط آن را با قیمت باز بعدی اجرا می کند.

// نسخه@= 5 استراتژی("نوار بعدی اجرای نمایشی باز") if BAR_INDEX  100 if Strategy. Position_Size == 0 استراتژی.("خرید", استراتژی) دیگر استراتژی.("فروش", استراتژی) 

اگر این کد روی یک نمودار اعمال شود ، تمام سفارشات در فضای باز هر نوار پر می شوند.

شرایط برای قرار دادن سفارش (زمانی که , هرمی , استراتژی. ریسک ) هنگام محاسبه اسکریپت بررسی می شود. در صورت برآورده شدن تمام شرایط، سفارش ثبت می شود. در صورت عدم رعایت هر یک از شرایط، سفارش داده نمی شود. لغو سفارشات قیمت (سفارش های محدود، توقف و حد مجاز) مهم است.

مثال (برای MSFT، 1D):

// نسخه@= 5 استراتژی("دمو ورودی قیمت") var c = 0 if سال > 2020 c := c + 1 if c == 1 استراتژی("LE1", استراتژی, 2, متوقف کردن = بالا + 35 * syminfo. mintick) استراتژی("LE2", استراتژی, 2, متوقف کردن = بالا + 2 * syminfo. mintick) 

با وجود اینکه هرمی غیرفعال است، هر دوی این سفارش ها در بک آزمایش تکمیل می شوند، زیرا زمانی که آنها تولید می شوند، موقعیت بازار باز شده وجود ندارد. هر دو سفارش داده می شوند و زمانی که قیمت شرایط اجرای سفارش را برآورده می کند، هر دو اجرا می شوند. توصیه می شود با استفاده از strategi. oca. cancel، سفارشات را در یک گروه OCA قرار دهید. به این ترتیب فقط یک سفارش پر می شود و دیگری لغو می شود. این کد اصلاح شده است:

// نسخه@= 5 استراتژی("دمو ورودی قیمت") var c = 0 if سال > 2020 c := c + 1 if c == 1 استراتژی("LE1", استراتژی, 2, متوقف کردن = بالا + 35 * syminfo. mintick, oca_type = استراتژی. oca. لغو, oca_name = "لو") استراتژی("LE2", استراتژی, 2, متوقف کردن = بالا + 2 * syminfo. mintick, oca_type = استراتژی. oca. لغو, oca_name = "لو") 

اگر به دلایلی شرایط ثبت سفارش هنگام اجرای دستور رعایت نشود، دستور ورود انجام نخواهد شد. به عنوان مثال، اگر تنظیمات هرمی روی 2 تنظیم شود، موقعیت موجود از قبل شامل دو ورودی است و استراتژی سعی می کند مورد سوم را قرار دهد، قرار نخواهد گرفت. شرایط ورود در مرحله تولید سفارش ارزیابی می شود نه در مرحله اجرا. بنابراین، اگر دو نوع ورودی قیمت را با هرمی غیرفعال ارسال کنید، پس از اجرای یکی از آنها، دیگری به طور خودکار لغو نخواهد شد. برای جلوگیری از مشکلات، توصیه می کنیم از گروه های strategi. oca. cancel برای ورودی ها استفاده کنید تا زمانی که یک سفارش ورودی پر شد، سایرین لغو شوند.

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

وضعیت بسته شدن بازار¶

علیرغم این واقعیت که امکان خروج از یک ورودی خاص در کد وجود دارد، هنگامی که سفارش ها در فهرست معاملات در برگه تستر استراتژی نشان داده می شوند، همه آنها طبق قوانین FIFO (اول وارد، اولین خروج) پیوند می شوند. اگر شناسه سفارش ورود برای دستور خروج در کد مشخص نشده باشد، دستور خروج اولین سفارش ورودی را که موقعیت بازار را باز کرده است، می بندد. بیایید مثال زیر را مطالعه کنیم:

// نسخه@= 5 استراتژی("خروج نسخه نمایشی", هرمی = 2, روکش کردن = درست است، واقعی) if Strategy. Position_Size == 0 وت سال > 2014 استراتژی("خرید 1", استراتژی, 5) دیگری اگر Strategy. Position_Size == 5 استراتژی("buy2", استراتژی, 10, متوقف کردن = Strategy. Position_Avg_Price + Strategy. Position_Avg_Price * 0.1) دیگری اگر Strategy. Position_Size == 15 استراتژی. خروج("براکت", ضرر - زیان = 10, سود = 10) 

کدی که در بالا گفته می شود 2 سفارش به صورت متوالی: "Buy1" با قیمت بازار و "Buy2" با قیمت 10 ٪ بالاتر (سفارش توقف). سفارش خروج فقط پس از پر شدن سفارشات ورود قرار می گیرد. اگر کد را در یک نمودار اعمال کنید ، خواهید دید که هر سفارش ورودی با سفارش خروجی بسته می شود ، اگرچه ما شناسه سفارش ورودی را برای بستن در این خط مشخص نکردیم ::

استراتژی. خروج("براکت", ضرر - زیان = 10, سود = 10) 
// نسخه@= 5 استراتژی("نمایش نسخه ی نمایشی", هرمی = 2, روکش کردن = درست است، واقعی) if Strategy. Position_Size == 0 استراتژی("خرید 1", استراتژی, 5) دیگری اگر Strategy. Position_Size == 5 استراتژی("buy2", استراتژی, 10, متوقف کردن = Strategy. Position_Avg_Price + Strategy. Position_Avg_Price * 0.1) دیگری اگر Strategy. Position_Size == 15 استراتژی.("buy2") استراتژی. خروج("براکت", "خرید 1", ضرر - زیان = 10, سود = 10) طرح(Strategy. Position_Avg_Price) 
  • این یک موقعیت طولانی 5 قرارداد را با سفارش "buy1" باز می کند.
  • این موقعیت طولانی را با خرید 10 قرارداد دیگر با 10 ٪ قیمت بالاتر با سفارش "buy2" گسترش می دهد.
  • سفارش خروج (استراتژی. close) برای فروش 10 قرارداد (خروج از "buy2") پر شده است.

اگر به طرح نگاهی بیندازید ، می توانید آن قیمت متوسط ورود = "Buy2" را ببینید و استراتژی ما دقیقاً این سفارش ورودی را بسته است ، در حالی که در برگه لیست تجارت می توانیم ببینیم که اولین سفارش "Buy1" را بسته است ونیمی از دوم "buy2". این بدان معناست که مهم نیست که کدام سفارش ورودی را برای بسته شدن استراتژی خود مشخص کنید ، طبق قوانین FIFO ، شبیه ساز کارگزار هنوز اولی را می بندد. این همان روشی است که هنگام تجارت با یک کارگزار واقعی انجام می شود.

گروه های OCA

می توان سفارشات را در 2 گروه مختلف یک کرکی (OCA) در Script Pine ins قرار داد.

استراتژی. oca. cancel به محض پر شدن سفارش از گروه (حتی جزئی) یا لغو ، سفارشات دیگر از همان گروه لغو می شوند. باید در نظر داشته باشید که اگر قیمت سفارش یکسان باشد یا نزدیک باشد ، ممکن است بیش از 1 ترتیب همان گروه پر شود. این نوع گروه OCA فقط برای سفارشات ورودی در دسترس است زیرا تمام سفارشات خروجی در استراتژی قرار داده شده است. OCA. REDUCE.

// نسخه@= 5 استراتژی("نسخه ی نمایشی OCA_CANCEL") if سال > 2014 وت سال  2016 استراتژی("لو", استراتژی) استراتژی("SE", استراتژی) 

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

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

برای تبدیل استراتژی فوق به یک استراتژی معکوس ، باید سفارشات را در گروه OCA قرار دهید:

// نسخه@= 5 استراتژی("نسخه ی نمایشی OCA_CANCEL") if سال > 2014 وت سال  2016 استراتژی("لو", استراتژی, oca_type = استراتژی. oca. لغو, oca_name = "ورود") استراتژی("SE", استراتژی, oca_type = استراتژی. oca. لغو, oca_name = "ورود") 

استراتژی. aca. reduce این نوع گروه اجازه می دهد تا چندین سفارش در گروه پر شود. از آنجا که یکی از سفارشات موجود در گروه شروع به پر شدن می کند ، اندازه سایر سفارشات با مبلغ قراردادهای پر شده کاهش می یابد. برای استراتژی های خروج بسیار مفید است. هنگامی که قیمت سفارش انتفاعی شما را لمس می کند و آن را پر می کند ، از بین رفتن متوقف نمی شود اما میزان آن با مبلغ قراردادهای پر شده کاهش می یابد ، بنابراین از بقیه موقعیت باز محافظت می کند. استراتژی. oca. none سفارش در خارج از گروه قرار می گیرد (ارزش پیش فرض برای استراتژی. Arder و Strategy. Entry توابع).

هر گروه شناسه منحصر به فرد خود را مانند سفارشات دارد. اگر دو گروه دارای یک شناسه یکسان باشند ، اما نوع متفاوتی دارند ، آنها گروه های مختلفی در نظر گرفته می شوند. مثال:

// نسخه@= 5 استراتژی("فیلمنامه من") if سال > 2014 وت سال  2016 استراتژی("خرید", استراتژی, oca_name = "OCA من", oca_type = استراتژی. oca. كاهش دادن) استراتژی. خروج("Fromby", "خرید", سود = 100, ضرر - زیان = 200, oca_name = "OCA من") استراتژی("فروش", استراتژی, oca_name = "OCA من", oca_type = استراتژی. oca. لغو) استراتژی.("سفارش", استراتژی, oca_name = "OCA من", oca_type = استراتژی. oca. هیچ یک) 

"خرید" و "فروش" در گروه های مختلف قرار می گیرند زیرا نوع آنها متفاوت است."سفارش" خارج از هر گروه خواهد بود زیرا نوع آن در استراتژی تنظیم شده است. OCA. NONE. علاوه بر این ، "خرید" در گروه خروجی قرار می گیرد زیرا خروجی ها همیشه در گروه نوع استراتژی قرار می گیرند.

مدیریت ریسک¶

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

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

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

علاوه بر این ، لازم به یادآوری است که هنگام استفاده از قطعنامه های بالاتر از 1 روز ، کل نوار برای قوانین شروع می شود که با استراتژی پیشوند شروع می شود. Risk. max_intraday_.

// نسخه@= 5 استراتژی("نسخه ی نمایشی چند ریسک", روکش کردن = درست است، واقعی, هرمی = 10, calc_on_order_fills = درست است، واقعی) if سال > 2014 استراتژی("لو", استراتژی) استراتژی. max_intraday_fild_orders(5) استراتژی. max_intraday_fild_orders(2) 

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

باید به خاطر داشته باشید که قانون strategi. risk. allow_entry_in فقط برای ورودی ها اعمال می شود، بنابراین می توان با استفاده از دستور strategi. order وارد معامله شد، زیرا این دستور فی نفسه یک دستور ورودی نیست. علاوه بر این، زمانی که قانون strategi. risk. allow_entry_in فعال است، ورودی های یک «معامله ممنوع» به جای معاملات معکوس تبدیل به خروجی می شوند.

مثال (MSFT، 1D):

// نسخه@= 5 استراتژی("allow_entry_in demo", روکش کردن = درست است، واقعی) if BAR_INDEX  800 if Strategy. Position_Size  0 استراتژی("لو", استراتژی) دیگر استراتژی("SE", استراتژی) استراتژی. allow_entry_in(استراتژی. جهت. طولانی) 

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

واحد پول¶

استراتژی های TradingView می توانند در ارزی متفاوت از ارز ابزار کار کنند. سود خالص و سود باز به ارز حساب مجدداً محاسبه می شوند. ارز حساب در لیست کشویی Base Currency ویژگی های استراتژی یا در اسکریپت از طریق پارامتر استراتژی (. ارز=ارز.*) تنظیم می شود. مقادیر گزارش عملکرد به ارز انتخاب شده محاسبه می شود.

سود معاملاتی (باز یا بسته) بر اساس سود در ارز ابزار ضرب در نرخ متقاطع در پایان روز معاملاتی قبل از نواری که استراتژی محاسبه می شود، محاسبه می شود.

مثال: ما EURUSD، D را معامله می کنیم و ارز. EUR را به عنوان ارز استراتژی انتخاب کرده ایم. استراتژی ما با استفاده از هدف سود 1 امتیازی یا توقف ضرر، موقعیت را می خرد و از آن خارج می شود.

// نسخه@= 5 استراتژی("تست ارز", واحد پول = ارز. یورو) if BAR_INDEX  800 استراتژی("لو", استراتژی, 1000) استراتژی. خروج("LX", "لو", سود = 1, ضرر - زیان = 1) سود = استراتژی. netprofit طرح(math. abs((سود - سود[1])*100), "1 امتیاز سود", رنگ = رنگ آبی, عرض خط = 2) طرح(1 / بستن[1], "سابقه قبلی", رنگ = رنگ. قرمز) 

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

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

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

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

لبه¶

مارجین برای پوزیشن های Long/Short (پارامترها: margin_long، margin_short) مارجین را برای هر معامله مشخص می کند، یعنی درصد موقعیتی را که معامله گر باید تامین مالی کند. به عنوان مثال، اگر مارجین برای پوزیشن های خرید روی 25 درصد تنظیم شود، معامله گر باید سرمایه کافی برای پوشش 25 درصد از معاملات آزاد را داشته باشد و به طور بالقوه می تواند تا 400 درصد از سهام خود را در هر معامله خرج کند.

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

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

اندازه موقعیت * قیمت ورودی

  1. ارزش بازار امنیت (MVS) را محاسبه کنید.

اندازه موقعیت * قیمت فعلی

  1. سود باز را محاسبه کنید. اگر جهت معامله کوتاه باشد و سود باز یک عدد مثبت باشد، نتیجه همچنان باید منفی باشد، بنابراین قدر مطلق محاسبه خود را د ر-1 ضرب می کنیم.

ABS (MVS - پول خرج شده) * -1

  1. Equity، یعنی پولی که در حال حاضر در دسترس معامله گر است را محاسبه کنید.

سرمایه اولیه + سود خالص + سود باز

  1. درصد حاشیه را به نسبت حاشیه تبدیل کنید.

درصد حاشیه / 100

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

MVS * نسبت حاشیه

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

نسبت وجوه در دسترس / مارجین

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

TRUNCATE (مرحله #8 / قیمت فعلی)

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

برای بررسی دقیق این محاسبه، اجازه دهید استراتژی Supertrend داخلی را به نمودار NASDAQ:TSLA در تایم فریم 1 بعدی اضافه کنیم. اندازه سفارش را روی 300% سهام و مارجین را برای موقعیت های خرید روی 25% تنظیم کنید.

../_images/Strategy_margin.png

اولین ورود ما در افتتاحیه بار در 16 سپتامبر 2010 اتفاق افتاد. ما 682438 واحد (اندازه موقعیت) را به قیمت 4. 43 دلار آمریکا (قیمت ورودی) خریداری می کنیم. سپس، در 23 سپتامبر 2010، زمانی که قیمت در 3. 9 (قیمت فعلی) بود، 111052 واحد به اجبار از طریق مارجین کال نقد شد.

  1. پول خرج شده: 682438 * 4. 43 = 3023200. 34
  2. MVS: 682438 * 3. 9 = 2661508. 2
  3. سود باز: −361692. 14
  4. حقوق صاحبان سهام: 1000000 + 0 − 361692. 14 = 638307. 86
  5. نسبت حاشیه: 25 / 100 = 0. 25
  6. حاشیه: 2661508. 2 * 0. 25 = 665377. 05
  7. وجوه موجود: 638307. 86 - 665377. 05 = -27069. 19
  8. پول از دست رفته: -27069. 19 / 0. 25 = -108276. 76
  9. سهام برای پوشش ضرر: TRUNCATE(-108276. 76 / 3. 9) = TRUNCATE(-27763. 27) = -27763
  10. اندازه تماس حاشیه: -27763 * 4 = - 111052
فارکس به زبان ساده...
ما را در سایت فارکس به زبان ساده دنبال می کنید

برچسب : نویسنده : طاهره ایرانی بازدید : <-PostHit-> تاريخ : دوشنبه 13 شهريور 1402 ساعت: 20:11