تشخیصها: کدهای خطا و اخطار
همهٔ کدهای زبان، به ترتیب کد. علت هر کدام، راهحل، و یک نسخهٔ غلط و یک نسخهٔ درست از کد.
وقتی چیزی غلط باشد، ویرایشگر خط مربوطه و یک پیام نشان میدهد. هر پیام یک کد ثابت دارد که این صفحه بر اساس آن مرتب شده و معنایش هرگز عوض نمیشود. پیام خود را در ادامه پیدا کنید: هر بخش با متن پیام شروع میشود (بخشهایی که تغییر میکنند داخل آکولاد نوشته شدهاند، مثل {name}؛ بخشی که داخل کروشه باشد فقط وقتی اضافه میشود که موردش پیش بیاید)، بعد علت و راهحل را میگوید، و برای بیشتر کدها یک اسکریپت کوتاه که اشتباه را نشان میدهد و یکی که آن را درست میکند. پشتیبانی و این مستندات هر مشکل را با کدش نام میبرند.
سه نوع پیام داریم. خطا جلوی اجرای اسکریپت را میگیرد؛ کدش E و یک عدد است (E3101) یا E- و چند کلمه (E-DT-ZONE). اخطار (W-) میگذارد اسکریپت اجرا شود. پیشنهاد (H-) همراه یک خطا میآید و میگوید چه بنویسید.
خطاهایی که موتور هنگام اجرای اسکریپت میدهد، و سقفهای پلتفرم، در پیامهای موتور آمدهاند.
نویسهها، متن، عددها و زمانها#
کدهای E10xx از خواندن متن اسکریپت میآیند: گیومهها، پرانتزها و کروشهها، نویسهها و مقدارهای ثابت. اینها پیش از هر چیز دیگری گزارش میشوند، چون اسکریپتی که خوانده نشود بررسی هم نمیشود.
E1001#
پیام. A text is not closed (it started with {quote})
علت. متنی با یک گیومه باز شده و خط پیش از رسیدن به گیومه جفتش تمام شده است.
راهحل. متن را با همان گیومه ببندید، یا اگر باید چند خط را بگیرد از متن با سه گیومه استفاده کنید.
indicator "Example"
edition = 1
let name = "Close
plot(close)نسخهٔ اصلاحشده:
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، هم کار میکند.
indicator "Example"
edition = 1
plot(close, color = #12345)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(close, color = #123456)E1004#
پیام. Unexpected character "{char}": remove it, or write it inside a text
علت. بیرون از متن، نویسهای آمده که در زبان معنایی ندارد، مثل $.
راهحل. آن را حذف کنید، یا داخل یک متن بگذارید. این خطا اغلب با یک پیشنهاد دربارهٔ شکلی که منظورتان بوده همراه است.
indicator "Example"
edition = 1
plot(close $ 2)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(close * 2)E1005#
پیام. This line is indented to a width that no block above uses
علت. خطی به پهنایی تورفتگی گرفته که هیچکدام از بلاکهای بالاتر از آن استفاده نمیکنند. بلاکها باید به سطحی برگردند که وجود دارد.
راهحل. خط را به پهنای یک بلاک باز تورفتگی بدهید، یا به پهنای بلاکی که میخواهید از آن بیرون بیایید.
indicator "Example"
edition = 1
if close > open
plot(1)
plot(2)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
if close > open
mut up = 1
plot(close)E1006#
پیام. The bracket "{char}" is {what}: every bracket needs its pair
علت. یک پرانتز یا کروشه جفت ندارد: یا بازشده و هرگز بسته نشده، یا بسته شده و هرگز باز نشده بود.
راهحل. پرانتز یا کروشهٔ جاافتاده را اضافه کنید یا اضافی را بردارید. خطی را که پیام نام میبرد و خطهای درست قبل از آن را بررسی کنید.
indicator "Example"
edition = 1
plot(closeنسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(close)E1007#
پیام. This number is not written correctly: {text}
علت. عددی به شکلی نوشته شده که زبان نمیخواند، مثل 1.2.3.
راهحل. حداکثر یک ممیز بنویسید. برای دستهبندی رقمها از 1_000 و برای توان از 1e3 استفاده کنید.
indicator "Example"
edition = 1
plot(1.2.3)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(1.2)E1008#
پیام. Unknown escape "{seq}" in a text
علت. در یک متن، پس از بکاسلش حرفی آمده که escape نیست.
راهحل. از \n، \t، \"، \'، \\ یا \u{...} استفاده کنید. برای نوشتن خود بکاسلش، دو تا بنویسید.
indicator "Example"
edition = 1
plot(close, title = "a\q")نسخهٔ اصلاحشده:
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}.
indicator "Example"
edition = 1
plot(close, title = "Smile \u{110000}")نسخهٔ اصلاحشده:
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
علت. در یک متن قالبدار، { یا } بسته نشده یا دوتایی نوشته نشده است.
راهحل. آکولاد را ببندید، یا وقتی خود نویسه را میخواهید آن را دوتایی بنویسید ({{ یا }}).
indicator "Example"
edition = 1
plot(close, title = f"{close")نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(close, name = f"{close:.2f}")E1011#
پیام. The digit "{found}" is not an ASCII digit: write "{expected}"
علت. جایی که رقم ASCII لازم است، رقم فارسی یا عربی نوشته شده است.
راهحل. رقم را با 0 تا 9 بنویسید. خطا جایگزین را هم بهصورت یک اصلاح همراهش دارد.
indicator "Example"
edition = 1
plot(ta.sma(close, ۲۰))نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(tech.sma(close, 20))E1012#
پیام. The sign "{found}" is not an ASCII sign: write "{expected}"
علت. جایی که ویرگول یا نقطهویرگول ASCII لازم است، ویرگول یا نقطهویرگول عربی نوشته شده است.
راهحل. آن را با , یا ; عوض کنید. خطا جایگزین را هم بهصورت یک اصلاح همراهش دارد.
indicator "Example"
edition = 1
plot(math.max(1،2))نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(math.max(1, 2))E1013#
پیام. The quote "{found}" is not an ASCII quote: write {expected}
علت. برای باز یا بسته کردن یک متن، گیومه خمیده به کار رفته، از آنهایی که واژهپرداز مینویسد.
راهحل. از گیومه راست " یا ' استفاده کنید.
indicator "Example"
edition = 1
plot(close, title = “Close”)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(close, name = "Close")E1014#
پیام. The sign "{found}" is not the one the language uses: write "{expected}"
علت. نشانهای به کار رفته که شبیه عملگر است (علامت ضرب، خط تیرهٔ بلند) ولی عملگر زبان نیست.
راهحل. عملگر ASCII را بنویسید: *، /، -، <=، >= یا !=.
indicator "Example"
edition = 1
plot(close × 2)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(close * 2)E1020#
پیام. This is not a valid clock time: {text}
علت. ساعت یک روز، ساعت و دقیقهٔ معتبری نیست، مثل 25:99.
راهحل. ساعت را از 00 تا 23 و دقیقه را از 00 تا 59 بنویسید: 08:30.
indicator "Example"
edition = 1
plot(25:99)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(08:30)E1021#
پیام. This is not a valid date or time: {text}
علت. یک تاریخ یا یک لحظه، تاریخ و زمان واقعی نیست، مثل ماه 13.
راهحل. سال، ماه، روز، ساعت و دقیقه را بررسی کنید: @2026-09-17T07:10Z.
indicator "Example"
edition = 1
plot(@2026-13-45T00:00Z)نسخهٔ اصلاحشده:
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".
indicator "Example"
edition = 1
session london = 08:00 .. 16:00 @ "Mars/Olympus"
plot(if london.active then 1 else 0)نسخهٔ اصلاحشده:
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.
indicator "Example"
edition = 1
plot(1h30m)نسخهٔ اصلاحشده:
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 را اضافه کنید. مقدار باید در هر دو حالتِ شرط وجود داشته باشد.
indicator "Example"
edition = 1
let tint = if close > open then color.green
plot(close)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
let tint = if close > open then color.green else color.red
plot(close, color = tint)E2002#
پیام. Expected {what}, found {found}
علت. تحلیلگر یک چیز (یک نام، یک ویرگول، یک پرانتز بسته) انتظار داشت و چیز دیگری دید.
راهحل. پیام را بخوانید: میگوید چه انتظار میرفت. انتهای خطِ قبل از خطی را که نام برده شده نگاه کنید.
indicator "Example"
edition = 1
let = 5
plot(1)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
let five = 5
plot(five)E2003#
پیام. A block must be indented under its first line
علت. بعد از خطی که یک بلاک شروع میکند (if، for، fn …) خطی آمده که عمیقتر تورفتگی ندارد.
راهحل. خطهای بلاک را یک سطح زیر خط اولش تورفتگی بدهید.
indicator "Example"
edition = 1
if close > open
plot(1)نسخهٔ اصلاحشده:
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)
علت. بعد از یک دستور، در همان خط چیز بیشتری آمده یا چیزی که نمیتواند ادامه پیدا کند. دستور همانجا که خطش تمام میشود تمام میشود.
راهحل. هر دستور را در خط خودش بنویسید. برای ادامهٔ یک دستور، خط را با یک عملگر یا یک ویرگول تمام کنید، یا پرانتز یا کروشه را باز بگذارید.
indicator "Example"
edition = 1
let a = 1; let b = 2
plot(a + b)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
let a = 1
let b = 2
plot(a + b)E2006#
پیام. Expected a value, found {found}
علت. مقداری انتظار میرفت و چیز دیگری پیدا شد، مثلاً پرانتز بسته بعد از ویرگول.
راهحل. مقدار را بنویسید، یا ویرگول را بردارید.
indicator "Example"
edition = 1
plot(close, title = )نسخهٔ اصلاحشده:
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.
indicator "Example"
edition = 1
plot(if 1 < close < 5 then 1 else 0)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(if 1 < close and close < 5 then 1 else 0)E2011#
پیام. "=" gives a name a value; to compare write "=="
علت. جایی که مقایسه منظور بوده، یک = تنها به کار رفته است.
راهحل. برای مقایسه == بنویسید. یک = تنها به یک نام مقدار میدهد.
indicator "Example"
edition = 1
if close = open
mut up = 1
plot(close)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
if close == open
mut up = 1
plot(close)E2021#
پیام. Unknown number format "{spec}"
علت. یک متن قالبدار قالب عددی دارد که زبان نمیشناسد.
راهحل. از قالبی مثل .2f، ,.2f، +.1f، .1%، 03 یا price استفاده کنید. قالببندی متن و عدد آنها را فهرست کرده است.
indicator "Example"
edition = 1
plot(close, title = f"{close:10.2f}")نسخهٔ اصلاحشده:
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.
indicator "Example"
edition = 1
input length
plot(length)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
input length: int = 20
plot(length)E2031#
پیام. The option "{name}" is repeated, or a positional value follows a named one
علت. یک گزینهٔ ورودی دوبار داده شده، یا مقداری بدون نام بعد از مقداری با نام آمده است.
راهحل. هر گزینه را یک بار بدهید، و عنوان (مقداری که نام ندارد) را اول بگذارید.
indicator "Example"
edition = 1
input a: int = 1, title = "A", title = "B"
plot(a)نسخهٔ اصلاحشده:
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
علت. یک ورودی دو راهنمای کوچک دارد: یک خط /// بالای آن و یک /// دیگر در انتهای خط خودش.
راهحل. یکی از آنها را نگه دارید.
indicator "Example"
edition = 1
/// How many bars
input length: int = 20 /// Another text
plot(length)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
/// How many bars
input length: int = 20
plot(length)E2041#
پیام. A loop step of 0 never moves
علت. گام حلقهای که 0 نوشته شود هرگز جلو نمیرود.
راهحل. گامی غیر از صفر بگذارید. برای شمارش معکوس، گام منفی مثل by -1 بنویسید.
indicator "Example"
edition = 1
mut count = 0
for i in 0 to 5 by 0
count += 1
plot(count)نسخهٔ اصلاحشده:
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 بنویسید.
indicator "Example"
edition = 1
let n = match close
1
plot(n)نسخهٔ اصلاحشده:
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 آخرین خط نیست، یا دوبار نوشته شده است.
راهحل. _ را به انتها ببرید و فقط یک بار بنویسید.
indicator "Example"
edition = 1
let n = match int(close) % 2
_ => 0
1 => 1
plot(n)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
let n = match int(close) % 2
1 => 1
_ => 0
plot(n)E2052#
پیام. Write two arms instead of "a | b"
علت. دو الگو با | در یک خط به هم وصل شدهاند.
راهحل. برای هر الگو یک خط بنویسید.
indicator "Example"
edition = 1
let n = match int(close) % 3
1 | 2 => 1
_ => 0
plot(n)نسخهٔ اصلاحشده:
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 بنویسید.
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 بگذارید.
indicator "Example"
edition = 1
fn f()
input a: int = 1
plot(close)نسخهٔ اصلاحشده:
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، حلقه یا تابع بیرون بیاورید و در خطی جدا بنویسید.
indicator "Example"
edition = 1
if close > open
session a = 08:00 .. 16:00 @ "UTC"
plot(close)نسخهٔ اصلاحشده:
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(...)، در دورهٔ گذار به شکل تورفته هنوز خوانده میشود.
plot(close)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(close)E2081#
پیام. The header {kind}(...) is written once
علت. سرآیند دوبار نوشته شده است.
راهحل. یک سرآیند نگه دارید، در اولین خط کد.
indicator "Example"
edition = 1
indicator("Again", edition = 1)
plot(close)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(close)E2082#
پیام. The option "{name}" is given twice in the header or in a block
علت. یک گزینهٔ سرآیند، یا یک گزینه در بلوکی مثل setup:، دوبار داده شده است.
راهحل. هر گزینه را یک بار بدهید.
indicator("Example", overlay = true, overlay = false, edition = 1)
plot(close)نسخهٔ اصلاحشده:
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) روی خواندن یک شکل تنظیم شده و فایل به شکل دیگر نوشته شده، یا بعد از سرآیندی به شکل فراخوانی یکی از بلوکها آمده است.
راهحل. سرآیند را به شکل تورفته بنویسید: نام بعد از کلیدواژه، و برای هر گزینه یک خط تورفته. پیام خطی را که باید نوشت نشان میدهد.
strategy("Example", edition = 1)
setup:
capital = 10000
plot(close)نسخهٔ اصلاحشده:
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:) در یک استراتژی دوبار آمده است.
راهحل. خطهای هر دو را در یک بلوک بگذارید.
strategy "Example"
edition = 1
setup:
capital = 10000
setup:
fees = fee.rate(0.05)
plot(close)نسخهٔ اصلاحشده:
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 باشد).
indicator "Example"
edition = 1
let level_ = 10
let level_ = 20
plot(level_)نسخهٔ اصلاحشده:
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 تعریف کنید.
indicator "Example"
edition = 1
total = 5
plot(total)نسخهٔ اصلاحشده:
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 (بین کندلها نگه داشته میشود) تعریف کنید.
indicator "Example"
edition = 1
let total = 0
total += 1
plot(total)نسخهٔ اصلاحشده:
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ای که بیرون از آن تعریف شده مقدار تازه میدهد.
راهحل. مقدار را بهصورت آرگومان بدهید و مقدار تازه را برگردانید، یا مقدارها را در یک رکورد نگه دارید.
indicator "Example"
edition = 1
state hits: int = 0
fn count_up(): int
hits += 1
return hits
plot(count_up())نسخهٔ اصلاحشده:
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 استفاده کنید. پیام نزدیکترین را پیشنهاد میدهد.
indicator "Example"
edition = 1
input length: integer = 20
plot(length)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
input length: int = 20
plot(length)E3120#
پیام. The id "{id}" is already used (line {line})
علت. دو ورودی، دو خط یا دو شرط شناسهٔ یکسان دارند.
راهحل. نام یکی را عوض کنید، یا به آن id = "other" بدهید. شناسهها شناسه را توضیح میدهد.
indicator "Example"
edition = 1
input length: int = 20
input length: int = 30
plot(length)نسخهٔ اصلاحشده:
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".
indicator "Example"
edition = 1
let n = "x"
input a: int = 1, key = n
plot(a)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
input a: int = 1, key = "a"
plot(a)E3130#
پیام. "{opt}" is not an option of {fn}; options: {list}
علت. نام یک گزینه، گزینهای نیست که آن فراخوانی بپذیرد. پیام گزینههایی را که میپذیرد فهرست میکند.
راهحل. املای آن را درست کنید یا گزینه را بردارید. گزینهٔ ناشناخته هیچوقت نادیده گرفته نمیشود.
indicator "Example"
edition = 1
input length: int = 20, minimum = 1
plot(length)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
input length: int = 20, min = 1
plot(length)E3131#
پیام. The value of "{opt}" does not fit: write {type}
علت. مقدار یک گزینه از نوع یا شکل نادرستی برای آن گزینه است.
راهحل. پیام را بخوانید: میگوید چه باید نوشت؛ برای مثال یک متنِ نوشتهشده در اسکریپت، یا یک عدد صحیح از 1 تا 64.
indicator "Example"
edition = 1
plot(prior(year).high)نسخهٔ اصلاحشده:
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 استفاده کرده است؛ در این صورت با قیمتهایی معامله میکرد که نمیتوانسته ببیند.
راهحل. آن را بردارید. پیشفرض، آخرین کندل بستهشدهٔ تایمفریم دیگر را میخواند.
strategy "Example"
edition = 1
display = price
let day_high = data.series("1D", high, symbol = symbol.id, future = true)
plot(day_high)نسخهٔ اصلاحشده:
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]. قاعده فقط از روی تنظیمات حساب میشود، نه از روی کندلها.
راهحل. قاعده را فقط با ورودیها و ثابتها بنویسید. اگر قاعده قیمت یا متغیر لازم دارد، آن بخش را در خود اسکریپت انجام دهید.
indicator "Example"
edition = 1
input depth: int = 3, "Depth", show_if = close > 0
plot(depth)نسخهٔ اصلاحشده:
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 خودشان به همان ورودی برمیگردد، پس هیچ ورودیای نمیتواند اولین ورودیِ تصمیمگرفتهشده باشد.
راهحل. یکی از ورودیها را بدون قاعده نشان بدهید، یا ورودی دیگری را نام ببرید.
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)نسخهٔ اصلاحشده:
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 یا فراخوانیای که چیزی را بین کندلها به خاطر میسپارد پیش از اجرا معلوم نیست.
راهحل. یک عدد، یک ورودی یا عبارتی از همینها بنویسید. برای اینکه یک تنظیم قابلتغییر باشد، یک ورودی تعریف کنید و نامش را بنویسید.
strategy "Example"
edition = 1
setup:
capital = close
plot(close)نسخهٔ اصلاحشده:
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 و بدون تورفتگی در ابتدای یک خط بنویسید؛ از اندیکاتور یا ماژول حذفش کنید.
indicator "Example"
edition = 1
setup:
capital = 10000
plot(close)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(close)E3140#
پیام. return is only valid inside a function
علت. return بیرون از تابع نوشته شده است.
راهحل. return را فقط درون یک fn بنویسید.
indicator "Example"
edition = 1
return 5
plot(close)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
fn five(): float
return 5
plot(five())E3141#
پیام. This function returns {n} values but its type says {m}
علت. یک تابع تعداد مقدارهایی را برمیگرداند که با تعداد نوشتهشده در نوعش فرق دارد.
راهحل. تاپل را با نوع هماهنگ کنید: (float, float) یعنی دو مقدار.
indicator "Example"
edition = 1
fn pair(): (float, float) = (1.0, 2.0, 3.0)
plot(close)نسخهٔ اصلاحشده:
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 به کار ببرید.
indicator "Example"
edition = 1
break
plot(close)نسخهٔ اصلاحشده:
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
علت. یک تاپل با اندازهای مشخص به تعداد دیگری نام تقسیم شده است.
راهحل. به تعداد مقدارهایی که تابع برمیگرداند نام بنویسید؛ برای مقداری که لازم ندارید _ بگذارید.
indicator "Example"
edition = 1
fn pair(): (float, float) = (1.0, 2.0)
let (a, b, c) = pair()
plot(a)نسخهٔ اصلاحشده:
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 را بعد از عبارت بگذارید، نه درون آن.
indicator "Example"
edition = 1
fn f(x: float): float
return if x > 0
return 1
else
2
plot(f(close))نسخهٔ اصلاحشده:
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})
علت. دو تابع نام یکسان دارند و آرگومانهایشان هم یکی است.
راهحل. نام یکی را عوض کنید، یا به آنها آرگومانهای متفاوت بدهید.
indicator "Example"
edition = 1
fn f(x: float): float = x
fn f(y: float): float = y
plot(f(close))نسخهٔ اصلاحشده:
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
علت. یک تابع پیش از خطی که در آن تعریف شده فراخوانی شده است.
راهحل. تعریف را بالاتر از اولین جای استفاده ببرید.
indicator "Example"
edition = 1
plot(f(close))
fn f(x: float): float = xنسخهٔ اصلاحشده:
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. پیام نزدیکترین نام را پیشنهاد میدهد. فهرست تابعها همهٔ آنها را آورده است.
indicator "Example"
edition = 1
plot(sma(close, 5))نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(tech.sma(close, 5))E3161#
پیام. {fn} takes at most {max} arguments
علت. تابعی با آرگومانهای بیشتر از تعداد قابلپذیرش فراخوانی شده است.
راهحل. آرگومان اضافه را بردارید.
indicator "Example"
edition = 1
plot(math.abs(1, 2))نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(math.abs(-1))E3162#
پیام. {fn} has no argument "{name}"; arguments: {list}
علت. آرگومانی که با نام داده شده، برای آن تابع وجود ندارد. پیام آرگومانهایی را که وجود دارند فهرست میکند.
راهحل. املای نام را درست کنید.
indicator "Example"
edition = 1
plot(tech.sma(close, lenght = 5))نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(tech.sma(close, length = 5))E3163#
پیام. {fn} needs {min} arguments ({names}), got {got}
علت. تابعی با آرگومانهای کمتر از تعداد لازم فراخوانی شده است. پیام آرگومانهای جاافتاده را نام میبرد.
راهحل. آرگومانهای جاافتاده را اضافه کنید.
indicator "Example"
edition = 1
plot(tech.sma(close))نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(tech.sma(close, 20))E3164#
پیام. The argument "{name}" of {fn} is given twice
علت. یک آرگومان دو بار داده شده، یک بار با جایگاه و یک بار با نام.
راهحل. آن را یک بار بدهید.
indicator "Example"
edition = 1
plot(tech.sma(close, 5, length = 6))نسخهٔ اصلاحشده:
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}"?]
علت. نامی به کار رفته که هیچوقت تعریف نشده است. پیام نزدیکترین نام را پیشنهاد میدهد.
راهحل. نام را بالاتر از جای استفادهاش تعریف کنید، یا املایش را درست کنید.
indicator "Example"
edition = 1
plot(clos)نسخهٔ اصلاحشده:
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).
indicator "Example"
edition = 1
let levels = [close, open, high]
plot(levels[1])نسخهٔ اصلاحشده:
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).
indicator "Example"
edition = 1
let s = strategy.lots(1)
plot(close)نسخهٔ اصلاحشده:
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 استفاده کنید، یا آن را حذف کنید.
indicator "Example"
edition = 2
plot(close)نسخهٔ اصلاحشده:
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> = [].
indicator "Example"
edition = 1
let items = []
plot(close)نسخهٔ اصلاحشده:
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" استفاده کنید.
indicator "Example"
edition = 1
if close > open
alert.send("up", key = "up", once = "sometimes")
plot(close)نسخهٔ اصلاحشده:
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)
علت. یک سشن در همان ساعتی که شروع میشود تمام میشود، پس ساعتی ندارد.
راهحل. دو ساعت متفاوت به آن بدهید. اگر زودتر از ساعت شروع تمام شود، از نیمهشب رد میشود.
indicator "Example"
edition = 1
session a = 08:00 .. 08:00 @ "UTC"
plot(if a.active then 1 else 0)نسخهٔ اصلاحشده:
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.
indicator "Example"
edition = 1
session a = 08:00 .. 16:00 @ "UTC"
plot(a)نسخهٔ اصلاحشده:
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 هستند.
indicator "Example"
edition = 1
plot(prior(day))نسخهٔ اصلاحشده:
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(...) در سرآیند استراتژی به کار رفته است.
راهحل. یک عدد ساده بنویسید، یا واحد را فقط در سرآیند به کار ببرید. واحد بهعنوان مقدار در یک نسخهٔ بعدی زبان میآید.
indicator "Example"
edition = 1
plot(25 ticks)نسخهٔ اصلاحشده:
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").
indicator "Example"
edition = 1
plot(if clock.reached(16:45) then 1 else 0)نسخهٔ اصلاحشده:
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.
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)نسخهٔ اصلاحشده:
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".
indicator "Example"
edition = 1
state session top = high
plot(top)نسخهٔ اصلاحشده:
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 دارد) درون یک حلقه فراخوانی شده است. همهٔ دورها یک حافظه را شریک میشدند.
راهحل. آن را یک بار پیش از حلقه فراخوانی کنید، یا فراخوانیها را یکییکی بنویسید.
indicator "Example"
edition = 1
mut total = 0.0
for i in 1 to 3
total += tech.sma(close, 5)
plot(total)نسخهٔ اصلاحشده:
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 همین را میگوید).
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)نسخهٔ اصلاحشده:
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 نگه دارید. تابعها را ببینید.
indicator "Example"
edition = 1
fn total(n: int): int = if n < 1 then 0 else n + total(n - 1)
plot(total(5))نسخهٔ اصلاحشده:
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 است) و نوعشان یکی نیست. نام شما برنده است، یعنی آرگومان مقدار شما را میگیرد نه کلمه را، و موتور بهجای انتخاب به جای شما، همین را اعلام میکند.
راهحل. متغیر خود را تغییر نام دهید، یا کلمه را همانجایی بنویسید که کلمه را میخواهید.
indicator "Example"
edition = 1
let small = 10
mark.shape(close > open, size = small)نسخهٔ اصلاحشده:
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.
indicator "Example"
edition = 1
let s = top
plot(close)نسخهٔ اصلاحشده:
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}
علت. کلمهای تنها در جایی نوشته شده که کلمهٔ گزینه میخواهد، و آن جا این کلمه را ندارد. پیام نزدیکترین کلمه را نام میبرد و کلمههایی را که آن جا هست فهرست میکند.
راهحل. یکی از کلمههای فهرست را بنویسید.
indicator "Example"
edition = 1
plot(close, style = lin)نسخهٔ اصلاحشده:
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 بخوانید. نمادهای دیگر در این انتشار در دسترس نیستند.
indicator "Example"
edition = 1
uses "EURUSD"
plot(data.series("60", close, symbol = "EURUSD"))نسخهٔ اصلاحشده:
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
علت. یک شکل برای مرحلهای بعدی از زبان رزرو شده است. همین حالا ردش میکنند تا با معنایی دیگر اجرا نشود.
راهحل. آن را حذف کنید. پیام میگوید کدام قابلیت است. سقفها و بودجهٔ اجرا فهرستشان را دارد.
indicator "Example"
edition = 1
plot(account.equity)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(close)E9002#
پیام. "{feature}" is reserved for edition 2
علت. یک شکل متعلق به edition 2 زبان است.
راهحل. آن را حذف کنید، یا به شیوهای بنویسید که edition 1 دارد (مثلاً بهجای bracket، دو فراخوانی جدای orders.enter و orders.exit).
strategy "Example"
edition = 1
display = price
bracket "B" long
plot(close)نسخهٔ اصلاحشده:
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].
indicator "Example"
edition = 1
let start = @2026-09-17 07:10
plot(close)نسخهٔ اصلاحشده:
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 را به کار ببرید.
indicator "Example"
edition = 1
let s = text.fmt(1.5, "q")
plot(close)نسخهٔ اصلاحشده:
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 نمیشود؛ پیش از حلقه آن را محافظت کنید.
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)نسخهٔ اصلاحشده:
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}"?
علت. شناسهٔ یک سفارش با شناسهای که قبلاً به کار رفته فقط در بزرگی و کوچکی حروف، فاصله، زیرخط یا خط تیره فرق دارد. تقریباً حتماً اشتباه تایپی است و معاملهای را که منظورتان بود نمیبست.
راهحل. دقیقاً همان شناسه را بنویسید. پیام نام شناسهای را که قبلاً به کار بردهاید میآورد.
strategy "Example"
edition = 1
display = price
if bar.index == 10
orders.enter("Long", side.long)
if bar.index == 20
orders.close("long")
plot(close)نسخهٔ اصلاحشده:
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 را بنویسید تا اندازهٔ پیشفرض به کار رود.
strategy "Example"
edition = 1
display = price
if close > open
orders.enter("Long", side.long, qty = na)
plot(close)نسخهٔ اصلاحشده:
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). الگوخوان عمداً از الگوخوان برنامههای دیگر کوچکتر است: متن را یک بار، از چپ به راست میخواند، پس هیچ الگویی نمیتواند اسکریپت را برای همیشه مشغول نگه دارد. خطا وقتی میآید که فراخوانی ارزیابی میشود.
راهحل. الگو را با چیزی بنویسید که الگوخوان دارد، یا کار را به دو فراخوانی تقسیم کنید. توابع متن فهرست آنچه را میخواند میدهد. الگویی که فقط نادرست نوشته شده (مثلاً کروشهٔ بستهنشده) خطا نیست: فراخوانی متن خالی میدهد.
indicator "Example"
edition = 1
let twice = text.match("abcabc", "(abc)\\1")
plot(text.length(twice))نسخهٔ اصلاحشده:
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 روی چنین مقادیری، و فراخوانی یکی از تابعهای اسکریپت روی آنها.
indicator "Example"
edition = 1
plot(data.series(if close > open then "60" else "240", close, symbol = symbol.id))نسخهٔ اصلاحشده:
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
علت. اسکریپت جفتهای نماد-و-تایمفریم متفاوت بیشتری از حد مجاز میزبان میخواند.
راهحل. آنچه لازم دارید را یک بار بخوانید و در یک متغیر نگه دارید؛ چند عبارت روی یک تایمفریم یک جفت حساب میشوند.
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")نسخهٔ اصلاحشده:
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).
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 رد میکند.
indicator "Example"
edition = 1
session.define("a", "0800-1600", "UTC")
session.define("a", "0900-1700", "UTC")
plot(close)نسخهٔ اصلاحشده:
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 abovestate session needs a session: declare one withsession NAME = …above itstate session: no session named "{name}" is declared
علت. سشنی با نامی خوانده شده که بالاتر تعریف نشده است.
راهحل. پیش از اولین استفاده آن را تعریف کنید.
indicator "Example"
edition = 1
plot(if session.active("nope") then 1 else 0)نسخهٔ اصلاحشده:
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 بررسی میشوند.
indicator "Example"
edition = 1
session.define("a", "banana", "UTC")
plot(close)نسخهٔ اصلاحشده:
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" به کار ببرید.
indicator "Example"
edition = 1
session.define("a", "0800-1600", "Mars/X")
plot(close)نسخهٔ اصلاحشده:
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 بزرگ).
indicator "Example"
edition = 1
plot(data.series("1hh", close, symbol = symbol.id))نسخهٔ اصلاحشده:
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).
indicator "Example"
edition = 1
plot(clock.timestamp("2026-09-17 07:10"))نسخهٔ اصلاحشده:
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. کلیدها و گزینههای هشدار جایگزینها را فهرست میکند.
indicator "Example"
edition = 1
if close > open
alert.send(f"{{ticker}} up", key = "up")
plot(close)نسخهٔ اصلاحشده:
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].
indicator "Example"
edition = 1
plot(data.series("1D", high, symbol = symbol.id, future = true))نسخهٔ اصلاحشده:
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 = "...").
indicator "Example"
edition = 1
plot(tech.sma(close, 20), name = "میانگین")نسخهٔ اصلاحشده:
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 جدای خودش را بدهید.
indicator "Example"
edition = 1
plot(close, name = "A b")
plot(open, name = "A b")نسخهٔ اصلاحشده:
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}"
علت. در یک نام حرفی عربی به کار رفته که شبیه حرف فارسی است (مثلاً یای عربی بهجای یای فارسی).
راهحل. حرف فارسیای را بنویسید که اخطار نام میبرد. این دو روی صفحه یکی دیده میشوند اما نویسههایی متفاوتاند.
indicator "Example"
edition = 1
let كم = 1
plot(كم)نسخهٔ اصلاحشده:
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 را حذف کنید، مگر اینکه مقدار متحرک را فقط برای نمایش بخواهید.
indicator "Example"
edition = 1
plot(data.series("60", close, symbol = symbol.id, live = true))نسخهٔ اصلاحشده:
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 اضافه کنید.
indicator "Example"
edition = 1
let size = match int(close) % 2
0 => 1
1 => 2
plot(size)نسخهٔ اصلاحشده:
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
علت. متدی که خودتان تعریف کردهاید جای متد داخلیِ همنام را میگیرد.
راهحل. نام متد خودتان را عوض کنید، مگر اینکه جایگزین شدن متد داخلی همان چیزی باشد که میخواهید.
indicator "Example"
edition = 1
let xs = [1.0, 2.0]
fn array.size(self): int = 42
plot(xs.size())نسخهٔ اصلاحشده:
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 استفاده کنید.
indicator "Example"
edition = 1
mut count = 0
count += 1
plot(count)نسخهٔ اصلاحشده:
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) آزمون کنید.
indicator "Example"
edition = 1
let average = tech.sma(close, 20)
plot(if average == na then 0 else average)نسخهٔ اصلاحشده:
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 themA 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. برای سری، متغیر شما برنده میشود و قیمت از دسترس بیرون میرود؛ تابع همچنان قابل فراخوانی است، اما خواننده نمیتواند این دو را از هم تشخیص دهد.
راهحل. نام دیگری انتخاب کنید.
indicator "Example"
edition = 1
let close = 1
plot(close)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
let level_ = 1
plot(level_)W-SHADOW-GLOBAL#
پیام. "{name}" hides a name declared outside this function
علت. نامی داخل یک تابع، نام چیزی است که بیرون از تابع تعریف شده. خواندن آن بیرونی دیگر آنجا ممکن نیست.
راهحل. برای درونی نام دیگری انتخاب کنید.
indicator "Example"
edition = 1
let level_ = 10
fn f(x: float): float
let level_ = x * 2
return level_
plot(f(close))نسخهٔ اصلاحشده:
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 آن فقط در کندلهایی جلو میرود که بلوک اجرا شود و در کندلهای دیگر همانطور که بود میماند.
راهحل. اگر منظورتان همین است ایرادی نیست: راه اجرای فراخوانی فقط همانجا که به آن میرسد همین است. اگر فراخوانی باید هر کندل را ببیند، آن را اول در خطی جدا و بالای بلوک بنویسید.
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)نسخهٔ اصلاحشده، وقتی فراخوانی باید هر کندل را ببیند:
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 میآید:
indicator "Example"
edition = 1
f(x) => x * 2
plot(f(close))نسخهٔ اصلاحشده:
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 میآید:
indicator "Example"
edition = 1
x := 1
plot(x)نسخهٔ اصلاحشده:
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 میآید:
indicator "Example"
edition = 1
let a = array.new<float>(3)
plot(1)نسخهٔ اصلاحشده:
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).
//@pragma
indicator "Example"
edition = 1
plot(close)نسخهٔ اصلاحشده:
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 میآید:
indicator "Example"
edition = 1
let n = input.int(5)
plot(n)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
input n: int = 5, name = "N"
plot(n)H-FOREIGN-NAME#
پیام. This name belongs to another language: {use}
علت. اسکریپت نامی را نوشته که زبان دیگری دارد و این زبان ندارد، مثل ثابتی که فقط میان دو خوانش یک درخواست انتخاب میکرد. پیشنهاد میگوید اینجا چه بنویسید.
راهحل. همان را بنویسید که پیشنهاد میگوید. این پیشنهاد همراه خطای E3171 (مقدار) یا E3160 (فراخوانی) میآید:
indicator "Example"
edition = 1
let g = barmerge.gaps_off
plot(close)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
plot(close)H-FOREIGN-STUDY#
پیام. This form belongs to another language: {use}
علت. فایل با study(...) شروع میشود.
راهحل. indicator("Title", edition = 1) بنویسید.
این پیشنهاد همراه خطای E2080 میآید:
study("Example")
plot(close)نسخهٔ اصلاحشده:
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 میآید:
indicator "Example"
edition = 1
let a = switch close
plot(a)نسخهٔ اصلاحشده:
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 میآید:
indicator "Example"
edition = 1
let a = close > open ? 1 : 2
plot(a)نسخهٔ اصلاحشده:
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 میآید:
indicator "Example"
edition = 1
[a, b] = f()
plot(a)نسخهٔ اصلاحشده:
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 میآید:
indicator "Example"
edition = 1
var x = 0
plot(x)نسخهٔ اصلاحشده:
indicator "Example"
edition = 1
state x = 0
plot(x)