قالببندی متن و عدد
متن را با گیومه بنویسید، با متن قالبدار پیام بسازید، اعشار، علامت، درصد و زمان را کنترل کنید، و بدانید کدام آکولادها متعلق به سرور هشدار است.
متن در برچسبها، جدولها، پیام هشدارها و عنوان خطها دیده میشود. این صفحه نشان میدهد متن را چطور بنویسید، چطور عدد داخل آن بگذارید، و چطور ظاهر عدد را درست کنید.
گیومه و escape#
متن داخل گیومه دوتایی یا تکی نوشته میشود. هر نوع میتواند نوع دیگر را در خود جا بدهد. بکاسلش یک escape را شروع میکند:
| بنویسید | یعنی |
|---|---|
\n | یک خط تازه |
\t | یک تب |
\" \' \\ | خود گیومه یا بکاسلش |
\u{1F600} | نویسهای با این کد (یک تا شش رقم هگزا) |
سه گیومه پشتسرهم چند خط را با هر چیزی که داخلشان باشد نگه میدارند:
indicator "Text in labels"
edition = 1
display = price
if bar.is_last
label.new(
bar.index,
high,
"""Last bar
Quotes "like this" and 'this' are fine""",
style = label_down,
)
plot(close)متنها را با + به هم بچسبانید. عددی که به متن چسبانده شود به متن سادهاش تبدیل میشود ("a" + 1 میشود a1)؛ برای انتخاب اعشار یا علامت از متن قالبدار استفاده کنید.
متن قالبدار#
f"..." متنی است که داخل آکولادهایش عبارت میگذارید. بعد از دونقطه میگویید مقدار چطور نوشته شود.
indicator "Formatted text"
edition = 1
display = price
let change = close - close[1]
let share = close / close[1] - 1
if bar.is_last
let t = table.new(top_right, 2, 4)
table.cell(t, 0, 0, "Close")
table.cell(t, 1, 0, f"{close:price}")
table.cell(t, 0, 1, "Change")
table.cell(t, 1, 1, f"{change:+.2f}")
table.cell(t, 0, 2, "Change %")
table.cell(t, 1, 2, f"{share:+.2%}")
table.cell(t, 0, 3, "Bar")
table.cell(t, 1, 3, f"{bar.index:06}")
plot(close)| قالب | مقدار | نتیجه |
|---|---|---|
{x:.2f} | 3.14159 | 3.14 |
{x:.0f} | 4318.08 | 4318 |
{x:,.2f} | 1234567.891 | 1,234,567.89 |
{x:+.1f} | 0.5 | +0.5 |
{x:.1%} | 0.256 | 25.6% |
{x:03} | 7 | 007 |
{x:price} | یک قیمت | قیمت با همان تعداد اعشار خود نماد |
{x} | هر مقدار | مقدار بهصورت متن ساده (true، 2999) |
عدد غایب (na) همان na نوشته میشود. برای آن بعد از علامت سؤال یک جایگزین بگذارید:
| قالب | مقدار | نتیجه |
|---|---|---|
{x:.1f} | na | na |
{x:.1f?'n/a'} | na | n/a |
زمان با قالب time(...) نوشته میشود که یک الگو و یک منطقهٔ زمانی میگیرد:
indicator "Time in text"
edition = 1
display = price
input zone: text = "Asia/Tehran", name = "Clock zone"
if bar.is_last
label.new(
bar.index,
high,
f"{bar.time:time('HH:mm', zone)} {bar.time:time('yyyy-MM-dd', 'UTC')}",
)
plot(close)قالب ناشناخته خطاست و نام آن قالب را میآورد:
indicator "Unknown format"
edition = 1
if bar.is_last
label.new(bar.index, high, f"{close:10.2f}")
plot(close)برای نوشتن خود آکولاد، آن را دوبار بنویسید: f"{{x}}" متن {x} است. آکولادی که نه بسته شده باشد و نه دوبار نوشته شده باشد E1010 است.
متن با گیومه تکی یا دوتایی باید در همان خط بسته شود (E1001)؛ فقط متنی که با سه گیومه نوشته میشود میتواند چند خط باشد. گیومه از نوع دیگر میتواند داخل آکولادها بیاید: f"{'a'}".
جانگهدارهای هشدار متن قالبدار نیستند#
سرور هشدار واژههای داخل آکولاد دوتایی مثل {{ticker}} را در یک متن ساده پر میکند. (هشدار روی اسکریپتهای خودتان در این نسخه خاموش است، ولی این قاعده برای متنی که مینویسید برقرار است.) داخل متن قالبدار، آکولاد دوتایی خود آن نویسه است، پس f"{{ticker}}" میشود {ticker}. بررسیکننده دربارهٔ آن اخطار میدهد:
indicator "Placeholder in an f-text"
edition = 1
display = price
alert.when(close > open, "Up", message = f"{{ticker}} closed up")
plot(close)جانگهدار را در متن ساده بنویسید: "{{ticker}} closed up". فهرست جانگهدارها در کلیدها و گزینههای هشدار آمده است.
تابعهای متنی#
گروه text کمکتابعهای معمول را دارد. بیشتر آنها را میشود با نقطه هم نوشت.
indicator "Text functions"
edition = 1
display = price
let clock = "10:30"
let parts = clock.split(":")
let hours = text.to_number(parts.at(0))
let minutes = text.to_number(parts.at(1))
plot(hours * 60 + minutes, name = "Minutes since midnight")
if bar.is_last
label.new(bar.index, high, text.upper("done") + " " + text.of(close, tick))| تابع | چه میدهد |
|---|---|
text.length(s) | تعداد نویسهها |
text.upper(s) text.lower(s) | متن با حروف بزرگ یا کوچک |
text.contains(s, part) | اگر part در s باشد true |
text.replace(s, from, to) | s با جایگزین شدن اولین from |
text.slice(s, start, end) | نویسهها از start تا end، بدون خود end |
text.split(s, separator) | آرایهای از تکهها |
text.match(s, pattern) | اولین بخشی از s که با الگو جور درمیآید، یا متن خالی (بخش الگوها را پایینتر ببینید) |
text.to_number(s) | عددی که در s نوشته شده، یا na |
text.fmt(x, format) | عدد نوشتهشده با یک قالب مثل ".2f" یا ",.2f"؛ قالب ناشناخته E-FMT-SPEC است |
text.of(x, format) | عدد بهصورت متن، با الگویی مثل "#.##" یا tick |
متنی که یک فراخوانی میسازد حداکثر میتواند 1,000,000 نویسه داشته باشد.
الگوها#
text.match(s, pattern) در s دنبال اولین بخشی میگردد که با یک الگو جور درمیآید و آن بخش را بهصورت متن میدهد. اگر چیزی جور درنیاید، متن خالی میدهد. الگویی که فقط یک واژه باشد، مثل "USD"، جستوجوی ساده است.
indicator "A pattern"
edition = 1
let digits = text.match("order-2048-x", "[0-9]+")
plot(text.to_number(digits), name = "The number in the text")الگوخوانِ نمودار (بخشی از موتور که الگو را میخواند) اینها را میشناسد:
- نویسههای معمولی، و
.برای هر نویسه بهجز پایان خط؛ - کلاسهایی مثل
[a-z]و[^0-9]، و میانبرهای\d،\w،\sو معکوسهایشان\D،\W،\S؛ ^و$برای آغاز و پایان متن، و\bو\Bبرای مرز واژه؛- گروههای
( )و(?: )که فقط گروه میکنند: فراخوانی همیشه کل تطبیق را میدهد؛ |برای انتخاب، و تکرارهای*،+،?،{n}،{n,}و{n,m}، که پس از هرکدام میشود?گذاشت تا کمترین مقدار ممکن را بردارد.
ارجاع به گروه قبلی، نگاه به جلو، نگاه به عقب، گروههای نامدار، \p{…} و \cX را نمیخواند؛ الگویی که یکی از آنها را به کار ببرد E-REGEX-FEATURE است. الگویی که از حدهای نوشتهشده در سقفها و بودجهٔ اجرا بگذرد E-LIMIT-REGEX است. الگویی که فقط نادرست نوشته شده، مثلاً کروشهٔ بستهنشده، متن خالی میدهد. هر گام الگوخوان جزو گامهای کندل شمرده میشود؛ پس الگو روی یک متن بسیار بلند با E-LIMIT-OPS تمام میشود و هرگز نمیتواند اسکریپت را بیشتر از بودجهاش مشغول نگه دارد.
نگاه کنید به: کلیدها و گزینههای هشدار، جدولها، واحدها و لیترالها.