الميزات الجديدة في Pine Script®: اختبارات عكسية واقعية على الرسوم البيانية Heikin Ashi، ومكونات مدمجة للوصول إلى معلومات الرمز، والمزيد

Jun 30, 2023

مع استمرارنا في إضافة التحسينات التي تطلبها إلى لغة البرمجة خاصتنا، قد يكون من الصعب مواكبة ذلك. تستعرض هذه المشاركة أهم الإضافات الحديثة، حتى لا تفوتها.

اختبارات عكسية أكثر واقعية على الرسوم البيانية Heikin Ashi

عادةً ما تؤدي الاختبارات العكسية التي يتم تشغيلها على الرسوم البيانية Heikin Ashi إلى نتائج اختبار عكسي غير موثوقة لأن محاكي الوسيط يملأ دائمًا الأوامر باستخدام أسعار الرسم البياني، والتي في حالة الرسوم البيانية HA تكون اصطناعية. تعمل ميزة جديدة تسمى “تنفيذ الأوامر باستخدام OHLC القياسي” على تخفيف هذه المشكلة. عند استخدامها، ستعمل الاستراتيجيات التي تعمل على الرسوم البيانية HA على تنفيذ الأوامر بأسعار السوق الفعلية، والتي تحاكي بشكل أوثق كيف ستتصرف استراتيجيتك في الوقت الفعلي.

يمكن لمستخدمي الإستراتيجية تمكين الميزة في علامة تبويب “الخصائص” للاستراتيجيات. يتم إيقاف تشغيل الميزة افتراضيًا.

لاحظ أن هذا يغير فقط سلوك الاستراتيجيات التي تعمل على الرسوم البيانية HA. في أنواع الرسوم البيانية الاصطناعية الأخرى مثل رينكو، سيستمر الاختبار العكسي في تنفيذ الأوامر بأسعار الرسوم البيانية الاصطناعية، بغض النظر عن إعداد الميزة.

 معلمة عرض جديدة لدوال  الإدخال.* ()

توفر لك معلمةالعرض الجديدة مزيدًا من التحكم في عرض قيم الإدخال بجوار اسم النص البرمجي. يمكن استخدام أربع وسيطات: display.status_line, display.data_window, display.all وdisplay.none يُسمح بمجموعات الحجج التي تستخدم علامات الجمع أو الطرح، وبغض النظر عن الوسيطة المستخدمة، ستستمر قيم الإدخال دائمًا في تبويبة “المدخلات” في إعدادات النص البرمجي.

تسمح لك المعلمة الجديدة بإخفاء قيم الإدخال من سطر الحالة عندما تظهر بشكل طبيعي هناك، أو عرض قيم المدخلات التي عادة ما تكون مخفية، أي المدخلات المنطقية أو الملونة أو التاريخ. باستخدام المعلمة الجديدة، يمكنك أيضًا عرض المدخلات بجوار اسم النص البرمجي في نافذة البيانات. لا يتغير العرض الافتراضي للمدخلات عندما لا يتم استخدام المعلمة.

//@version=5

indicator("RSI")

rsiLengthInput = input.int(14, minval=1, title="RSI Length", display=display.data_window+display.status_line)

rsiSourceInput = input.source(close, "Source", display=display.data_window)

rsi = ta.rsi(rsiSourceInput, rsiLengthInput)

plot(rsi, "RSI")

عناصر مدمجة جديدة للوصول إلى معلومات الجهاز

أضفنا ثلاثة عناصر مضمنة إلى مساحة الاسم syminfo : syminfo.sector، صناعة syminfoو syminfo.country. تقوم بإرجاع السلاسل التي توفر لك مزيدًا من المعلومات حول الرمز الحالي. يتم توفير معلومات الدولة بصيغة ISO 3166-1 alpha-2.

تعطيل التنبيهات للأوامر المنفذة في الاستراتيجيات

يمكنك الآن تعطيل الإشعارات للأوامر الفردية في الاستراتيجيات باستخدام disable_alert = true في الدوال المستخدمة لإنشاء تلك الأوامر. على سبيل المثال:

//@version=5
strategy("My strategy", overlay=true)
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (longCondition)
    strategy.entry("Long", strategy.long, alert_message = "Go Long!")
    strategy.exit("Exit", "Long", profit = 300, loss = 100, disable_alert = true)

يعد هذا مفيدًا لفرز الأوامر المحددة عند استخدام دالة alert () لإنشاء رسائل مخصصة للإشعارات أو خطافات الويب أثناء تنفيذ الإستراتيجية.

تغيير الحساب للحد الأقصى للسحب والاستعداد في الاستراتيجيات

تم تحسين حساب الحد الأقصى للسحب والحد الأقصى للارتفاع لمراعاة رأس المال المحتمل الذي كان يمكن تحقيقه داخل التجارة. في السابق، تم النظر فقط في قيم رأس المال عند نقاط الدخول والخروج، مما قد يؤدي إلى الحد الأقصى من قيم السحب والزيادة التي لا تتوافق مع القيم القصوى المحتملة. يتم شرح الطرق الجديدة في مقالات مركز المساعدة للحصول على الحد الأقصى للسحب والحد الأقصى للتشغيل.

دعم معدِّل varip فيالأنواع المحددة من قبل المستخدم

يمكن الآن تطبيق معدِّل varip، الذي يسمح للمتغيرات بالاحتفاظ بالقيم بين كل تنفيذ للنص على نفس العمود، على حقول الأنواع المعرفة من قبل المستخدم.  لاحظ أن الحقول التي لم يتم تعريفها باستخدام varip سيتم إرجاعها مرة أخرى على كل عمود، لذلك لن يتم الاحتفاظ بالقيم المعينة لها أثناء عمليات التنفيذ المتعددة على نفس العمود، حتى إذا تم إنشاء الكائن الذي يحتوي عليها باستخدام varip.

على سبيل المثال:

//@version=5
indicator("`varip` field")

type TypeWithVaripField
    varip int varipCounter = 0
    int counter = 0

varip TypeWithVaripField myCounter = TypeWithVaripField.new(0)
// This field preserves values between script executions.
myCounter.varipCounter := myCounter.varipCounter + 1
// This field does not because it wasn't declared using `varip`.
myCounter.counter := myCounter.counter + 1

plot(myCounter.varipCounter, "myCounter.varipCounter")
plot(myCounter.counter, "myCounter.counter")

طلب سعر تحويل العملات

قدمنا دالة request.currency_rate () التي تتيح لك استرداد معدل التحويل من عملة إلى أخرى. تتطلب هذه الدالة معلمتين: من وإلى، كل منهما عبارة عن رمز سلسلة مكون من ثلاثة أحرف وفقًا لـ ISO 4217.

فيما يلي مثال لكيفية استخدامه لتحويل سعر الأداة إلى الجنيه البريطاني (GBP):

//@version=5
indicator("Close in British Pounds")
rate = request.currency_rate(syminfo.currency, "GBP")
plot(close * rate)

دوال جديدة في مساحة  اسم المصفوفة

تمت إضافة أربع وظائف جديدة للمصفوفات:

  • array.first () — تقوم بإرجاع العنصر الأول من المصفوفة.
  • array.last () — تقوم بإرجاع العنصر الأخير من المصفوفة.
  • array.every () – ترجع صحيح إذا كان كل عنصر من المصفوفة true؛ خلاف ذلك ، يعود false.
  • array.some () — يُرجع صحيحًا إذا كان عنصر واحد على الأقل من المصفوفة صحيحًا؛ وإلا، يُرجعfalse .

للبقاء على اطلاع دائم بميزات Pine Script® الجديدة، تابع ملاحظات إصدار دليل المستخدم . يبث حساب  أيضًا تحديثات من Squawk Box تيليغرام، حساب على موقع تويتر، ومن الدردشة العامة  Pine Script® Q&A على TradingView.

نعتقد أنك تجد هذه الميزات المطلوبة بشدة مفيدة، ويرجى الاستمرار في إرسال تعليقاتك واقتراحاتك إلينا، حتى نتمكن من جعل المنصة أفضل. صممنا TradingView لتفيدك، ونحن حريصون دائمًا على الاستماع إليك.

فريق TradingView

 

Look first Then leap

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