قل مرحبًا بـ Pine Script v5.0

Oct 7, 2021
اليوم ، نعلن عن تطور Pine إلى الإصدار v5! يوفر الإصدار الجديد من لغة برمجة المؤشرات والاستراتيجيات الخاصة بنا مجموعة من الميزات والتحسينات الجديدة المثيرة. أصبح Pine الآن أقوى من أي وقت مضى ، وستساعدنا التغييرات في الإصدار 5 على نقل اللغة إلى مستويات جديدة. يقدم هذا المنشور بعضًا من أحدث الميزات المتاحة ؛ تأكد من قراءة ملاحظات الإصدار ودليل الترحيل.
محول V4 إلى V5
ستستمر برامج Pine النصية الحالية التي تستخدم الإصدارات السابقة من Pine في العمل دون تغيير ، لكننا قدمنا أداة تحويل في محرر Pine لمساعدة المبرمجين على تحويل نصوصهم البرمجية v4 إلى الإصدار 5. سيتم تطبيق التحسينات المستقبلية على Pine لـ v5 حصريًا ، لذلك نوصي بتحويل مؤشراتك واستراتيجياتك إذا كنت ترغب في الاستفادة من الميزات الجديدة. تتوفر أداة التحويل من الإصدار 4 إلى الإصدار الخامس عند تحميل برنامج نصي من الإصدار 4 في المحرر ، من القائمة المنسدلة المزيد:
لاحظ أنه لا يمكن تحويل جميع رموز v4 تلقائيًا. إذا واجهت مشكلات في التحويل أو كنت تفضل تحويل البرامج النصية يدويًا ، فإن دليل الترحيل الخاص بنا الذي يوثق جميع التغييرات بين الإصدارين 4 و 5 سيرشدك.
LIBRARIES
تعد LIBRARIES من الإضافات الرئيسية إلى Pine التي تأتي مع الإصدار الخامس. تعد نوعًا جديدًا من المنشورات التي تتيح لك إنشاء دوال مخصصة لإعادة استخدامها في برامج نصية أخرى. بمجرد نشر المكتبة ، يمكن للنصوص الأخرى (سواء كانت مؤشرات أو استراتيجيات أو حتى مكتبات أخرى) استيرادها واستخدام دوالها. يمكنك استخدام المكتبات لتضمين خوارزميات معقدة أو دوال متكررة الاستخدام بحيث يمكنك أنت أو مجتمع Pine بأكمله إعادة استخدامها بسهولة.لبدء العمل مع LIBRARIES، راجع صفحة دليل المستخدم الخاصة بنا على المكتبات. في نهاية هذا المنشور ، ستجد أمثلة من المكتبات تم نشرها بواسطة أعضاء فريق PineCoders لدينا. يمكنك مشاهدة المكتبات المنشورة من موجز البرنامج النصي هنا.
القيم الافتراضية للدوال المحددة بواسطة المستخدم
تحسين يسير جنبًا إلى جنب مع المكتبات: يمكن تحديد قيمة افتراضية للمعلمات في الدوال التي يحددها المستخدم ، مما يجعلها اختيارية بشكل فعال. في المثال أدناه ، نعلن عن دالة مخصصة customPow () ترفع القاعدة إلى أس exp. إذا لم يتم تحديد exp عند استدعاء الدالة، فسيتم استخدام 2:
//@version=5
indicator("")
customPow(base, exp = 2) =>
    result = 1
    for i = 1 to exp
        result *= base
plot(customPow(11)) // 11^2
plot(customPow(11, 4)) // 11^4
SWITCH
بيان التبديل switch الجديد هو تطور في عبارة if المألوفة. إذا كان عليك في أي وقت إنشاء شجرة كبيرة من عبارات if-else ، فستقدر مدى ملاءمة تحقيق النتيجة المرجوة باستخدام Switch. يمكنك معرفة المزيد عنها في دليلنا المرجعي. شاهده في العمل في الكود أدناه. إنه مؤشر متوسط المدى الحقيقي المدمج لدينا ، والذي يستخدم الآن بيان تبديل لتوفير خوارزميات تجانس مختلفة في حساباته:
//@version=5
indicator(title="Average True Range", shorttitle="ATR", timeframe="")
lengthInput = input.int(title="Length", defval=14, minval=1)
smoothingInput = input.string(title="Smoothing", defval="RMA", options = ["RMA", "SMA", "EMA", "WMA"])

maFunction(source, length) =>
    switch smoothingInput
        "RMA" => ta.rma(source, length)
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        => ta.wma(source, length)

plot(maFunction(ta.tr(true), lengthInput), title = "ATR", color=#B71C1C)
مجموعات الرسم DRAWING COLLECTIONS
تحسين كبير في جودة العمل مع رسومات Pine: السطر الجديد ، all ، label.all ، box.all ، والجدول. تحتوي جميع متغيرات المصفوفة المضمنة دائمًا على معرفات جميع الرسومات من النوع المحدد المرسومة حسب البرنامج النصي الخاص بك.يمكنك استخدامه ، على سبيل المثال ، لتقليص عدد الرسومات المعروضة على الرسم البياني بناءً على قيمة يحددها المستخدم. في البرنامج النصي أدناه ، نرسم خطًا على كل فتح يومي جديد (بحد أقصى 50 تقريبًا ، بناءً على حد السطر الافتراضي للبرنامج النصي). ثم نتحقق مما إذا كان عدد الأسطر المسموح بها على الرغم من تجاوز مدخلات البرنامج النصي ، وحذف السطر الأقدم إذا كان الأمر كذلك:
//@version=5
indicator("Daily Open", overlay = true)

qtyOfLinesInput = input.int(10, "Draw only last n lines", minval = 0, maxval = 50)

if ta.change(time("1D"))
    line.new(bar_index, open, bar_index + 1, open, extend = extend.right)
    if array.size(line.all) > qtyOfLinesInput
        line.delete(array.get(line.all, 0))
WHILE
ميزة Pine الأخرى التي طال انتظارها والتي تأتي مع v5 هي while loops. تقوم تعليمة while بإنشاء حلقة ستتوقف عندما يكون الشرط خاطئًا أو يتم استخدام أمر break في الحلقة.على سبيل المثال ، إليك مؤشر يحسب الفرق بين متوسط المسافة التي نحتاج إلى الرجوع إليها للعثور على الحجم الأعلى والأسفل مساويًا للحجم الإجمالي لآخر n من الأعمدة البيانية . كلما احتجنا إلى مزيد من النظر إلى الوراء للعثور على الحجم الصعودي أو الهبوطي ، كانت قيمته هبوطية أو صعودية:
//@version=5
var int MAX_BARS_BACK = 500
indicator("Volume bias", max_bars_back = MAX_BARS_BACK)

int lookBackInput = input.int(20, "Volume Look Back (bars)", minval = 2, maxval = int(MAX_BARS_BACK / 4))

// Stop the script if the chart does not contain volume data.
bool noVol = na(volume) and nz(math.sum(nz(volume), 200) == 0, true)
if noVol
    runtime.error("No volume data.")

volumeBias(lookBack, maxLookBack) =>
    bool  barUp = ta.rising(close, 1)
    bool  barDn = ta.falling(close, 1)
    float upVolume = 0.
    float dnVolume = 0.
    float avgVolume = math.sum(nz(volume), lookBack)
    int[] upBarNos = array.new_int(0)
    int[] dnBarNos = array.new_int(0)
    int   bar = 1
    bool  volumeFound = false
    while (not volumeFound) and bar < maxLookBack
        if barUp[bar] and upVolume < avgVolume
            upVolume += nz(volume[bar])
            array.push(upBarNos, bar)
        else if barDn[bar] and dnVolume < avgVolume
            dnVolume += nz(volume[bar])
            array.push(dnBarNos, bar)
        bar += 1
        volumeFound := upVolume >= avgVolume and dnVolume >= avgVolume
    float volumeBias = bar >= maxLookBack ? na : array.avg(dnBarNos) - array.avg(upBarNos)

float bias = volumeBias(lookBackInput, MAX_BARS_BACK)
plot(bias, "Volume Bias", bias > 0 ? color.lime : color.fuchsia)
hline(0)
يتم تنفيذ حلقة while للنص البرمجي حتى يتم العثور على حجم التداول المطلوب في كلٍ من بيانات حجم التداول لأعلى ولأسفل ، ولم نتجاوز الحد الأقصى المسموح به لعدد الأعمدة البيانية. يعرض البرنامج النصي أيضًا ميزة أخرى تمت إضافتها إلى Pine v5: runtime.error ().
.
RUNTIME.ERROR()
تتيح دالة runtime.error () الآن إيقاف تنفيذ البرنامج النصي وعرض رسالة خطأ على أي شرط يمكنك تحديده في Pine. سيكون هذا مفيدًا لمنشئي البرامج النصية الذين يريدون منع المستخدمين من استخدام مؤشراتهم بشكل غير صحيح. يمكن استخدامه أيضًا كأداة تصحيح أخطاء غير تقليدية ، لإيقاف التنفيذ أثناء حلقة أو من داخل دالة، على سبيل المثال.لاستخدام الدالة الجديدة ، ما عليك سوى استدعاء الدالة runtime.error () عند استيفاء شروطك. عند تنفيذه ، سيوقف البرنامج النصي ويعرض علامة التعجب المألوفة بجوار اسم المؤشر. عندما ينقر المستخدمون على رمز علامة التعجب ، ستظهر الرسالة التي استخدمتها في استدعاء الدالة.الكود أدناه هو مؤشر VWAP المجرد مع خطأين مخصصين. يظهر الأول عندما لا يحتوي الرمز على أي بيانات وحدة تخزين: يتم حساب VWAP على أساس حجم التداول ، لذلك إذا لم يكن هناك حجم ، فلن يعمل البرنامج النصي. يظهر الثاني عندما يكون الإطار الزمني على الرسم البياني 1D أو أعلى. تقوم حسابات VWAP الأساسية بتجميع بيانات المتوسط ​​المتحرك المرجح بحجم التداول على كل عمود بياني جديد وإعادة تعيينها في بداية يوم جديد ، وبالتالي فإن المؤشر مفيد فقط في الأطر الزمنية خلال اليوم.
//@version=5
indicator("VWAP with custom errors")
if na(volume) // Will be true on symbols with no volume data e.g. TVC:SPX
    runtime.error("There is no volume data for this symbol.")
else if timeframe.isdwm // Will be true on 1D and higher timeframes
    runtime.error("Session-based VWAP does not show meaningful data on timeframes >= 1D.
     Please switch to a lower timeframe.")
plot(ta.vwap)
معلمات الإستراتيجية الجديدة
بشرى سارة للمبرمجين الإستراتيجيين! لقد أضفنا مجموعة كاملة من المتغيرات والدوال الجديدة التي تمنحك رؤية حول الخصائص التجارية والإحصاءات والمقاييس. يتم تحديث قيمهم حيث ينفذ محاكي الوسيط أوامرك ، حتى تتمكن من متابعة القيم مع تقدم استراتيجيتك.
.
.
مساحات NAMESPACES جديدة
يخبرنا مجتمعنا من مبرمجي Pine أنهم يقدرون المعدل غير المسبوق للإضافات التي أجريناها على Pine في السنوات القليلة الماضية ، ونعتزم الحفاظ على نفس الوتيرة في المستقبل. هذا ، مع ذلك ، يخلق دفقًا ثابتًا من دوال Pine الجديدة والمتغيرات المضمنة. لدعم هذا النمو المجنون ، احتجنا إلى تنظيم أفضل 600 اسم حالي مستخدمة في اللغة. قمنا بذلك عن طريق إضافة مساحات أسماء جديدة لتجميع الدوال بطرق تعكس استخدامها بشكل أفضل. تم أيضًا إعادة تسمية العديد من أسماء معلمات الدوال لتسهيل فهمها.مثال على مساحة الاسم الجديدة هو ta. ، والذي يتضمن الآن جميع المتغيرات والدوال المتعلقة بالتحليل الفني. هذا يسهل عليك تصفح الدليل المرجعي والعثور على جميع المتغيرات والدوال التي تعيد قيم المؤشرات المشتركة. وفقًا لذلك ، أصبح sma () الآن ta.sma (). تذكر مساحات الأسماء الجديدة ليس ضروريًا ؛ إذا قمت بكتابة الاسم القديم لدالة ما بدون مساحة الاسم الخاصة بها في المحرر واضغطت على مفتاح التشغيل السريع للإكمال التلقائي (Ctrl + Space أو Cmd + Space على نظام MacOS) ، فستظهر نافذة منبثقة تعرض اقتراحات المطابقة:
وينطبق الشيء نفسه عند البحث في الدليل المرجعي ؛ ستؤدي كتابة اسم دالة مألوف بدون مساحة الاسم الخاصة بها إلى إظهار اسمها الجديد. يمكنك الاطلاع على القائمة الكاملة للتغييرات التي تم إجراؤها على الإصدار 5 في دليل الترحيل الخاص بنا.
المكتبات المنشورة
المنشورات التالية هي أمثلة للمكتبات libraries المنشورة على TradingView بواسطة PineCoders الذين يساعدوننا في اختبار ميزات Pine الجديدة:
نأمل أن تجد الميزات الجديدة مفيدة.
ويرجى الاستمرار في تزويدنا بالتعليقات والاقتراحات – نحن نبني TradingView لك
ونحن حريصون دائمًا على معرفة رأيك في تحديثات النظام الأساسي لدينا.

Look first Then leap

تم إنشاء TradingView خصيصًا لك، لذا تأكد من حصولك على أقصى استفادة من خدماتنا الرائعة
فتح الرسم البياني