[TOC]
پائن میں عام ساخت کا کوڈ مندرجہ ذیل ہے:
<version>
<declaration_statement>
<code>
ایف ایم زیڈ کے پائن زبان کی حمایت کردہ نوٹ علامت: ایک سطر کے نوٹ//
، کثیر سطری نوٹ/* */
، جیسے کہ مندرجہ ذیل مثال میں نوٹس کا طریقہ:
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9) // calculate the MACD indicator
/*
The plot function draws the indicator line on the chart
*/
plot(macdLine, color = color.blue, title='macdLine')
plot(signalLine, color = color.orange, title='signalLine')
plot(histLine, color = color.red, title='histLine')
مندرجہ ذیل فارم کی ایک کمپائلر ہدایات کمپائلر کو بتاتی ہیں کہ پائن کا کون سا ورژن ہے جس کے ساتھ اسکرپٹ لکھا گیا تھا:
//@version=5
ڈیفالٹ V5 ورژن ہے، کوڈ سے خارج کر دیا جا سکتا ہے//@version=5
.
indicator()
strategy()
اعلان بیان اسکرپٹ کی قسم کا تعین کرتا ہے ، جس کے نتیجے میں اس میں کیا اجازت ہے ، اور اس کا استعمال اور عملدرآمد کیسے ہوتا ہے۔ اسکرپٹ کی کلیدی خصوصیات مرتب کریں ، جیسے اس کا نام ، جہاں یہ چارٹ میں شامل ہونے پر ظاہر ہوگا ، اس کی نمائش کرنے والی عددی اقدار کی درستگی اور شکل ، اور کچھ عددی اقدار جو اس کے رن ٹائم رویے پر حکمرانی کرتی ہیں ، مثال کے طور پر ، چارٹ میں ظاہر کرنے کے لئے ڈرائنگ آبجیکٹ کی زیادہ سے زیادہ تعداد۔ حکمت عملیوں کے لئے ، خصوصیات میں وہ دلائل شامل ہیں جو بیک ٹیسٹنگ کو کنٹرول کرتے ہیں ، جیسے ابتدائی سرمایہ ، کمیشن ، سلائپج ، وغیرہ۔ اس کی کوئی ضرورت نہیں ہے کہ ایکindicator()
یاstrategy()
اعلان کا بیان ایک حکمت عملی کوڈ میں شامل ہونا ضروری ہے FMZ کے پائن.
اسکرپٹ میں وہ لائنیں جو تبصرے یا کمپائلر کی ہدایات نہیں ہیں ، جو بیانات ہیں ، جو اسکرپٹ کے الگورتھم کو نافذ کرتے ہیں۔ بیان ان میں سے ایک مواد ہوسکتا ہے۔
if
, for
, while
یاswitch
اور دیگر تعمیراتبیانات کو مختلف طریقوں سے ترتیب دیا جا سکتا ہے
space
یاtab
(ٹیب کی) ۔ ان کا پہلا کردار لائن کا پہلا کردار بھی ہونا چاہئے۔ لائنوں کی پہلی پوزیشن سے شروع ہونے والی لائنیں تعریف کے مطابق اسکرپٹ کے عالمی دائرہ کار کا حصہ ہیں۔local block
ہمیشہ ساخت یا کثیر سطر فنکشن کے اعلانات کے لئے ضروری ہے۔ ایک مقامی بلاک کو ایک ٹیب یا چار خالی جگہوں سے انڈینٹ کرنا ضروری ہے (دوسرے معاملے میں ، اسے پچھلی سطر کے مربوط کوڈ کے طور پر تجزیہ کیا جائے گا ، جو کوڈ کی پچھلی سطر کا مستقل مواد ہے) ، اور ہر مقامی بلاک ایک مختلف مقامی دائرہ کار کی وضاحت کرتا ہے۔مثال کے طور پر، تین مقامی بلاکس شامل کریں، ایک اپنی مرضی کے مطابق فنکشن کے اعلان میں، اور دو متغیر کے اعلان میں اگر ساخت کا استعمال کرتے ہوئے، مندرجہ ذیل کے طور پر:
indicator("", "", true) // Declaration statement (global scope), can be omitted
barIsUp() => // Function declaration (global scope)
close > open // Local block (local scope)
plotColor = if barIsUp() // Variable declaration (global scope)
color.green // Local block (local scope)
else
color.red // Local block (local scope)
runtime.log("color", color = plotColor) // Call a built-in function to output the log (global scope)
لمبی لائنوں کو متعدد لائنوں میں تقسیم کیا جاسکتا ہے ، یا
a = open + high + low + close
یہ اس طرح لپیٹا جا سکتا ہے (نوٹ کریں کہ ہر سطر میں داخل ہونے والے خالی جگہوں کی تعداد 4 کا ضرب نہیں ہے):
a = open +
high +
low +
close
ایک طویل پلاٹ ((() کال کے طور پر لپیٹ کیا جا سکتا ہے:
close1 = request.security(syminfo.tickerid, "D", close) // closing price data series of syminfo.tickerid daily level of the current trading pair
close2 = request.security(syminfo.tickerid, "240", close) // closing price data series of syminfo.tickerid 240-minute level of the current trading pair
plot(ta.correlation(close, open, 100), // Line-long plot() calls can be wrapped
color = color.new(color.purple, 40),
style = plot.style_area,
trackprice = true)
صارف کے ذریعہ بیان کردہ فنکشن کے اعلانات میں بیانات کو بھی لپیٹا جاسکتا ہے۔ تاہم ، چونکہ مقامی بلاک کو نحو کے لحاظ سے ایک انڈینٹ (4 خالی جگہوں یا 1 ٹیب) سے شروع ہونا چاہئے ، لہذا جب اسے اگلی سطر پر تقسیم کیا جائے تو ، بیان کی تسلسل ایک سے زیادہ انڈینٹ (جو خالی جگہوں کے 4 گنا کے برابر نہیں) سے شروع ہونی چاہئے۔ مثال کے طور پر:
test(c, o) =>
ret = c > o ?
(c > o+5000 ?
1 :
0):
(c < o-5000 ?
-1 :
0)
a = test(close, open)
plot(a, title="a")
ٹائم سیریز ڈیٹا ٹائپ یا فارمیٹ نہیں ہے ، اس کے بجائے ، یہ پین زبان میں ایک بنیادی ڈھانچے کا تصور ہے۔ وقت میں مستقل طور پر تبدیل ہونے والی اقدار کو ذخیرہ کرنے کے لئے استعمال کیا جاتا ہے ، ہر قدر وقت کے ایک نقطہ سے مطابقت رکھتی ہے۔ ٹائم سیریز کے تصور کی ساخت وقت کے ساتھ ساتھ تبدیل ہونے والے اعداد و شمار کی ایک سیریز کو پروسیسنگ اور ریکارڈ کرنے کے لئے موزوں ہے۔
بلٹ ان متغیر لے لوopen
مثال کے طور پر،open
بلٹ ان متغیر ہر int نمائندگی BAR کی افتتاحی قیمت ریکارڈ، اگر یہopen
ایک 5 منٹ int نمائندگی مدت کے اعداد و شمار ہے.open
متغیر ہر 5 منٹ int نمائندگی BAR (بار) کی افتتاحی قیمت ریکارڈ کرتا ہے.open
کوڈ میں موجودہ int نمائندگی BAR کی افتتاحی قیمت سے مراد ہے۔ وقت کی سیریز میں پچھلی اقدار (ماضی کی اقدار) کا حوالہ دینے کے لئے ، ہم استعمال کرتے ہیں[]
تاریخ آپریٹر. جب حکمت عملی ایک مخصوص int نمائندگی BAR پر عملدرآمد کیا جاتا ہے،open[1]
معنی موجودہ int نمائندگی BAR کی پچھلی int نمائندگی BAR کی افتتاحی قیمت سے مراد ہے۔
اگرچہوقت کی سیریزاعداد و شمار کی ساخت
پائن زبان میں ڈیزائن وقت سیریز آسانی سے حکمت عملی کوڈ میں اختتامی قیمت کی مجموعی قیمت کا حساب کر سکتے ہیں، اور اس طرح کے لئے لوپ ڈھانچے کا استعمال کرنے کی کوئی ضرورت نہیں ہے، صرف بلٹ میں تقریبta.cum(close)
PINE زبان کا استعمال کیا جاتا ہے۔ ایک اور مثال کے طور پر ، ہمیں آخری 14 انٹ نمائندگی باروں (یعنی ، 14 انٹ نمائندگی باروں کو موجودہ لمحے کے قریب ترین) کی اعلی ترین قیمت اور کم ترین قیمت کے درمیان فرق کی اوسط قیمت کا حساب لگانے کی ضرورت ہے جب کوڈ عمل میں لایا جاتا ہے) ، جسے لکھا جاسکتا ہے:ta.sma(high - low, 14)
ایک وقت سیریز پر ایک تقریب کو کال کرنے کا نتیجہ بھی وقت سیریز پر ایک نشان چھوڑ جائے گا، ایک بار پھر ہم استعمال کرتے ہیں[]
سابقہ اقدار کا حوالہ دینے کے لئے تاریخ آپریٹر۔ مثال کے طور پر ، جب جانچ کرتے ہیں کہ آیا موجودہ انٹ نمائندگی BAR کی اختتامی قیمت آخری 10 انٹ نمائندگی BAR (موجودہ انٹ نمائندگی BAR کو چھوڑ کر) میں سب سے زیادہ قیمت کی زیادہ سے زیادہ قیمت سے تجاوز کرتی ہے۔ ہم لکھ سکتے ہیںbreach = close > ta.highest(close, 10)[1]
، اور ہم بھی لکھ سکتے ہیںbreach = close > ta.highest(close[1], 10)
تو.ta.highest(close, 10)[1]
اورta.highest(close[1], 10)
برابر ہیں.
یہ مندرجہ ذیل کوڈ کے ساتھ تصدیق کی جا سکتی ہے:
strategy("test pine", "test", true)
a = ta.highest(close, 10)[1]
b = ta.highest(close[1], 10)
plotchar(true, title="a", char=str.tostring(a), location=location.abovebar, color=color.red)
plotchar(true, title="b", char=str.tostring(b), location=location.belowbar, color=color.green)
مذکورہ بالا ٹیسٹ کوڈ متعلقہ ٹائم سیریز میں ہر BAR پر a اور b کی اقدار کو آؤٹ پٹ کرے گا۔ یہ دیکھا جاسکتا ہے کہ a اور b کی اقدار ہمیشہ برابر ہوتی ہیں ، لہذا یہ دونوں نمائندگی کے طریقے برابر ہیں۔
PINE حکمت عملی کے
Pricing Currency Precision
مثال کے طور پر ، قیمتوں کا تعین کرنسی کی درستگی 2 پر مقرر کی گئی ہے ، جو دوسرے اعشاریہ نقطہ تک درست ہے ، 0.01 تک درست ہے۔ پھر ہر نقطۂ جھکاو کے پوائنٹس 0.01 قیمتوں کا تعین کرنے والے یونٹوں کی نمائندگی کرتے ہیں۔ اس وقت ، جھکاو کا نقطہ 5 پر مقرر کیا جاتا ہے ، اور آرڈر دیتے وقت جھکاو 0.05 ہوتا ہے (جھکاو قیمت کے اس حصے سے مراد ہے جو بہتر اور معذور آرڈر کی تجارت کے لئے آرڈر دیتے وقت اوور فلو ہوتا ہے) ۔SetMaxBarLen
میںjavascript
srategy.strategy(title = "open long example", pyramiding = 3) // The number of orders placed in the same direction allowed by pyramiding
strategy.entry("long1", strategy.long, 0.01) // Open a long position at the market price, specify the group label as long1
strategy.entry("long2", strategy.long, 0.02, when = close > ta.ema(close, 10)) // The condition is triggered, the order is executed, and the market price opens a long position
strategy.entry("long3", strategy.long, 0.03, limit = 30000) // Specify the (lower) price, plan to place a buy order, wait for a deal to open a position, and open a position at a limit price
strategy(title = "close long example", pyramiding = 2) // The number of orders placed in the same direction allowed by pyramiding
strategy.entry("long1", strategy.long, 0.1) // Open a long position at the market price, specify the group label as long1
strategy.entry("long2", strategy.long, 0.1) // Open a long position at the market price, specify the group label as long2
strategy.close("long1", when = strategy.position_size > 0.1, qty_percent = 50, comment = "close buy entry for 50%") // To close a position, specify to close 50% of the positions whose group label is long1
strategy.close("long2", when = strategy.position_size > 0.1, qty_percent = 80, comment = "close buy entry for 80%") // To close a position, specify to close 80% of the positions whose group label is long2
PINE زبان کا پوزیشن میکانزم ایک طرفہ پوزیشن سے ملتا جلتا ہے۔ مثال کے طور پر ، لمبی سمت میں پوزیشن رکھتے وقت (لمبی پوزیشن) ، اگر فروخت کے آپریشن کا آرڈر ، منصوبہ بند آرڈر وغیرہ (پوزیشن کی مخالف سمت میں) ہے تو ، عمل درآمد شروع ہوجائے گا ، اور لمبی سمت میں پوزیشن پہلے بند ہوجائے گی۔ (تمام لمبی پوزیشنوں کو بند کریں) ، اور پھر ٹرگر شدہ آرڈر کو انجام دیں (بند سے پہلے کی پوزیشن کے مقابلے میں مخالف سمت میں) ۔
آرڈر کی جگہ کا حکم کا استعمال کرتے ہوئے ایک آرڈر کی جگہ جب، اگر کوئی قیمت مخصوص نہیں ہے، تو ڈیفالٹ ایک مارکیٹ آرڈر ہے. مارکیٹ آرڈر کے علاوہ، آپ کو بھی ایک منصوبہ بندی کے حکم کے ذریعے ایک آرڈر رکھ سکتے ہیں، جو فوری طور پر ایک آرڈر رکھنے کے لئے کام نہیں کرتا. منصوبہ بندی کے حکم پروگرام کے منصوبہ بندی کے حکم قطار میں موجود ہے جب یہ متحرک نہیں ہے، اور اس کے دوران حالت کی معلومات کی strategy.entry
ایک آرڈر رکھنے کے لئے تقریب، ہم وضاحت کر سکتے ہیںlimit
, stop
arguments.
var isTrade = false
if not barstate.ishistory and not isTrade
isTrade := true
strategy.entry("test 1", strategy.long, 0.1, stop=close*1.3, comment="test 1 order") // stop
strategy.entry("test 2", strategy.long, 0.2, limit=close*0.7, comment="test 2 order") // limit
strategy.entry("test 3", strategy.short, 0.3, stop=close*0.6, limit=close*1.4, comment="test 3 order") // stop-limit
حد آرڈر
آرڈر کی حد کی قیمت مقرر کریں. جب آرڈر ایک خرید آرڈر ہے (یعنی،direction
دلیل یہ ہےstrategy.long
) ، آرڈر صرف اس وقت شروع کیا جائے گا جب موجودہ مارکیٹ کی قیمت اس قیمت سے کم ہو۔
جب آرڈر ایک فروخت آرڈر ہے (یعنی،direction
دلیل یہ ہےstrategy.short
) ، آرڈر صرف اس صورت میں شروع کیا جائے گا جب موجودہ مارکیٹ کی قیمت اس قیمت سے زیادہ ہو.
روکنا
آرڈر کی سٹاپ نقصان کی قیمت مقرر کریں۔ جب آرڈر خریدنے کا آرڈر ہے تو ، آرڈر صرف اس وقت ٹرگر ہوگا جب موجودہ مارکیٹ کی قیمت اس قیمت سے زیادہ ہو۔ جب کوئی آرڈر فروخت کا آرڈر ہے تو ، آرڈر صرف اس صورت میں شروع کیا جائے گا جب مارکیٹ کی موجودہ قیمت اس قیمت سے کم ہو۔
سٹاپ لیمٹ آرڈر
کےlimit
اورstop
حربے ایک ہی وقت میں مقرر کیے جا سکتے ہیں، اور آرڈر اس قیمت پر شروع کیا جائے گا جو سب سے پہلے شرائط کو پورا کرتی ہے۔
//@version=5
strategy("Percent of Equity Order", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Simple moving average crossover strategy
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
// If the moving average crossover condition is met, buy or sell
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)
وضاحت کرنے کے بعدdefault_qty_type=strategy.percent_of_equity
، سیٹdefault_qty_value
ایک فیصد رقم (0 ~ 100) کے لئے ، 1 کا مطلب ہے 1٪۔ آرڈر کی مقدار کا حساب اکاؤنٹ میں موجود کرنسی کی رقم کے مطابق کیا جاتا ہے۔ مثال کے طور پر: اگر کرنٹ اکاؤنٹ میں 10،000 USDT ہے تو ، 1٪ آرڈر ترتیب دینے کا مطلب ہے 100 USDT کے پیمانے پر آرڈر (فروخت کے وقت موجودہ قیمت کی بنیاد پر حساب لگایا جاتا ہے) ۔
var ایک کلیدی لفظ ہے جو متغیرات کو مختص کرنے اور ایک بار شروع کرنے کے لئے استعمال ہوتا ہے۔
عام طور پر ، متغیر تفویض گرائمر جس میں کلیدی لفظ var شامل نہیں ہوتا ہے اس کی وجہ سے ہر بار جب ڈیٹا کو اپ ڈیٹ کیا جاتا ہے تو متغیر
var variable_name = expression
وضاحت:
variable_name
- پائن اسکرپٹ میں صارف متغیر کا کوئی بھی نام قابل اجازت ہے (اس میں بڑے اور چھوٹے لاطینی حروف ، نمبر اور underscores (_) شامل ہوسکتے ہیں ، لیکن یہ ایک نمبر سے شروع نہیں ہوسکتا ہے) ۔expression
- کسی بھی ریاضیاتی اظہار، صرف ایک باقاعدہ متغیر کی وضاحت کی طرح. اظہار کا جائزہ لیا جائے گا اور ایک بار متغیر کے لئے تفویض کیا جائے گا.مثال
// Var keyword example
var a = close
var b = 0.0
var c = 0.0
var green_bars_count = 0
if close > open
var x = close
b := x
green_bars_count := green_bars_count + 1
if green_bars_count >= 10
var y = close
c := y
plot(a, title = "a")
plot(b, title = "b")
plot(c, title = "c")
متغیر
ایف ایم زیڈ پر ، اسے ریئل ٹائم پرائس ماڈل اور کلوزنگ پرائس ماڈل میں تقسیم کیا گیا ہے۔ ہم مندرجہ ذیل کوڈ کا استعمال کرتے ہوئے متغیرات کی جانچ کرتے ہیں جن کی طرف سے اعلان کیا جاتا ہے۔var
اورvarip
.
strategy("test pine", "test 1", true)
// Test var varip
var i = 0
varip ii = 0
// Print the i and ii changed in each round of the strategy logic on the graph
plotchar(true, title="ii", char=str.tostring(ii), location=location.abovebar, color=color.red)
plotchar(true, title="i", char=str.tostring(i), location=location.belowbar, color=color.green)
// Each round of logic execution increments i and ii by 1
if true
i := i + 1
ii := ii + 1
ریئل ٹائم قیمت ماڈل
مندرجہ بالا ٹیسٹ کوڈ دو مراحل میں عملدرآمد کیا جاتا ہے: 1. تاریخی int نمائندگی کا مرحلہ۔ 2. ریئل ٹائم int نمائندگی کا مرحلہ۔ ریئل ٹائم قیمت ماڈل میں ، تاریخی int نمائندگی کا مرحلہ ، متغیر i اور ii کے ذریعہ اعلان کیا گیا ہے۔var
, varip
حکمت عملی کوڈ کے عملدرآمد کے ہر راؤنڈ میں incrementally پر عملدرآمد کر رہے ہیں (کیونکہif true
لہذا ، یہ دیکھا جاسکتا ہے کہ بیک ٹیسٹ کے نتیجے کی int نمائندگی BAR پر دکھائے جانے والے اعداد کو ایک ایک کرکے 1 سے بڑھایا جاتا ہے۔ جب تاریخی int نمائندگی کا مرحلہ ختم ہوجاتا ہے تو ، ریئل ٹائم int نمائندگی کا مرحلہ شروع ہوتا ہے۔var
, varip
اعلان شدہ متغیرات مختلف طریقے سے تبدیل ہونا شروع ہوجاتے ہیں۔ کیونکہ یہ ایک حقیقی وقت کی قیمت کا ماڈل ہے ، لہذا حکمت عملی کا کوڈ ایک بار انٹ نمائندگی BAR میں ہر قیمت میں تبدیلی کے لئے ایک بار انجام دیا جائے گا ،i := i + 1
اورii := ii + 1
ایک بار عملدرآمد کیا جائے گا۔ فرق یہ ہے کہ ii ہر بار ترمیم کی جاتی ہے۔ اگرچہ i کو بھی ہر بار ترمیم کی جاتی ہے ، لیکن جب اگلے راؤنڈ میں حکمت عملی کی منطق عمل میں لائی جاتی ہے تو پچھلی قیمت بحال ہوجائے گی ، اور جب تک موجودہ انٹ نمائندگی BAR مکمل نہیں ہوجاتی (یعنی ، اگلے راؤنڈ میں حکمت عملی کی منطق عمل میں لائی جاتی ہے تو پچھلی قیمت بحال نہیں ہوگی) تک i کی قدر کو اپ ڈیٹ نہیں کیا جائے گا۔ لہذا یہ دیکھا جاسکتا ہے کہ متغیر i ہر بار کے لئے 1 سے بڑھتا ہے۔ لیکن متغیر ii ہر بار کے لئے کئی بار جمع ہوتا ہے۔
اختتامی قیمت کا ماڈل
چونکہ اختتامی قیمت ماڈل حکمت عملی منطق صرف ایک بار فی int نمائندگی بار چلا جاتا ہے پر عملدرآمد کرتا ہے. لہذا متغیرات کی طرف سے اعلان کیا جاتا ہےvar
اورvarip
مندرجہ بالا مثال میں مکمل طور پر ایک ہی عمل کو بند کرنے کی قیمت کے ماڈل میں، دونوں تاریخی int نمائندگی مرحلے میں اور حقیقی وقت int نمائندگی مرحلے میں، 1 فی int نمائندگی BAR کی طرف سے اضافہ.
varp (var intrabar persist) ایک کلیدی لفظ ہے جو متغیرات کو تفویض کرنے اور ایک بار شروع کرنے کے لئے استعمال ہوتا ہے۔ یہ var کلیدی لفظ سے ملتا جلتا ہے ، لیکن varip کے ساتھ اعلان کردہ متغیر لائو موم بتی کی تازہ کاریوں کے درمیان اپنی قدر برقرار رکھتا ہے۔
varip variable_name = expression
وضاحت:
variable_name
- پائن اسکرپٹ میں صارف متغیر کا کوئی بھی نام قابل اجازت ہے (اس میں بڑے اور چھوٹے حرفی لاطینی حروف ، نمبر ، اور underscores (_) شامل ہوسکتے ہیں ، لیکن یہ ایک نمبر سے شروع نہیں ہوسکتا ہے) ۔expression
- کوئی بھی ریاضیاتی اظہار، جیسے باقاعدہ متغیرات کی وضاحت کرنے کا وقت۔ پہلی K لائن بار پر، اظہار کا اندازہ لگایا جاتا ہے اور متغیر کو صرف ایک بار تفویض کیا جاتا ہے۔مثال
// varip
varip int v = -1
v := v + 1
plot(v)
var استعمال کرتے وقت ، پلاٹ bar_index کی قدر واپس کرے گا۔ varip کے ساتھ ، وہی رویہ تاریخی سلاخوں پر ہوتا ہے ، لیکن زندہ سلاخوں پر ، چارٹ ایک ایسی قیمت واپس کرتا ہے جو ہر ٹک کے لئے ایک بڑھتی ہے۔
تبصرےیہ صرف سادہ اقسام جیسے فلوٹ، int، bool، string، اور ان اقسام کی صفوں کے ساتھ استعمال کیا جا سکتا ہے.
یہ ایک بول متغیر کی قدر کی نمائندگی کرتا ہے، یا ایک قدر ہے کہ ایک اظہار کا استعمال کرتا ہے جب شمار کیا جا سکتا ہےموازنہیامنطقی operator.
تبصرےبرائے مہربانی اس کی تفصیلات ملاحظہ کریںموازنہآپریٹرز اورمنطقی Operators.
یہ بھی ملاحظہ کریں
bool
یہ ایک بول متغیر کی قدر اور موازنہ آپریشنز اور منطقی آپریشنز کا نتیجہ پیش کرتا ہے۔
تبصرےبرائے مہربانی اس کی تفصیلات ملاحظہ کریںموازنہآپریٹرز اورمنطقی Operators.
یہ بھی ملاحظہ کریں
bool
ایک اگر بیان بیانات کا ایک بلاک بیان کرتا ہے جو ایک اظہار کی شرط پوری ہونے پر عملدرآمد ہونا ضروری ہے۔ پائن اسکرپٹ زبان کا ورژن 4 آپ کو
یونیورسل کوڈ:
var_declarationX = if condition
var_decl_then0
var_decl_then1
...
var_decl_thenN
return_expression_then
else if [optional block]
var_decl_else0
var_decl_else1
...
var_decl_elseN
return_expression_else
else
var_decl_else0
var_decl_else1
...
var_decl_elseN
return_expression_else
تبصرے
var_declarationX
- یہ متغیر اگر بیان کی قدر حاصل کرتا ہےcondition
- شرط سچ ہے تو، بیان بلاک میں منطقthen
استعمال کیا جاتا ہے (var_decl_then0
, var_decl_then1
، وغیرہ) ۔ اگر شرط غلط ہے تو، بیان بلاک میں منطقelse if
یاelse
استعمال کیا جاتا ہے (var_decl_else0
, var_decl_else1
، وغیرہ).return_expression_then
اورreturn_expression_else
- ماڈیول میں آخری اظہار یا بلاک سے اظہار دوسری صورت میں بیان کی حتمی قیمت واپس کرتا ہے۔ اگر متغیر کو آخری اعلان کیا گیا تھا تو ، اس کی قیمت نتیجہ کی قیمت ہوگی۔
اگر بیان کی واپسی قدر کی قسم کی قسم پر منحصر ہےreturn_expression_then
اورreturn_expression_else
. ٹریڈنگ ویو پر چلتے وقت ، ان کی اقسام کو مماثل ہونا ضروری ہے: جب آپ کے پاس else بلاک میں ایک سٹرنگ ویلیو ہوتا ہے تو ، اس وقت کے بلاک سے عددی قدر واپس کرنا ممکن نہیں ہوتا ہے۔ جب FMZ پر چلتا ہے تو ، مندرجہ ذیل مثال غلطی کی اطلاع نہیں دے گی۔ جب y ویلیو
مثال
// This code compiles
x = if close > open
close
else
open
// This code doesn't compile by trading view
// y = if close > open
// close
// else
// "open"
plot(x)
کےelse
بلاک کو نظر انداز کیا جاسکتا ہے۔ اس معاملے میں ، اگر شرط غلط ہے تو ، var_declarationX متغیر کو
مثال
// if
x = if close > open
close
// If current close > current open, then x = close.
// Otherwise the x = na.
plot(x)
متعدد
مثال
// if
x = if open > close
5
else if high > low
close
else
open
plot(x)
کے نتائج کی قدرif
بیان کو نظر انداز کیا جاسکتا ہے (
مثال
if (ta.crossover(high, low))
strategy.entry("BBandLE", strategy.long, stop=low)
else
strategy.cancel(id="BBandLE")
اگر احکامات میں ایک دوسرے کو شامل کیا جا سکتا ہے:
مثال
// if
float x = na
if close > open
if close > close[1]
x := close
else
x := close[1]
else
x := open
plot(x)
[var_declaration =] for counter = from_num to to_num [by step_num]
statements | continue | break
return_expression
var_declaration
- ایک اختیاری متغیر اعلامیہ جو لوپ counter
- ایک متغیر جو لوپ کاؤنٹر ویلیو رکھتا ہے ، لوپ کی ہر تکرار پر 1 یا step_num ویلیو میں اضافہ / کمی کرتا ہے۔from_num
to_num
- کاؤنٹر کی حتمی قیمت۔ لوپ تب ٹوٹ جاتا ہے جب کاؤنٹر to_num سے بڑا ہوتا ہے (یا to_num سے کم ہوتا ہے) ۔ step_num
- کاؤنٹر کی اضافہ / کمی کی قیمت۔ یہ اختیاری ہے۔ ڈیفالٹ +1 یا -1 ہے ، اس پر منحصر ہے کہ from_num یا to_num میں سے کون سا بڑا ہے۔ اقدار کا استعمال کرتے وقت ، کاؤنٹر بھی from_num یا to_num کے سب سے بڑے کے مطابق اضافہ / کمی کی جاتی ہے ، لہذا step_num کا +/- نشان اختیاری ہے۔statements | continue | break
- کسی بھی تعداد کے بیانات، یا return_expression
- لوپ کی واپسی کی قیمت ، اگر موجود ہے تو ، var_declaration میں متغیر کو تفویض کی جاتی ہے۔ اگر لوپ continue
ایک کلیدی لفظ جو صرف لوپ میں استعمال کیا جا سکتا ہے۔ یہ لوپ کی اگلی تکرار کو انجام دینے کا سبب بنتا ہے۔break
- چپس سے باہر نکلنے کے لئے کلیدی لفظ.
مثال
// Here, we count the quantity of bars in a given 'lookback' length which closed above the current bar's close
qtyOfHigherCloses(lookback) =>
int result = 0
for i = 1 to lookback
if close[i] > close
result += 1
result
plot(qtyOfHigherCloses(14))
یہ بھی ملاحظہ کریں
for...in
while
کےfor...in
construct صف میں ہر عنصر کے لئے متعدد بیانات کو دہرانے کی اجازت دیتا ہے۔ یہ کسی بھی دلیل کے ساتھ استعمال کیا جاسکتا ہے:array_element
، یا دو دلائل کے ساتھ:[index, array_element]
دوسری شکل لوپ کے فنکشن کو متاثر نہیں کرتی ہے۔ یہ ٹپل کے پہلے متغیر میں موجودہ تکرار کے انڈیکس کا سراغ لگاتی ہے۔
[var_declaration =] for array_element in array_id
statements | continue | break
return_expression
[var_declaration =] for [index, array_element] in array_id
statements | continue | break
return_expression
var_declaration
- ایک اختیاری متغیر کا اعلان جس میں لوپ کی قدر تفویض کی جائے گیreturn_expression
.
index
- ایک اختیاری متغیر جو موجودہ تکرار انڈیکس کا سراغ لگاتا ہے۔ انڈیکس 0 سے شروع ہوتا ہے۔ لوپ کے جسم کے اندر متغیرات غیر متغیر ہیں۔ جب استعمال کیا جاتا ہے تو اسے ایک ٹپل میں شامل ہونا چاہئے جس میں بھی شامل ہوarray_element
.
array_element
- ایک متغیر جس میں ہر ایک مسلسل صف عنصر شامل ہوتا ہے جسے لوپ میں پروسیس کیا جائے گا۔ یہ متغیر لوپ جسم کے اندر غیر متغیر ہے۔array_id
- لوپ تکرار کی صف ID.statements | continue | break
- کسی بھی تعداد کے بیانات، یا return_expression
- لوپ کی واپسی کی قیمت میں متغیر کو تفویض کیا جاتا ہےvar_declaration
اگر لوپ continue
ایک کلیدی لفظ جو صرف لوپ میں استعمال کیا جا سکتا ہے۔ یہ لوپ کی اگلی تکرار کو انجام دینے کا سبب بنتا ہے۔break
- چپس سے باہر نکلنے کے لئے کلیدی لفظ.
کسی صف کے عناصر یا ان کے سائز کو لوپ کے اندر تبدیل کرنے کی اجازت دیتا ہے۔
یہاں، ہم ایک دلیل کی شکل کا استعمال کرتے ہیںfor...in
ہر بار کے لیے یہ معلوم کرنے کے لیے کہ کتنے باروں کی OHLC قدر
مثال
// Here we determine on each bar how many of the bar's OHLC values are greater than the SMA of 'close' values
float[ ] ohlcValues = array.from(open, high, low, close)
qtyGreaterThan(value, array) =>
int result = 0
for currentElement in array
if currentElement > value
result += 1
result
plot(qtyGreaterThan(ta.sma(close, 20), ohlcValues))
یہاں، ہم اپنے اقدار کو مقرر کرنے کے لئے دو دلائل کی شکل کا استعمال کرتے ہیں.isPos
کرنے کے لئے صفtrue
جب ان کے مساوی اقدار میں ہمارےvaluesArray
صف مثبت ہیں:
مثال
// for...in
var valuesArray = array.from(4, -8, 11, 78, -16, 34, 7, 99, 0, 55)
var isPos = array.new_bool(10, false)
for [index, value] in valuesArray
if value > 0
array.set(isPos, index, true)
if barstate.islastconfirmedhistory
runtime.log(str.tostring(isPos))
یہ بھی ملاحظہ کریں
for
while
array.sum
array.min
array.max
کےwhile
بیان مقامی کوڈ بلاکس کی مشروط تکرار کی اجازت دیتا ہے.
variable_declaration = while boolean_expression
...
continue
...
break
...
return_expression
وضاحت:variable_declaration
- اختیاری متغیر اعلان.return expression
اس متغیر کے لئے ایک initialization قدر فراہم کر سکتے ہیں.boolean_expression
- اگر سچ ہے تو، مقامی بلاک کو چلائیںwhile
اگر غلط ہے، اسکرپٹ عملدرآمد کے بعد جاری ہےwhile
statement.
continue
- اسcontinue
مطلوبہ الفاظ کی وجہ سے لوپ اگلے تکرار میں شاخ.break
- اسbreak
مطلوبہ الفاظ لوپ کو ختم کرنے کا سبب بنتا ہے. اسکرپٹ کے عمل کے بعد دوبارہ شروع ہوتا ہےwhile
statement.
return_expression
- اختیاری لائن جس میں واپسی کی قیمت فراہم کی جاتی ہےwhile
statement.
مثال
// This is a simple example of calculating a factorial using a while loop.
int i_n = input.int(10, "Factorial Size", minval=0)
int counter = i_n
int factorial = 1
while counter > 0
factorial := factorial * counter
counter := counter - 1
plot(factorial)
تبصرےابتدائی کے بعد مقامی کوڈ بلاکwhile
لائن چار خالی جگہوں یا ایک ٹیب کی طرف سے داخل ہونا ضروری ہے.while
لوپ، مندرجہ ذیل بولین اظہارwhile
بالآخر غلط ہو جانا چاہیے، یاbreak
پر عملدرآمد کیا جانا چاہئے.
سوئچ آپریٹر اشارے کی حالت اور قدر کی بنیاد پر کنٹرول کو کئی بیانات میں سے ایک میں منتقل کرتا ہے۔
[variable_declaration = ] switch expression
value1 => local_block
value2 => local_block
...
=> default_local_block
[variable_declaration = ] switch
boolean_expression1 => local_block
boolean_expression2 => local_block
...
=> default_local_block
اظہار کے ساتھ سوئچ کریں:
مثال
// Switch using an expression
string i_maType = input.string("EMA", "MA type", options = ["EMA", "SMA", "RMA", "WMA"])
float ma = switch i_maType
"EMA" => ta.ema(close, 10)
"SMA" => ta.sma(close, 10)
"RMA" => ta.rma(close, 10)
// Default used when the three first cases do not match.
=> ta.wma(close, 10)
plot(ma)
اظہار کے بغیر سوئچ کریں:
مثال
strategy("Switch without an expression", overlay = true)
bool longCondition = ta.crossover( ta.sma(close, 14), ta.sma(close, 28))
bool shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
switch
longCondition => strategy.entry("Long ID", strategy.long)
shortCondition => strategy.entry("Short ID", strategy.short)
واپسیعملدرآمد شدہ مقامی بیان بلاک میں آخری اظہار کی قدر.
تبصرےصرف ایکlocal_block
واقعات یاdefault_local_block
کیا جا سکتا ہے.default_local_block
صرف کے ساتھ متعارف کرایا جاتا ہے=>
ٹیگ، اور صرف اس صورت میں عملدرآمد کیا جاتا ہے اگر پچھلے بلاک کو عملدرآمد نہیں کیا جاتا ہے.switch
بیان ایک متغیر کو تفویض کیا جاتا ہے اورdefault_local_block
وضاحت نہیں کی گئی ہے تو، بیان واپس آتا ہےna
اگرlocal_block
عملدرآمد نہیں کیا جاتا ہے.switch
ایک متغیر کے لئے بیان، تمامlocal_block
مثالیں ایک ہی قسم کی قدر واپس کرنا ضروری ہے.
یہ بھی ملاحظہ کریں
if
?:
سیریز ایک کلیدی لفظ ہے جو ڈیٹا سیریز کی قسم کی نشاندہی کرتا ہے۔ عام طور پر واضح طور پر استعمال کرنے کی ضرورت نہیں ہےseries
keyword.
متغیرات کو اقدار تفویض کرنے کے لئے استعمال کیا جاتا ہے، لیکن صرف جب متغیر اعلان کیا جاتا ہے (پہلی بار استعمال کیا جاتا ہے).
تفویض آپریٹر بائیں جانب متغیر کو قدر تفویض کرتا ہے۔ پہلے سے اعلان شدہ متغیرات کو اقدار تفویض کرنے کے لئے استعمال کیا جاتا ہے۔
کے برابر نہیں ہے۔ کسی بھی قسم کے اظہار پر لاگو ہوتا ہے۔
expr1 != expr2
واپسیبولین ویلیو، یا بولین ویلیوز کا ایک سلسلہ
ماڈیولو (انتہائی باقی) ۔ عددی اظہار پر لاگو ہوتا ہے۔
expr1 % expr2
واپسیعدد یا فلوٹ ویلیو، یا اقدار کی سیریز۔
تبصرےپائن اسکرپٹ میں ، جب عددی باقی کا حساب لگایا جاتا ہے تو ، ضارب کو کاٹ دیا جاتا ہے ، یعنی کم سے کم مطلق قدر کی طرف راؤنڈ کیا جاتا ہے۔ اس کے نتیجے میں آنے والی قیمت کا نشان تقسیم کے برابر ہوگا۔
مثال: -1٪ 9 = -1 - 9 * ٹرنکیٹ(-1/9) = -1 - 9 * ٹرنکیٹ(-0.111) = -1 - 9 * 0 = -1.
ماڈیولو تفویض۔ عددی اظہار پر لاگو ہوتا ہے۔
expr1 %= expr2
مثال
// Equals to expr1 = expr1 % expr2.
a = 3
b = 3
a %= b
// Result: a = 0.
plot(a)
واپسیعدد یا فلوٹ ویلیو، یا اقدار کی سیریز۔
ضرب تفویض۔ عددی اظہار پر لاگو ہوتا ہے۔
expr1 * expr2
واپسیعدد یا فلوٹ ویلیو، یا اقدار کی سیریز۔
ضرب تفویض۔ عددی اظہار پر لاگو ہوتا ہے۔
expr1 *= expr2
مثال
// Equals to expr1 = expr1 * expr2.
a = 2
b = 3
a *= b
// Result: a = 6.
plot(a)
واپسیعدد یا فلوٹ ویلیو، یا اقدار کی سیریز۔
جمع یا یونری پلس۔ عددی اظہار یا تاروں پر لاگو ہوتا ہے۔
expr1 + expr2
+ expr
واپسیبائنری+
کی سٹرنگ expr1 اور expr2 کا مجموعہ واپس کرتا ہے
نمبر ایک عدد یا فلوٹنگ پوائنٹ ویلیو، یا اقدار کا ایک سلسلہ لوٹاتا ہے:
بائنری
تبصرےآپ ریاضیاتی آپریٹرز کو اعداد کے ساتھ ساتھ سیریز متغیرات کے ساتھ بھی استعمال کرسکتے ہیں۔ سیریز کے ساتھ استعمال کی صورت میں آپریٹرز کو عنصر کے لحاظ سے لاگو کیا جاتا ہے۔
اضافی تفویض۔ عددی اظہار یا تاروں پر لاگو ہوتا ہے۔
expr1 += expr2
مثال
// Equals to expr1 = expr1 + expr2.
a = 2
b = 3
a += b
// Result: a = 5.
plot(a)
واپسیتاروں کے لئے، expr1 اور expr2 کے concatenation لوٹاتا ہے. اعداد کے لئے، ایک عدد یا فلوٹ قدر، یا اقدار کی سیریز لوٹاتا ہے.
تبصرےآپ ریاضیاتی آپریٹرز کو اعداد کے ساتھ ساتھ سیریز متغیرات کے ساتھ بھی استعمال کرسکتے ہیں۔ سیریز کے ساتھ استعمال کی صورت میں آپریٹرز کو عنصر کے لحاظ سے لاگو کیا جاتا ہے۔
گھٹاؤ یا یونری مائنس۔ عددی اظہار پر لاگو ہوتا ہے۔
expr1 - expr2
- expr
واپسیایک عدد یا فلوٹنگ پوائنٹ ویلیو، یا اقدار کی سیریز لوٹاتا ہے:
بائنری -
expr کی منفی واپس کرتا ہے.
تبصرےآپ ریاضیاتی آپریٹرز کو اعداد کے ساتھ ساتھ سیریز متغیرات کے ساتھ بھی استعمال کرسکتے ہیں۔ سیریز کے ساتھ استعمال کی صورت میں ، آپریٹرز کو عنصر کے لحاظ سے لاگو کیا جاتا ہے۔
گھٹاؤ تفویض۔ عددی اظہار پر لاگو ہوتا ہے۔
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
statements.
فنکشن ڈیکلیریشن گرائمر یہ ہے:
<identifier>([<argument_name>[=<default_value>]], ...) =>
<local_block>
<function_result>
اے<local_block>
صفر یا اس سے زیادہ پائن اسکرپٹ بیانات ہے.<function_result>
ایک متغیر، ایک اظہار، یا ایک tuple ہے.
مثال
// 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)
واپسیexpr2 اگر expr1 کا اندازہ درست ہے تو ، expr3 دوسری صورت میں۔ صفر کی قیمت (0 اور NaN ، + لامحدود ، - لامحدود) غلط سمجھا جاتا ہے ، کوئی اور قدر درست ہے۔
تبصرےاگر آپ کو اس کی ضرورت نہیں ہے تو
یہ بھی ملاحظہ کریں
na
سیریز سبسکرپٹ۔ سیریز expr1 کی پچھلی اقدار تک رسائی فراہم کرتا ہے۔ expr2 ماضی میں سلاخوں کی تعداد ہے ، اور یہ عددی ہونا ضروری ہے۔ فلوٹ کو نیچے کی طرف گول کیا جائے گا۔
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
منطقی اور. بولین اظہار پر لاگو.
expr1 and expr2
واپسیبولین ویلیو، یا بولین ویلیو کی سیریز۔
منطقی OR۔ بولین اظہار پر لاگو ہوتا ہے۔
expr1 or expr2
واپسیبولین ویلیو، یا بولین ویلیو کی سیریز۔
منطقی رد (NOT) ۔ بولین اظہار پر لاگو ہوتا ہے۔
not expr1
واپسیبولین ویلیو، یا بولین ویلیو کی سیریز۔
مطلوبہ الفاظ کا استعمال متغیر یا دلیل کی
مثال
// 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 i = 14 // Same as `i = 14`
i := na
plot(i)
تبصرےمتغیر اعلامیے میں قسم کا واضح طور پر ذکر کرنا اختیاری ہے ، سوائے اس کے کہ جب یہ na کے ساتھ شروع کیا جاتا ہے۔ قسم کے نظام پر صارف دستی صفحے میں پائن اسکرپٹ کی اقسام کے بارے میں مزید معلومات حاصل کریں۔
یہ بھی ملاحظہ کریں
var
varip
float
bool
color
string
مطلوبہ الفاظ کا استعمال متغیر یا دلیل کی
مثال
// float
float f = 3.14 // Same as `f = 3.14`
f := na
plot(f)
تبصرےمتغیر اعلان میں واضح طور پر قسم کا ذکر اختیاری ہے ، سوائے اس کے کہ جب اسے na کے ساتھ شروع کیا جائے۔
یہ بھی ملاحظہ کریں
var
varip
int
bool
color
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 textColor = color.green
if barstate.islastconfirmedhistory
runtime.log("test", textcolor = textColor)
تبصرےرنگین لٹریلز کی شکل مندرجہ ذیل ہے: # آر آر جی جی بی بی یا # آر آر جی جی بی اے اے۔ حروف کے جوڑے 00 سے ایف ایف تک ہیکساڈیسمل اقدار (0 سے 255 تک اعشاریہ میں) کی نمائندگی کرتے ہیں جہاں آر آر ، جی جی اور بی بی جوڑے رنگ
متغیر اعلامیے میں قسم کا واضح طور پر ذکر کرنا اختیاری ہے ، سوائے اس کے کہ جب یہ na کے ساتھ شروع کیا جاتا ہے۔ قسم کے نظام پر صارف دستی صفحے میں پائن اسکرپٹ کی اقسام کے بارے میں مزید معلومات حاصل کریں۔
یہ بھی ملاحظہ کریں
var
varip
int
float
string
color.rgb
color.new
مطلوبہ الفاظ کا استعمال متغیر یا دلیل کی array.new<type>
, array.from
function.
مثال
// array
array<float> a = na
a := array.new<float>(1, close)
plot(array.get(a, 0))
تبصرےصف اشیاء ہمیشہ
یہ بھی ملاحظہ کریں
var
array.new
array.from
PINE زبان میں اشیاء صارف کی وضاحت کردہ اقسام (UDTs) کی مثالیں ہیں ، جنہیں غیر طریقہ کار کلاسوں کے طور پر سمجھا جاسکتا ہے جو صارفین کو کسی ادارے میں مختلف اقدار کو منظم کرنے کے لئے حکمت عملیوں میں کسٹم اقسام بنانے کی اجازت دیتے ہیں۔
اقسام کی وضاحت
آئیے آرڈر کی معلومات کو ذخیرہ کرنے کے لئے آرڈر کی قسم کی وضاحت کریں:
type order
float price
float amount
string symbol
type
keyword.اشیاء کی تخلیق
اعلان کردہ قسم کا استعمال کرتے ہوئے، کال کریں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) // Output {"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.index ہر تکرار میں پہلے سیٹ کردہ قدر کو برقرار رکھے گا ، جبکہ currentBar.index کو ہر تکرار میں موجودہ اندراج کی bar_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)
پائن میں ، varip مطلوبہ الفاظ کا استعمال اس بات کی نشاندہی کرنے کے لئے کیا جاتا ہے کہ اسکرپٹ کے عملدرآمد کے دوران کسی آبجیکٹ کے فیلڈز برقرار رہتے ہیں اور غیر تصدیق شدہ سلاخوں پر واپس نہیں جاتے ہیں۔ کاؤنٹر کی قسم کے اعلان میں ، بارس فیلڈ varip مطلوبہ الفاظ کا استعمال نہیں کرتا ہے ، لہذا یہ ہر غیر تصدیق شدہ بار پر واپس چلتا ہے۔ ٹکس فیلڈ varip مطلوبہ الفاظ کا استعمال کرتا ہے ، لہذا یہ غیر تصدیق شدہ باروں پر واپس نہیں چلتا ہے۔ کاؤنٹر آبجیکٹ var مطلوبہ الفاظ کا استعمال کرتے ہوئے اعلان کیا جاتا ہے ، لہذا یہ اسکرپٹ کے عملدرآمد کے دوران برقرار رہتا ہے۔ ہر تکرار میں ، بار فیلڈ اور ٹکس فیلڈ دونوں میں 1 کا اضافہ ہوتا ہے۔ بار فیلڈ ہر غیر تصدیق شدہ بار پر واپس چلتا ہے ، جبکہ ٹکس فیلڈ واپس نہیں چلتا ہے۔ آخر میں ، counter.bars اور counter.ticks فیلڈز کو پلاٹ کرکے ، آپ ان کے مابین فرق کا موازنہ کرسکتے ہیں۔ counter.bars کی قدر ہر غیر تصدیق شدہ بار پر واپس چلتی ہے ، جبکہ counter.ticks کی قدر اسکرپٹ کے عمل درآمد کے اختتام تک بڑھتی رہتی ہے۔
بھیک مانگنے والاکیوں حکمت عملی اسکوائر کاپی پائن کی حکمت عملی نہیں کر سکتے ہیں
ایجاد کاروں کی مقدار - خواباچھا، ہم چیک کریں گے۔
بھیک مانگنے والاچانگ سپر ڈائیونگ کا اصلاح شدہ رجحان ٹریکر
ایجاد کاروں کی مقدار - خوابہیلو ، براہ کرم بتائیں کہ آپ کی حکمت عملی کیا ہے؟