millionchart
English

تشخیص‌ها: کدهای خطا و اخطار

همهٔ کدهای زبان، به ترتیب کد. علت هر کدام، راه‌حل، و یک نسخهٔ غلط و یک نسخهٔ درست از کد.

وقتی چیزی غلط باشد، ویرایشگر خط مربوطه و یک پیام نشان می‌دهد. هر پیام یک کد ثابت دارد که این صفحه بر اساس آن مرتب شده و معنایش هرگز عوض نمی‌شود. پیام خود را در ادامه پیدا کنید: هر بخش با متن پیام شروع می‌شود (بخش‌هایی که تغییر می‌کنند داخل آکولاد نوشته شده‌اند، مثل {name}؛ بخشی که داخل کروشه باشد فقط وقتی اضافه می‌شود که موردش پیش بیاید)، بعد علت و راه‌حل را می‌گوید، و برای بیشتر کدها یک اسکریپت کوتاه که اشتباه را نشان می‌دهد و یکی که آن را درست می‌کند. پشتیبانی و این مستندات هر مشکل را با کدش نام می‌برند.

سه نوع پیام داریم. خطا جلوی اجرای اسکریپت را می‌گیرد؛ کدش E و یک عدد است (E3101) یا E- و چند کلمه (E-DT-ZONE). اخطار (W-) می‌گذارد اسکریپت اجرا شود. پیشنهاد (H-) همراه یک خطا می‌آید و می‌گوید چه بنویسید.

خطاهایی که موتور هنگام اجرای اسکریپت می‌دهد، و سقف‌های پلتفرم، در پیام‌های موتور آمده‌اند.

نویسه‌ها، متن، عددها و زمان‌ها#

کدهای E10xx از خواندن متن اسکریپت می‌آیند: گیومه‌ها، پرانتزها و کروشه‌ها، نویسه‌ها و مقدارهای ثابت. این‌ها پیش از هر چیز دیگری گزارش می‌شوند، چون اسکریپتی که خوانده نشود بررسی هم نمی‌شود.

E1001#

پیام. A text is not closed (it started with {quote})

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

راه‌حل. متن را با همان گیومه ببندید، یا اگر باید چند خط را بگیرد از متن با سه گیومه استفاده کنید.

Cuprel · خطا E1001
indicator "Example"
    edition = 1
let name = "Close
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let name = "Close"
plot(close, name = name)

E1002#

پیام. Tabs are not allowed in indentation: indent with spaces

علت. یک خط با نویسهٔ Tab تورفتگی گرفته است. تورفتگی فقط با فاصله نوشته می‌شود، چون Tab در ویرایشگرهای مختلف پهنای متفاوتی نشان می‌دهد.

راه‌حل. Tab را با فاصله عوض کنید (چهار فاصله رایج است). ویرایشگرتان را طوری تنظیم کنید که کلید Tab فاصله بگذارد.

E1003#

پیام. A colour is written #RRGGBB or #RRGGBBAA, not {text}

علت. رنگی که با # شروع می‌شود شش یا هشت رقم هگزادسیمال ندارد.

راه‌حل. #rrggbb بنویسید، یا #rrggbbaa با یک جفت رقم برای شفافیت. نام رنگ، مثل color.red، هم کار می‌کند.

Cuprel · خطا E1003
indicator "Example"
    edition = 1
plot(close, color = #12345)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close, color = #123456)

E1004#

پیام. Unexpected character "{char}": remove it, or write it inside a text

علت. بیرون از متن، نویسه‌ای آمده که در زبان معنایی ندارد، مثل $.

راه‌حل. آن را حذف کنید، یا داخل یک متن بگذارید. این خطا اغلب با یک پیشنهاد دربارهٔ شکلی که منظورتان بوده همراه است.

Cuprel · خطا E1004
indicator "Example"
    edition = 1
plot(close $ 2)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close * 2)

E1005#

پیام. This line is indented to a width that no block above uses

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

راه‌حل. خط را به پهنای یک بلاک باز تورفتگی بدهید، یا به پهنای بلاکی که می‌خواهید از آن بیرون بیایید.

Cuprel · خطا E1005
indicator "Example"
    edition = 1
if close > open
        plot(1)
    plot(2)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

if close > open
    mut up = 1
plot(close)

E1006#

پیام. The bracket "{char}" is {what}: every bracket needs its pair

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

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

Cuprel · خطا E1006
indicator "Example"
    edition = 1
plot(close

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close)

E1007#

پیام. This number is not written correctly: {text}

علت. عددی به شکلی نوشته شده که زبان نمی‌خواند، مثل 1.2.3.

راه‌حل. حداکثر یک ممیز بنویسید. برای دسته‌بندی رقم‌ها از 1_000 و برای توان از 1e3 استفاده کنید.

Cuprel · خطا E1007
indicator "Example"
    edition = 1
plot(1.2.3)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(1.2)

E1008#

پیام. Unknown escape "{seq}" in a text

علت. در یک متن، پس از بک‌اسلش حرفی آمده که escape نیست.

راه‌حل. از \n، \t، \"، \'، \\ یا \u{...} استفاده کنید. برای نوشتن خود بک‌اسلش، دو تا بنویسید.

Cuprel · خطا E1008
indicator "Example"
    edition = 1
plot(close, title = "a\q")

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close, name = "a\nb")

E1009#

پیام. "{seq}" is not a character: \u{...} needs 1 to 6 hex digits, up to 10FFFF

علت. در escape از نوع \u{...} یا یک تا شش رقم هگزادسیمال نیامده، یا کدی بالاتر از 10FFFF نام برده شده است.

راه‌حل. کد یک نویسهٔ موجود را بنویسید، مثلاً \u{1F600}.

Cuprel · خطا E1009
indicator "Example"
    edition = 1
plot(close, title = "Smile \u{110000}")

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close, name = "Smile \u{1F600}")

E1010#

پیام. A "{char}" in an f-text is not closed or not doubled: write {char}{char} for the character itself

علت. در یک متن قالب‌دار، { یا } بسته نشده یا دوتایی نوشته نشده است.

راه‌حل. آکولاد را ببندید، یا وقتی خود نویسه را می‌خواهید آن را دوتایی بنویسید ({{ یا }}).

Cuprel · خطا E1010
indicator "Example"
    edition = 1
plot(close, title = f"{close")

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close, name = f"{close:.2f}")

E1011#

پیام. The digit "{found}" is not an ASCII digit: write "{expected}"

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

راه‌حل. رقم را با 0 تا 9 بنویسید. خطا جایگزین را هم به‌صورت یک اصلاح همراهش دارد.

Cuprel · خطا E1011
indicator "Example"
    edition = 1
plot(ta.sma(close, ۲۰))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(tech.sma(close, 20))

E1012#

پیام. The sign "{found}" is not an ASCII sign: write "{expected}"

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

راه‌حل. آن را با , یا ; عوض کنید. خطا جایگزین را هم به‌صورت یک اصلاح همراهش دارد.

Cuprel · خطا E1012
indicator "Example"
    edition = 1
plot(math.max(1،2))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(math.max(1, 2))

E1013#

پیام. The quote "{found}" is not an ASCII quote: write {expected}

علت. برای باز یا بسته کردن یک متن، گیومه خمیده به کار رفته، از آن‌هایی که واژه‌پرداز می‌نویسد.

راه‌حل. از گیومه راست " یا ' استفاده کنید.

Cuprel · خطا E1013
indicator "Example"
    edition = 1
plot(close, title = “Close”)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close, name = "Close")

E1014#

پیام. The sign "{found}" is not the one the language uses: write "{expected}"

علت. نشانه‌ای به کار رفته که شبیه عملگر است (علامت ضرب، خط تیرهٔ بلند) ولی عملگر زبان نیست.

راه‌حل. عملگر ASCII را بنویسید: *، /، -، <=، >= یا !=.

Cuprel · خطا E1014
indicator "Example"
    edition = 1
plot(close × 2)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close * 2)

E1020#

پیام. This is not a valid clock time: {text}

علت. ساعت یک روز، ساعت و دقیقهٔ معتبری نیست، مثل 25:99.

راه‌حل. ساعت را از 00 تا 23 و دقیقه را از 00 تا 59 بنویسید: 08:30.

Cuprel · خطا E1020
indicator "Example"
    edition = 1
plot(25:99)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(08:30)

E1021#

پیام. This is not a valid date or time: {text}

علت. یک تاریخ یا یک لحظه، تاریخ و زمان واقعی نیست، مثل ماه 13.

راه‌حل. سال، ماه، روز، ساعت و دقیقه را بررسی کنید: @2026-09-17T07:10Z.

Cuprel · خطا E1021
indicator "Example"
    edition = 1
plot(@2026-13-45T00:00Z)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(@2026-09-17T07:10Z)

E1022#

پیام. This is not a time zone the chart knows: "{name}"

علت. نام یک منطقهٔ زمانی از آن‌هایی نیست که نمودار می‌شناسد.

راه‌حل. نامی از پایگاه دادهٔ منطقه‌های زمانی بنویسید، مثل "Europe/London" یا "America/New_York"، یا "UTC".

Cuprel · خطا E1022
indicator "Example"
    edition = 1

session london = 08:00 .. 16:00 @ "Mars/Olympus"
plot(if london.active then 1 else 0)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

session london = 08:00 .. 16:00 @ "Europe/London"
plot(if london.active then 1 else 0)

E1023#

پیام. A duration is written with one unit (90m, not 1h30m): {text}

علت. یک مدت‌زمان دو واحد دارد، مثل 1h30m.

راه‌حل. یک واحد بنویسید: 90m.

Cuprel · خطا E1023
indicator "Example"
    edition = 1
plot(1h30m)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(90m)

E1090#

پیام. The script is too large: {limit} characters is the most

علت. اسکریپت از تعداد نویسه‌ای که یک اسکریپت می‌تواند داشته باشد بلندتر است.

راه‌حل. اسکریپت را کوتاه‌تر کنید: چیزهایی را که استفاده نمی‌کنید حذف کنید. عدد در سقف‌ها و بودجهٔ اجرا آمده است: 400,000 نویسه.

E1091#

پیام. The script has too many tokens: {limit} is the most

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

راه‌حل. آن را تقسیم کنید، مثل E1090. سقف 250,000 توکن است.

E1092#

پیام. A line is too long: {limit} characters is the most

علت. یک خط تنها از سقف مجاز بلندتر است.

راه‌حل. خط را بشکنید: بعد از ویرگول، بعد از یک عملگر، یا داخل پرانتز یا کروشه. سقف 20,000 نویسه است.

E1093#

پیام. This is nested too deep ({what}): {limit} levels is the most

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

راه‌حل. به بخش درونی با let یک نام بدهید، یا آن را به یک تابع ببرید. سقف‌ها 64 پرانتز و 40 بلاک است.

ساختار و دستورها#

کدهای E2xxx از شکل دستورها می‌آیند: بلاک‌ها، سرآیند، ورودی‌ها، match و importها.

E2001#

پیام. An if used as a value needs an else

علت. if ... then ... که به‌عنوان مقدار استفاده شده else ندارد.

راه‌حل. شاخهٔ else را اضافه کنید. مقدار باید در هر دو حالتِ شرط وجود داشته باشد.

Cuprel · خطا E2001
indicator "Example"
    edition = 1
let tint = if close > open then color.green
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let tint = if close > open then color.green else color.red
plot(close, color = tint)

E2002#

پیام. Expected {what}, found {found}

علت. تحلیل‌گر یک چیز (یک نام، یک ویرگول، یک پرانتز بسته) انتظار داشت و چیز دیگری دید.

راه‌حل. پیام را بخوانید: می‌گوید چه انتظار می‌رفت. انتهای خطِ قبل از خطی را که نام برده شده نگاه کنید.

Cuprel · خطا E2002
indicator "Example"
    edition = 1
let = 5
plot(1)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let five = 5
plot(five)

E2003#

پیام. A block must be indented under its first line

علت. بعد از خطی که یک بلاک شروع می‌کند (if، for، fn …) خطی آمده که عمیق‌تر تورفتگی ندارد.

راه‌حل. خط‌های بلاک را یک سطح زیر خط اولش تورفتگی بدهید.

Cuprel · خطا E2003
indicator "Example"
    edition = 1
if close > open
plot(1)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

if close > open
    mut up = 1
plot(close)

E2004#

پیام. A block needs at least one line

علت. در بلاکِ تورفته هیچ خطی نیست که بتوان آن را خطِ هم‌نوع بلاک خواند؛ مثلاً یک group که خط‌هایش ورودی نیستند یا یک enum که بدنه‌اش از نام‌ها ساخته نشده. (بلاکی که خالی است، یا خط اولش تورفتگی ندارد، E2003 است.)

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

E2005#

پیام. Unexpected {found}: a statement ends at the end of its line (end a line with an operator or a comma to go on)

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

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

Cuprel · خطا E2005
indicator "Example"
    edition = 1
let a = 1; let b = 2
plot(a + b)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let a = 1
let b = 2
plot(a + b)

E2006#

پیام. Expected a value, found {found}

علت. مقداری انتظار می‌رفت و چیز دیگری پیدا شد، مثلاً پرانتز بسته بعد از ویرگول.

راه‌حل. مقدار را بنویسید، یا ویرگول را بردارید.

Cuprel · خطا E2006
indicator "Example"
    edition = 1
plot(close, title = )

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close, name = "Close")

E2010#

پیام. Comparisons do not chain: write (a < b) and (b < c)

علت. مقایسه‌ها زنجیره‌ای نوشته شده‌اند، مثل a < b < c.

راه‌حل. دو مقایسه را با and به هم وصل کنید: a < b and b < c.

Cuprel · خطا E2010
indicator "Example"
    edition = 1
plot(if 1 < close < 5 then 1 else 0)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(if 1 < close and close < 5 then 1 else 0)

E2011#

پیام. "=" gives a name a value; to compare write "=="

علت. جایی که مقایسه منظور بوده، یک = تنها به کار رفته است.

راه‌حل. برای مقایسه == بنویسید. یک = تنها به یک نام مقدار می‌دهد.

Cuprel · خطا E2011
indicator "Example"
    edition = 1
if close = open
    mut up = 1
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

if close == open
    mut up = 1
plot(close)

E2021#

پیام. Unknown number format "{spec}"

علت. یک متن قالب‌دار قالب عددی دارد که زبان نمی‌شناسد.

راه‌حل. از قالبی مثل .2f، ,.2f، +.1f، .1%، 03 یا price استفاده کنید. قالب‌بندی متن و عدد آن‌ها را فهرست کرده است.

Cuprel · خطا E2021
indicator "Example"
    edition = 1
plot(close, title = f"{close:10.2f}")

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close, name = f"{close:.2f}")

E2030#

پیام. The input "{name}" needs a type or a literal default: input {name}: int = 5

علت. یک ورودی نه نوع دارد و نه پیش‌فرضی که نوع از آن خوانده شود.

راه‌حل. نوع، پیش‌فرض، یا هر دو را بنویسید: input length: int = 20.

Cuprel · خطا E2030
indicator "Example"
    edition = 1
input length
plot(length)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

input length: int = 20
plot(length)

E2031#

پیام. The option "{name}" is repeated, or a positional value follows a named one

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

راه‌حل. هر گزینه را یک بار بدهید، و عنوان (مقداری که نام ندارد) را اول بگذارید.

Cuprel · خطا E2031
indicator "Example"
    edition = 1
input a: int = 1, title = "A", title = "B"
plot(a)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

input a: int = 1, name = "A"
plot(a)

E2032#

پیام. This input has two tooltips: a /// line above it and one at the end of its line

علت. یک ورودی دو راهنمای کوچک دارد: یک خط /// بالای آن و یک /// دیگر در انتهای خط خودش.

راه‌حل. یکی از آن‌ها را نگه دارید.

Cuprel · خطا E2032
indicator "Example"
    edition = 1
/// How many bars
input length: int = 20 /// Another text
plot(length)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

/// How many bars
input length: int = 20
plot(length)

E2041#

پیام. A loop step of 0 never moves

علت. گام حلقه‌ای که 0 نوشته شود هرگز جلو نمی‌رود.

راه‌حل. گامی غیر از صفر بگذارید. برای شمارش معکوس، گام منفی مثل by -1 بنویسید.

Cuprel · خطا E2041
indicator "Example"
    edition = 1
mut count = 0
for i in 0 to 5 by 0
    count += 1
plot(count)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

mut count = 0
for i in 0 to 5 by 1
    count += 1
plot(count)

E2050#

پیام. A match arm needs "=>" after its pattern, found {found}

علت. خطی در یک match الگو دارد ولی => و نتیجه ندارد.

راه‌حل. در هر خط pattern => result بنویسید.

Cuprel · خطا E2050
indicator "Example"
    edition = 1
let n = match close
    1
plot(n)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let n = match int(close) % 2
    0 => 1
    _ => 2
plot(n)

E2051#

پیام. "_" must be the last arm of a match, and only once

علت. حالت پیش‌فرضِ _ در یک match آخرین خط نیست، یا دوبار نوشته شده است.

راه‌حل. _ را به انتها ببرید و فقط یک بار بنویسید.

Cuprel · خطا E2051
indicator "Example"
    edition = 1
let n = match int(close) % 2
    _ => 0
    1 => 1
plot(n)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let n = match int(close) % 2
    1 => 1
    _ => 0
plot(n)

E2052#

پیام. Write two arms instead of "a | b"

علت. دو الگو با | در یک خط به هم وصل شده‌اند.

راه‌حل. برای هر الگو یک خط بنویسید.

Cuprel · خطا E2052
indicator "Example"
    edition = 1
let n = match int(close) % 3
    1 | 2 => 1
    _ => 0
plot(n)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let n = match int(close) % 3
    1 => 1
    2 => 1
    _ => 0
plot(n)

E2070#

پیام. An import needs a version and an alias: import Owner/Name@1 as alias

علت. import نسخه ندارد یا نام مستعار (alias) ندارد.

راه‌حل. import Owner/Name@1 as alias بنویسید.

Cuprel · خطا E2070
indicator "Example"
    edition = 1
import Me/Stats as mu
plot(close)

E2072#

پیام. An input must be at the top level of the file or inside a group, not inside a block (an if, a loop or a function)

علت. یک input داخل یک تابع، یک if یا یک حلقه نوشته شده است.

راه‌حل. آن را به بالاترین سطح فایل ببرید، یا داخل یک group بگذارید.

Cuprel · خطا E2072
indicator "Example"
    edition = 1
fn f()
    input a: int = 1
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

input a: int = 1
plot(a)

E2073#

پیام. A group lists only inputs

علت. بلاک group چیزی غیر از ورودی دارد.

راه‌حل. در گروه فقط ورودی بگذارید؛ خط‌های دیگر را از آن بیرون ببرید.

E2074#

پیام. A session is declared at the top level of the file

علت. تعریف session در بالاترین سطح فایل نیست.

راه‌حل. آن را از if، حلقه یا تابع بیرون بیاورید و در خطی جدا بنویسید.

Cuprel · خطا E2074
indicator "Example"
    edition = 1
if close > open
    session a = 08:00 .. 16:00 @ "UTC"
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

session a = 08:00 .. 16:00 @ "UTC"
plot(if a.active then 1 else 0)

E2080#

پیام. The file must start with indicator "name", strategy "name" or module name

علت. فایل با سرآیند شروع نشده است.

راه‌حل. با indicator "Name"، strategy "Name" یا module name شروع کنید و بعد از هرکدام خط‌های تورفتهٔ گزینه‌ها را بنویسید. شکل فراخوانی، indicator(...)، در دورهٔ گذار به شکل تورفته هنوز خوانده می‌شود.

Cuprel · خطا E2080
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close)

E2081#

پیام. The header {kind}(...) is written once

علت. سرآیند دوبار نوشته شده است.

راه‌حل. یک سرآیند نگه دارید، در اولین خط کد.

Cuprel · خطا E2081
indicator "Example"
    edition = 1
indicator("Again", edition = 1)
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close)

E2082#

پیام. The option "{name}" is given twice in the header or in a block

علت. یک گزینهٔ سرآیند، یا یک گزینه در بلوکی مثل setup:، دوبار داده شده است.

راه‌حل. هر گزینه را یک بار بدهید.

Cuprel · خطا E2082
indicator("Example", overlay = true, overlay = false, edition = 1)
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1
    display = price

plot(close)

E2090#

پیام. This expression is nested too deep: {limit} levels is the most

علت. یک عبارت عمیق‌تر از سقف مجاز تو در تو شده است.

راه‌حل. به بخش‌های درونی با let یک نام بدهید. سقف 100 سطح است.

E2099#

پیام. Too many errors: stopping here (the limit is {limit})

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

راه‌حل. خطاهای اول را درست کنید؛ بقیه اغلب از آن‌ها می‌آیند. بررسی‌کننده حداکثر 50 مورد را فهرست می‌کند.

E2100#

پیام. The header is not written the way this build reads it: write {use} and A call-style header cannot be combined with E1 configuration blocks. Convert the header to the indented form. Mechanical fix: {fix}

علت. سرآیند به دو شکل نوشته می‌شود: شکل فراخوانی، strategy("Name", ...)، و شکل تورفته، یعنی strategy "Name" و بعد خط‌های تورفتهٔ name = value. شکل فراخوانی در دورهٔ گذار به شکل تورفته خوانده می‌شود، و بلوک‌های اختیاری setup:، execution: و margin: فقط به شکل تورفته تعلق دارند. این کد در دو حالت می‌آید: بخش جلویی (front end) روی خواندن یک شکل تنظیم شده و فایل به شکل دیگر نوشته شده، یا بعد از سرآیندی به شکل فراخوانی یکی از بلوک‌ها آمده است.

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

Cuprel · خطا E2100
strategy("Example", edition = 1)

setup:
    capital = 10000

plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
strategy "Example"
    edition = 1

setup:
    capital = 10000

plot(close)

E2102#

پیام. The block "{block}:" is written twice: a strategy has each of setup:, execution: and margin: once

علت. یکی از بلوک‌های سرآیند (setup:، execution: یا margin:) در یک استراتژی دوبار آمده است.

راه‌حل. خط‌های هر دو را در یک بلوک بگذارید.

Cuprel · خطا E2102
strategy "Example"
    edition = 1

setup:
    capital = 10000

setup:
    fees = fee.rate(0.05)

plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
strategy "Example"
    edition = 1

setup:
    capital = 10000
    fees = fee.rate(0.05)

plot(close)

نام‌ها، تابع‌ها، ورودی‌ها و فراخوانی‌ها#

کدهای E3xxx از بررسی‌کننده می‌آیند؛ بررسی‌کننده اسکریپتی را که درست نوشته شده می‌خواند و پیش از اجرای هر چیز، نام‌ها، فراخوانی‌ها، گزینه‌ها، سشن‌ها و stateها را بررسی می‌کند.

E3101#

پیام. "{name}" is already declared in this function (line {line}); pick another name, or give it a new value with =

علت. یک نام دو بار در یک جا تعریف شده است.

راه‌حل. نام دیگری انتخاب کنید، یا با = به اولی مقدار تازه بدهید (باید mut یا state باشد).

Cuprel · خطا E3101
indicator "Example"
    edition = 1

let level_ = 10
let level_ = 20
plot(level_)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let level_ = 10
let upper = 20
plot(level_ + upper)

E3102#

پیام. "{name}" is not declared: declare it with let, mut or state before giving it a value

علت. به یک نام مقدار داده شده، اما هیچ‌وقت تعریف نشده است.

راه‌حل. اول آن را با let، mut یا state تعریف کنید.

Cuprel · خطا E3102
indicator "Example"
    edition = 1

total = 5
plot(total)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

mut total = 5
plot(total)

E3103#

پیام. "{name}" is {kind}: declare it with mut (a value that restarts every bar) or state (a value that stays between bars) to give it a new value

علت. به نامی که با let تعریف شده، یا به یک ورودی یا یک پارامتر، مقدار تازه داده شده است. این‌ها هیچ‌وقت تغییر نمی‌کنند.

راه‌حل. نام را با mut (در هر کندل دوباره از اول ساخته می‌شود) یا state (بین کندل‌ها نگه داشته می‌شود) تعریف کنید.

Cuprel · خطا E3103
indicator "Example"
    edition = 1

let total = 0
total += 1
plot(total)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

state total = 0
total += 1
plot(total)

E3104#

پیام. The function "{fn}" gives a value to "{name}", which is declared outside it: pass a record, or return the value

علت. یک تابع به نام mut یا stateای که بیرون از آن تعریف شده مقدار تازه می‌دهد.

راه‌حل. مقدار را به‌صورت آرگومان بدهید و مقدار تازه را برگردانید، یا مقدارها را در یک رکورد نگه دارید.

Cuprel · خطا E3104
indicator "Example"
    edition = 1

state hits: int = 0
fn count_up(): int
    hits += 1
    return hits
plot(count_up())

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

state hits: int = 0
fn next_count(n: int): int = n + 1
hits = next_count(hits)
plot(hits)

E3110#

پیام. "{type}" cannot be the type of an input[. Did you mean "{guess}"?]

علت. نوعی که بعد از نام ورودی نوشته شده، یکی از نوع‌های ورودی نیست.

راه‌حل. از int، float، bool، text، color، source، timeframe، symbol، session، time، price یا نام یک enum استفاده کنید. پیام نزدیک‌ترین را پیشنهاد می‌دهد.

Cuprel · خطا E3110
indicator "Example"
    edition = 1

input length: integer = 20
plot(length)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

input length: int = 20
plot(length)

E3120#

پیام. The id "{id}" is already used (line {line})

علت. دو ورودی، دو خط یا دو شرط شناسهٔ یکسان دارند.

راه‌حل. نام یکی را عوض کنید، یا به آن id = "other" بدهید. شناسه‌ها شناسه را توضیح می‌دهد.

Cuprel · خطا E3120
indicator "Example"
    edition = 1

input length: int = 20
input length: int = 30
plot(length)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

input length: int = 20
input other: int = 30
plot(length + other)

E3121#

پیام. key and was take a text written in the script, like key = "length"

علت. به key یا was چیزی غیر از یک متنِ نوشته‌شده در اسکریپت داده شده است.

راه‌حل. یک متن بنویسید: key = "length".

Cuprel · خطا E3121
indicator "Example"
    edition = 1

let n = "x"
input a: int = 1, key = n
plot(a)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

input a: int = 1, key = "a"
plot(a)

E3130#

پیام. "{opt}" is not an option of {fn}; options: {list}

علت. نام یک گزینه، گزینه‌ای نیست که آن فراخوانی بپذیرد. پیام گزینه‌هایی را که می‌پذیرد فهرست می‌کند.

راه‌حل. املای آن را درست کنید یا گزینه را بردارید. گزینهٔ ناشناخته هیچ‌وقت نادیده گرفته نمی‌شود.

Cuprel · خطا E3130
indicator "Example"
    edition = 1

input length: int = 20, minimum = 1
plot(length)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

input length: int = 20, min = 1
plot(length)

E3131#

پیام. The value of "{opt}" does not fit: write {type}

علت. مقدار یک گزینه از نوع یا شکل نادرستی برای آن گزینه است.

راه‌حل. پیام را بخوانید: می‌گوید چه باید نوشت؛ برای مثال یک متنِ نوشته‌شده در اسکریپت، یا یک عدد صحیح از 1 تا 64.

Cuprel · خطا E3131
indicator "Example"
    edition = 1

plot(prior(year).high)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(prior(day).high)

E3132#

پیام. A strategy cannot use future = true: it would trade on prices it could not have seen. Remove it (the default is the last closed bar)

علت. یک استراتژی در یک request از future = true استفاده کرده است؛ در این صورت با قیمت‌هایی معامله می‌کرد که نمی‌توانسته ببیند.

راه‌حل. آن را بردارید. پیش‌فرض، آخرین کندل بسته‌شدهٔ تایم‌فریم دیگر را می‌خواند.

Cuprel · خطا E3132
strategy "Example"
    edition = 1
    display = price

let day_high = data.series("1D", high, symbol = symbol.id, future = true)
plot(day_high)

نسخهٔ اصلاح‌شده:

Cuprel
strategy "Example"
    edition = 1
    display = price

let day_high = data.series("1D", high, symbol = symbol.id)
plot(day_high)

E3133#

پیام. {opt} can use only inputs and constants: "{name}" is not one

علت. قاعدهٔ show_if یا check چیزی را نام می‌برد که ورودی یا ثابت نیست: قیمت، یک سری، یک let، فراخوانی‌ای که state نگه می‌دارد، یک فهرست یا x[n]. قاعده فقط از روی تنظیمات حساب می‌شود، نه از روی کندل‌ها.

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

Cuprel · خطا E3133
indicator "Example"
    edition = 1

input depth: int = 3, "Depth", show_if = close > 0
plot(depth)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

input advanced: bool = false, "Advanced"
input depth: int = 3, "Depth", show_if = advanced
plot(depth)

E3134#

پیام. The show_if of "{name}" depends on itself: through the inputs it names it leads back to "{name}"

علت. show_if یک ورودی ورودی‌هایی را نام می‌برد که show_if خودشان به همان ورودی برمی‌گردد، پس هیچ ورودی‌ای نمی‌تواند اولین ورودیِ تصمیم‌گرفته‌شده باشد.

راه‌حل. یکی از ورودی‌ها را بدون قاعده نشان بدهید، یا ورودی دیگری را نام ببرید.

Cuprel · خطا E3134
indicator "Example"
    edition = 1

input a: int = 1, "A", show_if = b > 0
input b: int = 1, "B", show_if = a > 0
plot(a + b)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

input a: int = 1, "A"
input b: int = 1, "B", show_if = a > 0
plot(a + b)

E3135#

پیام. The setting "{opt}" can use only inputs and constants of the chart: "{name}" is not one

علت. هر خط از setup:، execution: یا margin: یک بار و پیش از اولین کندل محاسبه می‌شود، پس فقط می‌تواند از چیزی استفاده کند که در آن لحظه معلوم است: ورودی‌ها، ثابت‌های نمودار (مثل اندازهٔ تیک نماد) و عملگرها و فراخوانی‌های ساده روی آن‌ها. یک سری (close)، یک state یا فراخوانی‌ای که چیزی را بین کندل‌ها به خاطر می‌سپارد پیش از اجرا معلوم نیست.

راه‌حل. یک عدد، یک ورودی یا عبارتی از همین‌ها بنویسید. برای اینکه یک تنظیم قابل‌تغییر باشد، یک ورودی تعریف کنید و نامش را بنویسید.

Cuprel · خطا E3135
strategy "Example"
    edition = 1

setup:
    capital = close

plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
strategy "Example"
    edition = 1

setup:
    capital = money

input money: float = 10000, "Capital"

plot(close)

E3136#

پیام. The block "{block}:" belongs at the top level of a strategy: this is not a strategy, or the block is inside another block

علت. setup:، execution: و margin: حساب و اجرای معامله‌های یک استراتژی را تنظیم می‌کنند. در اندیکاتور یا ماژول خوانده نمی‌شوند، و یک بلوک را نمی‌شود درون بلوک دیگر نوشت.

راه‌حل. بلوک را در یک strategy و بدون تورفتگی در ابتدای یک خط بنویسید؛ از اندیکاتور یا ماژول حذفش کنید.

Cuprel · خطا E3136
indicator "Example"
    edition = 1

setup:
    capital = 10000

plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close)

E3140#

پیام. return is only valid inside a function

علت. return بیرون از تابع نوشته شده است.

راه‌حل. return را فقط درون یک fn بنویسید.

Cuprel · خطا E3140
indicator "Example"
    edition = 1

return 5
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

fn five(): float
    return 5
plot(five())

E3141#

پیام. This function returns {n} values but its type says {m}

علت. یک تابع تعداد مقدارهایی را برمی‌گرداند که با تعداد نوشته‌شده در نوعش فرق دارد.

راه‌حل. تاپل را با نوع هماهنگ کنید: (float, float) یعنی دو مقدار.

Cuprel · خطا E3141
indicator "Example"
    edition = 1

fn pair(): (float, float) = (1.0, 2.0, 3.0)
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

fn pair(): (float, float) = (1.0, 2.0)
plot(close)

E3142#

پیام. break and continue are only valid inside a loop

علت. break یا continue بیرون از حلقه استفاده شده است.

راه‌حل. آن‌ها را فقط درون for یا while به کار ببرید.

Cuprel · خطا E3142
indicator "Example"
    edition = 1

break
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

mut found = 0
for i in 1 to 10
    if i > 3
        found = i
        break
plot(found)

E3143#

پیام. A tuple of {n} values is given to {m} names

علت. یک تاپل با اندازه‌ای مشخص به تعداد دیگری نام تقسیم شده است.

راه‌حل. به تعداد مقدارهایی که تابع برمی‌گرداند نام بنویسید؛ برای مقداری که لازم ندارید _ بگذارید.

Cuprel · خطا E3143
indicator "Example"
    edition = 1

fn pair(): (float, float) = (1.0, 2.0)
let (a, b, c) = pair()
plot(a)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

fn pair(): (float, float) = (1.0, 2.0)
let (a, b) = pair()
plot(a + b)

E3144#

پیام. return, break and continue cannot leave a block that gives a value

علت. return، break یا continue درون بلوکی استفاده شده که مقدار می‌دهد، مثل یک عبارت if ... then با بلوک.

راه‌حل. مقدار را بدون خروج از بلوک حساب کنید: return را بعد از عبارت بگذارید، نه درون آن.

Cuprel · خطا E3144
indicator "Example"
    edition = 1

fn f(x: float): float
    return if x > 0
        return 1
    else
        2
plot(f(close))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

fn f(x: float): float
    return if x > 0 then 1 else 2
plot(f(close))

E3150#

پیام. Two functions "{name}" take the same arguments (line {line})

علت. دو تابع نام یکسان دارند و آرگومان‌هایشان هم یکی است.

راه‌حل. نام یکی را عوض کنید، یا به آن‌ها آرگومان‌های متفاوت بدهید.

Cuprel · خطا E3150
indicator "Example"
    edition = 1

fn f(x: float): float = x
fn f(y: float): float = y
plot(f(close))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

fn f(x: float): float = x
fn g(y: float): float = y
plot(f(close) + g(open))

E3151#

پیام. "{name}" is defined later (line {line}): define a function before using it

علت. یک تابع پیش از خطی که در آن تعریف شده فراخوانی شده است.

راه‌حل. تعریف را بالاتر از اولین جای استفاده ببرید.

Cuprel · خطا E3151
indicator "Example"
    edition = 1

plot(f(close))
fn f(x: float): float = x

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

fn f(x: float): float = x
plot(f(close))

E3160#

پیام. "{name}" is not a function this chart knows[. Did you mean "{guess}"?]

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

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

Cuprel · خطا E3160
indicator "Example"
    edition = 1

plot(sma(close, 5))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(tech.sma(close, 5))

E3161#

پیام. {fn} takes at most {max} arguments

علت. تابعی با آرگومان‌های بیشتر از تعداد قابل‌پذیرش فراخوانی شده است.

راه‌حل. آرگومان اضافه را بردارید.

Cuprel · خطا E3161
indicator "Example"
    edition = 1

plot(math.abs(1, 2))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(math.abs(-1))

E3162#

پیام. {fn} has no argument "{name}"; arguments: {list}

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

راه‌حل. املای نام را درست کنید.

Cuprel · خطا E3162
indicator "Example"
    edition = 1

plot(tech.sma(close, lenght = 5))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(tech.sma(close, length = 5))

E3163#

پیام. {fn} needs {min} arguments ({names}), got {got}

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

راه‌حل. آرگومان‌های جاافتاده را اضافه کنید.

Cuprel · خطا E3163
indicator "Example"
    edition = 1

plot(tech.sma(close))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(tech.sma(close, 20))

E3164#

پیام. The argument "{name}" of {fn} is given twice

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

راه‌حل. آن را یک بار بدهید.

Cuprel · خطا E3164
indicator "Example"
    edition = 1

plot(tech.sma(close, 5, length = 6))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(tech.sma(close, length = 6))

E3170#

پیام. Two methods "{name}" could take this value: name the type of the value

علت. دو متد با یک نام می‌توانند این مقدار را بپذیرند و موتور نمی‌تواند تشخیص دهد کدام را می‌خواهید.

راه‌حل. نوع مقدار را مشخص کنید، یا به متدها نام‌های متفاوت بدهید.

E3171#

پیام. "{name}" is not declared[. Did you mean "{guess}"?]

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

راه‌حل. نام را بالاتر از جای استفاده‌اش تعریف کنید، یا املایش را درست کنید.

Cuprel · خطا E3171
indicator "Example"
    edition = 1

plot(clos)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close)

E3172#

پیام. "{name}" is not exported by "{module}"

علت. نامی از یک ماژولِ واردشده خوانده شده و ماژول آن را export نکرده است.

راه‌حل. آن را در ماژول export کنید، یا نامی را به کار ببرید که ماژول export کرده است.

E3173#

پیام. "{name}[…]" reads the history of "{name}", not an item of the array: write {name}.at(index)

علت. یک آرایه با [ ] خوانده شده که تاریخچهٔ یک سری را می‌خواند، نه یک عضو آرایه را.

راه‌حل. از .at(index) استفاده کنید: levels.at(1).

Cuprel · خطا E3173
indicator "Example"
    edition = 1

let levels = [close, open, high]
plot(levels[1])

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let levels = [close, open, high]
plot(levels.at(1))

E3180#

پیام. {name}(...) and the other size and fee helpers belong in the strategy(...) header

علت. یک کمکی برای حجم یا کمیسیون، مثل strategy.lots(...)، در بدنهٔ اسکریپت به کار رفته است.

راه‌حل. این‌ها جایشان در سرآیند strategy(...) است: size = strategy.lots(0.1).

Cuprel · خطا E3180
indicator "Example"
    edition = 1

let s = strategy.lots(1)
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
strategy "Example"
    edition = 1
    display = price

setup:
    size = sizing.lots(1)

plot(close)

E3190#

پیام. Edition {n} is not supported (this build: {max})

علت. سرآیند نسخه‌ای از زبان (edition) را خواسته که این ساخت اجرا نمی‌کند.

راه‌حل. از edition = 1 استفاده کنید، یا آن را حذف کنید.

Cuprel · خطا E3190
indicator "Example"
    edition = 2

plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close)

E3200#

پیام. uses takes texts written in the script: write uses "XAUUSD"

علت. بعد از uses چیزی غیر از یک متنِ نوشته‌شده در اسکریپت آمده است.

راه‌حل. uses "XAUUSD" را بنویسید.

E3201#

پیام. The element type of [] is not known: write let a: array<float> = []

علت. یک آرایهٔ خالی [] نوشته شده بدون اینکه معلوم باشد چه چیزی در آن می‌آید.

راه‌حل. به آن نوع بدهید: let items: array<float> = [].

Cuprel · خطا E3201
indicator "Example"
    edition = 1

let items = []
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let items: array<float> = []
plot(close)

E3202#

پیام. An array written out has at most {max} items

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

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

E3210#

پیام. {what} needs {min} argument(s) ({list}); this call gives {given}: {names} is (are) missing

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

راه‌حل. آرگومان‌های جاافتاده را اضافه کنید؛ پیام آن‌ها را نام می‌برد.

E3211#

پیام. alert.send(once = …) is "bar", "bar_close", "per_day", "on_change" or "all"; "{str}" is none of them

علت. مقدار once در alert() یکی از مقدارهایی نیست که نمودار بشناسد.

راه‌حل. از "bar"، "bar_close"، "per_day"، "on_change" یا "all" استفاده کنید.

Cuprel · خطا E3211
indicator "Example"
    edition = 1

if close > open
    alert.send("up", key = "up", once = "sometimes")
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

if close > open
    alert.send("up", key = "up", once = "bar_close")
plot(close)

E3251#

پیام. A session that starts and ends at {time} has no hours: give it two different times (one that ends first runs over midnight)

علت. یک سشن در همان ساعتی که شروع می‌شود تمام می‌شود، پس ساعتی ندارد.

راه‌حل. دو ساعت متفاوت به آن بدهید. اگر زودتر از ساعت شروع تمام شود، از نیمه‌شب رد می‌شود.

Cuprel · خطا E3251
indicator "Example"
    edition = 1

session a = 08:00 .. 08:00 @ "UTC"
plot(if a.active then 1 else 0)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

session a = 08:00 .. 16:00 @ "UTC"
plot(if a.active then 1 else 0)

E3260#

پیام. "{name}" is a session: read a member of it, like {name}.active, .start, .end, .index, .high or .low

علت. نام یک سشن تنها به کار رفته است.

راه‌حل. یکی از عضوهایش را بخوانید: .active، .start، .end، .index، .high یا .low.

Cuprel · خطا E3260
indicator "Example"
    edition = 1

session a = 08:00 .. 16:00 @ "UTC"
plot(a)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

session a = 08:00 .. 16:00 @ "UTC"
plot(if a.active then 1 else 0)

E3261#

پیام. {fn}(...) needs a field: write {fn}(day).high (open, high, low, close, volume or time)

علت. بعد از prior(...) یا current(...) هیچ فیلدی نیامده است.

راه‌حل. فیلد را نام ببرید: prior(day).high. فیلدها open، high، low، close، volume و time هستند.

Cuprel · خطا E3261
indicator "Example"
    edition = 1

plot(prior(day))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(prior(day).high)

E3270#

پیام. "{word}" is a unit word of a setting of execution(...) in the strategy header; units as values come with edition 2

علت. یک واژهٔ واحد مثل ticks یا ms بیرون از تنظیمات execution(...) در سرآیند استراتژی به کار رفته است.

راه‌حل. یک عدد ساده بنویسید، یا واحد را فقط در سرآیند به کار ببرید. واحد به‌عنوان مقدار در یک نسخهٔ بعدی زبان می‌آید.

Cuprel · خطا E3270
indicator "Example"
    edition = 1

plot(25 ticks)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(25 * symbol.tick)

E3271#

پیام. A time with its zone, like 16:45 @ "Europe/London", is the argument of clock.reached

علت. به clock.reached ساعتی داده شده که منطقهٔ زمانی‌اش را ندارد.

راه‌حل. هر دو را به‌صورت یک آرگومان بنویسید: clock.reached(16:45 @ "America/New_York").

Cuprel · خطا E3271
indicator "Example"
    edition = 1

plot(if clock.reached(16:45) then 1 else 0)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(if clock.reached(16:45 @ "America/New_York") then 1 else 0)

E3280#

پیام. The script declares {n} sessions: write the one to start again with, state session NAME x = …

علت. state session نام سشن ندارد، در حالی که اسکریپت بیش از یک سشن تعریف کرده است.

راه‌حل. سشن را نام ببرید: state session london high_so_far = high.

Cuprel · خطا E3280
indicator "Example"
    edition = 1

session london = 08:00 .. 16:30 @ "Europe/London"
session newyork = 09:30 .. 16:00 @ "America/New_York"
state session top = high
plot(top)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

session london = 08:00 .. 16:30 @ "Europe/London"
session newyork = 09:30 .. 16:00 @ "America/New_York"
state session london top = high
plot(top)

E3281#

پیام. state session needs a session: declare one, session NAME = 08:00 .. 16:30 @ "Europe/London"

علت. state session در اسکریپتی به کار رفته که هیچ سشنی تعریف نکرده است.

راه‌حل. اول یک سشن تعریف کنید: session london = 08:00 .. 16:30 @ "Europe/London".

Cuprel · خطا E3281
indicator "Example"
    edition = 1

state session top = high
plot(top)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

session london = 08:00 .. 16:30 @ "Europe/London"
state session top = high
plot(top)

E3301#

پیام. {name} keeps its own state for every call site, so inside a loop all passes would share one state. Call it once before the loop (or write each call out)

علت. تابعی که بین کندل‌ها state نگه می‌دارد (ta.*، request.*، یا تابعی از خودتان که یک state دارد) درون یک حلقه فراخوانی شده است. همهٔ دورها یک حافظه را شریک می‌شدند.

راه‌حل. آن را یک بار پیش از حلقه فراخوانی کنید، یا فراخوانی‌ها را یکی‌یکی بنویسید.

Cuprel · خطا E3301
indicator "Example"
    edition = 1

mut total = 0.0
for i in 1 to 3
    total += tech.sma(close, 5)
plot(total)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let average = tech.sma(close, 5)
mut total = 0.0
for i in 1 to 3
    total += average
plot(total)

E3302#

پیام. {call} keeps a state for this place in the script, and here it stands {?in the right side of and{and}?}{?in the right side of or{or}?}{?in the right side of ??{coalesce}?}{?in an arm of if … then … else{arm}?}, which runs only when it is needed, so the state would move on some bars only. To run it on every bar, write it first on a line of its own (let x = …) and use x here; to run it only where it is reached, write the condition as a block if

علت. فراخوانی‌ای که برای همان خطی که در آن نوشته شده state نگه می‌دارد (فراخوانی ta.*، request.*، math.random، تاریخچهٔ یک عبارت، یا تابعی از خودتان که یک state دارد) مستقیم در سمت راست and، or یا ?? یا در یک شاخهٔ if ... then ... else ایستاده است. آن بخش فقط وقتی اجرا می‌شود که لازم باشد، پس state فراخوانی فقط در بعضی کندل‌ها جلو می‌رود و این همان چیزی نیست که خط می‌گوید.

راه‌حل. برای اینکه فراخوانی در هر کندل اجرا شود، آن را اول در خطی جدا بنویسید و از نامش استفاده کنید. برای اینکه فقط همان‌جا که به آن می‌رسد اجرا شود، شرط را به‌صورت بلوک if بنویسید (هشدار W3302 همین را می‌گوید).

Cuprel · خطا E3302
indicator "Example"
    edition = 1

let trend = close > tech.sma(close, 50)
let signal = trend and tech.crosses_above(close, tech.sma(close, 10))
plot(if signal then 1 else 0)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let trend = close > tech.sma(close, 50)
let crossed = tech.crosses_above(close, tech.sma(close, 10))
let signal = trend and crossed
plot(if signal then 1 else 0)

E3310#

پیام. "{name}" calls itself ({cycle}): write a loop, or keep the running value in a state

علت. تابعی خودش را، مستقیم یا از راه تابع‌ها یا متدهای دیگر، صدا می‌زند. پیام زنجیره را نشان می‌دهد، a -> b -> a. اسکریپت پیش از اجرا رد می‌شود، چون عمق چنین زنجیره‌ای را همان دستگاهی تعیین می‌کرد که اسکریپت را اجرا می‌کند. بررسی‌کننده همیشه نمی‌تواند متدی را که نام یک متد داخلی را دارد دنبال کند؛ شمارش فراخوانی‌های تودرتو (E-LIMIT-DEPTH) آن‌ها را هنگام اجرای اسکریپت متوقف می‌کند.

راه‌حل. حلقه بنویسید، یا مقدار در حال جمع شدن را در یک state نگه دارید. تابع‌ها را ببینید.

Cuprel · خطا E3310
indicator "Example"
    edition = 1

fn total(n: int): int = if n < 1 then 0 else n + total(n - 1)
plot(total(5))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

fn total(n: int): int
    mut sum = 0
    for i in 1 to n
        sum += i
    return sum
plot(total(5))

E3400#

پیام. "{name}" is {found}, but here a {expected} is wanted. "{name}" is also an option word of {expected}: your variable hides it, so rename the variable

علت. نامی که خودتان تعریف کرده‌اید، در همان جایی که نوشته شده کلمهٔ گزینه هم هست (small یکی از اندازه‌های mark.shape است) و نوعشان یکی نیست. نام شما برنده است، یعنی آرگومان مقدار شما را می‌گیرد نه کلمه را، و موتور به‌جای انتخاب به جای شما، همین را اعلام می‌کند.

راه‌حل. متغیر خود را تغییر نام دهید، یا کلمه را همان‌جایی بنویسید که کلمه را می‌خواهید.

Cuprel · خطا E3400
indicator "Example"
    edition = 1

let small = 10
mark.shape(close > open, size = small)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let gap = 10
plot(gap)
mark.shape(close > open, size = small)

E3406#

پیام. "{name}" is an option word of several sets ({sets}) and nothing here says which: write its type, like let x: v_align = {name}

علت. کلمه‌ای مانند top، left یا none به بیش از یک مجموعهٔ کلمه‌های گزینه تعلق دارد و جایی که نوشته شده نمی‌گوید کدام. این یک نام تنها است (let s = top) نه یک آرگومان: آرگومان مجموعه‌اش را از خودِ آرگومان می‌گیرد.

راه‌حل. نوع نام را بنویسید: let s: v_align = top.

Cuprel · خطا E3406
indicator "Example"
    edition = 1

let s = top
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let s: v_align = top
plot(close)

E3407#

پیام. "{name}" is not a word of {type}{?. Did you mean "{guess}"??}. The words: {list}

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

راه‌حل. یکی از کلمه‌های فهرست را بنویسید.

Cuprel · خطا E3407
indicator "Example"
    edition = 1

plot(close, style = lin)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close, style = line)

درخواست‌ها و شکل‌های رزروشده#

خطای E4001 وقتی پیش می‌آید که اسکریپت هنگام اجرا داده‌ای می‌خواهد که نمودار ندارد. کدهای E9xxx شکل‌هایی هستند که برای بعد رزرو شده‌اند: E9001 برای مرحله‌ای بعدی از edition 1 و E9002 برای edition 2.

E4001#

پیام. {fn}: "{asked}" has no data here — this chart reads only its own symbol ({ticker}). Use symbol.id[ (it is declared in uses, but this host reads only the chart's own symbol for now)]

علت. یک درخواست نمادی غیر از نماد نمودار را نام برده و برای آن داده‌ای وجود ندارد.

راه‌حل. نمادِ خود نمودار را با symbol.id بخوانید. نمادهای دیگر در این انتشار در دسترس نیستند.

Cuprel · خطا E4001
indicator "Example"
    edition = 1

uses "EURUSD"
plot(data.series("60", close, symbol = "EURUSD"))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(data.series("60", close, symbol = symbol.id))

E9001#

پیام. "{feature}" is reserved for a later phase ({task}): edition 1 does not run it yet

علت. یک شکل برای مرحله‌ای بعدی از زبان رزرو شده است. همین حالا ردش می‌کنند تا با معنایی دیگر اجرا نشود.

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

Cuprel · خطا E9001
indicator "Example"
    edition = 1

plot(account.equity)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close)

E9002#

پیام. "{feature}" is reserved for edition 2

علت. یک شکل متعلق به edition 2 زبان است.

راه‌حل. آن را حذف کنید، یا به شیوه‌ای بنویسید که edition 1 دارد (مثلاً به‌جای bracket، دو فراخوانی جدای orders.enter و orders.exit).

Cuprel · خطا E9002
strategy "Example"
    edition = 1
    display = price
bracket "B" long
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
strategy "Example"
    edition = 1
    display = price

if bar.index == 10
    orders.enter("Long", side.long)
plot(close)

خطاهای نام‌دار#

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

E-CHUNK-LATE#

پیام. the {part} part of the engine was asked for after the run had started: {reason}. The run was stopped, and nothing was computed with another build

علت. موتور هر بخشی را که اسکریپت لازم دارد پیش از اولین میله بارگذاری و بررسی می‌کند؛ هیچ بخشی وسط یک میله گرفته نمی‌شود، چون عددهای یک اجرا باید همه از یک ساخت (build) بیایند. این پیام یعنی کسی بعد از شروع میله‌ها بخشی را خواسته است. اسکریپت نمی‌تواند باعث این خطا شود؛ این ایراد خود موتور است و به‌جای ادامه با بخشی که کسی بررسی‌اش نکرده، گزارش می‌شود.

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

E-CHUNK-SKEW#

پیام. the {part} part belongs to another build of the engine: {what} is {got}, this page pins {want}. The script was not run

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

راه‌حل. لازم نیست چیزی در اسکریپت عوض شود. صفحه را دوباره بارگذاری کنید تا صفحه و موتور از یک ساخت باشند. در مورد هشدار: تا وقتی ساخت همان نیست که پلتفرم تثبیت کرده، هشدار نه ارزیابی می‌شود نه ارسال، و تیم پلتفرم باخبر می‌شود.

E-DT-ZONE#

پیام. A date-time needs a time zone: add Z, +03:30 or [Asia/Tehran]

علت. تاریخ و ساعت با @ و بدون منطقهٔ زمانی نوشته شده است. همین متن روی هر دستگاه لحظه‌ای متفاوت می‌شود.

راه‌حل. برای UTC یک Z اضافه کنید، یا یک اختلاف ساعت مثل +03:30، یا منطقه را داخل کروشه بنویسید: @2026-09-17 07:10[Asia/Tehran].

Cuprel · خطا E-DT-ZONE
indicator "Example"
    edition = 1
let start = @2026-09-17 07:10
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let start = @2026-09-17 07:10[Asia/Tehran]
plot(close)

E-ENGINE-PART-UNAVAILABLE#

پیام. the {part} part of the engine could not be loaded: {reason}. The script was not run

علت. موتور وقتی صفحه باز می‌شود دانلود نمی‌شود: چند بخش است که فقط وقتی اسکریپتی لازمشان داشته باشد بارگذاری می‌شوند. اولین بخش خودِ موتور اسکریپت است (اولین اسکریپتِ یک بازدید آن را بارگذاری می‌کند)؛ دومی اجراکنندهٔ استراتژی است (استراتژی لازمش دارد، اندیکاتور نه)؛ سومی «ریاضیات قطعی» است: math.log، math.log10، math.exp، math.pow، math.sin، math.cos، math.tan، math.asin، math.acos، math.atan و تابع‌های داخلی‌ای که از آن‌ها استفاده می‌کنند. اسکریپت به یک بخش نیاز داشت و آن بخش در دسترس نبود: فایلش پیدا نشد، خوانده نشد یا راه نیفتاد. اسکریپت نمی‌تواند باعث این خطا شود؛ این ایراد از راه‌اندازی پلتفرم روی سرور یا از اتصال است. صفحه یک بار خودش، بعد از یک مکث کوتاه، دوباره تلاش می‌کند؛ اگر آن هم نشد، پیام می‌ماند و یک دکمه برای تلاش دوباره می‌دهد. موتور هیچ‌وقت به‌جای آن سراغ نسخهٔ خود مرورگر از این تابع‌ها نمی‌رود، چون در مرورگرهای مختلف رقم آخر کمی فرق می‌کند: اسکریپتی که به یک بخش نیاز دارد یا روی آن اجرا می‌شود یا اصلاً اجرا نمی‌شود.

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

E-ENGINE-PART-VERSION#

پیام. the {part} part does not match this engine: its {what} is {got}, the engine pins {want}. The script was not run

علت. آن بخش پیدا شد، ولی همان نیست که این موتور با آن منتشر شده: نسخهٔ رابطش، نسخه‌اش، اثر انگشتش (SHA-256 بایت‌هایش) یا پاسخ‌هایش به یک خودآزمون کوتاه با آنچه موتور انتظار دارد فرق دارد. این وقتی پیش می‌آید که موتور و آن بخش با هم منتشر نشده باشند یا فایل آن بخش آسیب دیده باشد. موتور با بخشی که نتواند درستی‌اش را تضمین کند، اسکریپت را اجرا نمی‌کند. اسکریپت نمی‌تواند باعث این خطا شود.

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

E-FMT-SPEC#

پیام. text.fmt does not know the format "{sp}" (use .2f ,.2f +.1f .1% 03 price time:HH:mm)

علت. به text.fmt قالب عددی داده شده که آن را نمی‌شناسد.

راه‌حل. یکی از .2f، ,.2f، +.1f، .1%، 03، price یا time:HH:mm را به کار ببرید.

Cuprel · خطا E-FMT-SPEC
indicator "Example"
    edition = 1

let s = text.fmt(1.5, "q")
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let s = text.fmt(1.5, ".2f")
plot(close)

E-FUTURE-READ#

پیام. This read of another timeframe looks ahead (future = true) on a value that is not shifted: on the bars of a day it shows the day's final figure, which the bar did not have[, and a strategy would trade on it][, and an alert would ring on it]

علت. یک استراتژی آیندهٔ تایم‌فریمی دیگر را می‌خواند: نگاه به آینده روی مقداری که به عقب نرفته است، پس با قیمت‌هایی معامله می‌کند که کندل آن‌ها را نداشت. بررسی‌کننده زودتر و با E3132 جلوی این را می‌گیرد، پس این کد را فقط وقتی می‌بینید که اسکریپتی از آن رد شده باشد. اندیکاتور، حتی اندیکاتوری که هشدار می‌سازد، به‌جای آن اخطار W-FUTURE-READ را می‌گیرد.

راه‌حل. future = true را حذف کنید: استراتژی نمی‌تواند از آن استفاده کند، حتی روی مقداری که به عقب برده شده.

E-INPUT-RANGE#

پیام. Input '{id}' is {value}; maximum is {max}., Input '{id}' is {value}; minimum is {min}., Input '{id}' is {value}; it must be {expected}. and Input '{id}' is {value}; it must be one of: {options}.

علت. مقداری که به یک ورودی داده شده (در تنظیمات، در یک هشدار ذخیره‌شده یا در بک‌تست) بیرون از چیزی است که اسکریپت برایش اعلام کرده: بیشتر از max، کمتر از min، عدد نیست (یا برای int عدد صحیح نیست)، یا یکی از options آن نیست. پلتفرم مقدار را برای شما تغییر نمی‌دهد، پس مقدار خیلی بزرگ هیچ‌وقت خودبه‌خود به بزرگ‌ترین مقدار مجاز تبدیل نمی‌شود. اسکریپت شروع نمی‌شود و پیام نام ورودی، مقدار و سقف را می‌گوید. خط پیام همان خط ورودی است.

راه‌حل. به ورودی مقداری داخل بازه‌ای که اعلام کرده بدهید. اگر اسکریپت مال خودتان است و مقدارهای بزرگ‌تر درست‌اند، max ورودی را بالا ببرید؛ با max، پلتفرم فقط به‌اندازه‌ای تاریخچه نگه می‌دارد که ورودی می‌تواند به آن برسد (به W-ENGINE-HISTORY-OPEN نگاه کنید).

E-LOOP-STEP#

پیام. The step of this loop is zero or na: the loop would never reach its end. Give it a step that is not zero

علت. هنگام اجرای حلقه، گام آن صفر یا na است. گامی که 0 نوشته شده باشد پیش از اجرا E2041 می‌دهد.

راه‌حل. مطمئن شوید گام هرگز صفر یا na نمی‌شود؛ پیش از حلقه آن را محافظت کنید.

Cuprel · خطا E-LOOP-STEP
indicator "Example"
    edition = 1

input step: int = 0, name = "Step"
mut n = 0
for i in 0 to 5 by step
    n += 1
plot(n)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

input step: int = 1, name = "Step", min = 1
mut n = 0
for i in 0 to 5 by step
    n += 1
plot(n)

E-MODULE-HASH#

پیام. The module "{key}" does not match its hash: its text was changed

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

راه‌حل. متن یک ماژول همان متنی نیست که اثر انگشت آن (یک hash) از رویش گرفته شده بود. در این انتشار از ویرایشگر نمی‌شود به این خطا رسید؛ اگر آن را دیدید، به پشتیبانی خبر بدهید.

E-MODULE-NOT-FOUND#

پیام. One of these:

  • "{path}" is not the name of a module (Owner/Name/1)
  • The module "{id}" is not found[ (imported by {by})]
  • "{name}@{version}" is not a module name

علت. ماژولی که اسکریپت وارد می‌کند، یا ماژولی که یک بسته در خود دارد، پیدا نمی‌شود.

راه‌حل. نام و نسخه را در import بررسی کنید. در این انتشار فقط ماژول‌های خودتان را می‌شود وارد کرد، و ویرایشگر هنوز نمی‌تواند یکی را طوری ذخیره کند که با نام پیدا شود (به ماژول‌ها و کتابخانه‌ها نگاه کنید).

E-ORDER-ID#

پیام. {call}: no entry or order used this id yet — did you mean "{used}"?

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

راه‌حل. دقیقاً همان شناسه را بنویسید. پیام نام شناسه‌ای را که قبلاً به کار برده‌اید می‌آورد.

Cuprel · خطا E-ORDER-ID
strategy "Example"
    edition = 1
    display = price

if bar.index == 10
    orders.enter("Long", side.long)
if bar.index == 20
    orders.close("long")
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
strategy "Example"
    edition = 1
    display = price

if bar.index == 10
    orders.enter("Long", side.long)
if bar.index == 20
    orders.close("Long")
plot(close)

E-PERIOD-NAME#

پیام. One of these:

  • {fn}: "{period}" is not a period (day, week or month)
  • {fn}: "{field}" is not a field ({fields})
  • prior: n is a whole number from 1 to {keep} (the engine keeps the last {keep} periods)
  • prior: n is a whole number from 1 to {keep}, not {got}

علت. به prior() یا current() دوره یا فیلدی داده شده که وجود ندارد، یا تعدادی بیرون از بازه. بررسی‌کننده معمولاً زودتر و با E3131 آن را می‌گیرد.

راه‌حل. day، week یا month را به کار ببرید، فیلدی از open، high، low، close، volume، time، و تعدادی از 1 تا 64.

E-PERIOD-TF#

پیام. prior({period}) / current({period}) need a chart of bars shorter than a {period}; this chart is {chartPeriod}

علت. prior(day) یا current(day) روی نموداری به کار رفته که کندلش به اندازهٔ دوره یا بلندتر از آن است، مثلاً prior(day) روی نمودار روزانه.

راه‌حل. دورهٔ بلندتری به کار ببرید: روی نمودار روزانه prior(week) یا prior(month).

E-QTY-NA#

پیام. strategy.{name}: qty is na (the order has no size). Give a number, or leave qty out to use the default size

علت. اندازهٔ یک سفارش na است. در غیر این صورت سفارش بی‌صدا با اندازهٔ پیش‌فرض معامله می‌کرد.

راه‌حل. یک عدد بدهید، یا qty را بنویسید تا اندازهٔ پیش‌فرض به کار رود.

Cuprel · خطا E-QTY-NA
strategy "Example"
    edition = 1
    display = price

if close > open
    orders.enter("Long", side.long, qty = na)
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
strategy "Example"
    edition = 1
    display = price

if close > open
    orders.enter("Long", side.long)
plot(close)

E-REGEX-FEATURE#

پیام. text.match does not read {feature}

علت. الگویی که به text.match داده شده بخشی دارد که الگوخوان نمودار (بخشی از موتور که الگو را می‌خواند) ندارد. {feature} آن را نام می‌برد: ارجاع به گروه قبلی (\1)، نگاه به جلو ((?=…) و (?!…))، نگاه به عقب ((?<=…) و (?<!…))، گروه‌های نام‌دار، ویژگی‌های \p{…} یا escapeهای کنترلی (\cX). الگوخوان عمداً از الگوخوان برنامه‌های دیگر کوچک‌تر است: متن را یک بار، از چپ به راست می‌خواند، پس هیچ الگویی نمی‌تواند اسکریپت را برای همیشه مشغول نگه دارد. خطا وقتی می‌آید که فراخوانی ارزیابی می‌شود.

راه‌حل. الگو را با چیزی بنویسید که الگوخوان دارد، یا کار را به دو فراخوانی تقسیم کنید. توابع متن فهرست آنچه را می‌خواند می‌دهد. الگویی که فقط نادرست نوشته شده (مثلاً کروشهٔ بسته‌نشده) خطا نیست: فراخوانی متن خالی می‌دهد.

Cuprel · خطا E-REGEX-FEATURE
indicator "Example"
    edition = 1

let twice = text.match("abcabc", "(abc)\\1")
plot(text.length(twice))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let twice = text.match("abcabc", "(abc){2}")
plot(text.length(twice))

E-REGEX-HOST#

پیام. text.match is not available in this host: patterns are read where scripts run (the chart worker, the tester, the alert evaluator)

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

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

E-REQ-CHANGED#

پیام. One of these:

  • data.series: the {what} must not change from bar to bar; it is built from a price or a value that moves. Use a constant, an input or symbol.*
  • data.series: the {what} changed from "{was}" to "{now}" on bar {bar}; it must be the same on every bar of a run

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

راه‌حل. برای نماد و تایم‌فریم یک مقدار ثابت، یک ورودی یا symbol.* به کار ببرید. این‌ها هم پذیرفته می‌شوند: let یا stateی که چیزی در آن نمی‌نویسد، نام‌های تاپلی که یکی از تابع‌های اسکریپت برمی‌گرداند، یک if یا match روی چنین مقادیری، و فراخوانی یکی از تابع‌های اسکریپت روی آن‌ها.

Cuprel · خطا E-REQ-CHANGED
indicator "Example"
    edition = 1

plot(data.series(if close > open then "60" else "240", close, symbol = symbol.id))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(data.series("60", close, symbol = symbol.id))

E-REQ-LIMIT#

پیام. This script reads {requests} different symbol and timeframe pairs; a host allows {maxRequests}. Read what you need once and keep it in a variable

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

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

Cuprel · خطا E-REQ-LIMIT
indicator "Example"
    edition = 1

plot(data.series("120", close, symbol = symbol.id), name = "t0")
plot(data.series("180", close, symbol = symbol.id), name = "t1")
plot(data.series("240", close, symbol = symbol.id), name = "t2")
plot(data.series("360", close, symbol = symbol.id), name = "t3")
plot(data.series("480", close, symbol = symbol.id), name = "t4")
plot(data.series("720", close, symbol = symbol.id), name = "t5")
plot(data.series("1D", close, symbol = symbol.id), name = "t6")
plot(data.series("2D", close, symbol = symbol.id), name = "t7")
plot(data.series("3D", close, symbol = symbol.id), name = "t8")
plot(data.series("1W", close, symbol = symbol.id), name = "t9")
plot(data.series("15", close, symbol = symbol.id), name = "t10")
plot(data.series("30", close, symbol = symbol.id), name = "t11")
plot(data.series("45", close, symbol = symbol.id), name = "t12")
plot(data.series("10", close, symbol = symbol.id), name = "t13")
plot(data.series("20", close, symbol = symbol.id), name = "t14")
plot(data.series("25", close, symbol = symbol.id), name = "t15")
plot(data.series("35", close, symbol = symbol.id), name = "t16")
plot(data.series("40", close, symbol = symbol.id), name = "t17")
plot(data.series("50", close, symbol = symbol.id), name = "t18")
plot(data.series("55", close, symbol = symbol.id), name = "t19")
plot(data.series("65", close, symbol = symbol.id), name = "t20")

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(data.series("60", close, symbol = symbol.id))

E-REQ-UNDECLARED#

پیام. data.series: "{written}" is not declared. Add it to the uses line of the script (uses "{written}")

علت. یک درخواست نمادی را نام برده که در اسکریپت نوشته شده، اما اسکریپت آن را با uses تعریف نکرده است.

راه‌حل. uses "SYMBOL" را بالای اسکریپت اضافه کنید. داده‌های نماد دیگر در این انتشار در دسترس نیست (E4001).

Cuprel · خطا E-REQ-UNDECLARED
indicator "Example"
    edition = 1

plot(data.series("60", close, symbol = "EURUSD"))

E-SESSION-DUP#

پیام. a session named "{name}" is already declared

علت. دو سشن با یک نام تعریف شده‌اند، از راه شکل داخلی session.define.

راه‌حل. به هر سشن نام جدای خودش را بدهید. شکل session NAME = ... نام تکراری را با E3101 رد می‌کند.

Cuprel · خطا E-SESSION-DUP
indicator "Example"
    edition = 1

session.define("a", "0800-1600", "UTC")
session.define("a", "0900-1700", "UTC")
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

session.define("a", "0800-1600", "UTC")
session.define("b", "0900-1700", "UTC")
plot(close)

E-SESSION-NAME#

پیام. One of these:

  • session: the name is empty
  • {fn}: the session name must be written in the script, as a text
  • {fn}: no session named "{name}" is declared above
  • state session needs a session: declare one with session NAME = … above it
  • state session: no session named "{name}" is declared

علت. سشنی با نامی خوانده شده که بالاتر تعریف نشده است.

راه‌حل. پیش از اولین استفاده آن را تعریف کنید.

Cuprel · خطا E-SESSION-NAME
indicator "Example"
    edition = 1

plot(if session.active("nope") then 1 else 0)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

session.define("nope", "0800-1600", "UTC")
plot(if session.active("nope") then 1 else 0)

E-SESSION-TEXT#

پیام. One of these:

  • {fn}: {what} is missing
  • {fn}: {what} must be written in the script, as a text (not read from an input or computed)
  • session "{name}": {bad}
  • clock.reached: "{tod}" is not a time of day (HH:MM, 00:00 to 23:59)

علت. ساعت‌های یک سشن به شکل HHMM-HHMM نوشته نشده است.

راه‌حل. "0800-1630" بنویسید. این شکل داخلی بیشتر از شکل خود زبان می‌پذیرد؛ شکل خود زبان session NAME = 08:00 .. 16:30 @ zone است که در آن ساعت‌ها با E1020 بررسی می‌شوند.

Cuprel · خطا E-SESSION-TEXT
indicator "Example"
    edition = 1

session.define("a", "banana", "UTC")
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

session.define("a", "0800-1630", "UTC")
plot(close)

E-SESSION-ZONE#

پیام. One of these:

  • session "{name}": the zone "{zone}" is not one the chart knows (a name such as "Europe/London" or "America/New_York", or "UTC+3")
  • clock.reached: the zone "{clockZone}" is not one the chart knows (a name such as "America/New_York", or "UTC+3")

علت. یک سشن یا یک ساعت منطقهٔ زمانی‌ای را نام برده که نمودار نمی‌شناسد. شکل خود زبان آن را با E1022 گزارش می‌دهد.

راه‌حل. نامی مثل "Europe/London" یا "UTC" به کار ببرید.

Cuprel · خطا E-SESSION-ZONE
indicator "Example"
    edition = 1

session.define("a", "0800-1600", "Mars/X")
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

session.define("a", "0800-1600", "Europe/London")
plot(close)

E-STATE-SESSION#

پیام. state session needs the session name when the script declares more than one ({join})

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

راه‌حل. سشن را نام ببرید.

E-TF-UNKNOWN#

پیام. {fn}: "{text}" is not a timeframe this chart knows. Write minutes as a number ("15", "60", "240"), or a count and a unit ("15m", "4h", "1D", "1W", "1M")

علت. متنی که تایم‌فریمی را نام می‌برد، چیزی نیست که نمودار بتواند بخواند. تابع‌هایی که تایم‌فریم می‌گیرند data.series، data.intrabars، time، time_close، tf.changed و tf.to_seconds هستند. متنی که در اسکریپت نوشته شده باشد هنگام بررسی اسکریپت، با شمارهٔ خطش، رد می‌شود؛ برای data.series متنی که محاسبه شده یا از یک ورودی می‌آید روی کندلی که خوانده می‌شود رد می‌شود. کندل‌های خود نمودار هرگز با نام دیگری به کار نمی‌روند.

راه‌حل. دقیقه را به شکل عدد بنویسید، یا یک تعداد و یک واحد: "15m" یعنی پانزده دقیقه (m کوچک)، و "1M" یعنی یک ماه (M بزرگ).

Cuprel · خطا E-TF-UNKNOWN
indicator "Example"
    edition = 1

plot(data.series("1hh", close, symbol = symbol.id))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(data.series("1h", close, symbol = symbol.id))

E-TS-ZONE#

پیام. clock.timestamp("…") needs a zone: write 2026-09-17T07:10:00Z, or clock.timestamp("America/New_York", 2026, 9, 17, 7, 10)

علت. به timestamp("...") متنی داده شده که منطقهٔ زمانی ندارد.

راه‌حل. منطقه را به متن اضافه کنید: timestamp("2026-09-17T07:10:00Z")، یا شکلی را به کار ببرید که نام منطقه دارد: timestamp("America/New_York", 2026, 9, 17, 7, 10).

Cuprel · خطا E-TS-ZONE
indicator "Example"
    edition = 1

plot(clock.timestamp("2026-09-17 07:10"))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(clock.timestamp("2026-09-17T07:10:00Z"))

اخطارها#

اخطار هرگز اسکریپت را متوقف نمی‌کند.

W-FTEXT-PLACEHOLDER#

پیام. "{{{name}}}" in an f-text is plain text: for an alert placeholder write a plain text, or {{{{{name}}}}} in the f-text

علت. جایگزین هشدار، مثل {{ticker}}، در متنی قالب‌دار نوشته شده که در آن آکولاد دوتایی یعنی خود آکولاد.

راه‌حل. جایگزین را در متن ساده بنویسید، نه در f-text. کلیدها و گزینه‌های هشدار جایگزین‌ها را فهرست می‌کند.

Cuprel · هشدار W-FTEXT-PLACEHOLDER
indicator "Example"
    edition = 1

if close > open
    alert.send(f"{{ticker}} up", key = "up")
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

if close > open
    alert.send("{{ticker}} up", key = "up")
plot(close)

W-FUTURE-READ#

پیام. One of these:

  • This read of another timeframe looks ahead (future = true) on a value that is not shifted: on the bars of a day it shows the day's final figure, which the bar did not have[, and a strategy would trade on it][, and an alert would ring on it]
  • Could not tell whether this read looks ahead: it asks for the future (future = true) on a value the check cannot follow[. The replay found nothing that changed, so what it reads is known at the time]

علت. خواندن از تایم‌فریمی دیگر روی مقداری که به عقب نرفته آینده را می‌خواهد (future = true): روی کندل‌های یک روز، رقم نهایی همان روز را نشان می‌دهد.

راه‌حل. future = true را حذف کنید، یا مقدار را به عقب ببرید: high[1].

Cuprel · هشدار W-FUTURE-READ
indicator "Example"
    edition = 1

plot(data.series("1D", high, symbol = symbol.id, future = true))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(data.series("1D", high[1], symbol = symbol.id, future = true))

W-ID-ANON-NONASCII#

پیام. A plot without a latin title or a name gets an id from its position, which changes when plots are added: add key =

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

راه‌حل. به آن یک key بدهید: plot(x, key = "average", name = "...").

Cuprel · هشدار W-ID-ANON-NONASCII
indicator "Example"
    edition = 1

plot(tech.sma(close, 20), name = "میانگین")

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(tech.sma(close, 20), key = "average", name = "میانگین")

W-ID-COLLISION#

پیام. These plots share the id "{id}": the second becomes "{id}_2"; give each a key =

علت. دو خط از روی عنوانشان شناسهٔ یکسان می‌گرفتند. دومی id_2 می‌شود.

راه‌حل. به هرکدام key جدای خودش را بدهید.

Cuprel · هشدار W-ID-COLLISION
indicator "Example"
    edition = 1

plot(close, name = "A b")
plot(open, name = "A  b")

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close, name = "A b")
plot(open, name = "Open")

W-ID-LOOKALIKE#

پیام. This name uses an Arabic letter that looks like a Persian one ("{found}"): write "{expected}"

علت. در یک نام حرفی عربی به کار رفته که شبیه حرف فارسی است (مثلاً یای عربی به‌جای یای فارسی).

راه‌حل. حرف فارسی‌ای را بنویسید که اخطار نام می‌برد. این دو روی صفحه یکی دیده می‌شوند اما نویسه‌هایی متفاوت‌اند.

Cuprel · هشدار W-ID-LOOKALIKE
indicator "Example"
    edition = 1

let كم = 1
plot(كم)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let کم = 1
plot(کم)

W-INT-BOOL#

پیام. A number is used as a condition: compare it (x != 0)

علت. عددی که نوشته شده، یا یک ورودی عددی، به‌جای شرط به کار رفته است (مثلاً while 1).

راه‌حل. آن را مقایسه کنید: x != 0.

W-LIVE-READ#

پیام. This read shows the forming bar of the other timeframe (live = true): its value moves while the bar is open

علت. خواندن از تایم‌فریمی دیگر کندل در حال شکل‌گیری آن را نشان می‌دهد (live = true)، پس تا وقتی کندل باز است مقدار جابه‌جا می‌شود.

راه‌حل. live = true را حذف کنید، مگر اینکه مقدار متحرک را فقط برای نمایش بخواهید.

Cuprel · هشدار W-LIVE-READ
indicator "Example"
    edition = 1

plot(data.series("60", close, symbol = symbol.id, live = true))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(data.series("60", close, symbol = symbol.id))

W-MATCH-OPEN#

پیام. This match has no "_" arm and does not cover every case

علت. یک match حالت _ ندارد و همهٔ مقدارها را پوشش نمی‌دهد، پس روی بعضی کندل‌ها na می‌دهد.

راه‌حل. خط آخری به شکل _ => value اضافه کنید.

Cuprel · هشدار W-MATCH-OPEN
indicator "Example"
    edition = 1

let size = match int(close) % 2
    0 => 1
    1 => 2
plot(size)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let size = match int(close) % 2
    0 => 1
    _ => 2
plot(size)

W-METHOD-SHADOWS-BUILTIN#

پیام. Your method "{name}" takes the place of a built-in one of the same name

علت. متدی که خودتان تعریف کرده‌اید جای متد داخلیِ هم‌نام را می‌گیرد.

راه‌حل. نام متد خودتان را عوض کنید، مگر اینکه جایگزین شدن متد داخلی همان چیزی باشد که می‌خواهید.

Cuprel · هشدار W-METHOD-SHADOWS-BUILTIN
indicator "Example"
    edition = 1

let xs = [1.0, 2.0]
fn array.size(self): int = 42
plot(xs.size())

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let xs = [1.0, 2.0]
fn array.count_all(self): int = self.size()
plot(xs.count_all())

W-MUT-COUNTER#

پیام. A mut starts again every bar, so this counter ends at 1: did you mean state?

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

راه‌حل. برای نگه داشتن شمارش بین کندل‌ها از state استفاده کنید.

Cuprel · هشدار W-MUT-COUNTER
indicator "Example"
    edition = 1

mut count = 0
count += 1
plot(count)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

state count = 0
count += 1
plot(count)

W-NA-COMPARE#

پیام. Comparing with na is never true: use is_na(x)

علت. یک مقدار با na مقایسه شده که هرگز درست نمی‌شود.

راه‌حل. با is_na(x) آزمون کنید.

Cuprel · هشدار W-NA-COMPARE
indicator "Example"
    edition = 1

let average = tech.sma(close, 20)
plot(if average == na then 0 else average)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let average = tech.sma(close, 20)
plot(if is_na(average) then 0 else average)

W-REPAINT#

پیام. One of these:

  • What this script showed on bars that had closed is not what it shows now (first seen on bar {bar}, in {channel}): it uses bars that came after them
  • A signal of this script came late: bars that had closed did not show it when they closed (first seen on bar {bar}, in {channel})

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

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

W-SHADOW-BUILTIN#

پیام. "{name}" hides a built-in name of the chart

علت. نامی که تعریف کرده‌اید نام یک چیز داخلی است، مثل سری close یا تابعی مثل plot. برای سری، متغیر شما برنده می‌شود و قیمت از دسترس بیرون می‌رود؛ تابع همچنان قابل فراخوانی است، اما خواننده نمی‌تواند این دو را از هم تشخیص دهد.

راه‌حل. نام دیگری انتخاب کنید.

Cuprel · هشدار W-SHADOW-BUILTIN
indicator "Example"
    edition = 1

let close = 1
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let level_ = 1
plot(level_)

W-SHADOW-GLOBAL#

پیام. "{name}" hides a name declared outside this function

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

راه‌حل. برای درونی نام دیگری انتخاب کنید.

Cuprel · هشدار W-SHADOW-GLOBAL
indicator "Example"
    edition = 1

let level_ = 10
fn f(x: float): float
    let level_ = x * 2
    return level_
plot(f(close))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let level_ = 10
fn f(x: float): float
    let doubled = x * 2
    return doubled
plot(f(close) + level_)

پیشنهادها#

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

W3302#

پیام. {call} moves its state only on the bars where {?this if block{if}?}{?this else block{else}?}{?this match arm{match}?}{?this state initializer{state}?}{?this line{exit}?}{?this block{block}?} runs; on the other bars its state stays as it was

علت. فراخوانی‌ای که برای همان خطی که در آن نوشته شده state نگه می‌دارد در بلوکی ایستاده که ممکن است اجرا نشود: بلوک if یا else، یک شاخهٔ match، مقدار آغازین یک state، یا خط‌های بعد از return، break یا continue که شاید اجرا شده باشد. فراخوانی آنجا مجاز است. state آن فقط در کندل‌هایی جلو می‌رود که بلوک اجرا شود و در کندل‌های دیگر همان‌طور که بود می‌ماند.

راه‌حل. اگر منظورتان همین است ایرادی نیست: راه اجرای فراخوانی فقط همان‌جا که به آن می‌رسد همین است. اگر فراخوانی باید هر کندل را ببیند، آن را اول در خطی جدا و بالای بلوک بنویسید.

Cuprel · هشدار W3302
indicator "Example"
    edition = 1

let trend = close > tech.sma(close, 50)
let signal = if trend
    tech.crosses_above(close, tech.sma(close, 10))
else
    false
plot(if signal then 1 else 0)

نسخهٔ اصلاح‌شده، وقتی فراخوانی باید هر کندل را ببیند:

Cuprel
indicator "Example"
    edition = 1

let trend = close > tech.sma(close, 50)
let crossed = tech.crosses_above(close, tech.sma(close, 10))
let signal = trend and crossed
plot(if signal then 1 else 0)

H-FOREIGN-ARROW#

پیام. This form belongs to another language: {use}

علت. خط شبیه تابعی است که بعد از پارامترهایش با => نوشته شده، شکلی که این زبان به کار نمی‌برد.

راه‌حل. fn name(args) = expression بنویسید.

این پیشنهاد همراه خطای E2005 می‌آید:

Cuprel · خطا E2005
indicator "Example"
    edition = 1
f(x) => x * 2
plot(f(close))

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

fn f(x: float): float = x * 2
plot(f(close))

H-FOREIGN-ASSIGN#

پیام. This form belongs to another language: {use}

علت. خط مقدار را با := می‌دهد.

راه‌حل. = بنویسید. نامی که تغییر می‌کند با mut یا state تعریف می‌شود.

این پیشنهاد همراه خطای E2005 می‌آید:

Cuprel · خطا E2005
indicator "Example"
    edition = 1
x := 1
plot(x)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

mut x = 1
x = 2
plot(x)

H-FOREIGN-GENERIC#

پیام. This form belongs to another language: {use}

علت. خط با array.new<float>(...) یک مجموعه می‌سازد.

راه‌حل. array<float>(...)، [a, b, c] یا [0.0; n] بنویسید.

این پیشنهاد همراه خطای E2010 می‌آید:

Cuprel · خطا E2010
indicator "Example"
    edition = 1
let a = array.new<float>(3)
plot(1)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let a = [0.0; 3]
plot(a.at(0))

H-FOREIGN-HEADER#

پیام. This form belongs to another language: {use}

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

راه‌حل. آن را حذف کنید و با سرآیند شروع کنید: indicator("Title", edition = 1).

Cuprel · هشدار H-FOREIGN-HEADER
//@pragma
indicator "Example"
    edition = 1

plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close)

H-FOREIGN-INPUT#

پیام. This form belongs to another language: {use}

علت. خط یک ورودی را به شکل فراخوانی تابع تعریف می‌کند، input.int(5).

راه‌حل. input name: int = 5, title = "Title" بنویسید.

این پیشنهاد همراه خطای E2006 می‌آید:

Cuprel · خطا E2006
indicator "Example"
    edition = 1
let n = input.int(5)
plot(n)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

input n: int = 5, name = "N"
plot(n)

H-FOREIGN-NAME#

پیام. This name belongs to another language: {use}

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

راه‌حل. همان را بنویسید که پیشنهاد می‌گوید. این پیشنهاد همراه خطای E3171 (مقدار) یا E3160 (فراخوانی) می‌آید:

Cuprel · خطا E3171
indicator "Example"
    edition = 1

let g = barmerge.gaps_off
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close)

H-FOREIGN-STUDY#

پیام. This form belongs to another language: {use}

علت. فایل با study(...) شروع می‌شود.

راه‌حل. indicator("Title", edition = 1) بنویسید.

این پیشنهاد همراه خطای E2080 می‌آید:

Cuprel · خطا E2080
study("Example")
plot(close)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

plot(close)

H-FOREIGN-SWITCH#

پیام. This form belongs to another language: {use}

علت. خط با switch شروع می‌شود، یا مقداری با switch داده می‌شود (let r = switch x)، یا switch(x) مثل یک فراخوانی نوشته شده است. این زبان این شکل را به کار نمی‌برد.

راه‌حل. match value بنویسید، و بعد برای هر حالت یک خط pattern => result.

این پیشنهاد وقتی خط let r = switch x باشد همراه خطای E2005 می‌آید:

Cuprel · خطا E2005
indicator "Example"
    edition = 1
let a = switch close
plot(a)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let a = match close
    _ => 1
plot(a)

H-FOREIGN-TERNARY#

پیام. This form belongs to another language: {use}

علت. خط از a ? b : c استفاده می‌کند.

راه‌حل. if condition then a else b بنویسید.

این پیشنهاد همراه خطای E1004 می‌آید:

Cuprel · خطا E1004
indicator "Example"
    edition = 1
let a = close > open ? 1 : 2
plot(a)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

let a = if close > open then 1 else 2
plot(a)

H-FOREIGN-TUPLE#

پیام. This form belongs to another language: {use}

علت. خط نتیجه‌ای را با [a, b] = f() از هم باز می‌کند.

راه‌حل. let (a, b) = f() بنویسید.

این پیشنهاد همراه خطای E2002 می‌آید:

Cuprel · خطا E2002
indicator "Example"
    edition = 1
[a, b] = f()
plot(a)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

fn pair(): (float, float) = (1.0, 2.0)
let (a, b) = pair()
plot(a + b)

H-FOREIGN-VAR#

پیام. This form belongs to another language: {use}

علت. خط نامی را با var تعریف می‌کند، شکلی که این زبان به کار نمی‌برد.

راه‌حل. state name = value بنویسید. برای مقداری که بین ارزیابی‌های کندل در حال شکل‌گیری نگه داشته می‌شود، state live name = value.

این پیشنهاد همراه خطای E2005 می‌آید:

Cuprel · خطا E2005
indicator "Example"
    edition = 1
var x = 0
plot(x)

نسخهٔ اصلاح‌شده:

Cuprel
indicator "Example"
    edition = 1

state x = 0
plot(x)