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

موجد مقداری PINE زبان کا تعارف ٹیوٹوریل

میں تخلیق کیا: 2022-05-30 16:23:43, تازہ کاری: 2022-09-28 17:10:21
comments   0
hits   8860

[TOC]

موجد مقداری PINE زبان کا تعارف ٹیوٹوریل

ویڈیو سبق کے ساتھ: کوانٹم ٹریڈنگ میں داخل ہونا کتنا مشکل ہے؟ ٹریڈنگ ویو کا استعمال کرتے ہوئے پائن زبان کو چھوٹا سفید سے لے کر کوانٹ دیوتا تک - پائن زبان کا ابتدائی تجربہ

انوینٹر کی کوانٹم ٹریڈنگ پلیٹ فارم پائن زبان لکھنے کی حکمت عملی کی حمایت کرتا ہے ، اس کی واپسی کی حمایت کرتا ہے ، پائن زبان کی حکمت عملی کو عملی طور پر چلاتا ہے ، اور پائن زبان کے کم ورژن کے ساتھ مطابقت رکھتا ہے۔اسٹریٹجی اسکوائراس میں بہت ساری پائن حکمت عملی (سکرپٹ) جمع اور منتقل کی گئی ہیں۔

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

یہاں کچھ نمایاں اختلافات کا خلاصہ ہے:

  • 1، ایف ایم زیڈ پر پائن حکمت عملی، کوڈ کے آغاز میں ورژن کا نشان//@versionکوڈ کے ساتھ شروعstrategyindicatorجملے لکھنے کے لئے لازمی نہیں ہیں، فی الحال ایف ایم زیڈ اس کی حمایت نہیں کرتا ہے۔importدرآمد کریںlibraryفنکشن

اس کے علاوہ، آپ کو کچھ حکمت عملی نظر آئے گی جن میں لکھا ہے:

  //@version=5
  indicator("My Script", overlay = true)
  src = close
  a = ta.sma(src, 5)
  b = ta.sma(src, 50)
  c = ta.cross(a, b)
  plot(a, color = color.blue)
  plot(b, color = color.black)
  plotshape(c, color = color.red)

یا پھر اس طرح لکھتے ہیں:

  //@version=5
  strategy("My Strategy", overlay=true)

  longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
  if (longCondition)
      strategy.entry("My Long Entry Id", strategy.long)

  shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
  if (shortCondition)
      strategy.entry("My Short Entry Id", strategy.short)

ایف ایم زیڈ پر اس کا خلاصہ یہ ہے:

  src = close
  a = ta.sma(src, 5)
  b = ta.sma(src, 50)
  c = ta.cross(a, b)
  plot(a, color = color.blue, overlay=true)
  plot(b, color = color.black, overlay=true)
  plotshape(c, color = color.red, overlay=true)

یا:

  longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
  if (longCondition)
      strategy.entry("My Long Entry Id", strategy.long)

  shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
  if (shortCondition)
      strategy.entry("My Short Entry Id", strategy.short)
  • 2، حکمت عملی ((اسکرپٹ) کچھ ٹرانزیکشن سے متعلق ترتیبات ایف ایم زیڈ حکمت عملی انٹرفیس پر “پائن زبان کے ٹرانزیکشن کلاس بیس” پیرامیٹرز کے ذریعہ طے کی گئی ہیں۔

    • اختتامی قیمت ماڈل اور ریئل ٹائم قیمت ماڈل ٹریڈنگ ویو پر، ہم کر سکتے ہیںstrategyفنکشنcalc_on_every_tickپیرامیٹرز کو ترتیب دینے کے لئے حکمت عملی اسکرپٹ ہر قیمت میں تبدیلی کے ساتھ حقیقی وقت میں حکمت عملی کی منطق پر عملدرآمد کریں، اس وقتcalc_on_every_tickپیرامیٹرز پر سیٹ کیا جانا چاہئےtrueپہلے سے طے شدہcalc_on_every_tickپیرامیٹرز ہیںfalseاس کا مطلب یہ ہے کہ اسٹریٹجک منطق کو صرف اس وقت عمل میں لایا جائے گا جب حکمت عملی کی موجودہ K لائن BAR مکمل طور پر ختم ہوجائے۔ ایف ایم زیڈ پر ، پیرامیٹرز کو “پائن لینگویج ٹرانزیکشن کلاس بیس” ٹیمپلیٹ کے ذریعے ترتیب دیا گیا ہے۔

    موجد مقداری PINE زبان کا تعارف ٹیوٹوریل

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

    • مستقبل کے معاہدے کا کوڈ ایف ایم زیڈ پر تجارت کی قسم اگر یہ معاہدہ ہے تو ، اس کی 2 خصوصیات ہیں۔ یہ ہیں “معاملہ جوڑی” اور “معاہدہ کوڈ” ، ریل اسٹیک اور ریٹرننگ کے وقت واضح طور پر تجارت کی جوڑی کی ضرورت کے علاوہ ، “پائن زبان” کے سانچے کے پیرامیٹر “ریٹائز کوڈ” میں بھی مخصوص معاہدہ کوڈ کی ضرورت ہے۔ مثال کے طور پر ، مستقل معاہدہ صرف بھرنا ہےswap، معاہدہ کوڈ آپریشن کے تبادلے کے لئے مخصوص ہے کہ آیا اس طرح کے معاہدے موجود ہیں یا نہیں۔ مثال کے طور پر ، تمام سہ ماہی کے معاہدوں کے لئے معاہدے ، یہاں پُر کیا جاسکتا ہےquarterیہ معاہدہ کوڈ ایف ایم زیڈ کے جاوا اسکرپٹ / پطرون / سی ++ زبان API دستاویزات میں بیان کردہ مستقبل کے معاہدے کے کوڈ کے مطابق ہے۔

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

  • 3、runtime.debugruntime.logruntime.errorFMZ توسیع کے لئے فنکشن، ڈیبگنگ کے لئے

ایف ایم زیڈ پلیٹ فارم پر ڈیبگنگ کے لئے 3 افعال شامل کیے گئے ہیں۔

  • runtime.debug: کنسول پرنٹ کرنے کے لئے عام طور پر اس فنکشن کا استعمال نہیں کیا جاتا ہے۔

  • runtime.log: لاگ ان میں آؤٹ پٹ مواد │FMZ PINE زبان کے لئے مخصوص فنکشن │

    runtime.log(1, 2, 3, close, high, ...),可以传多个参数。
    
  • runtime.error: جب کال کیا جاتا ہے تو ، اس کے نتیجے میں آپریشنل غلطی ہوتی ہے ، اور اس میں پیغام کے پیرامیٹرز میں طے شدہ غلطی کا پیغام ہوتا ہے۔

    runtime.error(message)
    
  • 4، کچھ ڈرائنگ فنکشن میں توسیعoverlayپیرامیٹر

FMZ پر پائن زبان، ڈرائنگ میپ فنکشنplotplotshapeplotcharمزید اضافہoverlayپیرامیٹرز کی حمایت کرتا ہے، جس میں پینٹنگز کو مرکزی نقشہ یا ذیلی نقشہ میں مقرر کرنے کی اجازت دیتا ہے.overlayقائم کریںtrueمرکزی نقشے پر پینٹ کریں، اور اسےfalseذیلی نقشے میں پینٹ کریں۔ ایف ایم زیڈ پر پائن حکمت عملی چلانے کے لئے مرکزی نقشہ ، ذیلی نقشہ ایک ساتھ پینٹ کریں۔

  • 5、syminfo.mintickبلٹ ان متغیرات کی قدر

syminfo.mintickبلٹ ان متغیر کی تعریف موجودہ نسل کے لئے کم از کم پیمائش کی قیمت کے طور پر کی جاتی ہے۔فرم پیشکش/بیک ٹیسٹنگانٹرفیس پر “پائن زبان کے ٹرانزیکشن کلاس روم” میں ٹیمپلیٹ پیرامیٹر قیمتوں کا تعین کرنسی کی درستگی اس قدر کو کنٹرول کرسکتا ہے۔ قیمتوں کا تعین کرنسی کی درستگی کی ترتیب 2 یہ ہے کہ جب تجارت کی جاتی ہے تو قیمت کم سے کم تعداد میں دوسرے نمبر تک درست ہوتی ہے ، اس وقت قیمت میں کم سے کم تبدیلی یونٹ 0.01 ہے۔syminfo.mintick0.01 ہے

  • 6، ایف ایم زیڈ پائن اسکرپٹ میں اوسط قیمتوں میں تمام قیمتیں شامل ہیں

مثال کے طور پر: نیچے آرڈر کی قیمت 8000 ہے ، فروخت کی سمت ، تعداد 1 ہاتھ ((ایک ، چادر) ، معاہدے کے بعد اوسط قیمت 8000 نہیں ہے ، 8000 سے کم ((قیمت میں کارروائی کی فیس شامل ہے)) ۔

پائن زبان کی بنیاد

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

ماڈل پر عملدرآمد

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

plot(bar_index, "bar_index")

موجد مقداری PINE زبان کا تعارف ٹیوٹوریل

plotیہ فنکشن ان میں سے ایک ہے جو ہم مستقبل میں زیادہ استعمال کریں گے۔ اس کا استعمال بہت آسان ہے، یہ صرف اعداد و شمار کو منتقل کرنے کے لئے، اعداد و شمار کو منتقل کرنے کے لئے، اعداد و شمار کو منتقل کرنے کے لئے، اعداد و شمار کو منتقل کرنے کے لئےbar_indexلائن کا نامbar_index。 پہلی بار پر bar_index نامی لائن کی قدر 0 ہے، جیسا کہ دیکھا جا سکتا ہے بار بڑھنے کے ساتھ دائیں طرف 1 بڑھتی ہے۔

پالیسی کی ترتیب کے لحاظ سے مختلف ہے، اور پالیسی کے ماڈل پر عملدرآمد کے مختلف طریقے ہیں.收盘价模型اور实时价模型ہم نے پہلے بھی مختصر طور پر بندش قیمت ماڈل کے تصورات کے بارے میں بات کی ہے۔

  • اختتامی قیمت کا ماڈل

جب حکمت عملی کا کوڈ چلایا جاتا ہے تو ، موجودہ K لائن بار کا دور مکمل طور پر چلایا جاتا ہے ، اور جب K لائن بند ہوجاتی ہے تو K لائن کا دور ختم ہوجاتا ہے۔ اس وقت پائن حکمت عملی کی منطق پر عملدرآمد کیا جاتا ہے ، اور ٹریڈ سگنل کو اگلے K لائن بار کے آغاز پر عملدرآمد کیا جائے گا۔

  • ریئل ٹائم قیمت کا ماڈل

جب حکمت عملی کا کوڈ چلایا جاتا ہے تو ، موجودہ K لائن بار ، چاہے وہ بند ہو یا نہ ہو ، ہر بار جب تجارت میں تبدیلی ہوتی ہے تو ، پائن حکمت عملی کی منطق پر عملدرآمد کیا جاتا ہے ، جس سے ٹریڈنگ سگنل کو فوری طور پر عملدرآمد کیا جاتا ہے۔

جب پائن زبان کی حکمت عملی کو گراف پر بائیں سے دائیں سے انجام دیا جاتا ہے تو ، گراف پر K لائن بار کو تقسیم کیا جاتا ہے历史Barاور实时Barکی:

  • تاریخ بار

جب حکمت عملی کو “ریئل اسٹیک قیمت ماڈل” کے طور پر ترتیب دیا جاتا ہے تو ، چارٹ پر تمام K لائن بار ، سوائے دائیں طرف کے ایک K لائن بار کے ، پر عملدرآمد ہوتا ہے۔历史Bar◦ حکمت عملی منطق میں ہر ایک历史Barصرف ایک بار انجام دیا گیا جب حکمت عملی کو “خریداری قیمت ماڈل” کے طور پر ترتیب دیا گیا ہے تو ، چارٹ پر موجود تمام بارز پر عملدرآمد شروع ہوتا ہے历史Bar◦ حکمت عملی منطق میں ہر ایک历史Barصرف ایک بار انجام دیا گیا

تاریخ بار کے حساب سے: اسٹریٹجک کوڈ کو ہسٹری بار بند ہونے کی حالت میں ایک بار انجام دیا جاتا ہے ، پھر اسٹریٹجک کوڈ اگلے ہسٹری بار میں اس وقت تک جاری رہتا ہے جب تک کہ تمام ہسٹری بارز ایک بار انجام نہ دیں۔

  • حقیقی وقت بار

جب حکمت عملی کو دائیں طرف کے آخری K لائن بار پر عملدرآمد کیا جاتا ہے تو ، یہ بار حقیقی وقت کی بار ہے۔ جب حقیقی بار بند ہوجاتا ہے تو ، یہ بار ایک گزرنے والی حقیقی بار میں تبدیل ہوجاتا ہے ((تاریخ بار میں تبدیل ہوجاتا ہے)) ۔ چارٹ کے دائیں طرف ایک نیا حقیقی بار پیدا ہوتا ہے۔

جب حکمت عملی کو “ریئل ٹائم پرائس ماڈل” کے طور پر ترتیب دیا جاتا ہے تو ، ہر بار حکمت عملی کی منطق کو ریئل ٹائم بار میں ہر بار کی حکمت عملی پر عملدرآمد کیا جاتا ہے۔ جب حکمت عملی کو “خریداری قیمت ماڈل” کے طور پر سیٹ کیا جاتا ہے تو ، چارٹ پر ریئل ٹائم بار نہیں دکھایا جاتا ہے۔

ریئل ٹائم بار کے حساب سے: اگر حکمت عملی کو “خریداری کی قیمت ماڈل” کے طور پر ترتیب دیا گیا ہے تو چارٹ حقیقی بار نہیں دکھاتا ہے ، حکمت عملی کا کوڈ صرف ایک بار موجودہ بار کے اختتام پر عملدرآمد ہوتا ہے۔ اگر حکمت عملی کو “ریئل ٹائم بار” کے طور پر ترتیب دیا گیا ہے تو ، ریئل ٹائم بار پر حساب کتاب اور تاریخ بار بالکل مختلف ہے۔ ہر بار جب حکمت عملی کو عملی میں تبدیل کیا جاتا ہے تو ، حکمت عملی کا کوڈ نافذ کیا جاتا ہے۔ مثال کے طور پر ، بلٹ ان متغیرhighlowcloseتاریخی بار پر یہ بات یقینی ہے کہ ریئل ٹائم بار پر یہ اقدار ہر بار تبدیل ہوسکتی ہیں۔ لہذا ان اقدار پر مبنی اشارے جیسے اعداد و شمار بھی ریئل ٹائم میں تبدیل ہوسکتے ہیں۔closeاس کے علاوہ، یہ بھی کہا گیا ہے کہ:highاورlowہمیشہ موجودہ ریئل ٹائم بار کے آغاز کے بعد سے حاصل کی گئی سب سے زیادہ اونچائی اور کم سے کم نچلی سطح کی نمائندگی کرتا ہے۔ یہ بلٹ ان متغیرات ریئل ٹائم بار کی آخری تازہ کاری کے وقت کی حتمی قیمت کی نمائندگی کرتے ہیں۔

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

نوٹس:

  /*backtest 
  ...
  ..
  .
  */

پیکیج میں FMZ پلیٹ فارم پر کوڈ کی شکل میں محفوظ کردہ ریٹرننگ کنفیگریشن کی معلومات ہے۔

  /*backtest
  start: 2022-06-03 09:00:00
  end: 2022-06-08 15:00:00
  period: 1m
  basePeriod: 1m
  exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
  */

  var n = 0
  if not barstate.ishistory
      runtime.log("n + 1之前, n:", n, " 当前bar_index:", bar_index)
      n := n + 1
      runtime.log("n + 1之后, n:", n, " 当前bar_index:", bar_index)

  plot(n, title="n")

موجد مقداری PINE زبان کا تعارف ٹیوٹوریل

موجد مقداری PINE زبان کا تعارف ٹیوٹوریل

ہم نے صرف ریئل ٹائم بار میں کئے جانے والے مناظر کا جائزہ لیا ہے، لہذا ہم نے استعمال کیا ہےnot barstate.ishistoryاظہار کی پابندی صرف ریئل ٹائم بار میں متغیر n پر جمع کی جاتی ہے اور جمع کرنے کے عمل کو انجام دینے سے پہلے اور بعد میں استعمال کیا جاتا ہےruntime.logفنکشن آؤٹ پٹ کی معلومات حکمت عملی کی لاگ میں۔ پینٹنگ فنکشن کا استعمال کرتے ہوئےplotn کو دیکھا جاسکتا ہے جب حکمت عملی ہسٹری بار میں چل رہی تھی۔ n ہمیشہ 0 رہا ہے۔ جب عملی طور پر بار پر عملدرآمد کیا جاتا ہے تو n جمع 1 کا عمل ہوتا ہے ، اور عملی طور پر بار پر عملی طور پر ہر بار پر عملدرآمد ہوتا ہے۔ لاگ ان معلومات سے دیکھا جاسکتا ہے کہ ہر بار میں پالیسی کوڈ پر دوبارہ عملدرآمد کیا جاتا ہے n کو پچھلے بار میں پالیسی کوڈ کی آخری پیش کش کی گئی قیمت پر دوبارہ ترتیب دیا جاتا ہے۔ جب پالیسی کوڈ کو آخری بار میں عملی طور پر بار میں اپ ڈیٹ کیا جاتا ہے تو n کی قیمت پیش کی جاتی ہے۔ لہذا ، یہ دیکھا جاسکتا ہے کہ گراف میں ریئل ٹائم بار سے شروع ہوتا ہے ، ہر بار بار میں اضافے کے ساتھ n کو بڑھایا جاتا ہے۔

آخر میں: 1۔ جب حکمت عملی کو ریئل ٹائم بار میں عملدرآمد کیا جاتا ہے تو ، ہر بار جب صورتحال کی تازہ کاری ہوتی ہے تو اس میں ایک حکمت عملی کا کوڈ ہوتا ہے۔ 2۔ جب ریئل ٹائم بار پر عملدرآمد ہوتا ہے تو ، ہر بار پالیسی کوڈ پر عملدرآمد سے پہلے متغیرات کو رول آؤٹ کیا جاتا ہے۔ 3، جب ریئل ٹائم بار پر عملدرآمد کیا جاتا ہے تو ، اختتامی اپ ڈیٹ کے وقت متغیرات کو ایک بار پیش کیا جاتا ہے۔

اعداد و شمار کے پیچھے جانے کی وجہ سے ، چارٹ پر منحنی خطوط جیسے ڈرائنگ آپریشنز کو دوبارہ ڈرائنگ کا سبب بن سکتا ہے ، مثال کے طور پر ہم نے ابھی ٹیسٹ کوڈ میں ترمیم کی ہے ، ریلڈ ڈسک ٹیسٹ:

  var n = 0
  if not barstate.ishistory
      runtime.log("n + 1之前, n:", n, " 当前bar_index:", bar_index)
      n := open > close ? n + 1 : n
      runtime.log("n + 1之后, n:", n, " 当前bar_index:", bar_index)

  plot(n, title="n")

لمحہ اے کا اسکرین شاٹ موجد مقداری PINE زبان کا تعارف ٹیوٹوریل

لمحہ بی کا اسکرین شاٹ موجد مقداری PINE زبان کا تعارف ٹیوٹوریل

ہم نے صرف اس جملے میں ترمیم کی ہے:n := open > close ? n + 1 : n، موجودہ ریئل ٹائم بار جب سونا ہے ((یعنی کھلنے کی قیمت بند ہونے کی قیمت سے زیادہ ہے) تب ہی n کو جمع کیا جاتا ہے۔ جیسا کہ آپ دیکھ سکتے ہیں کہ پہلے گراف میں ((وقت A) اس وقت کھلنے کی قیمت بند ہونے کی قیمت سے زیادہ ہے ، لہذا n کو جمع کیا گیا ہے ، گراف کا منحنی خطوط n کی قیمت 5 ہے۔ پھر رجحان کی تبدیلی ، قیمت کی تازہ کاری جیسا کہ دوسرے گراف میں دکھایا گیا ہے۔ اس وقت کھلنے کی قیمت بند ہونے کی قیمت سے کم ہے۔ (سورج کی لکیر) ، n کی قیمت واپس چلی گئی اور اس میں کوئی جمع نہیں ہوا۔ گراف کا منحنی خطوط n بھی فوری طور پر دوبارہ تیار کیا گیا ، اس وقت منحنی خطوط پر n 4 ہے۔ لہذا ، ریئل ٹائم بار پر دکھائے جانے والے سنڈ فورک ، ڈیڈ فورک وغیرہ سگنل غیر یقینی ہیں ، اور ان کی تبدیلی کا امکان ہے۔

  • فنکشن میں متغیرات کا سیاق و سباق

ذیل میں ہم پائن زبان کے افعال میں متغیرات کا مطالعہ کرتے ہیں۔ کچھ پائن سبق کے مطابق ، افعال میں متغیرات اور افعال سے باہر متغیرات میں اس طرح کا فرق ہے:

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

کیا یہ پڑھنے کے لئے کچھ مشکل ہے؟ کوئی بات نہیں، ہم نے FMZ پر چلنے والے ایک ٹیسٹ کوڈ کے ذریعے اس مسئلے کو سمجھا:

  /*backtest
  start: 2022-06-03 09:00:00
  end: 2022-06-08 15:00:00
  period: 1m
  basePeriod: 1m
  exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
  */

  f(a) => a[1]
  f2() => close[1]  

  oneBarInTwo = bar_index % 2 == 0
  plotchar(oneBarInTwo ? f(close) : na, title = "f(close)", color = color.red, location = location.absolute, style = shape.xcross, overlay = true, char = "A")   
  plotchar(oneBarInTwo ? f2() : na, title = "f2()", color = color.green, location = location.absolute, style = shape.circle, overlay = true, char = "B")   
  plot(close[2], title = "close[2]", color = color.red, overlay = true)
  plot(close[1], title = "close[1]", color = color.green, overlay = true)

پیچھا چل رہا ہے اسکرین شاٹ

موجد مقداری PINE زبان کا تعارف ٹیوٹوریل

ٹیسٹ کا کوڈ نسبتاً سادہ ہے اور بنیادی طور پر دو طریقوں سے حوالہ کردہ اعداد و شمار کا جائزہ لینے کے لیے ہے:f(a) => a[1]اورf2() => close[1]

  • f(a) => a[1]اس طرح کے طور پر: فنکشن کا استعمال کرتے ہوئے پیرامیٹرز، آخر میں واپسa[1]

  • f2() => close[1]براہ راست بلٹ ان متغیرات کا استعمال کرتے ہوئے:closeفنکشن کے آخر میں واپسیclose[1]

[]اعداد و شمار کی سیریز متغیر کی تاریخی اقدار کے حوالے سے استعمال ہونے والی علامت، close[1] یعنی موجودہ بندش کی قیمت سے پہلے بار پر بندش کی قیمت کا ڈیٹا۔ ہمارے ٹیسٹ کوڈ نے چار اعداد و شمار چارٹ پر ڈرائے:

  • plotchar(oneBarInTwo ? f(close) : na, title = "f(close)", color = color.red, location = location.absolute, style = shape.xcross, overlay = true, char = "A") ایک حرف A سے A پر رنگا ہوا ہے، اور جب oneBarInTwo سچ ہے تو اس کی جگہ (Y محور پر) یہ ہے:f(close)واپسی کی قدر

  • plotchar(oneBarInTwo ? f2() : na, title = "f2()", color = color.green, location = location.absolute, style = shape.circle, overlay = true, char = "B") ایک حرف B کو سبز رنگ میں ڈرائنگ کریں، جب oneBarInTwo سچ ہو تو ڈرائنگ کریں، اور ڈرائنگ کی پوزیشن (Y محور پر) یہ ہے:f2()واپسی کی قدر

  • plot(close[2], title = "close[2]", color = color.red, overlay = true) لکیر سرخ رنگ کی ہے اور اس کا مقام (Y محور پر)close[2]یعنی موجودہ بار کے پہلے نمبر پر 2 نمبر پر بند ہونے کی قیمت (بائیں نمبر پر 2 نمبر پر) بار

  • plot(close[1], title = "close[1]", color = color.green, overlay = true) سبز رنگ کی لکیر جس کا مقام (Y محور پر)close[1]یعنی موجودہ بار کے پہلے نمبر پر بند ہونے کی قیمت (بائیں نمبر پر)

اسکرین شاٹ کی طرف سے حکمت عملی کی پیمائش کے ذریعے چل رہا ہے، اگرچہ ڈرائنگ A استعمال کیا جاتا ہے کے لئے نشان لگا دیا گیا ہےf(a) => a[1]اور پینٹ B استعمال کیا جاتا ہے کہ افعال کے نشاناتf2() => close[1]استعمال کیا جاتا ہے[1] اعداد و شمار کے سلسلے میں تاریخی اعداد و شمار کا حوالہ دیتے ہیں ، لیکن چارٹ پر “A” اور “B” کے نشانات کی پوزیشن بالکل مختلف ہے۔ “A” کے نشانات کی پوزیشن ہمیشہ سرخ لائن پر ہوتی ہے ، یعنی حکمت عملی میں کوڈplot(close[2], title = "close[2]", color = color.red, overlay = true)اس لائن پر جو اعداد و شمار استعمال ہوئے ہیں وہ یہ ہیں:close[2]

موجد مقداری PINE زبان کا تعارف ٹیوٹوریل

اس کی وجہ یہ ہے کہ K لائن بار کی طرف سے انڈیکس، یعنی بلٹ ان متغیرbar_indexحساب لگائیں کہ آیا “A” اور “B” نشانات ڈرائے جائیں گے۔ “A” اور “B” نشانات ہر K لائن بار پر نہیں ڈرائے جاتے ہیں ((ڈرائنگ کرتے وقت فنکشن کال کریں حساب لگائیں) ۔ فنکشنf(a) => a[1]اس طرح سے حوالہ کردہ اقدار، اگر فنکشن ہر بار پر نہیں بلایا جاتا ہے تو فنکشن کے ساتھ منسلک کیا جائے گاf2() => close[1]اس طرح کے حوالہ جات کے لئے مختلف اقدار استعمال کیا جاتا ہے یہاں تک کہ اگر[1] اس طرح ایک ہی انڈیکس)

  • کچھ بلٹ ان افعال کو ہر بار پر حساب لگانے کی ضرورت ہوتی ہے تاکہ ان کے نتائج کو صحیح طریقے سے شمار کیا جاسکے

ایک سادہ مثال کے طور پر اس کی وضاحت کریں:

  res = close > close[1] ? ta.barssince(close < close[1]) : -1
  plot(res, style = plot.style_histogram, color=res >= 0 ? color.red : color.blue)

ہم اس کوڈ کو فون کریں گےta.barssince(close < close[1])ایک تین جہتی آپریٹر میں لکھاcondition ? value1 : value2اور اس کے نتیجے میں صرفclose > close[1]جب آپ ta.barssince فنکشن کو کال کرتے ہیں تو آپ کو اس کی ضرورت نہیں ہے۔ta.barssinceفنکشن سے حساب کیا جاتا ہے آخری بارclose < close[1]تشکیل کے وقت K لائنوں کی تعداد ۔ جب ta.barssince فنکشن کو کال کیا جاتا ہے تو یہ close > close ہوتا ہے[1] ، یعنی موجودہ اختتامی قیمت پچھلے بار کی اختتامی قیمت سے زیادہ ہے ، جب فنکشن ta.barssince کو کال کیا جاتا ہے تو اس کی شرط close < close[1] نہ تو قائم کیا گیا ہے اور نہ ہی آخری بار قائم کیا گیا ہے۔

ta.barssince: جب اس کو بلایا جاتا ہے تو ، اگر موجودہ K لائن سے پہلے اس شرط کو کبھی پورا نہیں کیا گیا ہے تو ، یہ فنکشن واپس آئے گا na。

جیسا کہ شکل میں دکھایا گیا ہے:

موجد مقداری PINE زبان کا تعارف ٹیوٹوریل

تو جب ہم نے اس کا نقشہ کھینچا تو ہم نے صرف وہ اعداد و شمار کھینچے تھے جن میں ریز متغیر کی قدر ہوتی تھی.

اس مسئلے سے بچنے کے لئے، ہم صرف استعمال کرتے ہیںta.barssince(close < close[1])فنکشن کال کو ٹرپل آپریٹر سے باہر لے جایا جاتا ہے اور کسی بھی ممکنہ مشروط شاخ کے بیرونی حصے پر لکھا جاتا ہے۔ اس سے یہ ہر K لائن بار پر حساب کتاب کرتا ہے۔

  a = ta.barssince(close < close[1])
  res = close > close[1] ? a : -1
  plot(res, style = plot.style_histogram, color=res >= 0 ? color.red : color.blue)

موجد مقداری PINE زبان کا تعارف ٹیوٹوریل

ٹائم سیریز

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

  • ٹائم سیریز پر متغیرات کا حساب لگانا بہت آسان ہے ہم اس میں ایک فنکشن بناتے ہیںta.cumمثال کے طور پر
  ta.cum

  Cumulative (total) sum of `source`. In other words it's a sum of all elements of `source`.
  ta.cum(source) → series float
  RETURNS
  Total sum series.
  ARGUMENTS
  source (series int/float)
  SEE ALSO
  math.sum

ٹیسٹ کوڈ:

  v1 = 1
  v2 = ta.cum(v1)
  plot(v1, title="v1")
  plot(v2, title="v2")
  plot(bar_index+1, title="bar_index")

بہت کچھta.cumاس طرح کے بلٹ ان افعال کو براہ راست ٹائم سیریز پر اعداد و شمار کے ساتھ کام کر سکتے ہیں، جیسےta.cumاس کے بعد ہم نے ایک گراف استعمال کیا تاکہ ہم سمجھ سکیں۔

اسٹریٹجک عملدرآمد bar_index array v1 array v2 array | - | - | - | - | حکمت عملی کے لئے چلتا ہے 1st K-لائن Bar حکمت عملی کے 2nd K-لائن پر چلتا ہے حکمت عملی کے لئے چلتا ہے تیسری جڑ KBar کراس 2 کراس 1 کراس 3 کراس |…|…|…|…| اس حکمت عملی کو N + 1 K کی جڑ پر چلاتا ہے.

جیسا کہ آپ دیکھ سکتے ہیں ، v1 ، v2 اور یہاں تک کہ bar_index وقت کی ترتیب کی ساخت ہیں ، اور ہر بار میں اس کے مطابق اعداد و شمار ہیں۔ اس ٹیسٹ کوڈ میں ، چاہے “ریئل ٹائم پرائس ماڈل” یا “ہولڈنگ پرائس ماڈل” کا فرق صرف یہ ہے کہ آیا چارٹ پر حقیقی بار دکھایا گیا ہے۔ رفتار کی پیمائش کے ل we ، ہم “ہولڈنگ پرائس ماڈل” کی واپسی ٹیسٹ کا استعمال کرتے ہیں۔

موجد مقداری PINE زبان کا تعارف ٹیوٹوریل

کیونکہ v1 ہر بار پر 1 ہےta.cum(v1)جب فنکشن پہلی K لائن Bar پر چلایا جاتا ہے تو صرف پہلی بار کی وجہ سے ، اس کا نتیجہ 1 ہے ، جس کی وجہ سے متغیر v2 کو دیا گیا ہے۔ جبta.cum(v1)دوسرے K لائن بار پر عمل کرتے وقت ، پہلے ہی 2 K لائن بار موجود ہیں ((پہلا مماثل بلٹ ان متغیر bar_index 0 ہے ، دوسرا مماثل بلٹ ان متغیر bar_index 1 ہے) ، لہذا حساب کتاب 2 ہے ، متغیر v2 کو دی گئی ہے ، اور اسی طرح آگے بڑھ رہا ہے۔ یہ حقیقت میں مشاہدہ کیا جاسکتا ہے کہ v2 چارٹ میں K لائن بار کی تعداد ہے ، کیونکہ K لائنوں کی انڈیکسbar_indexیہ 0 سے بڑھتا ہے، توbar_index + 1اصل میں K لائنوں کی تعداد ہے.v2اورbar_indexیہ ایک ہی تصویر ہے۔

موجد مقداری PINE زبان کا تعارف ٹیوٹوریل

میں بھی استعمال کر سکتا ہوںta.cumبلٹ ان فنکشن موجودہ چارٹ پر تمام بار کی بندش کی قیمتوں کا مجموعہ شمار کرتا ہے، پھر یہ صرف اس طرح لکھا جا سکتا ہے:ta.cum(close)، جب حکمت عملی کو دائیں طرف کے ریئل ٹائم بار پر چلایا جاتا ہےta.cum(close)اس کے نتیجے میں چارٹ پر موجود تمام باروں کے اختتامی قیمتوں کا مجموعہ ہوتا ہے (بغیر دائیں طرف چلنے کے ، صرف موجودہ بار میں اضافہ ہوتا ہے) ۔

ٹائم سیریز پر متغیرات کا آپریشن آپریٹرز کے ذریعہ بھی کیا جاسکتا ہے ، جیسے کوڈ:ta.sma(high - low, 14)، بلٹ میں متغیراتhigh(K لائن بار زیادہ سے زیادہ قیمت) مائنسlow(K لائن بار کم از کم قیمت) ، آخری استعمالta.smaفنکشن اوسط طے کرتا ہے۔

  • فنکشن کال کے نتائج بھی ٹائم سیریز میں اقدار کے نشانات چھوڑتے ہیں
  v1 = ta.highest(high, 10)[1]
  v2 = ta.highest(high[1], 10)
  plot(v1, title="v1", overlay=true)
  plot(v2, title="v2", overlay=true)

یہ ٹیسٹ کوڈ ریٹرننگ کے وقت ٹیسٹ چل رہا ہے اور یہ دیکھا جا سکتا ہےv1اورv2کی قدر ایک جیسی ہے، اور چارٹ پر کھینچی گئی لائن بھی مکمل طور پر ملاپ کرتی ہے۔ فنکشن کالنگ کے حساب سے نکلنے والا نتیجہ ٹائم سیریز میں قدر کا نشان چھوڑتا ہے، جیسے کوڈta.highest(high, 10)[1]ان میں سےta.highest(high, 10)ایک فنکشن کال کی طرف سے حاصل کردہ نتائج بھی استعمال کیا جا سکتا ہے.[1] اس کی تاریخی قیمت کا حوالہ دیتے ہوئے. موجودہ بار کے پچھلے بار کے مطابقta.highest(high, 10)اس کا نتیجہ یہ ہے کہta.highest(high[1], 10)تو؟ta.highest(high[1], 10)اورta.highest(high, 10)[1]مکمل طور پر مساوی۔

ایک اور ڈرائنگ فنکشن کا استعمال کرتے ہوئے آؤٹ پٹ کی معلومات کی توثیق کریں:

  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, overlay=true)
  plotchar(true, title="b", char=str.tostring(b), location=location.belowbar, color=color.green, overlay=true)

آپ دیکھ سکتے ہیں کہ ٹائم سیریز میں متغیر a اور متغیر b کی قیمتیں متعلقہ بار کے اوپر اور نیچے دکھائی دیتی ہیں۔ اس ڈرائنگ کوڈ کو سیکھنے کے دوران برقرار رکھا جاسکتا ہے ، کیونکہ جانچ اور تجربے کے دوران اکثر معلومات کو چارٹ پر دیکھنے کے لئے آؤٹ پٹ کرنے کی ضرورت پڑسکتی ہے۔

موجد مقداری PINE زبان کا تعارف ٹیوٹوریل

سکرپٹ کی ساخت

عمومی ڈھانچہ

اس سبق کے ابتدائی حصے میں ہم نے ایف ایم زیڈ پر پائن اور ٹریڈنگ ویو پر پائن زبان کے استعمال کے بارے میں کچھ اختلافات کا خلاصہ کیا ہے۔ ایف ایم زیڈ پر پائن کوڈ لکھتے وقت ورژن نمبر کو نظرانداز کیا جاسکتا ہے ، لیکن اس کے علاوہ ، اس میں مختلف ورژن نمبر شامل ہیں۔indicator()strategy()اور، عارضی طور پر معاونت نہیںlibrary()یقیناً ، پائن اسکرپٹ کے پہلے ورژن کے ساتھ مطابقت پانے کے لئے ، حکمت عملی لکھنے کے وقت ، اس طرح لکھیں://@version=5indicator()strategy()یہ بھی ممکن ہے۔ کچھ پالیسی کی ترتیبات بھی دستیاب ہیں۔strategy()فنکشن میں پاس پیرامیٹر سیٹ کریں.

<version>
<declaration_statement>
<code>

<version>ورژن کنٹرول کی معلومات کو نظر انداز کیا جا سکتا ہے۔

تبصرہ

پائن بولیاں//ایک سطر کے تبصرے کے طور پر ، کیونکہ پائن زبان میں کثیر سطر تبصرے نہیں ہیں۔/**/کثیر سطر تبصرے کے لیے استعمال کیا جاتا ہے۔

کوڈ

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

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

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

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

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

indicator("", "", true)             // 声明语句(全局范围),可以省略不写

barIsUp() =>                        // 函数声明(全局范围)
    close > open                    // 本地块(本地范围)

plotColor = if barIsUp()            // 变量声明 (全局范围)
    color.green                     // 本地块 (本地范围)
else
    color.red                       // 本地块 (本地范围)

runtime.log("color", color = plotColor)  // 调用一个内置函数输出日志 (全局范围)

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

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

a = open + high + low + close

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

a = open +
      high +
          low +
             close

ایک طویل پلاٹ ((() کال کو پیکیج کیا جاسکتا ہے۔

close1 = request.security(syminfo.tickerid, "D", close)      // syminfo.tickerid 当前交易对的日线级别收盘价数据系列
close2 = request.security(syminfo.tickerid, "240", close)    // syminfo.tickerid 当前交易对的240分钟级别收盘价数据系列
plot(ta.correlation(close, open, 100),                       // 一行长的plot()调用可以被包装
   color = color.new(color.purple, 40),
   style = plot.style_area,
   trackprice = true)

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

test(c, o) =>
    ret = c > o ?
       (c > o+5000 ? 
          1 :
              0):
       (c < o-5000 ? 
          -1 : 
              0)
           
                   
a = test(close, open)
plot(a, title="a")

شناخت اور آپریٹر

شناخت کنندہ

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

  • 1، آئی ڈی کو بڑے حروف میں لکھنا ضروری ہے(A-Z)یا اس سے بھی کم(a-z)حروف یا زیر لکیر(_)شروع، بطور شناخت کرنے والا پہلا حرف。
  • 2، شناخت کرنے والے کے پہلے حرف کے بعد آنے والا حرف ہو سکتا ہےحروفنیچے کی لکیریااعداد
  • 3۔ شناخت کنندہ کا نام بڑے اور چھوٹے حروف میں ہے۔

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

fmzVar
_fmzVar
fmz666Var
funcName
MAX_LEN
max_len
maxLen
3barsDown  // 错误的命名!使用了数字字符作为标识符的开头字符

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

  • 1، تمام حروف بڑے حروف میں مستقل ناموں کے لئے استعمال ہوتے ہیں۔
  • 2. استعمال کریں۔کمہار قواعددیگر شناخت کنندہ ناموں کے لئے استعمال کیا جاتا ہے۔
// 命名变量、常量
GREEN_COLOR = #4CAF50
MAX_LOOKBACK = 100
int fastLength = 7

// 命名函数
zeroOne(boolValue) => boolValue ? 1 : 0

آپریٹر

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

تفویض آپریٹرز، عددی آپریٹرز، موازنہ آپریٹرز، منطقی آپریٹرز،? :ٹرپل آپریٹرز[]تاریخی حوالہ آپریٹر

عددی آپریٹر*مثال کے طور پر ، ٹریڈنگ ویو پر پائن زبان کے آپریٹر کے نتیجے کے نتیجے میں پیدا ہونے والی قسم کے مسئلے کے برعکس ، مندرجہ ذیل ٹیسٹ کوڈ ہے:

//@version=5
indicator("")
lenInput = input.int(14, "Length")
factor = year > 2020 ? 3 : 1
adjustedLength = lenInput * factor
ma = ta.ema(close, adjustedLength)  // Compilation error!
plot(ma)

اسکرپٹ کو ٹریڈنگ ویو پر چلاتے وقت کمپائل کی خرابی کا سامنا کرنا پڑتا ہے کیونکہ:adjustedLength = lenInput * factorاس کے بعد ہم اس کو ضرب دیتے ہیںseries intقسم (سیریز)ta.emaفنکشن کا دوسرا پیرامیٹر اس قسم کی حمایت نہیں ک