أسس كتابة مؤشرات المستخدمين


مدخل

إن الغرض من هذه المقالة ، هو تبيان مبادئ إنشاء مؤشرات المستخدم في مثال و معاينة " المطبات " التي قد تواجه المبرمجين الذين يجرون خطواتهم الاولى في فهم لغة NTL+ .


أثناء وضع خوارزمية مؤشر المستخدم ، سيتوجب عليك الكيفية التي سيتم بواسطتها حساب القيم المُسجلة في الصوان ( الذاكرة المؤقتة Buffer ) للمؤشر و كيف سيظهر على الشاشة. إن التشكيل الصحيح لهذه القيم يُعدّ الهدف الآخير أثناء انجاز المؤشر .


كمثال ، سنقوم بإنشاء مؤشر يُبين الفرق بين كمية البارات ( القضبان ) التي سعر الاقفال لديها أكبر من سعر الفتح و كذلك يُبين الفرق بين كمية البارات التي سعر الاقفال لديها أقل من سعر الفتح . ستتجمع هذه الفروقات خلال الفترات الاخيرة ( n ). سنقوم بعرض مؤشرنا في نافذة خاصة و عرضها على شكل رسم بياني .


كتابة التعليمات البرمجية النصية ( كود السكريبت )

ستكون الخوارزمية بسيطة و مفهومة و ذلك حتى نتمكن بسهولة من تجربة عمل المؤشر. سنقوم و لكل (i) بار ، بتحليل البارات (n) السابقة له و سنقوم بتشكل الاحصائية ، التي بها أثناء العثور على البار الصاعد سنقوم بإضافة وحدة للقيمة الناتجة ، أما في حال وجدنا بار هابط ، فسنقوم بطرح وحدة .

لننظر في كود هذا المؤشر


في البداية يجب الاعلان عن كل المتغيرات التي سيتم استخدامها في مؤشرنا .

#set_indicator_separate double ExtMapBuffer1[]; int ExtCountedBars=0; extern int period = 10;

يُبين المُعالج التمهيدي #set_indicator_separate بأننا سنقوم بإظهار الرسم البياني في نافذة مستقلة و لن يتوضع على الرسم البياني الأساسي للسعر. في السطر التالي يُعلن عن المجموعة ( هيكل البيانات - Array data structure ) العريضة ExtMapBuffer1 الذي سيتم فيه حفظ قيم صوان المؤشر . نرجوا الانتباه ، إلى أننا لا نُبيّن حجم هذه المجموعة كون أن المُحوّل البرمجي (Compiler ) يُحددّ بذاته الحجم المطلوب للذاكرة المُعطاة .


عملياً ، تُحفظ جميع احداثيات النقط المشاركة في العرض في مجموعة ExtMapBuffer1 ، أما إحداثيات السينات فإنها تُحدد بواسطة مؤشر عناصر المجموعة. من ثم نقوم بتهيئة المتغيرة ExtCountedBars بالقيمة صفر 0 .سيتم حفظ كمية من البارات التي تم حسابها في هذه المتغيرة . بهذا الشكل ، لن نكون بحاجة في كل مرة القيام بحساب جميع البارات ، الامر الذي يُسرع بشكل كبير من حساب قيم المؤشر ، و سيتحرك الرسم البياني للمؤشر بشكل أسرع. في السطر اللاحق يتم الاعلان المتغيرة period لحفظ كمية الفترات التي يحتسب فيها المؤشر الاحصائية المعطاة. تجدر الاشارة هنا الى أنّ استخدام المُعدّل (modifier ) extern يمكننا من تغيير بارامتر period من خلال خاصيات المؤشر بدون الحاجة الى اعادة التجميع .


لننظر في الوظيفة Initialize() التي سنبين فيها الاعدادات الاساسية لمؤشرنا .


إن طريقة SetIndexCount عنصر Indicator يُحدد كمية الصوانات لقيم المؤشرات. الصوان ذو القيمة ExtMapBuffer1 لدينا هو واحد / لذلك نُبين الوحدة في كمسة البارامتر الوحيد . كذلك سنكون بحاجة الى ربط رقم الصوان بمجموعة قيم الصوان. إن هذا الربط يُبين في سطر Indicator.SetIndexBuffer(0,ExtMapBuffer1) / حيث مُحدّد ، بأن خصائص المؤشر الصفر يُستخدم لرسم القيم من صوان ExtMapBuffer1 .


في السطر التالي ، نُعطي مؤشرنا الخصائص. أول بارامتر طريقة SetIndexStyle يُعطي رقم الصوان. و هي قيمة 0 ، و الذي كنّا قد اشرنا اليه في SetIndexBuffer. يُحدد البارامتر الثاني نوع الرسم : و هو الرسم البياني. في البارامتر الثالث نُعطي نوع الخطوط lsSolid ( يمكن هنا عملياً إعطاء أية قيمة ، حيث أن هذا البارامتر يؤثر فقط على الخط و على الرسم البياني بسمك واحد ). في باقي البارمترات نُعطي للخط سماكة 5 و اللون أزرق على شكل ثوابت clrBlue ( كما يمكن وضع اللون في صيغة RGB ، كمثل 0x0000FF ).


من ثم تأتي وظيفة Run() و التي تنفذ عملية المراجعات الاساسية و تُشغل وظيفة المستخدم draw(). تُنفّذ وظيفة draw() الحساب بأكمله .