[TOC]
پائن میں کوڈ کی عمومی ساخت مندرجہ ذیل ہے:
<version>
<declaration_statement>
<code>
ایف ایم زیڈ میں پائن زبان کی حمایت کے لئے نوٹ: ایک لائن نوٹ//
کثیر سطر تبصرہ/* */
مثال کے طور پر، ذیل میں مثال کے طور پر تبصرے لکھتے ہیں:
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9) // 计算MACD指标
/*
plot函数在图表上画出指标线
*/
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()
بیان بیان:
اسکرپٹ میں جو لائن تبصرہ یا کمپلیٹر ہدایات نہیں ہے وہ بیانات ہیں ، جو اسکرپٹ کے الگورتھم کو نافذ کرتی ہیں۔ ایک بیان ان میں سے ایک ہوسکتا ہے۔
if
,for
,while
یاswitch
ہم آہنگی کی ساختجملوں کو کئی طرح سے ترتیب دیا جا سکتا ہے
空格
یا制表符
(ٹیب بٹن) شروع کریں۔ ان کا پہلا حرف بھی اس لائن کا پہلا حرف ہونا چاہیے۔ لائنوں میں پہلی پوزیشن پر شروع ہونے والی لائنیں ، تعریف کے مطابق اسکرپٹ کی عالمی حدود کا حصہ بن جاتی ہیں۔local block
ایک مقامی بلاک کو ایک میٹرک یا چار خالی جگہوں میں سکریپ کرنا ہوگا (بغیر اس کے ، اس کو پچھلی لائن کے سلسلہ وار کوڈ کے طور پر تجزیہ کیا جائے گا ، یعنی اس کو پچھلی لائن کے کوڈ کا تسلسل سمجھا جائے گا) ، ہر مقامی بلاک ایک مختلف مقامی دائرہ کار کی وضاحت کرتا ہے۔مثال کے طور پر، تین مقامی بلاکس پر مشتمل ہے، ایک اپنی مرضی کے مطابق فنکشن کے بیان میں، دو متغیر کے بیان میں if ڈھانچے کا استعمال کرتے ہوئے، مندرجہ ذیل کوڈ:
indicator("", "", true) // 声明语句(全局范围),可以省略不写
barIsUp() => // 函数声明(全局范围)
close > open // 本地块(本地范围)
plotColor = if barIsUp() // 变量声明 (全局范围)
color.green // 本地块 (本地范围)
else
color.red // 本地块 (本地范围)
runtime.log("color", color = plotColor) // 调用一个内置函数输出日志 (全局范围)
لمبی لائنوں کو ایک سے زیادہ لائنوں میں تقسیم کیا جاسکتا ہے ، یا ان کو “لپیٹ” کیا جاسکتا ہے۔ لپیٹ والی لائنوں کو کسی بھی تعداد میں خالی جگہوں میں سکڑنا چاہئے ، بشرطیکہ یہ 4 کا ضرب نہ ہو۔ (یہ حدود مقامی بلاک میں سکڑنے کے لئے استعمال کی جاتی ہیں) ۔
a = open + high + low + close
اس کے علاوہ ، یہ بھی ممکن ہے کہ اس کو پیکیج کیا جا سکے (نوٹ کریں کہ ہر لائن میں گھومنے والی خالی جگہوں کی تعداد 4 کے ضرب نہیں ہے):
a = open +
high +
low +
close
ایک طویل پلاٹ ((() کال کو پیکیج کیا جاسکتا ہے۔
close1 = request.security(syminfo.tickerid, "D", close) // syminfo.tickerid 当前交易对的日线级别收盘价数据系列
close2 = request.security(syminfo.tickerid, "240", close) // syminfo.tickerid 当前交易对的240分钟级别收盘价数据系列
plot(ta.correlation(close, open, 100), // 一行长的plot()调用可以被包装
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
بلٹ ان متغیر ہر K لائن BAR کے لئے کھلنے کی قیمت کو ریکارڈ کرتا ہے، اگر یہopen
5 منٹ کے K لائن دورانیے کے لئے اعداد و شمار ہے.open
متغیر میں ریکارڈ کیا جاتا ہے کہ ہر 5 منٹ کے لئے K لائن BAR ((کالم) کے لئے کھلنے کی قیمت. جب آپ کی حکمت عملی کا پروگرام چل رہا ہے تو کوڈ میں حوالہ دیا جاتا ہےopen
یعنی موجودہ K لائن BAR کی افتتاحی قیمت کا حوالہ دیا گیا ہے۔ ٹائم سیریز میں پچھلی قیمت کا حوالہ دینے کے لئے ((ماضی کی قیمت) ، ہم استعمال کرتے ہیں[]
تاریخ آپریٹر، جب حکمت عملی کسی K لائن BAR پر عملدرآمد کی جاتی ہے،open[1]
اس کا مطلب یہ ہے کہ موجودہ K لائن BAR کے پچھلے K لائن BAR کی افتتاحی قیمت کا حوالہ دیا گیا ہے۔
اگرچہٹائم سیریزاس طرح کے اعداد و شمار کے ڈھانچے کو “آرٹیج” کے طور پر یاد کرنا آسان ہے ، حالانکہ پائن زبان میں بھی آرٹیج کی اقسام ہیں۔ لیکن وہ اور ٹائم سیریز بالکل مختلف تصورات ہیں۔
PINE زبان اس طرح سے ڈیزائن کی گئی ٹائم سیریز، حکمت عملی کے کوڈ میں آسانی سے اختتامی قیمت کی مجموعی قدر کا حساب لگاسکتی ہے، اور اسے for جیسے لوپ ڈھانچے کا استعمال کرنے کی ضرورت نہیں ہے، صرف PINE زبان کا استعمال کرتے ہوئے بلٹ ان فنکشن استعمال کریںta.cum(close)
ایک اور مثال کے طور پر، ہمیں آخری 14 K لائنوں BAR ((یعنی کوڈ کو چلانے کے وقت موجودہ لمحے سے قریب ترین 14 K لائنوں BAR) کی زیادہ سے زیادہ قیمت اور کم سے کم قیمت کے فرق کی اوسط قیمتوں کا حساب لگانے کی ضرورت ہے۔ta.sma(high - low, 14)
ٹائم سیریز پر فنکشن کو کال کرنے کے نتائج بھی ٹائم سیریز پر نشانات چھوڑتے ہیں ، اسی طرح استعمال کیا جاسکتا ہے[]
تاریخی آپریٹر حوالہ سے پہلے کی قیمتوں کا۔ مثال کے طور پر ، یہ جانچنے کے لئے کہ کیا موجودہ K لائن BAR کی اختتامی قیمت آخری 10 K لائن BAR میں سب سے زیادہ قیمت کی زیادہ سے زیادہ قیمت سے زیادہ ہے ((موجودہ K لائن 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)
مندرجہ بالا ٹیسٹ کوڈ a اور b کو ہر BAR پر ان کے متعلقہ ٹائم سیریز پر آؤٹ پٹ کرے گا ، اور یہ دیکھا جاسکتا ہے کہ a اور b کی قیمتیں ہمیشہ برابر رہتی ہیں ، لہذا یہ دونوں نمائندگی کے طریقے برابر ہیں۔
تاریخی اعداد و شمار کا حوالہ (history-referencing)
ٹریڈنگ ویو پر تاریخی اعداد و شمار کے حوالہ جات کے لئے زیادہ سے زیادہ آرٹیکل کی حد ہے ((زیادہ سے زیادہ 5000 آرٹیکلز) ، مثال کے طور پر مندرجہ ذیل کوڈ:
//@version=6
indicator("test")
ema = ta.ema(close, 10000) // 报错:Error on bar 0: The 'ema'->'sum' function references too many historical candles (10000), the limit is 5000.
plot(ema, "ema")
// pre10000 = ema[10000] // 报错:Invalid number of bars back specified in the history-referencing operator. It accepts a value between 0 and 5000.
// plot(pre10000, "pre10000")
ایف ایم زیڈ پر پائن زبان کی حکمت عملی کا استعمال کرتے ہوئے پائن زبان کے لین دین کے ذخیرے میں “لین دین کی ترتیبات” ، پیرامیٹر: “متغیر کی سب سے طویل مدت کی تعداد” مخصوص ترتیب میں قابل حوالہ اعداد و شمار کی زیادہ سے زیادہ شرائط
indicator("test")
ema = ta.ema(close, 1000) // ema = ta.ema(close, 3000) 则报错:Invalid number 3000 of bars back specified in the history-referencing operator. It accepts a value between 0 and 2000.
plot(ema, "ema")
پیرامیٹر “متغیر کی سب سے طویل مدت” کو زیادہ بڑا نہیں ہونا چاہئے۔ مناسب حکمت عملی میں اعداد و شمار کے حوالہ جات کی گنجائش ہے۔
PINE حکمت عملی کے بلٹ ان سانچے “پائن زبان تجارت کلاس بیس” کے پیرامیٹرز کی ترتیب کی وضاحت
定价货币精度
پیرامیٹرز اور اس پیرامیٹر کا تعین کرنے کے لئے سکریپنگ کی قیمت کے وقت. مثال کے طور پر ، قیمتوں کا تعین کرنسی کی درستگی 2 ہے ، یعنی کم سے کم اعداد کے دوسرے نمبر پر ، 0.01 تک درست ہے۔ پھر سکریپنگ پوائنٹس کی تعداد میں سے ہر ایک پوائنٹ قیمتوں کا تعین کرنے والے 0.01 یونٹ کی نمائندگی کرتا ہے۔ اس وقت سکریپنگ پوائنٹس کی تعداد 5 ہے ، اور سکریپنگ کی قیمت 0.05 ہے ((سکریپنگ کی قیمت اس حصے کی نشاندہی کرتی ہے جس کی قیمت میں اضافہ ہوتا ہے جو بہتر اور بند آرڈر کی ادائیگی کے لئے ہوتا ہے) ۔javascript
حکمت عملی میں کال کریںSetMaxBarLen
فنکشن ایک ہی ہے.strategy(title = "open long example", pyramiding = 3) // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.01) // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.02, when = close > ta.ema(close, 10)) // 条件触发,执行下单,市价开多仓
strategy.entry("long3", strategy.long, 0.03, limit = 30000) // 指定(较低的)价格,计划下买单订单,等待成交开仓,限价开仓
strategy(title = "close long example", pyramiding = 2) // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.1) // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.1) // 市价开多仓,指定分组标签为long2
strategy.close("long1", when = strategy.position_size > 0.1, qty_percent = 50, comment = "close buy entry for 50%") // 平仓,指定平掉分组标签为long1的仓位的50%持仓
strategy.close("long2", when = strategy.position_size > 0.1, qty_percent = 80, comment = "close buy entry for 80%") // 平仓,指定平掉分组标签为long2的仓位的80%持仓
PINE زبان میں پوزیشن رکھنے کا طریقہ کار یک طرفہ پوزیشن رکھنے کے مشابہ ہے۔ مثال کے طور پر ، جب ایک ہی سمت میں پوزیشن رکھنے کی پوزیشن ہوتی ہے (مثال کے طور پر ، اگر آپ کے پاس فروخت کرنے کا آرڈر ، منصوبہ بندی کی فہرست ، وغیرہ ہے) پوزیشن رکھنے کی سمت کے مخالف سمت کے احکامات پر عمل درآمد ہوتا ہے ، تو اس وقت پہلے پوزیشن رکھنے والے پوزیشنوں کو ختم کردیا جائے گا (مثال کے طور پر ، تمام پوزیشنوں کو ختم کردیا جائے گا) ، اور پھر عمل درآمد کا حکم دیا جائے گا (مثال کے طور پر ، پوزیشن رکھنے سے پہلے پوزیشن رکھنے کی سمت کے مخالف سمت کے احکامات) ۔
آرڈر کرنے کی ہدایت کا استعمال کرتے ہوئے آرڈر کرتے وقت ، اگر کوئی قیمت متعین نہیں کی جاتی ہے تو ، بازار کی قیمت طے شدہ ہے۔ اس کے علاوہ ، مارکیٹ کی قیمت کے علاوہ ، منصوبہ بندی کی فہرست کے ذریعہ آرڈر کیا جاسکتا ہے ، اور یہ فوری طور پر آرڈر پر عمل نہیں کرے گا۔ منصوبہ بندی کی فہرست میں ، جس میں پروگرام موجود نہیں ہے جب اس کو متحرک کیا جاتا ہے ، اس میں شامل کیا جاسکتا ہےڈسک / ریٹرننگوقت کی حیثیت کی معلومات (یعنی حکمت عملی چلنے پر اسٹیٹس شیڈول) کے “منصوبہ آرڈر” کے شیڈول میں دیکھا گیا ہے۔ نظام صرف اس وقت آرڈر کرے گا جب مارکیٹ ریئل ٹائم قیمت کی شرائط کو پورا کرے۔strategy.entry
جب ہم ایک فنکشن کو آرڈر کرتے ہیں تو ہم اس کی وضاحت کر سکتے ہیںlimit
、stop
پیرامیٹرز
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)
// 简单的均线交叉策略
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
// 如果均线交叉条件满足,则买入或卖出
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٪۔ اکاؤنٹ میں پیمائش شدہ کرنسی کی تعداد کے مطابق آرڈر کی تعداد کا حساب لگائیں۔ مثال کے طور پر: موجودہ اکاؤنٹ میں 10000 USDT ہے ، 1٪ آرڈر ترتیب دیں ، یعنی 100 USDT پیمانے پر آرڈر کی مقدار کا استعمال کریں ((اس کی فروخت کے وقت موجودہ قیمت کے مطابق حساب لگائیں)
var تقسیم اور ایک بار شروع کرنے والی متغیرات کے لئے کلیدی لفظ ہے۔ عام طور پر ، کلیدی لفظ var کے بغیر متغیر تفویض کی نحو کا نتیجہ یہ ہوتا ہے کہ جب بھی ڈیٹا کو اپ ڈیٹ کیا جاتا ہے تو متغیر کی قدر کو ڈھانپ دیا جاتا ہے۔ اس کے برعکس ، جب کلیدی لفظ var کے ساتھ متغیرات تفویض کیے جاتے ہیں ، تو وہ اعداد و شمار کی تازہ کاری کے باوجود اسٹیٹ ٹیبل کو برقرار رکھ سکتے ہیں اور صرف اس صورت میں تبدیل کرسکتے ہیں جب وہ if-expressions میں شرائط کو پورا کریں۔
var variable_name = expression
وضاحت:
variable_name
- پائن اسکرپٹ میں اجازت شدہ صارف متغیر کا کوئی بھی نام جس میں لاطینی حروف ، اعداد اور خطاطی شامل ہوسکتے ہیں_), لیکن نمبر سے شروع نہیں) 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")
متغیر ‘a’ سیریز میں ہر کالم کی پہلی کالم کی بندش کی قیمت کو برقرار رکھتا ہے۔ متغیر ‘b’ سیریز میں پہلے نیلم سبز نیلم کی قیمت کی سلاخوں کی اختتامی قیمت کو برقرار رکھتا ہے۔ متغیر ‘c’ سیریز میں دسویں ٹماٹر کی گرین ٹماٹر کی اختتامی قیمت کو برقرار رکھتا ہے۔
ایف ایم زیڈ پر، یہ ریئل ٹائم قیمت ماڈل، اختتامی قیمت ماڈل،var
、varip
ہم مندرجہ ذیل کوڈ کے ساتھ متغیرات کی جانچ پڑتال کرتے ہیں:
strategy("test pine", "test 1", true)
// 测试 var varip
var i = 0
varip ii = 0
// 将策略逻辑每轮改变的i、ii打印在图上
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)
// 每轮逻辑执行都给i、ii递增1
if true
i := i + 1
ii := ii + 1
ریئل ٹائم قیمت کا ماڈل
مندرجہ بالا ٹیسٹ کوڈ کو دو مراحل میں تقسیم کیا گیا ہے: 1۔ تاریخی K لائن مرحلہ ◦ 2۔ حقیقی K لائن مرحلہ ◦ جب حقیقی وقت کی قیمتوں کا ماڈل ، تاریخی K لائن مرحلہ ،var
、varip
بیان کردہ متغیر i ، ii ہر بار حکمت عملی کے کوڈ پر عملدرآمد کرتے وقت اضافی کارروائی کرتے ہیں کیونکہif true
لہذا یہ یقینی طور پر اس کے مطابق مشروط کوڈ بلاک کو انجام دیتا ہے). لہذا آپ دیکھ سکتے ہیں کہ ریٹرننگ کے نتیجے میں K لائن BAR پر دکھائے جانے والے اعداد و شمار میں سے ہر ایک میں 1 اضافہ ہوتا ہے۔ جب تاریخی K لائن مرحلہ ختم ہوتا ہے تو ، حقیقی وقت کا K لائن مرحلہ شروع ہوتا ہے۔var
、varip
اعلانات کے متغیرات میں مختلف تبدیلیاں آنا شروع ہوجاتی ہیں۔ کیونکہ یہ ایک حقیقی وقت کی قیمتوں کا ماڈل ہے ، اس لئے ایک K لائن BAR میں ہر قیمت میں تبدیلی کے لئے حکمت عملی کا کوڈ ایک بار پھر نافذ کیا جاتا ہے ، اور اس طرح اس کی قیمتوں میں تبدیلی کی جاتی ہے۔i := i + 1
اورii := ii + 1
ہر بار ایک بار کیا جاتا ہے۔ فرق یہ ہے کہ ii ہر بار ترمیم کرتا ہے۔ اگرچہ i ہر بار بھی ترمیم کرتا ہے ، لیکن اگلے دور میں حکمت عملی کی منطق پر عملدرآمد کرتے وقت اس سے پہلے کی قدر کو بحال کیا جاتا ہے ، جب تک کہ موجودہ K لائن BAR ختم نہ ہوجائے تب تک i کی قیمت کی تازہ کاری نہیں کی جاتی ہے (یعنی اگلے دور میں حکمت عملی کی منطق پر عملدرآمد نہیں کیا جاتا ہے) ۔ لہذا یہ دیکھا جاسکتا ہے کہ متغیر i اب بھی ہر بار بار 1 میں اضافہ ہوتا ہے۔ لیکن متغیر ii ہر بار بار کئی بار جمع ہوتا ہے۔
اختتامی قیمت کا ماڈل
چونکہ اختتامی قیمتوں کے ماڈل میں ہر K لائن BAR ختم ہونے پر ایک حکمت عملی منطق انجام دی جاتی ہے۔ لہذا ، اختتامی قیمتوں کے ماڈل میں ، تاریخی K لائن مرحلے اور حقیقی وقت کے K لائن مرحلے میں ،var
、varip
مندرجہ بالا مثالوں میں بیان کردہ متغیرات کی بڑھتی ہوئی کارکردگی بالکل یکساں ہے، ہر K لائن BAR میں اضافہ 1 ہے.
varip ((var intrabar persist) ایک کلیدی لفظ ہے جو تفویض اور ایک بار شروع ہونے والی متغیرات کے لئے استعمال ہوتا ہے۔ یہ کلیدی لفظ var کی طرح ہے ، لیکن متغیرات جو varip کے بیانات کا استعمال کرتے ہیں وہ K لائن اپ ڈیٹ کے درمیان اپنی اقدار کو برقرار رکھتے ہیں۔
varip variable_name = expression
وضاحت:
variable_name
- کسی بھی صارف متغیر کا نام جس کی پائن اسکرپٹ میں اجازت ہے_), لیکن نمبر سے شروع نہیں) expression
- کسی بھی ریاضیاتی اظہار، جیسا کہ جب باقاعدہ متغیر کی تعریف کی جاتی ہے۔ پہلی K لائن پر، اظہار صرف ایک بار حساب کیا جاتا ہے اور اسے متغیر میں ایک بار مختص کیا جاتا ہے۔مثال
// varip
varip int v = -1
v := v + 1
plot(v)
var کا استعمال کرتے ہوئے ، نقشہ bar_index کی قدر واپس کرے گا۔ varp کا استعمال کرتے ہوئے ، تاریخی K لائن پر وہی عمل ہوتا ہے ، لیکن حقیقی وقت K لائن پر ، نقشہ ایک قدر واپس کرے گا ، جو ہر ایک ٹِک کے لئے بڑھتا ہے۔
نوٹ صرف سادہ اقسام کے ساتھ استعمال کیا جا سکتا ہے، جیسے float،int،bool،string، اور ان اقسام کی صفوں کے ساتھ استعمال کیا جا سکتا ہے۔
ایک Boolean متغیر کی قدر ظاہر کرنے کے لئے، یا جب اظہار استعمال کیا جاتا ہےموازنہیامنطقآپریٹر کے لئے قابل قدر اقدار
نوٹ یہ بھی دیکھیںموازنہآپریٹر اورمنطقآپریٹرز کی وضاحت:
مزید دیکھیے
bool
ایک بول قسم کے متغیر کی قدر ظاہر کرتا ہے ، اور موازنہ آپریشن ، منطقی آپریشن کے نتائج
نوٹ یہ بھی دیکھیںموازنہآپریٹر اورمنطقآپریٹرز کی وضاحت:
مزید دیکھیے
bool
اگر جملہ بیانات کے شرائط کو پورا کرنے کے لئے لازمی طور پر عملدرآمد کرنے والے جملے کے بلاکس کی وضاحت کرتا ہے۔ پائن اسکرپٹ زبان کے چوتھے ایڈیشن میں آپ کو else if نحو کا استعمال کرنے کی اجازت ہے۔
جنرل کوڈ:
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
- اس متغیر کو if کے جملے کی قدر ملتی ہے
condition
- اگر شرط true ہو تو اسٹیٹمنٹ بلاک استعمال کریںthen
اس میں منطقvar_decl_then0
,var_decl_then1
اگر شرط false ہو تو اسٹیٹمنٹ بلاک استعمال کریںelse if
یاelse
اس میں منطقvar_decl_else0
,var_decl_else1
وغیرہ)
return_expression_then , return_expression_else
- ماڈیول میں آخری اظہار یا بلاک سے Else اظہار بیان کی حتمی قیمت واپس کرے گا. اگر متغیر کا اعلان آخر میں ہے تو ، اس کی قیمت نتیجہ کی قیمت ہوگی.
ایک if بیان کی واپسی کی قیمت کی قسم پر منحصر ہےreturn_expression_then
اورreturn_expression_else
ٹائپ 。TradingView پر چلتے وقت ، ان کی اقسام کا مماثل ہونا ضروری ہے: جب آپ کے پاس else بلاک میں ایک تار کی قیمت ہے ، تو پھر اسٹیٹمنٹ بلاک سے ایک عددی قدر واپس کرنا ناممکن ہے۔ 。 ایف ایم زیڈ پر چلتے وقت ، مندرجہ ذیل مثال میں کوئی غلطی نہیں ہوگی ، جب y قیمت “اوپن” ہوتی ہے تو ، پلاٹ ڈرائنگ کے وقت اس کی قیمت n / a ہوتی ہے۔
مثال
// 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 متغیر کو ایک خالی خالی تھروال تفویض کیا جائے گا (na، false یا ):
مثال
// if
x = if close > open
close
// If current close > current open, then x = close.
// Otherwise the x = na.
plot(x)
ایک سے زیادہ else if بلاک استعمال کیا جا سکتا ہے یا بالکل بھی نہیں then ، else if ، else کے بلاکس کو چار خالی جگہوں پر منتقل کیا جاتا ہے:
مثال
// if
x = if open > close
5
else if high > low
close
else
open
plot(x)
نظر انداز کر سکتے ہیںif
اسٹیٹمنٹ کی نتیجہ ویلیو ((var_declarationX= کو خارج کیا جا سکتا ہے) ۔ اگر آپ کو اظہار کے ضمنی اثرات کی ضرورت ہو تو یہ مفید ثابت ہوسکتا ہے، مثال کے طور پر حکمت عملی کی تجارت میں:
مثال
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)
‘for’ ڈھانچہ ایک سے زیادہ جملوں کو بار بار کرنے کی اجازت دیتا ہے:
[var_declaration =] for counter = from_num to to_num [by step_num]
statements | continue | break
return_expression
var_declaration
- ایک اختیاری متغیر کا بیان، جس کی قدر return_expression کے طور پر تفویض کی جائے گی۔
counter
- ایک متغیر جس میں سائیکل کی گنتی کی قدر کو محفوظ کیا جاتا ہے ، جس میں سائیکل کی ہر تکرار میں 1 یا اسٹیپ_نم کی قدر میں اضافہ / کمی ہوتی ہے۔
from_num
- کیلکولیٹر کی ابتدائی قیمتوں ◄ کو استعمال کرنے کی اجازت دی گئی ہے
to_num
- کاؤنٹر کی حتمی قیمت。 جب کاؤنٹر to_num سے بڑا ہو (یا from_num > to_num کی صورت میں to_num سے کم) تو ، لوپ کو روک دیا گیا。 کوئنسریز int/float thresholds/expressions کو استعمال کرنے کی اجازت ہے ، لیکن ان کی تشخیص صرف لوپ کے پہلے تعدد میں کی جاتی ہے۔
step_num
- کاؤنٹر کی بڑھتی / گھٹتی ہوئی قیمت ◦ یہ اختیاری ہے ◦ طے شدہ قدر + 1 یا -1 ہے ، جو from_num یا to_num میں سے سب سے بڑا ہے۔ ◦ جب قدر استعمال کی جاتی ہے تو ، کاؤنٹر بھی from_num یا to_num میں سے سب سے بڑے کی بنیاد پر بڑھتا / گھٹتا ہے ، لہذا step_num کا + / - نشان اختیاری ہے۔
statements | continue | break
- کسی بھی تعداد میں جملے، یا ‘continue’ یا ‘break’ کی ورڈز کو 4 خالی جگہوں یا ایک ٹیب میں سکریپ کریں۔
return_expression
- لوپ کی واپسی کی قیمت ، اگر موجود ہو تو ، var_declaration میں متغیر کو تفویض کیا جائے گا۔ اگر لوپ کی وجہ سے continue یا break کی ورڈ سے باہر نکل جاتا ہے تو ، لوپ کی واپسی کی قیمت لوپ سے باہر نکلنے سے پہلے تفویض کردہ آخری متغیر کی واپسی کی قیمت ہے۔
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
ڈھانچہ ہر عنصر کے لئے ایک سے زیادہ جملے کی اجازت دیتا ہے۔ یہ کسی بھی پیرامیٹرز کے ساتھ استعمال کیا جا سکتا ہے: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
- کسی بھی تعداد میں جملے، یا ‘continue’ یا ‘break’ کی ورڈز کو 4 خالی جگہوں یا ایک ٹیب میں سکریپ کریں۔
return_expression
- لوپ کی واپسی کی قیمت کو تفویض کیا جاتا ہےvar_declaration
میں متغیر ، اگر موجود ہو۔ اگر لوپ ‘continue’ یا ‘break’ کی ورڈ کی وجہ سے باہر نکلتا ہے تو ، لوپ کی واپسی کی قیمت لوپ سے باہر نکلنے سے پہلے آخری تفویض شدہ متغیر ہے۔
continue
- ایک ایسا کلیدی لفظ جو صرف لوپ میں استعمال کیا جا سکتا ہے۔ اس کے نتیجے میں لوپ کی اگلی تکرار کی جاتی ہے۔
break
- حلقے سے باہر نکلنے کے لئے کلیدی الفاظ
لوپ کے اندر صف کے عناصر یا اس کے سائز میں ترمیم کی اجازت ہے۔
یہاں، ہم استعمال کرتے ہیںfor...in
کی ایک پیرامیٹر فارم ہر K لائن پر ، کتنے K لائنوں کی OHLC قدر ‘قریب’ قدر سے زیادہ SMA ہے اس کا تعین کرنے کے لئے:
مثال
// 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))
یہاں، ہم نے for…in کے دو قسم کے پیرامیٹرز استعمال کیے ہیں تاکہ ہم اپنے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
اس متغیر کے لئے ابتدائی قیمت فراہم کی جاسکتی ہے۔
boolean_expression
- اگر سچ ہے تو، پھر عملدرآمدwhile
جملے کا مقامی بلاک۔ اگر false ہے توwhile
جملے کے بعد اسکرپٹ پر عملدرآمد جاری رکھیں
continue
- continue
کلیدی الفاظ کے نتیجے میں سائیکل اگلی نسل میں تقسیم ہوتا ہے۔
break
- break
اسکرپٹ پر عملدرآمد کے دوران.while
جملے کے بعد بحال
return_expression
- فراہم کیwhile
ایک اختیاری لائن جس میں ایک جملہ ایک قدر لوٹاتا ہے۔
مثال
// 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
اس کے بعد بول ایکسپریشن کو false میں تبدیل کرنا ہوگا یا پھر اسے پھانسی دینا ہوگیbreak
。
switch آپریٹر شرط اور اظہار کی قدر کی بنیاد پر کنٹرول کو کئی جملوں میں سے ایک میں منتقل کرتا ہے۔
[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
، اگر نہیں کیاlocal_block
تو یہ جملہ واپس آتا ہےna
◄switch
ایک جملے کے نتائج متغیرات کو تفویض کیا جاتا ہے جب تمامlocal_block
مثال کے طور پر ایک ہی قسم کی اقدار کو واپس کرنا ہوگا
مزید دیکھیے
if
?:
series ایک کلیدی لفظ ہے جو ڈیٹا سیریز کی قسم کی نمائندگی کرتا ہے۔ واضح طور پر استعمال کیا جاتا ہے۔series
مطلوبہ الفاظ عام طور پر غیر ضروری ہیں۔
متغیرات کو قدر دینے کے لئے استعمال کیا جاتا ہے ، لیکن صرف متغیرات کے اعلان پر ((پہلی بار استعمال کیا جاتا ہے)) ۔
تفویض آپریٹر ، بائیں طرف کی متغیر کو تفویض کریں۔ پہلے بیان کردہ متغیر کو تفویض کرنے کے لئے استعمال کیا جاتا ہے۔
کسی بھی قسم کے اظہار کے لیے قابل اطلاق۔
expr1 != expr2
واپس کی قدر بول ویلیو، یا بول ویلیو کی ایک سیریز
ماڈیول نمبر ((پوری تعداد میں اضافی تعداد) ◄ عددی قدر کے اظہار کے لئے لاگو ◄
expr1 % expr2
واپس کی قدر عددی یا فلوٹ پوائنٹ کی قیمت، یا اقدار کی ایک سیریز
نوٹ پائن اسکرپٹ میں ، جب انٹیجروں کی باقیات کا حساب لگایا جاتا ہے تو ، کاروبار کو منقطع کردیا جائے گا۔ یعنی ، اس کو کم سے کم مطلق قیمت پر چوکا لگایا جائے گا۔ حاصل شدہ قیمت میں تقسیم کے ساتھ ہی علامت ہوگی۔
مثال: - 1٪ 9 = -1 - 9 * truncate ((-1⁄9) = -1 - 9 * truncate ((-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)
واپس کی قدر عددی یا فلوٹ پوائنٹ کی قیمت، یا اقدار کی ایک سیریز
اضافی یا ایک عددی عدد ≠