وسائل لوڈ ہو رہے ہیں... لوڈنگ...

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

مصنف:ایجاد کاروں کی مقدار - خواب, تخلیق: 2022-05-06 14:27:06, تازہ کاری: 2024-10-12 15:27:04

[TOC]

مطلوبہ الفاظ، نحو، سیٹ اپ کی تفصیلات

کوڈ کی ساخت

پائن میں کوڈ کا عام ڈھانچہ:

<version>
<declaration_statement>
<code>

تبصرے

FMZ کے پائین زبان کی حمایت کردہ تشریح کے نشان: ایک سطر کی تشریح//ایک بار پھر،/* */مثال کے طور پر مندرجہ ذیل مثالوں میں تبصرے لکھے گئے ہیں:

[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()

بیاناتی بیان اسکرپٹ کی قسم کا تعین کرتا ہے ، جو اس میں کیا اجازت دیتا ہے ، اور اس کا استعمال اور عملدرآمد کا تعین کرتا ہے۔ اسکرپٹ کی اہم خصوصیات جیسے اس کا نام ، جب اسے چارٹ میں شامل کیا جاتا ہے تو یہ کہاں ظاہر ہوگا ، اس کی تعداد کی درستگی اور شکل جس میں یہ ظاہر ہوتا ہے ، اور اس کے چلنے پر اس کے رویے کے کچھ اقدار کو کنٹرول کرتا ہے ، جیسے اس کے چارٹ میں دکھائے جانے والے زیادہ سے زیادہ اعداد و شمار کی تعداد۔ حکمت عملیوں کے ل the ، خصوصیات میں ریورس کو کنٹرول کرنے والی پیرامیٹرز شامل ہیں ، جیسے ابتدائی دارالحکومت ، کمیشن ، سلائیڈ پوائنٹس وغیرہ۔ ایف ایم زیڈ کا پائن کسی حکمت عملی کوڈ میں شامل کرنے کی ضرورت نہیں ہے۔indicator()یاstrategy()اس کے علاوہ، اس نے اپنے آپ کو ایک بار پھر اس کے بارے میں سوچا.

کوڈ

اسکرپٹ میں جو لائنیں تبصرے یا کمپائلر کی ہدایات نہیں ہیں وہ جملے ہیں جو اسکرپٹ کے الگورتھم کو نافذ کرتے ہیں۔ ایک جملہ ان میں سے ایک ہوسکتا ہے۔

  • متغیر کا اعلان
  • متغیر کی دوبارہ تفویض
  • فنکشن کا اعلان
  • بلٹ ان فنکشن کالز، صارف کی وضاحت کردہ فنکشن کالز
  • ifforwhileیاswitchاسی طرح کی ساخت

جملے کو کئی طریقوں سے ترتیب دیا جا سکتا ہے

  • کچھ جملے ایک سطر کے ساتھ بیان کیے جا سکتے ہیں، جیسے کہ زیادہ تر متغیر بیانات، جس میں صرف ایک ہی سطر یا ایک سطر کے فنکشن بیانات شامل ہیں۔ دوسروں، جیسے ساخت، ہمیشہ زیادہ سطر کی ضرورت ہوتی ہے کیونکہ انہیں ایک مقامی بلاک کی ضرورت ہوتی ہے۔
  • اسکرپٹ کے عالمی پیمانے پر بیانات (یعنی اس کے حصوں میں شامل نہیں ہیں) کے ساتھ استعمال نہیں کیا جا سکتا.空格یا制表符(ٹیب بٹن) شروع ہوتا ہے۔ ان کا پہلا کردار بھی اس لائن کا پہلا کردار ہونا ضروری ہے۔ لائن جس میں لائن کی پہلی پوزیشن شروع ہوتی ہے ، تعریف کے مطابق اسکرپٹ کے عالمی دائرہ کار کا حصہ ہے۔
  • ڈھانچہ یا کثیر سطری فنکشن بیان ہمیشہ ایک کی ضرورت ہوتی ہےlocal blockایک مقامی بلاک کو ایک ٹیبلر یا چار خالی جگہوں میں سکیڑنا ہوگا (دوسری صورت میں ، اسے پچھلی لائن کے سلسلہ وار کوڈ میں حل کیا جائے گا ، یعنی اس کو پچھلی لائن کے جاری مواد کے طور پر طے کیا جائے گا) ، اور ہر بلاک نے ایک مختلف مقامی دائرہ کار کی وضاحت کی ہے۔
  • ایک سے زیادہ ایک سطری جملے کو ایک ہی سطر میں ایک دوسرے کے ساتھ جوڑنے کے لئے استعمال کیا جا سکتا ہے۔
  • ایک لائن میں تبصرے شامل ہوسکتے ہیں یا صرف تبصرے۔
  • لائنوں کو بھی لپیٹا جا سکتا ہے ((زیادہ لائنوں پر جاری رکھیں) ‖

مثال کے طور پر ، تین لوکلز پر مشتمل ، ایک اپنی مرضی کے مطابق فنکشن کے بیان میں ، دو متغیر کے بیان میں اگر ساخت کا استعمال کرتے ہوئے ، مندرجہ ذیل کوڈ:

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 خالی جگہیں یا ایک نشان) ، لہذا جب اسے اگلی لائن میں تقسیم کیا جاتا ہے تو ، بیان کے تسلسل کا حصہ ایک سے زیادہ سکڑنے کے ساتھ شروع ہونا ضروری ہے ((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")

ٹائم سیریز

ٹائم سیریز ایک ڈیٹا کی قسم یا فارمیٹ نہیں ہے، ٹائم سیریز زبان PINE میں ایک بنیادی ساخت کا تصور ہے۔ یہ وقت میں مسلسل تبدیلیوں کی قدر کو ذخیرہ کرنے کے لئے استعمال کیا جاتا ہے، ہر قدر ایک وقت کے نقطہ سے متعلق ہے۔ ٹائم سیریز کے اس تصور کی ساخت کو وقت کے ساتھ ساتھ تبدیلیوں کے اعداد و شمار کے سلسلے میں عملدرآمد اور ریکارڈ کرنے کے لئے استعمال کیا جاتا ہے۔ بلٹ ان متغیراتopenمثال کے طور پر:openاگر آپ کو یہ معلوم ہے کہ آپ کے پاس ایک بار بار کی قیمت ہے تو آپ کو یہ معلوم ہونا چاہئے کہ آپ کے پاس ایک بار بار کی قیمت ہے.openیہ 5 منٹ کے لئے K لائن سائیکل کے اعداد و شمار ہیں.openمتغیر میں ریکارڈ کیا جاتا ہے ہر 5 منٹ کے لئے K لائن BAR (بالم) کی قیمت کھولنا.openیعنی موجودہ مقام پر K لائن BAR کی کھلی ہوئی قیمت کا حوالہ دیتے ہیں۔ وقت کے سلسلے میں پچھلی قیمت (ماضی کی قیمت) کا حوالہ دینے کے لئے ہم استعمال کرتے ہیں[]تاریخ کا آپریٹر، جب پالیسی کسی K لائن BAR پر عملدرآمد ہوتی ہےopen[1]اس کا مطلب یہ ہے کہ موجودہ K لائن BAR کے پچھلے K لائن BAR کی افتتاحی قیمت کا حوالہ دیا گیا ہے۔

اگرچہٹائم سیریزاعداد و شمار کے ڈھانچے کو "آرٹیکل" کے طور پر یاد کرنا آسان ہے، اگرچہ PINE زبان میں بھی آرٹیکل کی اقسام موجود ہیں۔ لیکن یہ وقت کی ترتیب سے بالکل مختلف تصورات ہیں۔

PINE زبان میں اس طرح سے ڈیزائن کردہ ٹائم سیریز کو حکمت عملی کے کوڈ میں آسانی سے حساب لگایا جاسکتا ہے ، اور اس کے لئے لکیری ڈھانچے کی ضرورت نہیں ہوتی ہے ، جیسے کہ صرف PINE زبان کا استعمال کرتے ہوئے بلٹ ان فنکشن۔ta.cum(close)مثال کے طور پر، ہم نے آخری 14 K لائنوں BAR (یعنی 14 K لائنوں BAR) کے درمیان سب سے زیادہ قیمت اور سب سے کم قیمت کے درمیان فرق کا اوسط حساب کرنا ہے.ta.sma(high - low, 14)

اگر آپ کسی فنکشن کو ٹائم سیریز پر کال کرتے ہیں تو اس کا نتیجہ بھی ٹائم سیریز پر نشان لگا دیتا ہے۔[]تاریخ کے آپریٹر سے پہلے کی قیمت کا حوالہ دیتے ہیں۔ مثال کے طور پر، ہم لکھ سکتے ہیں کہ اگر موجودہ K لائن BAR کی اختتامی قیمت آخری 10 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 کی قیمتیں ہمیشہ برابر رہتی ہیں ، لہذا یہ دونوں نمائندگی کے طریقے برابر ہیں۔

پائن لینگویج ٹرانزیکشن کلاس لائبریری ٹیمپلیٹ پیرامیٹرز

PINE پالیسی کے اندرونی ٹیمپلیٹ "پائن زبان کے تبادلہ کلاس لائبریری" کے لئے پیرامیٹرز کی ترتیب کی وضاحتیں.

img

ٹرانزیکشن کی ترتیب

  • عملدرآمد اختتامی قیمت کا ماڈل: موجودہ بار ختم ہونے تک ماڈل کو انجام دیا جاتا ہے ، جب نیچے کی جڑ بار شروع ہوتی ہے تو تجارت کو انجام دیا جاتا ہے۔ ریئل ٹائم قیمت ماڈل: ہر قیمت کی تبدیلی کے ساتھ ماڈل کو انجام دیا جاتا ہے ، اور فوری طور پر تجارت کو انجام دینے کے لئے سگنل ہوتے ہیں۔
  • پہلے سے طے شدہ تعداد: اگر ٹریڈنگ کی ہدایات میں ٹریڈنگ کی تعداد کی وضاحت نہیں کی گئی ہے تو ، اس ترتیب کے مطابق تعداد پر عمل درآمد کریں۔
  • ایک بار میں سب سے زیادہ ٹرانزیکشن کی تعداد: اصل ڈسک کے مطابق ، اس پیرامیٹر کی ترتیب کے ساتھ مل کر ، ہر بار سب سے زیادہ آرڈر کی تعداد کا تعین کریں ، تاکہ ڈسک پر اثر انداز ہونے سے بچیں۔
  • سلائیڈنگ پوائنٹس:定价货币精度پیرامیٹرز اور اس پیرامیٹر نے آرڈر کی جگہ پر سلائڈ کی قیمت کا تعین کیا۔ مثال کے طور پر ، قیمتوں کا تعین کرنسی کی درستگی کو 2 پر مقرر کیا گیا ہے ، یعنی ، دوسرے نمبر پر دائیں اور 0.01 تک درست ہے۔ پھر ، سلائڈ پوائنٹس کی تعداد ہر پوائنٹ پر 0.01 قیمتوں کا تعین کرنے والی اکائیوں کی نمائندگی کرتی ہے۔ اس وقت ، سلائڈ پوائنٹس کی تعداد 5 پر مقرر کی گئی ہے ، اور آرڈر کی جگہ پر سلائڈ کی قیمت 0.05 ہے ((سلائڈ اشارے آرڈر کی جگہ پر بہتر اور آرڈر کی تکمیل کے لئے زیادہ قیمت کا حصہ) ۔)
  • متغیر کے طویل ترین دورانیے کی تعداد: چارٹ کے K لائن BAR کی تعداد کو متاثر کرتی ہے، اورjavascriptحکمت عملی میں کال کریںSetMaxBarLenفنکشن ایک ہی کام کرتا ہے۔

مستقبل کے اختیارات

  • قسم کا کوڈ: معاہدہ کا کوڈ ، تبادلے کا اعتراض جب غیر حقیقی تبادلے کا اعتراض ہوتا ہے تو اس کی ضرورت ہوتی ہے۔
  • کم سے کم معاہدے کی تعداد: جب آپ آرڈر دیتے ہیں تو معاہدے کی کم سے کم تجارت ہوتی ہے۔

ڈسک کے اختیارات

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

فوری تجارت، دیگر ترتیبات

  • ایک ہاتھ کا حجم: ڈیفالٹ ایک ہاتھ کا حجم صرف فوری طور پر قابل عمل ہے۔
  • کم سے کم حجم: کم سے کم حجم۔
  • قیمتوں کا تعین کرنسی کی درستگی: قیمت کی درستگی ، یعنی قیمتوں کی چھوٹی تعداد۔
  • ٹرانزیکشن کی قسم کی درستگی: اگلی مقدار کی درستگی، یعنی اگلی مقدار کی چھوٹی تعداد۔
  • چارج: اس ترتیب کے مطابق کچھ اعداد و شمار کا حساب لگایا جاتا ہے ، 0.002 ایک ہزار میں سے 2 کا مطلب ہے۔
  • منافع اور نقصان کے اعدادوشمار کا وقفہ: صرف حقیقی ڈسک پر منافع اور نقصان کے اعدادوشمار کا استعمال۔
  • ناکام دوبارہ کوشش ((ملی سیکنڈ): نیٹ ورک کی درخواست ناکام ہونے پر دوبارہ کوشش کا وقفہ۔
  • ایجنٹ استعمال کریں: صرف REST پروٹوکول کے لئے درست ہے۔
  • عام غلطیوں کو چھپانا: عام غلطیوں کو چھپانے کے لئے لاگ ان کے علاقے میں۔
  • بیس ایڈریس سوئچ کریں: صرف REST پروٹوکول کے لئے درست ہے۔
  • پیغامات کو ای میل باکس میں بھیجیں، وغیرہ۔

معاہدہ

کھلنا

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اور جب ہم ایک فنکشن کو ترتیب دیتے ہیں، تو ہم اس کی وضاحت کر سکتے ہیںlimitstopپیرامیٹرز۔

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اس کے علاوہ ، اس کے بعد سے ، اس کے بعد سے ، اس کے بعد سے ، اس کے بعد سے ، اس کے بعد سے ، اس کے بعد سے ، اس کے بعد سے ، اس کے بعد سے ، اس کے بعد سے.

  • سٹاپ آرڈر

    آرڈر کی روک تھام کی قیمت مقرر کریں ، جب آرڈر خریدنے کے لئے ہوتا ہے تو ، آرڈر صرف اس وقت ٹرگر ہوتا ہے جب مارکیٹ کی موجودہ قیمت اس سے زیادہ ہوتی ہے۔ جب آرڈر فروخت کا ہوتا ہے تو ، آرڈر صرف اس وقت ٹرگر ہوتا ہے جب مارکیٹ کی موجودہ قیمت اس سے کم ہوتی ہے۔

  • سٹاپ-لمٹ آرڈر

    ایک ہی وقت میں مقرر کیا جا سکتا ہےlimitstopپیرامیٹرز ، آرڈر کو پہلے قابل قیمت پر متحرک کیا جاتا ہے۔

حقوق و مفادات کا فیصد

//@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 پیمائش میں پہلی پیمائش گرین پیمائش کی قیمت کی بندش کی قیمت برقرار رکھی گئی ہے۔ متغیر پی سی سی نے سیریز میں دسویں پی سی سی کے اختتامی قیمت کو برقرار رکھا۔

ایف ایم زیڈ پر ، ریئل ٹائم قیمت ماڈل ، بندش قیمت ماڈل ، اور مارکیٹنگ کے لئے مارکیٹنگ ماڈل میں تقسیم کیا گیا ہے۔varvaripہم نے مندرجہ ذیل کوڈ کا استعمال کرتے ہوئے ٹیسٹ کیا.

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 لائن مرحلے میں، آپ کی قیمتوں کا تعین کرنے کے لئے آپ کی قیمتوں کا تعین کرنے کے لئے آپ کی قیمتوں کا تعین کرنے کے لئے آپ کی قیمتوں کا تعین کرنے کے لئے آپ کی قیمتوں کا تعین کرنے کے لئے.varvaripبیان کردہ متغیر i، ii ہر بار جب پالیسی کا کوڈ چلایا جاتا ہے تو اضافہ ہوتا ہے کیونکہ (((if trueلہذا یقینی طور پر اس کے مطابق عملدرآمد کی شرط کوڈ بلاکس) ؛ لہذا آپ کو دیکھ سکتے ہیں کہ نتیجہ K لائن BAR پر ظاہر ہونے والے اعداد میں سے ہر ایک میں اضافہ ہوتا ہے 1؛ جب تاریخ K لائن مرحلے ختم ہوجاتا ہے تو ، حقیقی وقت K لائن مرحلے کا آغاز ہوتا ہے۔varvaripیہ ایک حقیقی وقت کی قیمت ماڈل ہے، کیونکہ ایک K لائن BAR میں ہر قیمت کی تبدیلی کے لئے ایک بار پھر حکمت عملی کا کوڈ چلایا جاتا ہے.i := i + 1اورii := ii + 1فرق یہ ہے کہ ii ہر بار ترمیم کی جاتی ہے۔ اگرچہ i ہر بار ترمیم کی جاتی ہے ، لیکن اگلے دور میں حکمت عملی کی منطق کو انجام دینے پر اس کی پچھلی قیمت کو بحال کیا جاتا ہے ، جب تک کہ موجودہ K لائن BAR ختم نہ ہو جائے۔ لہذا آپ دیکھ سکتے ہیں کہ متغیر i اب بھی ہر بار بار 1 ہے۔ لیکن متغیر ii ہر بار بار میں کئی بار اضافہ ہوتا ہے۔

  • اختتامی قیمت کا ماڈل چونکہ اختتامی قیمت کا ماڈل ہر K لائن BAR کے ختم ہونے پر ایک بار حکمت عملی کا نفاذ کرتا ہے۔ لہذا اختتامی قیمت کے ماڈل میں ، تاریخی K لائن مرحلے اور حقیقی وقت کے K لائن مرحلے کو ایک ہی وقت میں کیا جاتا ہے۔varvaripبیان کردہ متغیرات مندرجہ بالا مثالوں میں بڑھتے ہوئے بالکل یکساں طور پر ظاہر ہوتے ہیں ، ہر 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 کا استعمال کیا جاتا ہے تو ، گراف بار_انڈیکس کی قدر واپس کرتا ہے۔ varip کا استعمال کرتے ہوئے ، اسی طرح کا رویہ تاریخی K لائن پر ہوتا ہے ، لیکن حقیقی وقت میں K لائن پر ، یہ گراف ایک قدر واپس کرتا ہے ، جس میں ہر ٹک کے لئے ایک اضافہ ہوتا ہے۔

نوٹصرف سادہ اقسام کے ساتھ استعمال کیا جا سکتا ہے، جیسے float،int،bool،string، اور ان اقسام کی صفوں کے ساتھ۔

سچ

ایک Boolean قسم کے متغیر کی قدر کی وضاحت کرتا ہے، یا جب ایک اظہار استعمال کیا جاتا ہےموازنہیامنطقآپریٹرز کی طرف سے شمار کیا جا سکتا ہے کہ اقدار.

نوٹبرائے مہربانی دیکھیںموازنہآپریٹرز اورمنطقآپریٹر کی وضاحت۔

دوبارہ ملیں گے bool

غلط

ایک Boolean قسم کے متغیر کی قدر، اور موازنہ آپریشن، منطقی آپریشن کے نتائج کا اشارہ کرتا ہے۔

نوٹبرائے مہربانی دیکھیںموازنہآپریٹرز اورمنطقآپریٹر کی وضاحت۔

دوبارہ ملیں گے 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- یہ متغیر اگر بیان کی قدر حاصل کرتا ہےcondition- اگر شرط درست ہے تو جملہ بلاک استعمال کریںthenمنطق میں ((var_decl_then0var_decl_then1وغیرہ۔ اگر شرط غلط ہے تو جملہ بلاک استعمال کریں۔else ifیاelseمنطق میں ((var_decl_else0var_decl_else1وغیرہ) ◄return_expression_then , return_expression_else- ماڈیول میں آخری اظہار یا بلاکelse سے آنے والا اظہار بیان کی آخری قیمت واپس کرے گا۔ اگر متغیر کا اعلان آخر میں ہوتا ہے تو ، اس کی قیمت نتائج کی قیمت ہوگی۔

اگر بیان کی واپسی کی قدر کی قسم پر منحصر ہےreturn_expression_thenاورreturn_expression_elseٹائپ کریں۔ TradeView پر چلنے پر ان کی اقسام کو مماثل ہونا ضروری ہے: جب آپ کے پاسelse بلاک میں ایک سٹرنگ ویلیو ہے تو ، پھر اسٹیٹمنٹ بلاک سے ایک انٹیجر ویلیو واپس کرنا ناممکن ہے۔ FMZ پر چلنے پر ، مندرجہ ذیل مثال غلطیاں واپس نہیں کرتی ہے ، جب y ویلیو کو "open" کہا جاتا ہے تو ، جب پلاٹ گراف تیار ہوتا ہے تو اس کی قدر 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 متغیر کے لئے ایک empty threshold ((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 کے بلاکس کو چار خالی جگہوں میں منتقل کیا جاتا ہے:

مثالیں

// 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 یا step_num قدر میں اضافہ / کمی؛from_num- ٹائمٹر کی ابتدائی قیمت۔؛ انٹ / فلوٹ کی حد / اظہار کا استعمال کرنے کی اجازت دیتا ہے۔؛to_num- ٹائمر کی حتمی قیمت۔ جب ٹائمر to_num سے بڑا ہوتا ہے ((یا to_num سے کم ہوتا ہے جب from_num > to_num ہوتا ہے) تو لپیٹ میں رکاوٹ آتی ہے۔ int/float thresholds/expressions کا استعمال کرنے کی اجازت ہے لیکن وہ صرف لپیٹ کی پہلی تکرار کے دوران ہی جائزہ لیا جاتا ہے۔step_num- ٹینکر کی بڑھتی ہوئی / گھٹتی ہوئی قیمت۔ یہ اختیاری ہے۔ ڈیفالٹ قیمت + 1 یا -1 ہے ، خاص طور پر from_num یا to_num میں سے کسی ایک پر منحصر ہے۔ جب قیمت استعمال کی جاتی ہے تو ، ٹینکر بھی from_num یا to_num میں سے کسی ایک پر منحصر ہوتا ہے ، لہذا step_num کی + / - علامت اختیاری ہے۔statements | continue | break- کسی بھی تعداد میں جملے، یا continuous or break keywords کو 4 خالی جگہوں یا tabs میں سکیڑیں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یہ ساخت صف کے ہر عنصر کے لئے متعدد بیانات کی تکرار کی اجازت دیتی ہے۔ یہ کسی بھی پیرامیٹر کے ساتھ استعمال کیا جاسکتا ہے: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- سرپل بار بار چلنے والی صفوں کی شناخت۔statements | continue | break- کسی بھی تعداد میں جملے، یا continuous or break keywords کو 4 خالی جگہوں یا tabs میں سکیڑیںreturn_expression- ایک loop کے واپسی کی قدر کے لئے مختص کیا جاتا ہےvar_declarationاندرونی متغیرات، اگر موجود ہوں۔ اگر لوپ لوپ کو چھوڑ دیتا ہے تو اس کی واپسی کی قیمت لوپ سے باہر نکلنے سے پہلے آخری تفویض شدہ متغیر ہے۔continue- صرف ریورس میں استعمال کیا جا سکتا ہے کہ مطلوبہ الفاظ. یہ ریورس کے اگلے تکرار پر عملدرآمد کے نتیجے میں.break- واپس آنے کے لئے کلیدی الفاظ.

لپیٹ میں صف کے عناصر یا ان کے سائز کو تبدیل کرنے کی اجازت دیتا ہے۔ یہاں ہم استعمال کرتے ہیںfor...inایک واحد پیرامیٹر کی شکل میں یہ طے کیا جاتا ہے کہ ہر K لائن پر کتنے K لائنوں کی 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اس متغیر کے لئے ابتدائیہ قدر فراہم کی جا سکتی ہے۔boolean_expression- اگر یہ سچ ہے تو، عملدرآمدwhileجملہ کا مقامی بلاک۔ اگر یہ غلط ہے تو ،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پچھلے بول اظہار کو بالآخر غلط ہونا ضروری ہے، یا اسے عملدرآمد کرنا ہوگا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اگر آپ نے اسے نہیں کیا توlocal_blockیہ جملہ واپس آ جاتا ہےna◄ ہو جائے گاswitchجب جملے کے نتائج متغیر کو تفویض کیے جاتے ہیں، تو تمامlocal_blockمثالیں ایک ہی قسم کی قدر واپس کرنا ضروری ہے۔

دوبارہ ملیں گے if ?:

سیریز

سیریز ایک کلیدی لفظ ہے جو ڈیٹا سیریز کی قسم کی نمائندگی کرتا ہے۔ واضح استعمال۔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)

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

+

اضافی یا یکتا صحیح نمبر۔ عددی اظہار یا سٹرنگ کے لئے استعمال ہوتا ہے۔

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)

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

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

-

ضابطہ تخفیف یا ایک منفی عددیہ۔ عددی اظہار کے لئے لاگو ہوتا ہے۔

expr1 - expr2
- expr

واپسی کی قیمتعددی یا فلوٹ پوائنٹ کی قدر، یا اقدار کی ایک سیریز لوٹاتا ہے: ثنائی پلاسٹک +'واپسی exp1 مائنس exp2// ایک یوآن-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میں نے اس کے بارے میں کیا سوچا؟

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

<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)

واپسی کی قیمتاگر expression1 true کا جائزہ لیا جاتا ہے تو expression2 true کا جائزہ لیا جاتا ہے، ورنہ expression3 true کا۔ صفر کی قدر ((0 اور NaN+، Infinity-Infinity) false کے طور پر سمجھا جاتا ہے، اور دیگر تمام اقدار true کے طور پر سمجھا جاتا ہے۔

نوٹاگر آپ کو اس کی ضرورت نہیں ہے تو ، براہ کرم na کو else شاخ کے طور پر استعمال کریں۔ آپ دو یا دو سے زیادہ استعمال کر سکتے ہیں: آپریٹرز کو ایک ساتھ مل کر ایک جملے کو لاگو کرنے کے لئے جو کہ ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ہو سکتا ہے. آپ اعداد کے ساتھ ریاضیاتی آپریٹرز اور متغیرات کی تعداد کے ساتھ استعمال کرسکتے ہیں۔ آپریٹرز کو عناصر پر لاگو کیا جاتا ہے جب آپریٹرز کو استعمال کیا جاتا ہے۔

دوبارہ ملیں گے 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↑ بول اظہار کے لئے لاگو ہوتا ہے۔

expr1 and expr2

واپسی کی قیمتایک بل ویلیو، یا بل ویلیو سیریز۔

یا

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

expr1 or expr2

واپسی کی قیمتایک بل ویلیو، یا بل ویلیو سیریز۔

نہیں

منطقی ردعمل ((NOT) ⇒ بُل اظہار کے لئے لاگو ہوتا ہے۔

not expr1

واپسی کی قیمتایک بل ویلیو، یا بل ویلیو سیریز۔

ڈیٹا ٹائپ کی ورڈ

بول

واضح طور پر بیان کردہ متغیرات یا پیرامیٹرز کے لیے استعمال ہونے والے بول کی قسم کے مطلوبہ الفاظ۔ متغیر "بول" کی قدر true، false یا na ہو سکتی ہے۔

مثالیں

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

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

دوبارہ ملیں گے var varip int float color string true false

int

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

مثالیں

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

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

دوبارہ ملیں گے 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
string s = "Hello World!"    // Same as `s = "Hello world!"`
// string s = na // same as "" 
plot(na, title=s)

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

دوبارہ ملیں گے var varip int float bool str.tostring str.format

رنگ

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

مثالیں

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

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

دوبارہ ملیں گے var varip int float string color.rgb color.new

صف

واضح طور پر بیان کردہ متغیرات یا پیرامیٹرز کے لئے استعمال کیا جاتا ہے۔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

اشیاء

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

اقسام کی وضاحت

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

type order
    float price
    float amount
    string symbol
  • استعمال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 ہر تکرار میں موجودہ اندراج کی بار_انڈیکس قدر کو دوبارہ شروع کرے گا۔

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

//@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)

پائین میں ، مختلف قسم کے مطلوبہ الفاظ کا استعمال کرتے ہوئے ، اس بات کی نشاندہی کی جاسکتی ہے کہ اسکرپٹ کے عملدرآمد کے دوران کسی شے کے کھیتوں کو مستقل طور پر برقرار رکھا جاسکتا ہے ، بغیر اس کی تصدیق شدہ کالموں میں گھومنے کے۔ کاؤنٹر کی قسم کے بیان میں ، بارس فیلڈ میں مختلف قسم کے مطلوبہ الفاظ استعمال نہیں کیے جاتے ہیں ، لہذا یہ ہر غیر تصدیق شدہ کالم میں واپس چلتا ہے۔ جبکہ ٹکس فیلڈ میں مختلف قسم کے مطلوبہ الفاظ استعمال کیے جاتے ہیں ، لہذا یہ غیر تصدیق شدہ کالم میں واپس نہیں جاتا ہے۔ counter اعتراض var کی ورڈ کا استعمال کرتے ہوئے اعلان کیا جاتا ہے، لہذا یہ پورے اسکرپٹ کی پھانسی کے دوران جاری رہے گا. ہر تکرار میں ، بارس فیلڈ اور ٹکس فیلڈ میں 1 اضافہ ہوتا ہے۔ بارس فیلڈ ہر غیر تصدیق شدہ کالم میں گھومتا ہے ، جبکہ ٹکس فیلڈ نہیں گھومتا ہے۔ آخر میں ، 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 پر اثر نہیں پڑے گا۔

طریقہ کار

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

بلٹ ان طریقہ کار

ایک مثال کے طور پر اسکرپٹ کوڈ کا ایک ٹکڑا:

//@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، طریقہ مطلوبہ الفاظ کو فنکشن کے نام سے پہلے ہونا ضروری ہے۔ 2، طریقہ کار کے پیرامیٹرز، جن میں سے پہلے پیرامیٹر کی قسم کو واضح طور پر بیان کیا جانا چاہئے، کیونکہ یہ اس قسم کی قسم کا مطلب ہے جس سے طریقہ کار سے منسلک کیا جائے گا۔

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

//@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> sour

مزید

وُہوآناگر آپ چاہتے ہیں کہ ایک ہی وقت میں کئی ٹرانزیکشنز چلیں تو آپ کو کیا کرنا چاہئے؟

ہلکے بادلبراہ کرم مجھے بتائیں، کیا پائن زیادہ ٹرانزیکشن کر سکتا ہے؟ کیا یہ جے ایس کی طرح ٹرانزیکشنز کو گھوم سکتا ہے؟ شکریہ۔

لیزا20231مزید تفصیلات کے لیے شکریہ

فنکاریواہ! یہ پائن اسکرپٹ پلیٹ فارم پر اوکیکس کی سمیلیٹر کا استعمال کیسے کرتا ہے؟

فنکاریاس کا مطلب یہ ہے کہ ٹریڈنگ ویو پلیٹ فارم کی حکمت عملی کو براہ راست کاپی کیا جا سکتا ہے اور اسے ایجاد کنندہ پلیٹ فارم پر استعمال کیا جا سکتا ہے۔

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

ایجاد کاروں کی مقدار - خواباوہ ، ہاں ، او کے ایکس خاص ہے ، ان کا ماڈل ماحول اور اصلی ڈسک کا ماحول ایک ہی ایڈریس ہے ، صرف دوسری جگہوں پر فرق ہے۔ لہذا ماڈل ڈسک میں سوئچ کرنے کے لئے بیس ایڈریس کو تبدیل کرنے کا کوئی طریقہ نہیں ہے۔

ہلکے بادلاوککس ڈسک کا استعمال نہیں کیا جا سکتا ہے۔

ایجاد کاروں کی مقدار - خواباس طرح کے مختلف فن تعمیر کے مسائل کو حل نہیں کیا جاسکتا کیونکہ ہر ایکسچینج میں مختلف انٹرفیس ہیں اور انٹرفیس کی تعدد کی حد بھی مختلف نہیں ہے۔ اس سے بہت سارے مسائل پیدا ہوتے ہیں۔

ایجاد کاروں کی مقدار - خواباچھا، شکریہ کہ آپ نے تجاویز دی ہیں، اور اس کی ضرورت کی اطلاع دیں۔

ہلکے بادلیہ JS کے ساتھ مل کر کام کرنے کے لئے بہتر محسوس ہوتا ہے، جس میں مختلف تجارتی طریقوں کو بہتر طور پر اپنانے کے لئے بہتر ہے.

رجحان شکاریکیا ہم بعد میں کئی اقسام پر غور کریں گے؟ اختتامی قیمت ہر قسم کے ذریعے چلتی ہے۔

ایجاد کاروں کی مقدار - خوابہم نے اس کے بارے میں کیا سوچا ہے؟

ہلکے بادلاچھا، بہت شکریہ۔

ایجاد کاروں کی مقدار - خوابہیلو، PINE کی زبان کی حکمت عملی صرف ایک قسم کی ہے.

ایجاد کاروں کی مقدار - خوابآپ کا شکریہ کہ آپ نے میری مدد کی ہے۔ دستاویزات کو مزید بہتر بنایا جائے گا۔

ایجاد کاروں کی مقدار - خوابہاں ہاں۔۔۔۔۔

ایجاد کاروں کی مقدار - خوابPINE ٹیمپلیٹ کلاس لائبریری ، جس کی پیرامیٹرز پر تبادلہ کرنے والے تبادلے کا بیس ایڈریس مقرر کیا جاسکتا ہے۔ دستاویز کا آغاز: PINE زبان کے تبادلہ کلاس لائبریری ٹیمپلیٹ پیرامیٹرز۔