منتدى الفوركس لاحتراف تجارة الفوركس وتداول العملات في سوق البورصة الالكتروني عن طريق اتقان التحليل الفني والتداول المتميز بواسطة دروس ودورات تكوينية
منتدى الفوركس General
twitter forexu facebook forexu

خبراء الاموال - القناة الاقتصادية السعودية


العودة   تداول | اسعار العملات | هوامير البورصة | الفوركس > تداول العملات > منتدى المؤشرات والاكسبريتات

إنشاء موضوع جديد إضافة رد
 
LinkBack أدوات الموضوع انواع عرض الموضوع
قديم 03-23-2008, 11:10 AM   #1 (permalink)

مراقب عام

 
تاريخ التسجيل: Mar 2008
المشاركات: 2,983
إرسال رسالة عبر مراسل MSN إلى asklo
افتراضي الدرس الحادي عشر .. برمجة مؤشرك الأول (جزء 3)

بسم الله الرحمن الرحيم

مرحبا بكم في الدرس الحادي العشر ... برمجة مؤشرك الأول (جزء 3)

في درسنا السابق قمنا بدراسة اكواد مؤشرنا الأول سطرا سطرا حتى الدالة ()deinit .

اتمنى ان تكونوا قد خرجتم من الدرس السابق بفكرة واضحة عن عمل الأكواد .

اليوم بإذن الله سندرس الدالة ()start ومحتوياتها , بالإضافة الى تجميع المؤشر compile (تحويله الى ex4) وفي النهاية تشغيله على الشارت .

هل انتم جاهزون لهذا الدرس ؟ اذن دعونا نبدأ بفك شفرات هذه الدالة ..

أذكركم بأكواد مؤشرنا :



كود PHP:
//+------------------------------------------------------------------+ 

//| My_First_Indicator.mq4 | 

//| Codersguru | 

//| http://www.forex-tsd.com | 

//+------------------------------------------------------------------+ 

#property copyright "Codersguru" 

#property link "http://www.forex-tsd.com" 

#property indicator_separate_window 

#property indicator_buffers 1 

#property indicator_color1 Red 

//---- buffers 

double ExtMapBuffer1[]; 

//+------------------------------------------------------------------+ 

//| Custom indicator initialization function | 

//+------------------------------------------------------------------+ 

int init() 



//---- indicators 

SetIndexStyle(0,DRAW_LINE); 

SetIndexBuffer(0,ExtMapBuffer1); 

string short_name "Your first indicator is running!"

IndicatorShortName(short_name); 

//---- 

return(1); 



//+------------------------------------------------------------------+ 

//| Custor indicator deinitialization function | 

//+------------------------------------------------------------------+ 

int deinit() 



//---- 

//---- 

return(0); 



//+------------------------------------------------------------------+ 

//| Custom indicator iteration function | 

//+------------------------------------------------------------------+ 

int start() 



int counted_bars=IndicatorCounted(); 

//---- check for possible errors 

if (counted_bars<0) return(-1); 

//---- last counted bar will be recounted 

if (counted_bars>0counted_bars--; 

int pos=Bars-counted_bars

double dHigh dLow dResult

Comment("Hi! I'm here on the main chart windows!"); 

//---- main calculation loop 

while(pos>=0



dHigh High[pos]; 

dLow Low[pos]; 

dResult dHigh dLow

ExtMapBuffer1[pos]= dResult 

pos--; 



//---- 

return(0); 



//+------------------------------------------------------------------+ 

__________________________________________________



كود PHP:
int start() 

{... 

return(
0); 



كما اخبرتكم من قبل , سنقضي تقريبا %90 من حياتنا البرمجية داخل اقواس الدالة ()start . وذلك لأنها أهم دالة من الدوال الرئيسية في لغة MQL4 .

وعلى عكس الدالتين السابقتين ()init و ()deinit . فهي لا تنتهي مرة واحدة من طرف المستخدم , وانما كل مرة يتحرك فيها السعر على الشارت الموضوع فيه المؤشر , تعمل هذه الدالة .

دالة ()start مثل جميع دوال MQL4 تعود بنتيجة محددة returtn . حيث ان (0)return معناها انه لا يوجد اخطاء , واي قيمة أخرى غير 0 فهي خاطئة ويتم الأنتقال الى جزء أخر .

__________________________________________________



كود PHP:
int counted_bars=IndicatorCounted(); 

هنا نحن عرفنا متغير ما على انه عدد صحيح int وسميناه ( counted_bars ) واسندنا له قيمة محددة وهي الدالة ( int IndicatorCounted() ) ... ( اي ان القيمة الناتجة من هذه الدالة ستعود الى هذا المتغير .)

الدالة ()int IndicatorCounted :

وهي الدالة التي ستعود بقيمة ما (عدد صحيح) وهذه القيمة هي عدد الشموع المحسوبة عن طريق مؤشرنا هذا ( مثلا المتوسط المتحرك 5 , عدد الشموع هنا 5 ) لكن في حالة مؤشرنا هنا واحد فقط .

مع بداية تشغيل المؤشر على الشارت سيحسب القيمة 0 وذلك لأنه لم يقم بحساب اي عدد من الشموع بعد .

بعد ذلك يقوم بحساب الشموع (البارات) الموجودة على الشارت .

__________________________________________________



كود PHP:
if (counted_bars<0) return(-1); 

هذه الجملة ( counted_bars ) تحمل القيمة الناتجة من الدالة ()int IndicatorCounted ومن ثم تقوم الجملة الشرطية بعملها .

يجب ان تكون القيمة اكبر من او تساوي 0 اما ان تكون اصغر من الصفر فهذا معناه ان هناك خطأ وسيتم انهاء الدالة ( في مثال المتوسط 5 لم يجد المؤشر 5 شموع على الشارت ليقوم بحساباته ولن يظهر على الشارت )

وهذا ما يعنيه السطر الكودي اعلاه

__________________________________________________



كود PHP:
if (counted_bars>0counted_bars--; 

هنا إذا جائت النتيجة صحيحة . وعدد البارات اكبر من الصفر ( اي ان عدد البارات على الشارت اكبر من المطلوب في المؤشر ).

سيتم انقاص قيمة واحد من الناتج ( -- هي للإنقاص , راجع درس العمليات ) وبإنقاصها ستعود الدالة للحساب والمقارنة من جديد ( وهكذا يتم اصدار قيمة بعد قيمة لرسم المؤشر متصلا على الشارت مع كل شمعة ).

__________________________________________________



كود PHP:
int pos=Bars-counted_bars

هنا اعددنا متغير وأطلقنا عليه اسم (pos) واسندنا له قيمة ما وهي عدد العمليات التي يتم انجازها بواسطة الحلقة ( while ) والتي سيأتي ذكرها قريبا .

يقوم المتغير بطرح الشموع (البارات) المحسوبة بواسطة المؤشر من مجموع الشموع (البارات) الموجودة على الشارت .

هنا يسألني سائل , وكيف يتم حساب مجموع الشموع على الشارت في الأصل ؟ ..

الأجابة : عن طريق الدالة Bars ,

حسنا , هذا وقت مناسب لنتكلم عن الدالة Bars وأخواتها :

* المتغيرات المعرفة مسبقا في لغة MQL4 :

الكلمات ( Ask, Bid, Bars, Close, Open, High, Low, Time ,Volume ) هي دوال لها وظائفها في لغة MQL4 , وتعرف بإسم " المتغيرات المعرفة مسبقا في MQL4 ".

وهو ما معناه ان هذه الدوال تستخدم مباشرة في معادلات واكواد اللغة بدون اي تعريف لهم ( يكفي وضعهم فقط وسيتعرف البرنامج عليهم اوتوماتيكيا ).

الأن دعونا نناقش كل دالة على حدة :



كود PHP:
int Bars 

وهي الدالة المسئولة عن حساب عدد الشموع (البارات) الموجودة على الشارت , وباستدعاء هذه الدالة فكأنما تدخل عدد الشموع الموجودة على الشارت المحتوي على المؤشر داخل اكواد هذا المؤشر .



كود PHP:
double Ask 

وهي الدالة التي تقوم باستدعاء سعر الشراء الحالي لزوج العملات الذي يعمل عليه المؤشر .



كود PHP:
double Bid 

وهي الدالة التي تقوم باستدعاء سعر البيع الحالي لزوج العملات الذي يعمل عليه المؤشر .

مثال : USD/JPY = 133.27/133.32 .. السعر الأول هو سعر البيع Bid والذي سيتم استدعاءه بالدالة Bid ,, اما السعر الثاني فهو سعر الشراء Ask والذي سيتم استدعاءه بالدالة Ask .



كود PHP:
double Open[] 
وهي الدالة التي تقوم باستدعاء سعر افتتاح شمعة ما على الشارت .

وسعر الإفتتاح هو اول سعر تبدأ به فترة زمنية محددة (شمعة) (دقيقة ,ساعة ,4 ساعات ,يوم , اسبوع ..الخ)

امثلة : [Open[0 هو سعر افتتاح الشمعة الحالية ,, [Open[1 هو سعر افتتاح الشمعة السابقة ,, [Open[2 هو سعر افتتاح الشمعة قبل السابقة .. الخ.



كود PHP:
double Close[] 
وهي الدالة التي تقوم باستدعاء سعر اغلاق شمعة ما على الشارت .

وسعر الإغلاق هو نهاية (أخر) سعر لفترة زمنية محددة (شمعة) (دقيقة ,ساعة ,4 ساعات ,يوم , اسبوع ..الخ)

امثلة : [Close[0 هو سعر اغلاق الشمعة الحالية ,, [Close[1 هو سعر اغلاق الشمعة السابقة ,, [Close[2 هو سعر اغلاق الشمعة قبل السابقة .. الخ.



كود PHP:
double High[] 
وهي الدالة التي تقوم باستدعاء أعلى سعر لشمعة ما على الشارت .

وأعلى سعر هو أعلى سعر يسجل خلال فترة زمنية محددة (شمعة) (دقيقة ,ساعة ,4 ساعات ,يوم , اسبوع ..الخ)

امثلة : [High[0 هو أعلى سعر للشمعة الحالية ,, [High[1 هو أعلى سعر للشمعة السابقة ,, [High[2 هو أعلى سعر للشمعة قبل السابقة .. الخ.



كود PHP:
double Low[] 
وهي الدالة التي تقوم باستدعاء أقل سعر لشمعة ما على الشارت .

وأقل سعر هو أقل سعر يسجل خلال فترة زمنية محددة (شمعة) (دقيقة ,ساعة ,4 ساعات ,يوم , اسبوع ..الخ)

امثلة : [Low[0 هو أقل سعر للشمعة الحالية ,, [Low[1 هو أقل سعر للشمعة السابقة ,, [Low[2 هو أقل سعر للشمعة قبل السابقة .. الخ.



كود PHP:
double Volume[] 
وهي الدالة التي تقوم باستدعاء متوسط التداول لزوج العملات في شمعة ما (دقيقة ,ساعة ,4 ساعات ,يوم , اسبوع ..الخ)



كود PHP:
int Digits 

وهي الدالة التي تقوم باستدعاء عدد الأرقام التي تأتي بعد الفاصلة العشرية للسعر (عادة تكون 4 ارقام )



كود PHP:
double Point 

وهي الدالة التي تقوم باستدعاء قيمة نقطة واحدة من السعر ( وهي عادة 0,0001 )



كود PHP:
datetime Time[] 
وهي الدالة التي تقوم باستدعاء الوقت والتاريخ لبداية اي شمعة على الشارت (دقيقة ,ساعة ,4 ساعات ,يوم , اسبوع ..الخ).

مثال : [Time [0 وهي زمن افتتاح الشمعة الحالية .

__________________________________________________



كود PHP:
double dHigh dLow dResult

هنا قمنا بإعداد ثلاثة متغيرات من نوع (double) لنستخدمهم فيما بعد .

لاحظ الطريقة التي قمنا بإعداداهم بها , وهي سطر واحد ومفصولين بفاصلة عادية ( , ).

__________________________________________________



كود PHP:
Comment("Hi! I'm here on the main chart windows!"); 

هذا السطر من الأكواد يقوم بإخراج نتيجة كتابية على الشارت , وهو تعليق (الجملة بين القوسين) يظهر على الركن الأيسر العلوي من النافذة الرئيسية للشارت , وذلك بإستخدام الدالة comment . أنظر الصورة 1

ملاحظة : معنى كلمة comment بالعربية (تعليق) )

هناك دالتان أخرييان يقومان بوظائف مشابهة للدالة comment وهما :



كود PHP:
Print ( ... ) 
وهي تقوم بكتابة الجملة بين القوسين ( ) في سجل الإكسبرتات في الميتاتريدر . انظر الصورة 2 .



كود PHP:
Alert( ... ) 
وهي تقوم بكتابة الجملة بين القوسين ( ) في نافذة التنبيهات . انظر الصورة 3 .

* * * * * * * * * * * * * * * * * * * *


صورة 1 (التعليقات)


صورة 2 (سجل الإكسبرت)


صورة 3 (نافذة التنبيهات)

__________________________________________________



كود PHP:
while(pos>=0



dHigh High[pos]; 

dLow Low[pos]; 

dResult dHigh dLow

ExtMapBuffer1[pos]= dResult 

pos--; 



الأن نصل الى المحرك الرئيسي للمؤشر ,, وهي الحلقة ( while ) (راجع درس الحلقات) التي ستقوم بالعملية الحسابية المطلوبة لإصدار قيمة المؤشر في شمعة ما ومن ثم ارسال هذه القيمة الى المصفوفة ( []ExtMapBuffer1 ) (هل تذكرونها من الدرس السابق ؟ ) .

ستقوم المصفوفة ( []ExtMapBuffer1 ) برسم المؤشر على الشارت بسبب ارتباطها بالدالة ( SetIndexBuffer ) المسئولة عن الرسم .(راجع الدرس السابق )

بمعنى أكثر وضوحا : تذهب القيمة الناتجة من الحلقة ( while ) الى المصفوفة ( []ExtMapBuffer1 ) ومن ثم الى الدلة ( SetIndexBuffer ) التي ستقوم برسم المؤشر على الشارت .

نعود الى الحلقة ( while ) ..

قبل الدخول في هذه الحلقة يجب علينا اولا ان نحدد عدد مرات عمل الحلقة وذلك بطرح الشموع ( البارات ) المحسوبة من مجموع الشموع الموجودة على الشارت .

عدد مرات عمل الحلقة تسمى ( متغير الحلقة ) وهو في مثالنا هنا المتغير ( pos ) ( لاحظ انها يجب ان تساوي او اكبر من الصفر حتى يتأكد من وجود شموع يمكن حسابها ويأمر الحلقة لتبدأ عملها ) .

الأن نشرح عمل الحلقة :

سنستخدم متغير الحلقة ( pos ) لتمثيل الشمعة (البار) الحالية على الشارت ,, مثلا [High[pos تمثل اعلى سعر للشمعة الحالية .

في جسد الحلقة ربطنا المتغير ( dHigh ) لأعلى سعر في متغير الحلقة الحالية , وربطنا المتغير ( dLow ) لأقل سعر في متغير الحلقة الحالية .

نتيجة طرح قيمتي المتغيرين ( dHigh ) و ( dLow ) ستذهب الى المتغير ( dResult ) .

بعد ذلك سنستخدم قيمة المتغير ( dResult ) الناتجة لنرسم خط مؤشرنا على الشارت بربطه الى مصفوفة الرسم ( []ExtMapBuffer1 ) السابق ذكرها .

أخر سطر من الحلقة هي المسئولة عن انقاص قيمة متغير الحلقة ( -1 ) وذلك لإنهاء الحلقة وتجهيزها لإستقبال قيمة جديدة (كل تغير في السعر او الهاي او اللو يعتبر قيمة جديدة)

أخيرا يمكننا الأن ان نقوم بعملية تجميع compile ( اي تحويل مؤشرنا للغة الألة ) وذلك عن طريق الضغط على F5 او الضغط على compile من قائمة File او من شريط الأدوات ( راجع مقدمة الدروس ).

الأن لتشغيل المؤشر على الشارت اضغط F4 لتظهر نافذة المستكشف Navigator ومن ثم تختار منها مؤشرنا (My_First_indicator ) والضغط عليه مرتين لتثبيته على الشارت . انظر الصورة 4 .


صورة 4 ( My_First_indicator )


أمل ان تكونوا قد استمتعتم ببرمجة المؤشر الأول وان تقوموا بتجهيز انفسكم لبرمجة إكسبرتك الأول في الدروس القادمة بإذن الله .



في الدرس القادم بأذن الله سنتكلم عن برمجة الإكسبرت الأول (جزء 1)
اراكم على خير مجددا
asklo غير متواجد حالياً   رد مع اقتباس
إنشاء موضوع جديد إضافة رد

الكلمات الدلالية (Tags)
مؤشرك, الأول, الحادي, الدرس, برمجة, يصل, عصر

أدوات الموضوع
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة
Trackbacks are متاحة
Pingbacks are متاحة
Refbacks are متاحة

الانتقال السريع

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
مؤشر ناسداك يرتفع لليوم الحادي عشر على التوالي fxyard منتدى الاخبار اليومية في بورصة التداول 0 07-23-2009 06:32 AM
الدرس الثاني عشر .. برمجة الإكسبرت الأول (جزء 1) asklo منتدى المؤشرات والاكسبريتات 0 03-23-2008 11:14 AM
الدرس العاشر .. برمجة مؤشرك الأول (جزء 2) asklo منتدى المؤشرات والاكسبريتات 0 03-23-2008 11:03 AM
الدرس التاسع .. برمجة مؤشرك الأول (جزء 1) asklo منتدى المؤشرات والاكسبريتات 0 03-23-2008 10:55 AM
الدرس الأول .. قواعد لغة Mql4 asklo منتدى المؤشرات والاكسبريتات 0 03-23-2008 09:43 AM

Preview on Feedage: %D8%AA%D8%AF%D8%A7%D9%88%D9%84-%D8%A7%D8%B3%D8%B9%D8%A7%D8%B1-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D8%A7%D8%AA-%D9%87%D9%88%D8%A7%D9%85%D9%8A%D8%B1-%D8%A7%D9%84%D8%A8%D9%88%D8%B1%D8%B5%D8%A9-%D8%A7%D9%84%D9%81%D9%88%D8%B1%D9%83%D8%B3

Add to My Yahoo!

Add to Google!

Subscribe in Bloglines

iPing-it



FOREXYARD - Forex Trading Online - Currency brokers offering a forex trading system.


الساعة الآن 03:44 PM.

جميع الحقوق محفوظة لمنتدى الفوريكس يو 2008
جميع المشاركات والمواضيع في منتدى الفوريكس يو لا تعبر بالضرورة عن رأي إدارة المنتدى بل تمثل وجهة نظر كاتبها


Powered by vBulletin® Version 3.8.5, Copyright ©2000 - 2010,

Search Engine Friendly URLs by vBSEO 3.3.0