millionchart
English

سقف‌ها و بودجهٔ اجرا

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

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

کار انجام‌شده: گام و زمان#

سقفمقدار
گام‌هایی که یک کندل می‌تواند مصرف کند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 است.

معمولاً حلقه‌ای که تمام نمی‌شود باعث رسیدن به این سقف می‌شود. اسکریپت در همان کندل اول متوقف می‌شود و پیام جای مشکل را نشان می‌دهد:

Cuprel · خطا E-LIMIT-OPS
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_polylines100
یک جدول: ستون‌ها، ردیف‌ها، خانه‌ها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(...))؛ متن را خودتان بسازید.
  • تابع‌های بی‌نام.
  • کتابخانه‌هایی که پلتفرم تأمین کند.

نگاه کنید به: خواندن پیام‌های ویرایشگر، انتخاب‌ها و حلقه‌ها.