سقفها و بودجهٔ اجرا
پلتفرم برای هر اسکریپت چه چیزهایی را محدود میکند: گام در هر کندل و در هر اجرا، زمان، اندازه، مجموعهها، ترسیمها، هشدارها و درخواستها، و آنچه هنوز در دسترس نیست.
اسکریپت وقتی روی نمودار است، روی تمام کندلهای آن و داخل مرورگر شما اجرا میشود. به همین دلیل پلتفرم سقفهایی گذاشته است و اسکریپت نمیتواند آنها را بالا ببرد. هر سقفی که اسکریپت را متوقف کند، خطایی میدهد که کندل، خط و میزان مصرفشده را نام میبرد. این صفحه همهٔ سقفها را یکجا فهرست میکند. عددها از خود موتور گرفته شدهاند.
کار انجامشده: گام و زمان#
| سقف | مقدار |
|---|---|
| گامهایی که یک کندل میتواند مصرف کند | 500,000 |
| گامهایی که کل یک اجرا میتواند مصرف کند | 600,000,000 |
| زمان واقعی یک اجرا روی نمودار | 5,000 ms |
| تابعهای خودتان که همزمان در جریاناند، یکی درون دیگری | 64 |
گام واحدی از کار است: یک دور حلقه، یک بار پیمایش پنجره یا ماتریس، یک ترسیم، و برای هر هشت نویسه متنی که ساخته میشود یک گام. شمارش بر پایهٔ گام است، نه ثانیه؛ برای همین اسکریپت روی هر دستگاهی در همان نقطه متوقف میشود. کندلی که بیشتر از سهم خودش مصرف کند اسکریپت را با E-LIMIT-OPS متوقف میکند: The script takes too long on bar 0 …: this bar used more than … steps … (line 3). زمان هم بررسی میشود؛ تمام شدن آن E-LIMIT-TIME است.
معمولاً حلقهای که تمام نمیشود باعث رسیدن به این سقف میشود. اسکریپت در همان کندل اول متوقف میشود و پیام جای مشکل را نشان میدهد:
indicator "A loop that never ends"
edition = 1
mut n = 0
while true
n += 1
plot(n)زنجیرهای از تابعهای خودتان که یکدیگر را صدا میزنند در هر کندل میتواند تا 64 سطح عمق داشته باشد؛ یک سطح بیشتر اسکریپت را با E-LIMIT-DEPTH متوقف میکند. تابعی که خودش را، مستقیم یا از راه تابعهای دیگر، صدا بزند پیش از اجرای اسکریپت رد میشود (E3310): بهجای آن حلقه بنویسید.
حلقهای با هزار دور در هر کندل مشکلی ندارد، چون هزار گام از 500,000 گامی که هر کندل دارد خرج میکند. اگر اسکریپتی کند است، اول دنبال حلقهای بگردید که در هر کندل همان کار را تکرار میکند.
تاریخچه و اندازه#
| سقف | مقدار |
|---|---|
| دستکم اینقدر کندل تاریخچه که نمودار برای یک اسکریپت بارگذاری میکند | 2,048 |
| بیشترین تعداد کندل به عقب که هر خواندن یا پنجره میتواند به آن برسد | 8,192 |
| تعداد نویسههای یک اسکریپت | 400,000 |
| تعداد توکنهای یک اسکریپت (واژهها، عددها و نشانهها) | 250,000 |
| تعداد نویسههای یک خط | 20,000 |
| عمق تودرتویی پرانتزها، بلوکها و یک عبارت | 64، 40، 100 |
| تعداد خطاهایی که بررسیکننده فهرست میکند تا متوقف شود | 50 |
x[n] در n کندل اول na است، و همچنین وقتی نمودار آنقدر کندل به عقب ندارد. این تنها معنای na در اینجاست: مقدار در دادهها نیست. خواندنی که از چیزی که پلتفرم اجازه میدهد، یعنی 8,192 کندل، دورتر برود هیچوقت na نیست؛ خطاست. عددی که در خود اسکریپت نوشته شده (x[9000]، tech.sma(close, 9000)) پیش از اجرای اسکریپت پیدا میشود، E-LIMIT-HISTORY-STATIC. عددی که هنگام اجرا حساب میشود (یک ورودی، یک شمارنده) اجرا را روی همان کندل متوقف میکند، E-LIMIT-HISTORY؛ و ورودیای که مقدارش از max خودش بیشتر داده شده، پیش از اولین کندل رد میشود (E-INPUT-RANGE).
هر سری فقط همان کندلهایی را نگه میدارد که متن میگوید میخواند، پس وقتی آنچه اسکریپت به عقب میخواند ثابت است، حافظهٔ اسکریپت با طول نمودار بزرگ نمیشود. وقتی چیزی در متن خواندن را محدود نکند (ورودی بدون max)، اسکریپت اجرا میشود و سری تا 8,192 کندل نگه میدارد؛ ویرایشگر این را با W-ENGINE-HISTORY-OPEN میگوید. به چنین ورودیای max بدهید.
تعداد اسکریپتهایی که میتوانید نگه دارید به پلن شما بستگی دارد: پلن رایگان نمودار 2 اسکریپت و MillionChart Pro تا 100 اسکریپت. ویرایشگر وقتی به آن برسید خبر میدهد.
مجموعهها و متن#
| سقف | مقدار |
|---|---|
| تعداد عضوهای یک آرایه، یک نگاشت یا یک ماتریس | 100,000 |
| تعداد نویسههای متنی که یک فراخوانی میسازد | 1,000,000 |
| تعداد نویسههای متن یک ترسیم یا یک خانه | 2,000 (بریده میشود، همراه با اخطار) |
الگوی text.match: تعداد نویسهها، تعداد دستورها پس از باز شدن تکرارها، شمارندهٔ یک تکرار | 256، 2,048، 1,000 |
عضو زیاد E-LIMIT-ITEMS است و متن زیاد E-LIMIT-TEXT. الگویی که از سقفهایش بگذرد E-LIMIT-REGEX است.
حافظهٔ کار#
| سقف | مقدار |
|---|---|
| بایتهایی که اسکریپت در یک لحظه نگه میدارد (آرایهها، نقشهها، متنها، شیءها، ترسیمها، تاریخچه) | 134,217,728 |
| بایتهایی که اسکریپت در کل یک اجرا میتواند بسازد، حتی آنچه رها کرده | 2,147,483,648 |
بایتها را خود موتور و روی هر دستگاه به یک شکل میشمارد؛ حافظهٔ مرورگر نیستند. نگهداشتن بیش از حد E-LIMIT-MEMORY («holds») است و ساختن بیش از حد در کل اجرا همان کد («builds»). درخواست برای تایمفریم دیگر در همان حسابِ اسکریپتی که آن را میزند شمرده میشود، نه در حسابی جدا. اسکریپتی که در هر کندل یک آرایهٔ موقت میسازد و رهایش میکند با سقف اول متوقف نمیشود؛ فقط اسکریپتی که مدام بزرگتر میشود متوقف میشود.
ترسیمها و جدولها#
| سقف | مقدار |
|---|---|
| خطها، برچسبها و باکسهایی که نگه داشته میشوند، وقتی سرآیند چیزی نگفته باشد | 50 |
بیشترین مقداری که با max_lines، max_labels و max_boxes میتوانید بخواهید | 500 |
بیشترین مقدار برای max_polylines | 100 |
| یک جدول: ستونها، ردیفها، خانهها | 100، 500، 10,000 |
| خانههای همهٔ جدولهای زنده با هم | 20,000 |
| جدولهایی که نگه داشته میشوند | 40 |
وقتی اسکریپت بیشتر از تعداد قابلنگهداری ترسیم بسازد، قدیمیترینها کنار گذاشته میشوند و اجرا میگوید چند تا بوده (W-OBJECT-LIMIT). جدولی که از اندازهٔ مجاز بیشتر شود E-LIMIT-TABLE است؛ ترسیمی که از اندازهٔ مجاز بیشتر شود E-LIMIT-DRAW.
هشدارها#
هشدار روی اسکریپتهای خودتان در این انتشار خاموش است (کلیدها و گزینههای هشدار را ببینید)؛ اینها سقفهایی است که زبان برای آنها میگذارد.
| سقف | مقدار |
|---|---|
| دفعاتی که یک اسکریپت میتواند در یک کندل به صدا دربیاید | 20 |
| دفعاتی که میتواند در یک اجرا زنگ بزند | 5,000 |
| تعداد نویسههای پیام یک هشدار | 4,096 (بریده میشود، همراه با اخطار) |
درخواستها و ماژولها#
| سقف | مقدار |
|---|---|
| تعداد جفتهای متفاوت نماد و تایمفریم که یک اسکریپت نمودار میتواند بخواند | 20 |
| عمق ماژولهایی که ماژول دیگری را وارد میکنند | 8 |
| تعداد ایمپورتهایی که برای یک اسکریپت کامپایل میشوند | 64 |
| تعداد نویسههای متن ماژول که برای یک اسکریپت کامپایل میشود | 1,000,000 |
تعداد دورههایی که prior() میتواند به عقب برود | 64 |
عددها#
تابعهای ریاضی روی هر دستگاه پشتیبانیشده همان نتیجه را میدهند: همهجا یک پیادهسازی ثابت به کار میرود، بیشترین خطایی که روی مجموعهٔ آزمون فعلی اندازهگیری شده حداکثر 0.85 ulp است، و گرد کردن درست وعده داده نمیشود. صفحهٔ عددها این را توضیح میدهد. اسکریپتی که به بخشِ نگهدارندهٔ این تابعها در موتور نیاز دارد، بدون آن بخش شروع نمیشود (E-ENGINE-PART-UNAVAILABLE، E-ENGINE-PART-VERSION).
هنوز در دسترس نیست#
اینها برنامهریزی شدهاند یا ارائه نمیشوند. نوشتن هر کدام خطا میدهد، تا اسکریپت هیچوقت با معنایی اجرا نشود که برایش نوشته نشده بود؛ در بعضی از آنها پیام میگوید که این شکل رزرو شده است، و در بعضی دیگر فقط میگوید که نام یا گزینه شناختهشده نیست.
- ورودیهای
preset،bindوsecret. - بلوکهای
on closeوon tick، دستورreportو دستور سفارشbracket؛ اینها به نسخهٔ بعدی زبان (edition) تعلق دارند. fundingوhedgeدر سرآیند استراتژی.- دادههای نمادی غیر از نماد نمودار (
E4001)، و درخواست پنلی از نمادها یا پویش فهرستی از آنها. - نامهای
account.*وcontract.*. - عضوهای یک فهرست که به شکل
items[i]نوشته شوند (ازitems.at(i)استفاده کنید) و انتخابگرهای روی فهرستها مثل.where(...)و.count(...). - کمکتابعهای
pips(x)وto_ticks(d)؛ بهجای آنها درsymbol.pipضرب کنید یا برsymbol.tickتقسیم کنید. - مهلت انتظار (cooldown) یا انقضا که به شکل
3 barsنوشته شود؛ خودِ عدد را بنویسید. alert.send(json(...))؛ متن را خودتان بسازید.- تابعهای بینام.
- کتابخانههایی که پلتفرم تأمین کند.
نگاه کنید به: خواندن پیامهای ویرایشگر، انتخابها و حلقهها.