4
پر توجہ دیں
1076
پیروکار

FMZ PINE سکرپٹ دستاویزی

میں تخلیق کیا: 2022-05-06 14:27:06, تازہ کاری: 2025-01-23 10:19:06
comments   18
hits   13760

≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠

expr1 + expr2
+ expr

واپس کی قدر سٹرنگ کی بائنری+ایکسپریس 1 اور ایکسپریس 2 کو ملا کر واپس کریں عددی عددی یا فلوٹ پوائنٹ کی قیمت، یا اقدار کی ایک سیریز لوٹاتا ہے: بائنری ‘+’ واپسی expr1 پلس expr2。 ایک میٹرکس + ایک میٹرکس واپس expr ((ایک میٹرکس آپریٹر کی ہم آہنگی کے لئے کچھ بھی شامل نہیں ہے)

نوٹ آپ اعداد کے ساتھ ریاضی کے آپریٹرز اور متغیرات کی صفوں کا استعمال کرسکتے ہیں۔ صفوں کے استعمال کی صورت میں ، آپریٹرز عناصر پر لاگو ہوتے ہیں۔

+=

جمع کا تعین ◄ عددی اظہار یا سٹرنگ کے لئے لاگو ◄

expr1 += expr2

مثال

// Equals to expr1 = expr1 + expr2.
a = 2
b = 3
a += b
// Result: a = 5.
plot(a)

واپس کی قدر سٹرنگ کے لئے ، ایکسپریس 1 اور ایکسپریس 2 کا سلسلہ لوٹاتا ہے۔ اعداد کے لئے ، ایک عددی یا فلوٹ پوائنٹ کی قیمت ، یا اقدار کی ایک سیریز لوٹاتا ہے۔

نوٹ آپ اعداد کے ساتھ ریاضی کے آپریٹرز اور متغیرات کی صفوں کا استعمال کرسکتے ہیں۔ صفوں کے استعمال کی صورت میں ، آپریٹرز عناصر پر لاگو ہوتے ہیں۔

-

گھٹاؤ یا منفی عدد۔ عددی اظہار پر لاگو ہوتا ہے۔

expr1 - expr2
- expr

واپس کی قدر ایک عددی یا فلوٹ پوائنٹ کی قیمت، یا اقدار کی ایک سیریز لوٹاتا ہے: بائنری ‘+’ واپسی expr1 مائنس expr2。 یونٹ-ایکسپریس کے لئے منفی کو لوٹاتا ہے۔

نوٹ آپ اعداد کے ساتھ ریاضی کے آپریٹرز اور متغیرات کی صفوں کا استعمال کرسکتے ہیں۔ صفوں کے استعمال کی صورت میں ، آپریٹرز عناصر پر لاگو ہوتے ہیں۔

-=

گھٹاؤ کے قانون کی تعیناتی ◄ عددی اظہار پر لاگو ◄

expr1 -= expr2

مثال

// Equals to expr1 = expr1 - expr2.
a = 2
b = 3
a -= b
// Result: a = -1.
plot(a)

واپس کی قدر عددی یا فلوٹ پوائنٹ کی قیمت، یا اقدار کی ایک سیریز

/

استثناء ◄ عددی اظہار پر لاگو ◄

expr1 / expr2

واپس کی قدر عددی یا فلوٹ پوائنٹ کی قیمت، یا اقدار کی ایک سیریز

/=

عددی اظہار پر لاگو ہوتا ہے۔

expr1 /= expr2

مثال

// Equals to expr1 = expr1 / expr2.
a = 3
b = 3
a /= b
// Result: a = 1.
plot(a)

واپس کی قدر عددی یا فلوٹ پوائنٹ کی قیمت، یا اقدار کی ایک سیریز

<

سے کم ◄ عددی اظہار کے لئے لاگو ◄

expr1 < expr2

واپس کی قدر بول ویلیو، یا بول ویلیو کی ایک سیریز

<=

سے کم یا برابر ◄ عددی اظہار کے لئے لاگو ◄

expr1 <= expr2

واپس کی قدر بول ویلیو، یا بول ویلیو کی ایک سیریز

==

کے برابر ہے۔ کسی بھی قسم کے اظہار کے لیے قابل اطلاق ہے۔

expr1 == expr2

واپس کی قدر بول ویلیو، یا بول ویلیو کی ایک سیریز

=>

’=>’ آپریٹر صارف کی وضاحت کی تقریب کے اعلانات کے لئے استعمال کیا جاتا ہے اورswitchجملوں میں

فنکشن ڈیکلیریشن کی نحو یہ ہے:

<identifier>([<parameter_name>[=<default_value>]], ...) =>
    <local_block>
    <function_result>

ایک<local_block>یہ صفر یا اس سے زیادہ پائن جملے ہیں۔ <function_result>ایک متغیر، ایک اظہار، یا ایک ماڈیول ہے۔

مثال

// single-line function
f1(x, y) => x + y
// multi-line function
f2(x, y) => 
    sum = x + y
    sumChange = ta.change(sum, 10)
    // Function automatically returns the last expression used in it
plot(f1(30, 8) + f2(1, 3))

نوٹ آپ صارف دستی کے اعلانات اور اسکرپٹ لائبریری کے صفحات میں صارف کی وضاحت کے بارے میں مزید معلومات حاصل کرسکتے ہیں۔

>

سے بڑا ◄ عددی اظہار پر لاگو ◄

expr1 > expr2

واپس کی قدر بول ویلیو، یا بول ویلیو کی ایک سیریز

>=

سے بڑا یا برابر ◄ عددی اظہار کے لئے لاگو ◄

expr1 >= expr2

واپس کی قدر بول ویلیو، یا بول ویلیو کی ایک سیریز

?:

سہ رخی مشروط آپریٹر۔

expr1 ? expr2 : expr3

مثال

// Draw circles at the bars where open crosses close
s2 = ta.cross(open, close) ? math.avg(open,close) : na
plot(s2, style=plot.style_circles, linewidth=2, color=color.red)  

// Combination of ?: operators for 'switch'-like logic
c = timeframe.isintraday ? color.red : timeframe.isdaily ? color.green : timeframe.isweekly ? color.blue : color.gray
plot(hl2, color=c)

واپس کی قدر اگر ایکسپریس 1 کا جائزہ سچ ہے تو ایکسپریس 2 ہے ، ورنہ ایکسپریس 3 ہے۔ صفر کی قیمت ((0 اور NaN + ، انفینٹی ، انفینٹی) کو غلط سمجھا جاتا ہے ، باقی تمام اقدار درست ہیں۔

نوٹ اگر آپ کو اس کی ضرورت نہیں ہے تو ، براہ کرم na کو جیلسی جیلسی کی شاخ کے طور پر استعمال کریں۔ کیا آپ دو یا دو سے زیادہ: آپریٹرز کو مل کر استعمال کر سکتے ہیں؟ (مثال کے طور پر اوپر ملاحظہ کریں) آپ اعداد کے ساتھ ریاضی کے آپریٹرز اور متغیرات کی صفوں کا استعمال کرسکتے ہیں۔ صفوں کے استعمال کی صورت میں ، آپریٹرز عناصر پر لاگو ہوتے ہیں۔

مزید دیکھیے na

[]

سیریز کے تحت۔ expr1 سیریز کی سابقہ اقدار تک رسائی فراہم کرتا ہے۔ expr2 ماضی کی k لائنوں کی تعداد ہے ، اور اس کی قدر ہونی چاہئے۔ فلوٹ کو نیچے کی طرف گھما دیا جائے گا۔

expr1[expr2]

مثال

// [] can be used to "save" variable value between bars
a = 0.0 // declare `a`
a := a[1] // immediately set current value to the same as previous. `na` in the beginning of history
if high == low // if some condition - change `a` value to another
    a := low
plot(a)

واپس کی قدر اعداد کی ایک سیریز

مزید دیکھیے math.floor

and

منطق AND。 بول اظہار کے لئے لاگو ہوتی ہے۔

expr1 and expr2

واپس کی قدر بول ویلیو، یا بول ویلیو کی ایک سیریز

or

منطق OR。 بول اظہار کے لئے لاگو ہوتا ہے。

expr1 or expr2

واپس کی قدر بول ویلیو، یا بول ویلیو کی ایک سیریز

not

منطق کا ردوبدل ((NOT) ◄ بول اظہار کے لئے لاگو ہوتا ہے ◄

not expr1

واپس کی قدر بول ویلیو، یا بول ویلیو کی ایک سیریز

ڈیٹا ٹائپ کلیدی الفاظ

bool

واضح طور پر بیان کردہ متغیر یا پیرامیٹر کے لئے bool () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () ()

مثال

// bool
bool b = true    // Same as `b = true`
b := na
plot(b ? open : close)

نوٹ متغیر کے بیان میں واضح طور پر قسم کا ذکر کرنا اختیاری ہے ، جب تک کہ یہ na کے ساتھ شروع نہ ہو۔ قسم کے نظام کے صارف دستی صفحے پر پائن قسم کے بارے میں مزید معلومات حاصل کریں۔

مزید دیکھیے var varip int float color string true false

int

واضح طور پر متغیر یا پیرامیٹرز کا اعلان کرنے کے لئے استعمال کیا جاتا ہے int () () کی قسم کے کلیدی الفاظ

مثال

// int
int i = 14    // Same as `i = 14`
i := na
plot(i)

نوٹ متغیر کے بیان میں واضح طور پر قسم کا ذکر کرنا اختیاری ہے ، جب تک کہ یہ na کے ساتھ شروع نہ ہو۔ قسم کے نظام کے صارف دستی صفحے پر پائن قسم کے بارے میں مزید معلومات حاصل کریں۔

مزید دیکھیے var varip float bool color string

float

فلوٹ () کی قسم کے کلیدی الفاظ جو واضح طور پر متغیرات یا پیرامیٹرز کو بیان کرنے کے لئے استعمال ہوتے ہیں۔

مثال

// float
float f = 3.14    // Same as `f = 3.14`
f := na
plot(f)

نوٹ متغیر کے بیان میں واضح طور پر اس قسم کا ذکر کرنا اختیاری ہے ، جب تک کہ یہ na کے ساتھ شروع نہ ہو۔

مزید دیکھیے var varip int bool color string

string

ایکسپریس ڈیکلیئرڈ متغیر یا پیرامیٹر کے لئے “string” قسم کے کلیدی الفاظ

مثال

// string
string s = "Hello World!"    // Same as `s = "Hello world!"`
// string s = na // same as "" 
plot(na, title=s)

نوٹ متغیر کے بیان میں واضح طور پر قسم کا ذکر کرنا اختیاری ہے ، جب تک کہ یہ na کے ساتھ شروع نہ ہو۔ قسم کے نظام کے صارف دستی صفحے پر پائن قسم کے بارے میں مزید معلومات حاصل کریں۔

مزید دیکھیے var varip int float bool str.tostring str.format

color

“color” کی قسم کے مطلوبہ الفاظ جو ایک واضح طور پر بیان کردہ متغیر یا پیرامیٹرز کے لئے استعمال ہوتے ہیں۔

مثال

// color
color textColor = color.green
if barstate.islastconfirmedhistory
    runtime.log("test", textcolor = textColor)

نوٹ رنگین حروف کی شکل مندرجہ ذیل ہے: #RRGGBB یا #RRGGBBAA。 حروف کی جوڑی 00 سے FF کی سولہ عددی اقدار کی نمائندگی کرتی ہے ((0 سے 255 تک دس عددی) ، جہاں RR، GG اور BB جوڑے رنگوں کے سرخ، سبز اور نیلے رنگ کے تناسب کی اقدار ہیں۔ AA رنگ شفافیت ہے ((یا الفا تناسب) ، جہاں 00 پوشیدہ ہے ، ایف ایف غیر شفاف ہے۔ جب AA جوڑی فراہم نہیں کی جاتی ہے تو ، FF استعمال کیا جاتا ہے۔ سولہ عددی حروف بڑے یا چھوٹے لکھے جاسکتے ہیں۔ متغیر کے بیان میں واضح طور پر قسم کا ذکر کرنا اختیاری ہے ، جب تک کہ یہ na کے ساتھ شروع نہ ہو۔ قسم کے نظام کے صارف دستی صفحے پر پائن قسم کے بارے میں مزید معلومات حاصل کریں۔

مزید دیکھیے var varip int float string color.rgb color.new

array

صریح طور پر متغیرات یا پیرامیٹرز کا اعلان کرنے کے لئے استعمال کیا جاتا ہےarray.new<type>,array.fromفنکشن تخلیق کرتا ہے صف کا اعتراض ((یا ID) }}

مثال

// array
array<float> a = na
a := array.new<float>(1, close)
plot(array.get(a, 0))

نوٹ صف کا اعتراض ہمیشہ صف کی شکل میں ہوتا ہے۔

مزید دیکھیے var array.new array.from

Objects

PINE زبان کا آبجیکٹ صارف کی وضاحت کی قسم ((UDT) کا ایک مثال ہے ، جسے بغیر کسی طریقہ کار کی کلاس کے طور پر سمجھا جاسکتا ہے ، جس سے صارف کو پالیسی میں اپنی مرضی کے مطابق قسمیں بنانے کی اجازت ملتی ہے جو ایک ہی وجود میں مختلف اقدار کو منظم کرتی ہے۔

قسم کی وضاحت

آئیے ہم آرڈر کی معلومات کو ذخیرہ کرنے کے لئے ایک آرڈر کی قسم کی وضاحت کرتے ہیں:

type order
    float price
    float amount
    string symbol
  • استعمال کریںtypeمطلوبہ الفاظ کی قسم کا اعلان
  • type کی ورڈ کے بعد type کا نام ہے۔
  • پہلی سطر type قسم کے نام کی وضاحت کے بعد ، اس قسم میں شامل کھیتوں کی وضاحت کرنے کے لئے چار خالی جگہوں میں سکرو کریں۔
  • ہر فیلڈ کو اس کی ڈیٹا ٹائپ کا اعلان کرنے کی ضرورت ہے ، جیسے int ، float ، string

تخلیق آبجیکٹ

قسم کا استعمال کرتے ہوئے ایک اچھا اعلان، کال کریںnew()فنکشن تخلیق آبجیکٹ

order1 = order.new()
order1 = order.new(100, 0.1, "BTC_USDT")
order1 = order.new(amount = 0.1, symbol = "BTC_USDT", price = 100)

آپ خالی اشیاء بھی بنا سکتے ہیں:

order order1 = na

ذیل میں ہم ایک عملی مثال دیکھتے ہیں:

type order
    float price
    float amount
    string symbol

if strategy.position_size == 0 and open > close
    strategy.entry("long", strategy.long, 1)

order1 = order.new(strategy.opentrades.entry_price(strategy.opentrades - 1), strategy.opentrades.size(strategy.opentrades - 1), syminfo.ticker)
// runtime.log(order1)   // 输出 {"data":{"price":46002.8,"amount":1,"symbol":"swap"},"_meta":0,"_type":"order"}

مثال کے طور پر:

order1 = order.new(strategy.opentrades.entry_price(strategy.opentrades - 1), strategy.opentrades.size(strategy.opentrades - 1), syminfo.ticker)

یہ بھی درج ذیل شکل میں لکھا جا سکتا ہے:

order order1 = na
order1 := order.new(strategy.opentrades.entry_price(strategy.opentrades - 1), strategy.opentrades.size(strategy.opentrades - 1), syminfo.ticker)

اشیاء کی اقسام کے لئے var مطلوبہ الفاظ کا استعمال

//@version=5
indicator("Objects using `var` demo")

//@type A custom type to hold index, price, and volume information.
type BarInfo
    int   index = bar_index
    float price = close
    float vol   = volume

//@variable A `BarInfo` instance whose fields persist through all iterations, starting from the first bar.
var BarInfo firstBar = BarInfo.new()
//@variable A `BarInfo` instance declared on every bar.
BarInfo currentBar = BarInfo.new()

// Plot the `index` fields of both instances to compare the difference.
plot(firstBar.index, "firstBar")
plot(currentBar.index, "currentBar")

جب کسی صارف کی وضاحت شدہ قسم کے آبجیکٹ کی متغیر کو var کلیدی لفظ کا اعلان استعمال کرتے ہوئے تفویض کیا جاتا ہے تو ، یہ کلیدی لفظ خود بخود اس آبجیکٹ کے تمام شعبوں پر لاگو ہوتا ہے۔ اس کا مطلب یہ ہے کہ var کلیدی لفظ کے ذریعہ اعلان کردہ آبجیکٹ ہر تعدد کے درمیان اپنی حالت کو برقرار رکھے گا ، اس کی بجائے کہ ہر تعدد میں اس کی فیلڈ ویلیو کو دوبارہ شروع کیا جائے۔

  • firstBar آبجیکٹ کو var کی ورڈ کے ساتھ اعلان کیا گیا ہے ، لہذا اس کا فیلڈ ((index،price،vol) ہر ایک میں اس کی قدر برقرار رکھے گا ، جو پہلی شے سے شروع ہوتا ہے اور آخری شے تک ختم ہوتا ہے۔
  • currentBar آبجیکٹ میں var کی ورڈ ڈیکلیریشن استعمال نہیں کی گئی ہے، اس لیے اس کے فیلڈز کو ہر ایک انٹری پر دوبارہ شروع کیا جائے گا، اور ہر ایک ایڈیشن میں ایک نیا آبجیکٹ ہوگا۔

آپ انڈیکس فیلڈ میں دو آبجیکٹوں کا موازنہ کرکے ان کے درمیان اختلافات کا موازنہ کرسکتے ہیں۔ firstBar.index پہلے سے طے شدہ اقدار کو برقرار رکھے گا اور currentBar.index کو موجودہ بار_انڈیکس کے طور پر دوبارہ شروع کیا جائے گا۔

آبجیکٹ کی قسم Varip مطلوبہ الفاظ کے استعمال کے لئے

//@version=5
indicator("Objects using `varip` fields demo")

//@type A custom type that counts the bars and ticks in the script's execution.
type Counter
    int       bars  = 0
    varip int ticks = 0

//@variable A `Counter` object whose reference persists throughout all bars.
var Counter counter = Counter.new()

// Add 1 to the `bars` and `ticks` fields. The `ticks` field is not subject to rollback on unconfirmed bars.
counter.bars  += 1
counter.ticks += 1

// Plot both fields for comparison.
plot(counter.bars, "Bar counter", color.blue, 3)
plot(counter.ticks, "Tick counter", color.purple, 3)

پائن میں ، varp کی ورڈ کا استعمال کرتے ہوئے اس بات کی نشاندہی کی جاسکتی ہے کہ اسکرپٹ کے عملدرآمد کے دوران آبجیکٹ کے کھیتوں کو برقرار رکھا جائے گا ، اور غیر تصدیق شدہ کالموں میں واپس نہیں جائیں گے۔ کاؤنٹر قسم کے بیانات میں ، بارس فیلڈ میں ویرپ کی ورڈ استعمال نہیں کیا گیا ہے ، لہذا یہ ہر غیر تصدیق شدہ کالم میں واپس چلا جائے گا۔ جبکہ ٹکس فیلڈ میں ویرپ کی ورڈ استعمال کیا گیا ہے ، لہذا یہ غیر تصدیق شدہ کالم میں واپس نہیں آئے گا۔ counter آبجیکٹ کا اعلان var کی ورڈ کے ساتھ کیا گیا ہے ، لہذا یہ اسکرپٹ کے عملدرآمد کے دوران جاری رہے گا۔ بارس فیلڈ اور ٹکس فیلڈ میں ہر تعدد میں اضافہ ہوتا ہے۔ بارس فیلڈ ہر غیر تصدیق شدہ کالم کے اندر گھومتا ہے ، جبکہ ٹکس فیلڈ نہیں گھومتا ہے۔ آخر میں ، counter.bars اور counter.ticks فیلڈز کا نقشہ تیار کرکے ، ان کے مابین اختلافات کا موازنہ کیا جاسکتا ہے۔ counter.bars کی قدر ہر غیر تصدیق شدہ کالم کے اندر گھومتی ہے ، جبکہ counter.ticks کی قدر اسکرپٹ کے اختتام تک بڑھتی رہتی ہے۔

فیلڈ ویلیو کو تبدیل کریں

type order
    float price
    float amount
    string symbol

if strategy.position_size == 0 and open > close
    strategy.entry("long", strategy.long, 1)
    
order1 = order.new(strategy.opentrades.entry_price(strategy.opentrades - 1), strategy.opentrades.size(strategy.opentrades - 1), syminfo.ticker)

if strategy.position_size != 0
    runtime.log(order1)
    order1.price := 999
    order1.amount := 100
    runtime.log(order1)
    runtime.error("stop")

استعمال کیا جا سکتا:=دوبارہ تفویض کرنے والے آپریٹر کو تبدیل کریں آبجیکٹ فیلڈ کی قدر

آبجیکٹ مجموعہ

مثال کے طور پر ایک خالی صف کا اعلان کریں جو صارف کی طرف سے بیان کردہ آرڈر کی قسم کی اشیاء کو محفوظ کرے گا:

type order
    float price
    float amount
    string symbol

arrOrder = array.new<order>()

order1 = order.new(99, 1, "BTC_USDT")
order2 = order.new(100, 2, "ETH_USDT")

array.push(arrOrder, order1)
array.push(arrOrder, order2)

runtime.log(arrOrder)
runtime.error("stop")

یا

type order
    float price
    float amount
    string symbol

var array<order> arrOrder = na
arrOrder := array.new<order>()

order1 = order.new(99, 1, "BTC_USDT")
order2 = order.new(100, 2, "ETH_USDT")

array.push(arrOrder, order1)
array.push(arrOrder, order2)

runtime.log(arrOrder)
runtime.error("stop")

کاپی کریں

پائن میں ، آبجیکٹ حوالہ جات کے ذریعہ تفویض کیے جاتے ہیں۔ جب کوئی موجودہ آبجیکٹ کسی نئی متغیر کو تفویض کیا جاتا ہے تو ، دونوں ایک ہی آبجیکٹ کی طرف اشارہ کرتے ہیں۔

//@version=5
indicator("")
type pivotPoint
    int x
    float y
pivot1 = pivotPoint.new()
pivot1.x := 1000
pivot2 = pivot1
pivot2.x := 2000
// Both plot the value 2000.
plot(pivot1.x)
plot(pivot2.x)

مندرجہ ذیل مثال میں، ہم ایک pivot1 آبجیکٹ بناتے ہیں اور اس کے x فیلڈ کو 1000 پر سیٹ کرتے ہیں۔ اس کے بعد، ہم اعلان کرتے ہیں کہ ایک pivot2 میں اس pivot1 آبجیکٹ کے حوالہ جات شامل ہیں، لہذا دونوں ایک ہی مثال کی طرف اشارہ کرتے ہیں۔ لہذا، pivot2.x کو تبدیل کرنے سے pivot1.x کو بھی تبدیل کیا جائے گا کیونکہ دونوں نے x فیلڈ کا حوالہ دیا ہے۔

اصل آبجیکٹ سے علیحدہ ایک کاپی بنانے کے لیے، اس صورت میں ہم بلٹ ان کاپی () کا استعمال کرسکتے ہیں۔ اس مثال میں، ہم pivot2 کو pivot1 آبجیکٹ کے نقل شدہ مثال کے متغیر کا حوالہ دیتے ہیں۔ اب، pivot2.x کو تبدیل کرنے سے pivot1.x کو تبدیل نہیں کیا جائے گا، کیونکہ یہ x کو ایک علیحدہ آبجیکٹ کے فیلڈ کا حوالہ دیتا ہے:

//@version=5
indicator("")
type pivotPoint
    int x
    float y
pivot1 = pivotPoint.new()
pivot1.x := 1000
pivot2 = pivotPoint.copy(pivot1)
pivot2.x := 2000
// Plots 1000 and 2000.
plot(pivot1.x)
plot(pivot2.x)

نوٹ کریں کہ ٹریڈنگ ویو کاپی کا طریقہ شارٹ کاپی ہے۔ اگر کسی آبجیکٹ میں مخصوص قسم کے فیلڈز (آرری وغیرہ) ہیں تو اس آبجیکٹ کی شارٹ کاپی میں موجود فیلڈز اس آبجیکٹ کے ساتھ اسی مثال کی طرف اشارہ کریں گے۔ ایف ایم زیڈ پلیٹ فارم براہ راست گہری کاپی کو لاگو کرتا ہے، بغیر کسی اضافی پروسیسنگ کی ضرورت ہوتی ہے، مندرجہ ذیل مثالوں کا حوالہ دیتے ہیں:

ڈیپ کاپی

//@version=5

indicator("test deepCopy")

type orderInfo
    float price
    float amount

type labelInfo
    orderInfo order
    string labelMsg

labelInfo1 = labelInfo.new(orderInfo.new(100, 0.1), "test labelInfo1")
labelInfo2 = labelInfo.copy(labelInfo1)

labelInfo1.labelMsg := "labelInfo1->2"    // 修改 labelInfo1 的基础类型字段,看是否影响 labelInfo2
labelInfo1.order.price := 999             // 修改 labelInfo1 的复合类型字段,看是否影响 labelInfo2

runtime.log(labelInfo1)
runtime.log(labelInfo2)
runtime.error("stop")

ٹیسٹ کے نتائج،labelInfo.copy ((labelInfo1) پر عملدرآمد کے وقت گہری کاپی کے طور پر،labelInfo1 میں کسی بھی فیلڈ میں ترمیم کرنے سے labelInfo2 کو متاثر نہیں کرے گا۔

Methods

پائن زبان کے طریقے (Methods) مخصوص فنکشن ہیں جو کسی خاص مثال کے اندرونی یا صارف کی وضاحت شدہ اقسام سے وابستہ ہیں۔ زیادہ تر معاملات میں ، وہ بنیادی طور پر باقاعدہ افعال کی طرح ہیں ، لیکن مختصر اور آسان گرامر فراہم کرتے ہیں۔ صارف متغیرات پر نقطہ علامتوں کا استعمال کرتے ہوئے براہ راست طریقوں تک رسائی حاصل کرسکتا ہے ، جیسے پائن آبجیکٹ کے کھیتوں تک رسائی حاصل کریں۔ پائن میں تمام خاص قسم کے بلٹ ان طریقے شامل ہیں ، بشمول صف ، میٹرکس ، نقشہ سازی ، بھرنے والی لائنیں وغیرہ۔ یہ طریقے صارف کو اسکرپٹ میں ان اقسام کے خصوصی پروگراموں کو کال کرنے کا ایک آسان طریقہ فراہم کرتے ہیں۔

بلٹ میں طریقہ

مثال کے طور پر، اسکرپٹ کا ایک حصہ:

//@version=5
indicator("Custom Sample BB", overlay = true)

float sourceInput  = input.source(close, "Source")
int   samplesInput = input.int(20, "Samples")
int   n            = input.int(10, "Bars")
float multiplier   = input.float(2.0, "StdDev")

var array<float> sourceArray = array.new<float>(samplesInput)
var float        sampleMean  = na
var float        sampleDev   = na

// Identify if `n` bars have passed.
if bar_index % n == 0
    // Update the queue.
    array.push(sourceArray, sourceInput)
    array.shift(sourceArray)
    // Update the mean and standard deviaiton values.
    sampleMean := array.avg(sourceArray)
    sampleDev  := array.stdev(sourceArray) * multiplier

// Calculate bands.
float highBand = sampleMean + sampleDev
float lowBand  = sampleMean - sampleDev

plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)

اس کے مترادفات میں:

//@version=5
indicator("Custom Sample BB", overlay = true)

float sourceInput  = input.source(close, "Source")
int   samplesInput = input.int(20, "Samples")
int   n            = input.int(10, "Bars")
float multiplier   = input.float(2.0, "StdDev")

var array<float> sourceArray = array.new<float>(samplesInput)
var float        sampleMean  = na
var float        sampleDev   = na

// Identify if `n` bars have passed.
if bar_index % n == 0
    // Update the queue.
    sourceArray.push(sourceInput)
    sourceArray.shift()
    // Update the mean and standard deviaiton values.
    sampleMean := sourceArray.avg()
    sampleDev  := sourceArray.stdev() * multiplier

// Calculate band values.
float highBand = sampleMean + sampleDev
float lowBand  = sampleMean - sampleDev

plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)

PINE کی حمایت دیکھ سکتے ہیںMethodsاس کے بعد، کوڈarray.avg(sourceArray)اس کے علاوہ ، اگر آپ کو کوئی سوال ہے تو ، آپ کو اس کا جواب دینے کی ضرورت نہیں ہے۔sourceArray.avg()。 نوٹ: فی الحال ایف ایم زیڈ کو سپورٹ نہیں کیا جا رہا ہے۔array.avgاس طرح کی کال۔

صارف کی وضاحت شدہ طریقہ

پائن صارف کی طرف سے کسی بھی بلٹ ان یا صارف کی وضاحت کی قسم کے ساتھ استعمال کیا جاتا ہے کہ کسٹم طریقوں کی وضاحت کرنے کی اجازت دیتا ہے ۔ تعریف کے طریقوں بنیادی طور پر تعریف کے افعال کے طور پر ایک ہی ہیں، لیکن دو اہم اختلافات کے ساتھ:

1، method کلیدی لفظ کو فنکشن کے نام سے پہلے شامل کرنا ہوگا۔ 2، method کے پیرامیٹرز، جن میں سے پہلے پیرامیٹر کی قسم کو واضح طور پر بیان کرنا ضروری ہے، کیونکہ یہ اس بات کی نشاندہی کرتا ہے کہ جس چیز سے یہ طریقہ منسلک کیا جائے گا اس کی قسم.

مثال کے طور پر، مندرجہ ذیل کوڈ میں، بلین کی پیمائش کے لئے کوڈ کو صارف کی اپنی مرضی کے مطابق طریقہ کار کے طور پر پیک کیا گیا ہے:

//@version=5
indicator("Custom Sample BB", overlay = true)

float sourceInput  = input.source(close, "Source")
int   samplesInput = input.int(20, "Samples")
int   n            = input.int(10, "Bars")
float multiplier   = input.float(2.0, "StdDev")

var array<float> sourceArray = array.new<float>(samplesInput)
var float        sampleMean  = na
var float        sampleDev   = na

// Identify if `n` bars have passed.
if bar_index % n == 0
    // Update the queue.
    sourceArray.push(sourceInput)
    sourceArray.shift()
    // Update the mean and standard deviaiton values.
    sampleMean := sourceArray.avg()
    sampleDev  := sourceArray.stdev() * multiplier

// Calculate band values.
float highBand = sampleMean + sampleDev
float lowBand  = sampleMean - sampleDev

plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)

اس میں ترمیم کریں:

//@version=5
indicator("Custom Sample BB", overlay = true)

float sourceInput  = input.source(close, "Source")
int   samplesInput = input.int(20, "Samples")
int   n            = input.int(10, "Bars")
float multiplier   = input.float(2.0, "StdDev")

var array<float> sourceArray = array.new<float>(samplesInput)
method maintainQueue(array<float> srcArray, float value, bool takeSample = true) =>
    if takeSample
        srcArray.push(value)
        srcArray.shift()
    srcArray

method calcBB(array<float> srcArray, float mult, bool calculate = true) =>
    var float mean = na
    var float dev  = na
    if calculate
        mean := srcArray.avg()
        dev  := srcArray.stdev() * mult
    [mean, mean + dev, mean - dev]

bool newSample = bar_index % n == 0

[sampleMean, highBand, lowBand] = sourceArray.maintainQueue(sourceInput, newSample).calcBB(multiplier, newSample)

plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)

آپ دیکھ سکتے ہیں کہ کسٹمر کی اپنی مرضی کے مطابق طریقوں کا استعمال کرتے ہوئے مطلوبہ الفاظ کے طریقہ کار کے بیانات:array<float>ٹائپ ◄ کا مطلب ہے کہ یہ طریقہ ہےarray<float>ٹائپ متغیر کا طریقہ ، لہذا آپ دیکھ سکتے ہیں کہ برن اشارے کا حساب لگانے کے لئے درج ذیل کوڈ کو کال کریں۔

[sampleMean, highBand, lowBand] = sourceArray.maintainQueue(sourceInput, newSample).calcBB(multiplier, newSample)

طریقوں کو دوبارہ لوڈ کریں

صارف کی وضاحت کے طریقوں کو اوورلوڈ کر سکتے ہیں اور ایک ہی شناخت کے ساتھ ایک موجودہ بلٹ میں طریقہ کار اور صارف کی وضاحت کے طریقوں. اس کی خصوصیت ایک ہی طریقہ کار کے نام کے تحت صارف کی طرف سے مختلف پیرامیٹرز کے دستخط کے ساتھ منسلک ایک سے زیادہ طریقہ کار کی وضاحت کرنے کی اجازت دیتا ہے. ایک سادہ مثال کے طور پر، فرض کریں کہ ہم متغیر کی اقسام کی شناخت کے لئے ایک طریقہ کار کی وضاحت کرنا چاہتے ہیں.

//@version=5
indicator("Type Inspection")

// @function   Identifies an object's type.
// @param this Object to inspect.
// @returns    (string) A string representation of the type.
method getType(int this) =>
    na(this) ? "int(na)" : "int"

method getType(float this) =>
    na(this) ? "float(na)" : "float"

method getType(bool this) =>
    na(this) ? "bool(na)" : "bool"

method getType(color this) =>
    na(this) ? "color(na)" : "color"

method getType(string this) =>
    na(this) ? "string(na)" : "string"

a = 1             // a.getType(): float
b = 1.0           // b.getType(): float
c = true          // c.getType(): bool
d = color.white   // d.getType(): string(na)
e = "1"           // e.getType(): string

runtime.log("a.getType():", a.getType())
runtime.log("b.getType():", b.getType())
runtime.log("c.getType():", c.getType())
runtime.log("d.getType():", d.getType())
runtime.log("e.getType():", e.getType())
runtime.error("stop")

ہر متغیر کی بنیادی قسم کا تعینgetType()کون سا اوورلوڈ استعمال کیا جائے گا۔ ایف ایم زیڈ پلیٹ فارم میں چونکہ پائن اسکرپٹ کا بنیادی Javascript زبان کے طور پر لاگو کیا گیا ہے ، لہذا عددی قدر کی قسم کو فلوٹ ٹائپ ڈیٹا ((float) کے طور پر فیصلہ کیا جائے گا۔

بلٹ ان فنکشن

جب فنکشن کو کال کیا جاتا ہے تو پیرامیٹرز کو منتقل کیا جاتا ہے ، پیرامیٹرز کا نام تفویض کیا جاسکتا ہے ، اور متغیرات کو براہ راست اس کے پیرامیٹر کے مقام پر منتقل کیا جاسکتا ہے ، اور اس میں مخلوط استعمال کی بھی حمایت کی جاتی ہے۔ مثال کے طور پر:

plot(close, title="test plot")     // 直接传参数 close ;指定参数 title ,赋值字符串"test plot"

ایک بار جب آپ کسی پیرامیٹر کے نام کی تفویض کرتے ہیں تو ، آپ براہ راست متغیر کو پیرامیٹر کے طور پر منتقل نہیں کرسکتے ہیں۔ اس کے بعد ، آپ کو پیرامیٹر کے نام کی تفویض کی شکل میں لکھنا ہوگا۔

// plot(close, title="test", color.red)    // 虽然plot第三个参数是颜色值,但是这样写就会报错
plot(close, title="test", color=color.red) // 正确写法
plot(close, "test", color.red)             // 正确写法

timeframe

timeframe.in_seconds

کے لئے منتقل کیا جائے گاtimeframeپیرامیٹرز کی ٹائم پیسیج سیکنڈ میں تبدیل کریں۔

timeframe.in_seconds(timeframe)

مثال

// Get chart timeframe:
i_tf = input.timeframe("1D")

// Convert timeframe to the int value (number of seconds in 1 Day):
tf = timeframe.in_seconds(i_tf)

plot(tf)

واپس کی قدر timeframeکی ایک K لائن میں سیکنڈ کی تعداد کی int نمائندگی کی شکل。

پیرامیٹر

  • timeframe(simple string) ٹائم فریم。 اختیاری。 ڈیفالٹ timeframe.period。 ہے

نوٹ کے لئےtimeframe>= ‘1M’ فنکشن ایک مہینے میں 30.4167 (36512) دن کی بنیاد پر سیکنڈوں کی گنتی کرتی ہے۔

مزید دیکھیے input.timeframe timeframe.period

ticker

ticker.heikinashi

ایک کوڈ شناخت کنندہ تخلیق کرنے کے لئے درخواست ہموار اوسط K لائن ویلیو。

ticker.heikinashi(symbol)

مثال

heikinashi_close = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)

heikinashi_aapl_60_close = request.security(ticker.heikinashi(syminfo.tickerid), "60", close)
plot(heikinashi_close)
plot(heikinashi_aapl_60_close)

واپس کی قدر اسٹاک کوڈ کی سٹرنگ ویلیو، جو request.security فنکشن کو دی جا سکتی ہے۔

پیرامیٹر

  • symbol(simple string) اجناس کوڈ شناخت کنندہ。

مزید دیکھیے syminfo.tickerid syminfo.ticker request.security

request

request.data

بیرونی اعداد و شمار کی درخواست

request.data(url, attribute)

مثال

/*backtest
start: 2024-09-01 16:00:00
end: 2024-10-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["RunMode",1,358374],["ZPrecision",0,358374]]
*/

var chart_data = "https://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/data"
spotPrice = request.data(chart_data, "$.spot_close_price")
futuresPrice = request.data(chart_data, "$.future_close_price")
diff = futuresPrice - spotPrice

plot(diff, "永续-现货差价")
plot(futuresPrice, "期货价格", overlay=true)
plot(spotPrice, "现货价格", overlay=true)

if diff > 80 and strategy.position_size >= 0
    runtime.log("diff > 80")
    strategy.entry("Enter Short", strategy.short)
if diff < 60 and strategy.position_size <= 0
    runtime.log("diff < 60")
    strategy.entry("Enter Short", strategy.long)

واپس کی قدر پیرامیٹرattributeمخصوص ڈیٹا سیریز

پیرامیٹر

  • url(simple string) درخواست کا ڈیٹا سورس یو آر ایل ، ڈیٹا سورس کے جواب میں ڈیٹا فارمیٹ کی ضرورت ہوتی ہے جس کی ضرورت ہوتی ہے ((کم از کم وقت ، ڈیٹا کی خاصیت شامل ہے):{"data": [], "schema": ["time", "data"]}◦ اعداد و شمار کی فارمیٹ کو مثال کے طور پر ملاحظہ کریں:
  {
      "data": [
          [1720051200000, "{\"spot_close_price\" : 57050.01, \"future_close_price\" : 57045.9}"],
          [1720137600000, "{\"spot_close_price\" : 56628.79, \"future_close_price\" : 56604.9}"],
          // ...
      ],
      "schema": ["time", "data"]
  }
  • attribute(simple string) پراپرٹی کا نام بتائیں اور مطلوبہ ڈیٹا لوٹائیں۔ مثال کے طور پر:"$.spot_close_price"، استعمال کریں۔$.بطور پیش لفظ ، پراپرٹی کا نام ڈیٹا فیلڈ میں پراپرٹی کے مطابق ہوتا ہے جس کا ڈیٹا ماخذ سے درخواست کی گئی ہے

اگر کوئی غلطی ہو تو چیک کریںrequest.dataکیا درخواست کی گئی ٹائم رینج ریٹرننگ سیٹ ٹائم رینج سے مماثل ہے؟ ریٹرننگ ٹائم سیریز پر ڈیٹا کی تلاش نہ کرنے سے غلطی ہوگی۔

اس مثال میں data-data ڈیٹا استفسار ایس کیو ایل کے بیانات:

WITH latest_data AS (
    SELECT 
        klines.spot_1d.Time AS time,
        CONCAT('{\"spot_close_price\" : ', klines.spot_1d.Close, ', \"future_close_price\" : ', klines.future_1d.Close, '}') AS data
    FROM 
        klines.spot_1d
    JOIN 
        klines.future_1d
    ON 
        klines.spot_1d.Time = klines.future_1d.Time
    WHERE
        klines.spot_1d.Symbol = 'btc_usdt'
    AND 
        klines.future_1d.Symbol = 'btc_usdt.swap'
    AND 
        klines.spot_1d.Exchange = 'Binance'
    AND 
        klines.future_1d.Exchange = 'Binance'
    ORDER BY 
        klines.spot_1d.Time DESC
    LIMIT 100
)
SELECT * FROM latest_data
ORDER BY time ASC;

FMZ پلیٹ فارم پر دستیابڈیٹا ایکسپلوریشنصفحہ کوئز، ڈیٹا لنکس بنانے، مثال کے طور پر استعمال کیا جاتا ہےhttps://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/data

request.security

ایک مختلف قسم / قرارداد کی درخواست کریں

request.security(symbol, timeframe, expression, gaps, lookahead, ignore_invalid_symbol, currency) 

مثال

s = request.security(syminfo.tickerid, "D", close)   // 1 Day
plot(s)

expr = ta.sma(close, 10)
s1 = request.security(syminfo.tickerid, "240", expr) // 240 Minutes
plot(s1)

// To avoid difference in calculation on history/realtime you can request not latest values and use merge strategy flags as follows:
s2 = request.security(syminfo.tickerid, "D", close[1], barmerge.gaps_off, barmerge.lookahead_on)
plot(s2)
f() => [open, high]
[o, h] = request.security(syminfo.tickerid, "D", f())
[l, c] = request.security(syminfo.tickerid, "D", [low, close])
plot((o + h + l + c) / 4)

واپس کی قدر درخواست سیریز

پیرامیٹر

  • symbol(simple string) اجناس کا کوڈ。
  • timeframe(simple string) ٹائم پیریڈ ≠ خالی سٹرنگ کو گراف کی موجودہ ٹائم پیریڈ کے طور پر سمجھا جائے گا۔
  • expression(series int/float/bool/color) ایک اظہار کا حساب کتاب اور واپسی request.security کال سے کی جا سکتی ہے۔ یہ ایک سیریز یا ایک ماڈیول ہوسکتا ہے جس میں عناصر شامل ہیں جو سیریز میں تبدیل ہوسکتے ہیں۔
  • gaps(barmerge_gaps) درخواست کردہ اعداد و شمار کو ضم کرنے کی حکمت عملی دی گئی ہے (مطلب ہے کہ اعداد و شمار کو او ایچ ایل سی کے اہم سیریز کے اعداد و شمار کے ساتھ خود بخود ضم کیا جائے) ۔ ممکنہ اقدار: barmerge.gaps_on، barmerge.gaps_off ◄ barmerge.gaps_on - درخواست کردہ اعداد و شمار کو ممکنہ فرق کے ساتھ ضم کریں (ن) اقدار) ◄ barmerge.gaps_off - درخواست کردہ اعداد و شمار کو مستقل طور پر ضم کیا گیا ہے ، تمام فرقوں سے قبل حالیہ موجودہ اقدار کو پُر کیا گیا ہے۔
  • lookahead(barmerge_lookahead) درخواست کردہ ڈیٹا انضمام کی حکمت عملی۔ ممکنہ اقدار: barmerge.lookahead_on، barmerge.lookahead_off۔ ورژن 3 کے بعد سے ، barmerge.lookahead_off ڈیفالٹ ہے۔ براہ کرم نوٹ کریں کہ رویہ حقیقی وقت کی طرح ہے ، صرف تاریخ میں مختلف ہے۔
  • ignore_invalid_symbol(const bool) ایک اختیاری پیرامیٹر۔ اگر کوئی مخصوص شے نہیں ملتی ہے تو ، فنکشن کا سلوک طے کیا جاتا ہے: اگر غلط ہے تو ، اسکرپٹ رک جائے گا اور چلتے وقت غلطی واپس کرے گا۔ اگر سچ ہے تو ، فنکشن واپس آئے گا na اور عملدرآمد جاری رکھے۔
  • currency(simple string) اشیا کی کرنسی سے متعلقہ قدر ((مثال کے طور پر او ایچ ایل سی) کو اس کرنسی میں تبدیل کرتا ہے۔ اس کے بعد تبادلوں کے بعد کی قدر پر مبنی تبادلوں کی شرح FX_IDC جوڑی کے پچھلے دن کی روزانہ کی شرح تبادلہ پر مبنی ہے۔ (مثال کے طور پر K لائن) ۔ اختیاری ہے۔ ڈیفالٹ syminfo.currency ہے۔ ممکنہ اقدار: ISO 4217 فارمیٹ میں کرنسی کوڈ ((مثال کے طور پر USD ) کے ساتھ تین حرفی تار یا کرنسی۔ * نام کی جگہ میں ایک مستقل ، مثال کے طور پر کرنسی۔ امریکی ڈالر

نوٹ اس خصوصیت کا استعمال کرتے ہوئے پائن اسکرپٹ کوڈ تاریخ اور اصل وقت کے اعداد و شمار کے لئے مختلف حساب کتاب کرسکتا ہے۔ اگر آپ اضافی پیرامیٹرز کی وضاحت کرنا چاہتے ہیں جیسے ٹرانزیکشن ٹائم فریم یا ایڈجسٹمنٹ ٹائپ ، تو آپ ticker.new () فنکشن کا استعمال کرسکتے ہیں۔ ‘ticker’ متغیر کو اس فنکشن میں فرق کو منتقل کرنے کے لئے استعمال نہیں کیا جاسکتا ہے۔ آپ ‘ticker.new’ متغیر یا اسٹاک کوڈ کی سٹرنگ نمائندگی کا استعمال کرسکتے ہیں ، مثال کے طور پر AAPL+MSFT*TSLA”。 فی الحال ، ایک اسکرپٹ میں زیادہ سے زیادہ 40 request.security کالز ہوسکتی ہیں۔ براہ کرم نوٹ کریں کہ اس متغیر / فنکشن کو استعمال کرنے سے اشارے کا دوبارہ نقشہ تیار ہوسکتا ہے۔ قرارداد پیرامیٹرز کی اجازت دی گئی اقدار: 1S ، 5S ، 15S ، 30S - سیکنڈ کے وقفے ((گراف کا دورانیہ درخواست کے دورانیے سے کم یا برابر ہونا چاہئے) 1 سے 1440 منٹ 1D سے 365D دن 1W سے 52W ہفتوں میں 1M سے 12M کئی مہینے

مزید دیکھیے syminfo.ticker syminfo.tickerid timeframe.period ta.correlation barmerge.lookahead_off barmerge.lookahead_on

str

str.contains

اگرsourceسٹرنگ پر مشتمل ہےstrاسکرین شاٹ میں ، اگر آپ کے پاس ایک اسکرین شاٹ ہے تو ، اس کو درست کریں ، ورنہ غلط۔

str.contains(source, str)

مثال

// If the current chart is a continuous futures chart, e.g “BTC1!”, then the function will return true, false otherwise.
var isFutures = str.contains(syminfo.tickerid, "!")
plot(isFutures ? 1 : 0)

واپس کی قدر اگرsourceسٹرنگ میں تلاش کریںstrتو یہ درست ہے، ورنہ غلط۔

پیرامیٹر

  • source(series string) ماخذ سٹرنگ
  • str(series string) تلاش کرنے کے لئے سب اسٹرنگ

مزید دیکھیے str.pos str.match

str.endswith

اگرsourceسٹرنگstrاگر آپ کے پاس ایک مخصوص ذیلی سٹرنگ ہے ، تو اس کا اختتام درست ہے ، ورنہ یہ غلط ہے۔

str.endswith(source, str)

واپس کی قدر اگرsourceسٹرنگstrاس کے بعد ، آپ کو اس کی وضاحت کرنے کی ضرورت ہے کہ اس میں موجود سب اسٹرنگ کا اختتام سچ ہے یا غلط

پیرامیٹر

  • source(series string) ماخذ سٹرنگ
  • str(series string) تلاش کرنے کے لئے سب اسٹرنگ

مزید دیکھیے str.startswith

str.startswith

اگرsourceسٹرنگstrاگر اسکرپٹ میں مخصوص ذیلی سٹرنگ شروع ہوتی ہے تو ، یہ سچ واپس آئے گا ، ورنہ یہ غلط واپس آئے گا۔

str.startswith(source, str)

واپس کی قدر اگرsourceسٹرنگstrاس میں مخصوص ذیلی سٹرنگ شروع ہوتی ہے تو یہ true ہے، ورنہ یہ false ہے۔

پیرامیٹر

  • source(series string) ماخذ سٹرنگ
  • str(series string) تلاش کرنے کے لئے سب اسٹرنگ

مزید دیکھیے str.endswith

str.substring

ایک نئی سٹرنگ، یہ ہےsourceسٹرنگ کے ذیلی سٹرنگ begin_posایک مخصوص انڈیکس میں ایک کردار کے ساتھ شروع ہوتا ہے اورsourceسٹرنگ کا ‘end_pos - 1’

str.substring(source, begin_pos)
str.substring(source, begin_pos, end_pos)

مثال

sym= "EXCHANGE_NAME:SYMBOL_NAME"
pos = str.pos(sym, ":")        // Get position of ":" character
tkr= str.substring(sym, pos+1) // "SYMBOL_NAME"
if barstate.islastconfirmedhistory
    runtime.log(tkr)

واپس کی قدر ماخذ سٹرنگ سے نکالی گئی ذیلی سٹرنگ

پیرامیٹر

  • source(series string) جس سے ذیلی سٹرنگ نکالنے کا ماخذ سٹرنگ。
  • begin_pos(series int) نکالی گئی سب اسٹرنگ کی ابتدائی پوزیشن。 یہ خصوصی ہے ((نکالی گئی سب اسٹرنگ میں اس پوزیشن کے حروف شامل ہیں)。
  • end_pos(series int) ختم ہونے کی پوزیشن。 یہ خصوصی ہے ((نکالے گئے سٹرنگ میں اس پوزیشن کے حروف شامل نہیں ہیں)。 اختیاری。 ڈیفالٹ ہےsourceسٹرنگ کی لمبائی

نوٹ سٹرنگ انڈیکس 0 سے شروع ہوتا ہے۔ اگرbegin_posبرابرend_pos، فنکشن ایک خالی سٹرنگ لوٹاتا ہے۔

مزید دیکھیے str.contains str.pos str.match

str.tonumber

str.tonumber(string)

واپس کی قدر اگر اس میں درست اعداد شامل ہوں تو اس کو فلوٹ ٹائپ کریں، ورنہ یہ na。

پیرامیٹر

  • string(series string) int یا float کی سٹرنگ نمائش فارم。

str.format

فارمیٹ سٹرنگ اور قدر کو فارمیٹ سٹرنگ میں تبدیل کریں۔ فارمیٹ سٹرنگ میں متن اور ہر فارمیٹ کی جانے والی قدر کے ل large بڑے قوسین میں {} کا ایک اشارہ ہوسکتا ہے۔ ہر اشارے میں ایک اشارے شامل ہوتا ہے جس میں اس کے مطلوبہ پیرامیٹرز کو تبدیل کیا جائے گا ((0 سے شروع ہوتا ہے) ، اور ایک اختیاری فارمیٹ اشارہ۔ اشاریہ اس پیرامیٹر کی جگہ کو str.format پیرامیٹرز کی فہرست میں ظاہر کرتا ہے۔

str.format(formatString, arg0, arg1, ...)

مثال

”`pine // The format specifier inside the curly braces accepts certain modifiers: // - Specify the number of decimals to display: s1 = str.format(“{0,number,#.#}”, 1.34) // returns: 1.3 runtime.log(s1)

// - Round a float value to an integer: s2 = str.format(“{0,number,integer}”, 1.34) // returns: 1 runtime.log(s2)

// - Display a number in currency: s3 = str.format(“{0,number,currency}”, 1.34) // returns: $1.34 runtime.log(s3)

// - Display a number as a percentage: s4 = str.format(“{0,number,percent}”, 0.5) // returns: 50% runtime.log(s4)

// EXAMPLES WITH SEVERAL ARGUMENTS // returns: Number 1 is not equal to 4 s5 = str.format(“Number {0} is not {1} to {2}”, 1, “equal”, 4) runtime.log(s5)

// returns: 1.34 != 1.3 s6 = str.format(“{0} != {0, number, #.#}”, 1.34) runtime.log(s6)

// returns: 1 is equal to 1, but 2 is equal to 2 s7 = str.format(“{0, number, integer} is equal to 1, but {1, number, integer} is equal to 2”, 1.34, 1.52) run