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

FMZ PINE اسکرپٹ Doc

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

[TOC]

img

کلیدی الفاظ، گرامر، ترتیبات کا تعارف

کوڈ کا ڈھانچہ

پائن میں عام ساخت کا کوڈ مندرجہ ذیل ہے:

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

نئی لائن کا کوڈ

لمبی لائنوں کو متعدد لائنوں میں تقسیم کیا جاسکتا ہے ، یا لپیٹا جاسکتا ہے۔ لپیٹی ہوئی لائن کو کسی بھی مقدار میں خالی جگہ کے ذریعہ انڈینٹ کیا جانا چاہئے ، جب تک کہ یہ 4 کا ضرب نہ ہو (یہ حدود مقامی بلاکس کو انڈینٹ کرنے کے لئے استعمال ہوتی ہیں) ۔

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 کی افتتاحی قیمت سے مراد ہے۔

اگرچہوقت کی سیریزاعداد و شمار کی ساخت array کی بہت یاد دلاتا ہے ، حالانکہ PINE زبان میں بھی ایک صف کی قسم ہے۔ لیکن وہ اور وقت کی سیریز مکمل طور پر مختلف تصورات ہیں۔

پائن زبان میں ڈیزائن وقت سیریز آسانی سے حکمت عملی کوڈ میں اختتامی قیمت کی مجموعی قیمت کا حساب کر سکتے ہیں، اور اس طرح کے لئے لوپ ڈھانچے کا استعمال کرنے کی کوئی ضرورت نہیں ہے، صرف بلٹ میں تقریب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 حکمت عملی کے Pine Language Trade Class Library کے بلٹ ان ٹیمپلیٹ کے دلائل کی ترتیب کے لئے ہدایات۔

img

تجارتی ترتیبات

  • عملدرآمد کا موڈ اختتامی قیمت کا ماڈل: ماڈل صرف موجودہ BAR مکمل ہونے کے بعد ہی عمل میں لایا جاتا ہے ، اور تجارت اگلے BAR کے آغاز پر عمل میں لائی جاتی ہے۔ ریئل ٹائم قیمت ماڈل: ماڈل ہر بار جب قیمت چلتی ہے تو عمل میں لایا جاتا ہے ، اور فوری طور پر تجارت کو انجام دینے کے لئے ایک سگنل ہوتا ہے۔
  • ڈیفالٹ اوپن لاٹ سائز: اگر ٹریڈ آرڈر میں ٹریڈ کی رقم کی وضاحت نہیں کی گئی ہے تو ، تجارت مقررہ رقم کے مطابق عمل میں لائی جائے گی۔
  • ایک ہی تجارت کے لئے زیادہ سے زیادہ آرڈر کی مقدار: اصل مارکیٹ اور اس دلیل کی ترتیب کے مطابق مارکیٹ پر اثر انداز ہونے سے بچنے کے لئے ہر آرڈر کی زیادہ سے زیادہ رقم کا تعین کریں۔
  • slippage پوائنٹس: حکم کی جگہ کے مطابق جب slippage کا تعینPricing Currency Precisionمثال کے طور پر ، قیمتوں کا تعین کرنسی کی درستگی 2 پر مقرر کی گئی ہے ، جو دوسرے اعشاریہ نقطہ تک درست ہے ، 0.01 تک درست ہے۔ پھر ہر نقطۂ جھکاو کے پوائنٹس 0.01 قیمتوں کا تعین کرنے والے یونٹوں کی نمائندگی کرتے ہیں۔ اس وقت ، جھکاو کا نقطہ 5 پر مقرر کیا جاتا ہے ، اور آرڈر دیتے وقت جھکاو 0.05 ہوتا ہے (جھکاو قیمت کے اس حصے سے مراد ہے جو بہتر اور معذور آرڈر کی تجارت کے لئے آرڈر دیتے وقت اوور فلو ہوتا ہے) ۔
  • متغیر کا سب سے طویل دورانیہ نمبر: چارٹ میں K لائن BAR کی تعداد کو متاثر کرتا ہے۔ یہ فنکشن کو کال کرنے کے برابر ہے۔SetMaxBarLenمیںjavascript srategy.

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

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

لائیو ٹریڈنگ کے اختیارات

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

اسپاٹ ٹریڈنگ، دیگر ترتیبات

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

آرڈر تجارت

کھلی پوزیشن

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 زبان کا پوزیشن میکانزم ایک طرفہ پوزیشن سے ملتا جلتا ہے۔ مثال کے طور پر ، لمبی سمت میں پوزیشن رکھتے وقت (لمبی پوزیشن) ، اگر فروخت کے آپریشن کا آرڈر ، منصوبہ بند آرڈر وغیرہ (پوزیشن کی مخالف سمت میں) ہے تو ، عمل درآمد شروع ہوجائے گا ، اور لمبی سمت میں پوزیشن پہلے بند ہوجائے گی۔ (تمام لمبی پوزیشنوں کو بند کریں) ، اور پھر ٹرگر شدہ آرڈر کو انجام دیں (بند سے پہلے کی پوزیشن کے مقابلے میں مخالف سمت میں) ۔

منصوبہ بندی کا حکم

آرڈر کی جگہ کا حکم کا استعمال کرتے ہوئے ایک آرڈر کی جگہ جب، اگر کوئی قیمت مخصوص نہیں ہے، تو ڈیفالٹ ایک مارکیٹ آرڈر ہے. مارکیٹ آرڈر کے علاوہ، آپ کو بھی ایک منصوبہ بندی کے حکم کے ذریعے ایک آرڈر رکھ سکتے ہیں، جو فوری طور پر ایک آرڈر رکھنے کے لئے کام نہیں کرتا. منصوبہ بندی کے حکم پروگرام کے منصوبہ بندی کے حکم قطار میں موجود ہے جب یہ متحرک نہیں ہے، اور اس کے دوران حالت کی معلومات کی Planned Order ٹیبل ٹیب میں دیکھا جا سکتا ہے (یعنی، حکمت عملی چل رہا ہے جب حیثیت بار)اصل آرڈر/بیک ٹسٹنگ. نظام صرف اس وقت آرڈر دے گا جب ریئل ٹائم مارکیٹ کی قیمت ان منصوبہ بند احکامات کو متحرک کرنے کی شرائط کو پورا کرتی ہے۔ لہذا ، یہ معمول ہے کہ ان احکامات میں تجارتی قیمت میں معمولی انحراف ہو۔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 شامل نہیں ہوتا ہے اس کی وجہ سے ہر بار جب ڈیٹا کو اپ ڈیٹ کیا جاتا ہے تو متغیر s کی قدر کو اوور رائٹ کیا جاتا ہے۔ اس کے برعکس ، جب متغیرات کو کلیدی لفظ var کا استعمال کرتے ہوئے تفویض کیا جاتا ہے تو ، وہ ڈیٹا اپ ڈیٹس کے باوجود حالت کو برقرار رکھ سکتے ہیں ، اسے صرف اس وقت تبدیل کرسکتے ہیں جب if-expressions میں شرائط پوری ہوجاتی ہیں۔

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

متغیر a سیریز میں ہر بار کے پہلے بار کی بندش کی قیمت رکھتا ہے۔ متغیر b سیریز میں پہلی green قیمت بار کی بندش کی قیمت رکھتا ہے. متغیر c سیریز میں دسویں green بار کی بندش کی قیمت رکھتا ہے۔

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

کسی صف کے عناصر یا ان کے سائز کو لوپ کے اندر تبدیل کرنے کی اجازت دیتا ہے۔ یہاں، ہم ایک دلیل کی شکل کا استعمال کرتے ہیںfor...inہر بار کے لیے یہ معلوم کرنے کے لیے کہ کتنے باروں کی OHLC قدر close قدر کی 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))

یہاں، ہم اپنے اقدار کو مقرر کرنے کے لئے دو دلائل کی شکل کا استعمال کرتے ہیں.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 لوٹاتا ہے. یونری + expr لوٹاتا ہے (یوینری آپریٹر سمیٹری میں کچھ بھی شامل نہیں کیا جاتا ہے) ۔

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

+=

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

expr1 += expr2

مثال

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

واپسیتاروں کے لئے، expr1 اور expr2 کے concatenation لوٹاتا ہے. اعداد کے لئے، ایک عدد یا فلوٹ قدر، یا اقدار کی سیریز لوٹاتا ہے.

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

-

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

expr1 - expr2
- expr

واپسیایک عدد یا فلوٹنگ پوائنٹ ویلیو، یا اقدار کی سیریز لوٹاتا ہے: بائنری + expr1 مائنس expr2 لوٹاتا ہے. یونری-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 ، + لامحدود ، - لامحدود) غلط سمجھا جاتا ہے ، کوئی اور قدر درست ہے۔

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

یہ بھی ملاحظہ کریں 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 متغیرات کی اقدار ہوسکتی ہیں: true ، false یا na۔

مثال

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

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

یہ بھی ملاحظہ کریں var varip int float color string true false

int

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

مثال

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

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

یہ بھی ملاحظہ کریں var varip float bool color string

فلوٹ

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

مثال

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

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

یہ بھی ملاحظہ کریں var varip int bool color string

سٹرنگ

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

مثال

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

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

یہ بھی ملاحظہ کریں var varip int float bool str.tostring str.format

رنگ

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

مثال

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

تبصرےرنگین لٹریلز کی شکل مندرجہ ذیل ہے: # آر آر جی جی بی بی یا # آر آر جی جی بی اے اے۔ حروف کے جوڑے 00 سے ایف ایف تک ہیکساڈیسمل اقدار (0 سے 255 تک اعشاریہ میں) کی نمائندگی کرتے ہیں جہاں آر آر ، جی جی اور بی بی جوڑے رنگ کے سرخ ، سبز اور نیلے رنگ کے اجزاء کی اقدار ہیں۔ اے اے رنگ کی شفافیت (یا الفا جزو) کے لئے ایک اختیاری قدر ہے جہاں 00 پوشیدہ ہے اور ایف ایف غیر شفاف ہے۔ جب کوئی اے اے جوڑا فراہم نہیں کیا جاتا ہے تو ، ایف ایف استعمال ہوتا ہے۔ ہیکساڈیسمل حروف بڑے یا چھوٹے حروف ہوسکتے ہیں۔

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

یہ بھی ملاحظہ کریں var varip int float string color.rgb color.new

صف

مطلوبہ الفاظ کا استعمال متغیر یا دلیل کی array قسم کا واضح طور پر اعلان کرنے کے لئے کیا جاتا ہے۔ صف اشیاء (یا آئی ڈی) کو اس کے ساتھ بنایا جاسکتا ہےarray.new<type>, array.from function.

مثال

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

تبصرےصف اشیاء ہمیشہ series شکل کی ہوتی ہیں۔

یہ بھی ملاحظہ کریں var array.new array.from

اشیاء

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

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

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

type order
    float price
    float amount
    string symbol
  • اقسام کا استعمال کرتے ہوئے اعلان کیا جاتا ہےtype keyword.
  • ٹائپ کی ورڈ کے بعد ٹائپ کا نام آتا ہے۔
  • پہلی سطر کی قسم کی قسم کا نام، چار خالی جگہوں میں داخل ہوتا ہے، اور قسم میں موجود شعبوں کی وضاحت کرتا ہے.
  • ہر فیلڈ کو اس کے ڈیٹا کی قسم کا اعلان کرنے کی ضرورت ہے، جیسے 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)   // 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 مطلوبہ الفاظ کے ذریعہ اعلان کردہ آبجیکٹ ہر تکرار کے درمیان اپنی حالت کو برقرار رکھے گا جس میں ہر تکرار میں اس کے فیلڈ کی اقدار کو دوبارہ شروع کرنے کی ضرورت نہیں ہوگی۔

  • پہلی بار آبجیکٹ کو var مطلوبہ الفاظ کا استعمال کرتے ہوئے اعلان کیا جاتا ہے ، لہذا اس کے فیلڈز (انڈیکس ، قیمت ، حجم) ہر تکرار میں اپنی اقدار کو برقرار رکھیں گے ، پہلی اندراج سے شروع ہو کر آخری اندراج کے ساتھ ختم ہوگا۔
  • currentBar اعتراض 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 کی قدر اسکرپٹ کے عمل درآمد کے اختتام تک بڑھتی رہتی ہے۔


مزید

بھیک مانگنے والاکیوں حکمت عملی اسکوائر کاپی پائن کی حکمت عملی نہیں کر سکتے ہیں

ایجاد کاروں کی مقدار - خواباچھا، ہم چیک کریں گے۔

بھیک مانگنے والاچانگ سپر ڈائیونگ کا اصلاح شدہ رجحان ٹریکر

ایجاد کاروں کی مقدار - خوابہیلو ، براہ کرم بتائیں کہ آپ کی حکمت عملی کیا ہے؟