النتائج 76 إلى 90 من 237
- 01-01-2008, 05:52 AM #76
- 01-01-2008, 06:52 AM #77
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
بسم الله الرحمن الرحيم
في هذا الدرس سنقوم بإذن الله بشرح المؤشرات المبيتة والداخلية والاستفادة منها وقراءة قيمها على أي شمعة على الشارت.
المؤشرات المبيتة هي المؤشرات القياسية التي تأتي مع برنامج الميتاتريدر مثل الماكد و RSI و البولينغر باند وغيرها من المؤشرات الأخرى.
المؤشرات المبيتة كلها عبارة عن وظائف تبدأ بالحرف i مثل iMA لمؤشر الموفينغ أفريج و iRSI لمؤشر RSI وهكذا.
لكل وظيفة مؤشر هناك عدة مدخلات ( بارامترات ) يجب أن نتكبها بشكل صحيح حتى تعطينا الوظيفة القراءة الصحيحة.
بعض هذه المدخلات ثابتة ومكررة مع أكثر من مؤشر مثل اسم الزوج والفترة المستخدمة والفريم المستخدم وهكذا.
هذه المؤشرات يتم حساب قيمها داخليا بدون أن يكون لنا علاقة بالمعادلات الرياضية الداخلية للوظيفة.
مع أنه من المفيد معرفة كيفية حسابها إلا أن الوظيفة تعطينا النتائج دون الخوض في تفاصيل الحساب.
وهي أيضا توفر علينا الوقت والجهد وتصحيح الأخطاء وكبر حجم الكود.
ولذلك من المفيد أن نتعلم كيفية استخدام هذه المؤشرات داخليا لأنها مفيدة جدا وضرورية جدا لعمل مؤشرات مطورة أكثر ولكنها تعتمد على مؤشرات قياسية.
فمثلا مؤشر الانفجار السعري يعتمد على مؤشرين هما البولنغر باند والماكد.
وسوف أقوم بشرحه بالتفصيل بعد هذا الدرس مباشرة في درس جديد.
وفهم هذا المؤشر وكيفية برمجته وعمله أمر مهم جدا لفهم برمجة المؤشرات بشكل عام.
كما قلنا فإن أي مؤشر هو عبارة عن وظيفة Function داخلية وفرتها لنا لغة MQL4 .
وكل ما علينا فعله هو استدعاء هذه الوظيفة مع كتابة مدخلاتها بشكل صحيح وسوف نحصل على قيمة وحيدة عند كل شمعة تمثل قيمة المؤشر عند هذه الشمعة على الشارت.
نبدأ أولا مع مؤشر معروف وبسيط وهو المتوسط المتحرك Moving Average
اسم الوظيفة هو iMA ولها البارامترات التالية:
كود PHP:double iMA(string symbol, int timefra me, int period, int ma_shift, int ma_method, int applied_price, int shift)
- اسم الزوج Symbol: وهو قيمة نصية ولدينا ثلاثة احتمالات لكتابة اسم الزوج وهي:
1- أن نكتبه بشكل مباشر مثل "GBPUSD" بأحرف كبيرة وهذه الحالة تكون عندما يكون المؤشر الذي نصممه يعمل فقط مع هذا الزوج وليس مع الزوج الذي وضع المؤشر عليه.
ففي بعض الحالات قد نضطر لمعرفة قيمة المتوسط المتحرك لزوج محدد وليس للزوج المحدد على الشارت.
ويجب أيضا أن يكون اسم الزوج صحيحا تماما ومطابقا للأسماء القياسية المعروفة.
2- أن نضع الثابت NULL والذي يعني أننا نريد حساب المتوسط للزوج الموجود على الشارت مهما كان نوعه.
3- أن نضع المتحول ()Symbol وهو متحول داخلي يعطينا اسم الزوج الحالي الموجود على الشارت.
الطريقة الثانية والثالثة لها نفس التأثير لكني أفضل الطريقة الثالثة لأن بعض الوظائف وخصوصا عند تعاملنا مع الاكسبيرتات لا تقبل الطريقة الثانية في تحديد نوع الزوج وهي تريد تحديد أكثر لاسم الزوج.
لذلك يجب أن نعتاد على استخدام Symbol لتحديد اسم الزوج حتى لا نقع في مشاكل مستقبلية.
- نوع الفريم المستخدم timefra me: وهو قيمة رقمية تحدد لوظيفة نوع الفريم المستخدم وله أيضا عدة حالات:
1- صفر ( 0 ) وهذا يعني أننا نريد حساب المتوسط المتحرك للفريم الحالي الموجود على الشارت.
2- رقم 1 وهذا يعني أننا نريد حساب المتوسط المتحرك لفريم الدقيقة بغض النظر عن الفريم الحالي.
3- رقم 5 وهذا يعني أننا نريد حساب المتوسط المتحرك لفريم الخمس دقائق بغض النظر عن الفريم الحالي.
4- رقم 15 للربع ساعة و 30 للنصف ساعة و 60 للساعة و 240 للأربع ساعات و 1440 لليوم و 10080 للاسبوع و 43200 للشهر.
5- أن نكتب بدلا من الأرقام السابقة ثوابت تدل عليها ولها نفس التأثير ولكن تكون أوضح للقراءة والتعديل على الكود وهي:
كود PHP:PERIOD_M1 1 1 minute.
PERIOD_M5 5 5 minutes.
PERIOD_M15 15 15 minutes.
PERIOD_M30 30 30 minutes.
PERIOD_H1 60 1 hour.
PERIOD_H4 240 4 hour.
PERIOD_D1 1440 Daily.
PERIOD_W1 10080 Weekly.
PERIOD_MN1 43200 Monthly.
- الفترة period : وهي قيمة رقمية تحدد الفترة المستخدمة لحساب المتوسط هل هي 14 أو 20 وهكذا.
هذه الفترة هي نفسها التي تضعها في خصائص مؤشر المتوسط المتحرك من برنامج التداول نفسه.
- إزاحة المتوسط ma_shift : وهي قيمة رقمية سالبة أو موجبة تقوم بإزاحة المتوسط إلى اليمين أو اليسار بمقدار محدد من الشموع.
وهذه الخاصية أيضا تجدها في خصائص المؤشر في برنامج التداول نفسه.
جرب من برنامج التداول وضع قيم مختلفة عن الصفر مثل 10 و -10 وانظر الفرق وكيف يتم إزاحة المؤشر يمينا أو يسارا على الشارت.
- طريقة حساب قيم المتوسط ma_method : وهي قيمة رقمية يمكن كتابتها كأرقام 0 - 1 - 2 - 3 حيث:
1- الرقم صفر للمتوسط البسيط Simple .
2- الرقم واحد للمتوسط الأسي Exponential.
3- الرقم اثنان للمتوسط المنعم Smoothed.
4- الرقم ثلاثة للمتوسط الموزون Weighted.
يمكن أيضا كتابة ثوابت خاصة حسب الجدول المرفق:
كود PHP:MODE_SMA 0 Simple moving average,
MODE_EMA 1 Exponential moving average,
MODE_SMMA 2 Smoothed moving average,
MODE_LWMA 3 Linear weighted moving average.
كل طريقة من الطرق السابقة لها كيفية حسابية معينة تعطي نتائج مختلفة قليلا عن سابقتها.
- السعر الذي سيطبق عليه حساب المتوسط applied_price : وهو قيمة رقمية تحدد نوع السعر الذي سيطبق عليه حساب المتوسط. هل هو سعر الإغلاق أو الفتح أو الأعلى وهكذا.
وهو له القيم التالية:
كود PHP:PRICE_CLOSE 0 Close price.
PRICE_OPEN 1 Open price.
PRICE_HIGH 2 High price.
PRICE_LOW 3 Low price.
PRICE_MEDIAN 4 Median price, (high+low)/2.
PRICE_TYPICAL 5 Typical price, (high+low+close)/3.
PRICE_WEIGHTED 6 Weighted close price, (high+low+close+close)/4.
- رقم الشمعة shift : وهو قيمة رقمية تحدد رقم الشمعة على الشارت الذي سنحسب لها المتوسط المتحرك.
والشمعة الأولى على اليمين تأخذ الرقم صفر والتي تليها تأخذ الرقم واحد وهكذا.
عند تشكل شمعة جديدة فإنها تأخذ فورا الرقم صفر والتي تليها يصبح رقمها واحد وهكذا.
أمثلة توضيحية:
كود PHP:double myMA;
myMA=iMA(Symbol(),0,14,0,MODE_SMA,PRICE_CLOSE,0);
والحساب سيكون وفق سعر الإغلاق وللشمعة رقم صفر وهي أول شمعة على اليمين.
كود PHP:double myMA;
myMA=iMA(NULL,PERIOD_M30,30,0,MODE_EMA,PRICE_HIGH,5);
والحساب هو للشمعة السادسة على الشارت.
- 01-01-2008, 06:58 AM #78
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
شرح بعض الوظائف الأخرى للمؤشرات القياسية المبيتة
مؤشر البولنغر باند:
اسم وظيفته هي iBands ولها الصيغة التالية:
كود PHP:double iBands( string symbol, int timef rame, int period, int deviation, int bands_shift, int
applied_price, int mode, int shift)
البارامتر deviation وهو عبارة عن رقم صحيح يأخذ رقم من 1 إلى أي رقم موجب وهو معدل انحراف البولنغر.
البارامتر bands_shift وهو قيمة رقمية تمثل انزياح المؤشر عن السعر وهي أيضا مشروحة سابقا.
السعر المطبق أيضا شرحت سابقا.
البارامتر mode له قيمتان فقط تحددان نوع القيمة المقروؤة هل هي للخط العلوي للبولنغر أم الخط السفلي والقيمتان هما:
MODE_UPPER 1 Upper line.
MODE_LOWER 2 Lower line.
فإذا أردنا قراءة قيمة الخط العلوي نضع 1 أو MODE_UPPER ونضع 2 أو MODE_LOWER إذا أردنا قراءة قيمة الخط السفلي.
الخط المتوسط لا يتم قرائته مباشرة من خلال هذه الوظيفة لأنه ببساطة هو متوسط متحرك بسيط له نفس الفترة.
ونقرأ قيمته من من الوظيفة iMA المشروحة سابقا.
مؤشر ADX واسم وظيفته iADX
وله الصيغة التالية:
كود PHP:double iADX( string symbol, int time*****, int period, int applied_price, int mode, int shift)
ولكن الفرق هي في قيم البارامتر mode حيث تأخذ القيم التالية:
MODE_MAIN 0 Base indicator line.
MODE_PLUSDI 1 +DI indicator line.
MODE_MINUSDI 2 -DI indicator line.
حيث مؤشر ADX له ثلاثة خطوط : الخط الرئيسي والخط الموجب والخط السالب ولكل مؤشر نريد قراءة قيمته نضع القيمة المناسبة في المتحول mode
هذه هي الفكرة الرئيسية من وظائف المؤشرات القياسية المبيتة في اللغة نفسها.
لا يوجد فروقات كثيرة بينها من حيث الاستخدام ويكفي قراءة البارامترات لمعرفة ما هي القيم المطلوبة ليعيد لنا القراءة
الصحيحة.
تقنيات مختلفة مفيدة مع المؤشرات:
- غالبا يتم إخراج بعض قيم المتحولات كخصائص يستطيع المستخدم تغييرها من خارج كود المؤشر.
أي متحول نريد جعله خاصية خارجية نضع قبل أمر تعريفه التعبير extern ( اختصار external خارجي ).
فمثلا المتحول
كود PHP:double MyNum=6;
بينما إذا أردنا إتاحة إمكانية تغيير قيمة هذا المتحول من خلال خصائص المؤشر فإننا نكتب الكود على الشكل التالي:
كود PHP:extern double MyNum=6;
يستفاد من هذه الميزة بشكل عام جعل المؤشر مرن مع احتياجات المستخدم.
كما أنه يجب الموازنة بين المرونة وبين كثرة الخصائص الخارجية التي قد تربك المستخدم أحيانا
كما يجب اختيار أسماء معبرة عن معنى الخاصية لتكون عونا للمستخدم على فهم المقصود من هذه الخاصية.
- تسريع عمل المؤشر .
من الطبيعي أن نقوم بحساب قيم المؤشر لكل الشمعات الموجودة على الشارت عند تغير السعر اللحظي.
وذلك عبر حلقة تمر على كل الشمعات .
ولكن هذا الأمر قد يستغرق وقتا طويلا إذا كانت الحسابات معقدة جدا وكانت عدد الشمعات على الشارت كبير جدا.
ولذلك نستخدم تقنية جديدة لحساب قيم الشمعات الجديدة فقط دون الحاجة إلى إعادة الحساب كل مرة على كل الشمعات.
وذلك بالاستعانة بالوظيفة IndicatorCounted والتي تعطينا عدد الشمعات التي حسبنا عليها المؤشر.
وباستخدام هذا الكود الحسابي والحلقة المعدلة نحسب فقط عدد الشمعات الجديدة والتي عليها فقط نحسب قيم مؤشرنا عليها.
والكود هو التالي:
كود PHP:int limit, i, counted_bars = IndicatorCounted();
// إذا لم يكن هناك شمعات جديدة اخرج دون حساب
if(counted_bars < 0)
return(-1);
// إذا كان هناك شمعات جديدة احسب مقدار الشموع الجديدة فقط
if(counted_bars > 0)
counted_bars--;
limit = Bars - counted_bars;
// الحلقة تكون من عدد الشموع الجديدة المكونة وحتى الشمعة الحالية رقم صفر
for(i = limit - 1; i >= 0; i--)
{
/// حساب المؤشر
}
تفيد هذه الطريقة في معرفة اسم المؤشر الحالي على الشارت وقيم الخصائص التي اختارها المستخدم وذلك تسهيلا عليه في معرفة هذه الخصائص دون الحاجة للدخول إلى نافذة الخصائص.
يتم هذا الأمر بواسطة الوظيفة IndicatorShortName وتوضع هذه الوظيفة في الوظيفة init.
ويتم وضع الاسم وقيم الخصائص في مدخلات هذه الوظيفة.
مثال:
كود PHP:IndicatorShortName("Indicator Name : Period= " + MyPeriod );
- 01-01-2008, 11:20 PM #79
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
جزاك الله كل خير
- 02-01-2008, 12:22 AM #80
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
جزاك الله خيرا وعوضك اجرا وزاد من رزقك ان شاء الله
- 03-01-2008, 08:57 PM #81
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
اشكر لك فكرك الراقي
و انا من اشد المتابعين لك
والله يوفقك
- 04-01-2008, 02:45 AM #82
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
شكرا لجميع الإخوة المتابعين
هل يوجد أي استفسارات أو نقاط غير مفهومة حتى الآن ؟؟
وذلك قبل أن نكمل بشكل أعمق .
- 04-01-2008, 03:20 PM #83
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
جزاك الله كل خير أخي العزيز وضاح ...بصراحة كان هناك الكثير من النقاط الغير واضحة ..وهذا شيء طبيعي لأنه لا توجد عندي أي خلفية عن علوم البرمجة ...
ولكنني لا أسئلك عنها لأنني يوما بعد يوم ومع التعمق التدريجي تبدأ الأمور السابقة بالتوضح والأفكار تبدأ عندي بالترابط ...طبعا طريقي مازال طويلا وأحاول أن أتابع معك خطوة بخطوة ...وإذا أستصعبت الأمور علي فسترى سيلا من الأسئلة من أخوك أبو فاضل ..وفقك الله يا أخي إلى ما يحب ويرضى
ومشكور على متابعتك لهذه الدورة القيمة الغنية بالمعلومات .
- 07-01-2008, 08:51 AM #84
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
السلام عليكم ورحمة الله وبركاته ..أستاذ وضاح العزيز
أنا جالس في الصف الأول وأسأل نفسي هل تأخر أستاذي أم أنني عجول وغير صبور .
السؤال الثاني حاولت التطبيق وفتح مؤشر في نافذة منفصلة يطبع فقط كلمات بسيطة وتاريخ الصلاحية ( طبعا حطيت حقوق الطبع ..أنت عارف السوق ؟).
ولا شي غير ..طبعا جاءتني رسالة بوجود ست أخطاء ( يعني كل شيء خطأ )
وبعد تصحيحها كلها لا يفتح المؤشر...شايف شو طالب تعبان .
- 07-01-2008, 08:12 PM #85
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
بسم الله الرحمن الرحيم
هذا الدرس سيخصص بالكامل لشرح مؤشر الانفجار السعري شرحا كاملا بدءا من الفكرة وحتى التطبيق العملي والبرمجي.
الفكرة هي ببساطة في أن يكتشف المؤشر بداية حدوث انفجار في السعر مع إعطائنا الاتجاه المتوقع.
وكما هو معلوم فإن الانفجار السعري يحدث في وقت قصير مقارنة بحركة اليوم الكلية.
من خلال خبرتي طبعا وجدت أن مؤشر البولنغر حساس للانفجارات السعرية بسبب أنه ينتفخ مع الانفجار ويضيق عند الهدوء.
وبما أني أريد أن يظهر المؤشر على نافذة منفصلة قررت أن أستفيد من مؤشر البولنغر بطريقة أخرى.
وهي أن أرسم الانتفاخ والتضيق على شكل خط واحد ( هو الخط الأصفر طبعا ).
هذا الخط هو بكل بساطة عبارة عن الفرق بين الخط العلوي للبولنغر وبين الخط السفلي له.
بمعنى أني حسبت الخط الأصفر بطرح القيمة الدنيا للباند من القيمة العليا.
والنتيجة طبعا هي عبارة عن خط له قيم موجبة دائما يقترب من الصفر في حال الهدوء السعري ويبتعد عن الصفر في حال حدوث انفجار سعري.
نحن الآن حصلنا على مؤشر جيد يعطينا إشارة بدء الانفجار ولكن هذا المؤشر لوحده لا يكفي لأننا لن نعرف الاتجاه الذي سيسلكه الانفجار هل هو لفوق أو تحت.
فكرت في إضافة مؤشر آخر وكان اختياري هو الماكد لمعرفة الاتجاه الحالي.
وبما أن الماكد بطيء في اشاراته وجدت أن أعدل طريقة استخدام الماكد بحيث أستخدم الفرق بين ماكدين للشمعة الحالية والشمعة التي تسبقها وليس الماكد لوحده.
أعطتني الطريقة الجديدة مزايا إضافية وهامة وهي سرعة الإشارة مقارنة بالماكد لوحده وكذلك إشارة أخرى هي قوة الصعود أو الهبوط.
بقي أمر آخر وهو أن قيم الفرق بين الماكدين صغيرة جدا مقارنة بقيم الفرق بين خطي البولنغر ولذلك اخترعت خاصية جديدة للمؤشر هي الحساسية.
وظيفة هذه الحساسية أن تكبر اشارات الفرق بين الماكدين لتجعله متوافقا مع قيم البولنغر مع إمكانية التحكم بهذه الحساسية.
فكلما زادت الحساسية زادت المخاطرة والعكس صحيح.
بعد تنفيذ المؤشر وإجراء اختبارات كثيرة عليه وجدت أن قيمة الحساسية 100 - 150 مناسبة للعمل على النصف ساعة بحيث يبدأ الانفجار مع بدء ارتفاع أعمدة الفرق بين ماكدين فوق مؤشر الفرق بين خطي البولنغر.
طبعا في البداية هي فكرة تم تطويرها على مراحل.
والقيم التي حددتها هي نتيجة إختبارات لهذا المؤشر على أزواج كثيرة.
لا يمكن أن تنجز مؤشر جديد من المرة الأولى بل تأتي التطويرات متلاحقة ومتتابعة.
وأحيانا قد تبدأ بفكرة وعند التنفيذ الفعلي لها تجد نفسك قد عدلت على هذه الفكرة كثيرا لدرجة أن النتيجة النهائية قد لا تكون على علاقة بالفكرة الأولية.
المهم جعلت المؤشر يرسم الخطوط المناسبة لكشف بداية الانفجار وكشف نهايته أيضا.
لأن صعود خطوط الماكد فوق خط الانفجار البولنغري هو بداية الانفجار
و هبوط هذه الخطوط مرة أخرى تحته هي نهاية الانفجار.
وضعت خاصية جديدة هي المجال الميت والتي تعني أننا لا نريد الدخول في الانفجارات الصغيرة التي لا طائل منها.
وهي عبارة عن خط أفقي منقط يحدد لنا منطقة العمل التي ينبغي لنا العمل وفقها.
والآن نأتي للكود مع الشرح.
القسم الأول:
كود PHP://+------------------------------------------------------------------+
//| Waddah_Attar_Explosion.mq4 |
//| Copyright © 2006, Eng. Waddah Attar |
//| [email protected] |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Eng. Waddah Attar"
#property link "[email protected]"
//----
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_color3 Sienna
#property indicator_color4 Blue
#property indicator_minimum 0.0
وبما أن عملنا هو في القسم الموجب فقط فقد حددنا المجال الأدنى للمؤشر بصفر.
القسم الثاني:
كود PHP:extern int Sensetive = 150;
extern int DeadZonePip = 30;
extern int ExplosionPower = 15;
extern int TrendPower = 15;
extern bool AlertWindow = true;
extern int AlertCount = 500;
extern bool AlertLong = true;
extern bool AlertShort = true;
extern bool AlertExitLong = true;
extern bool AlertExitShort = true;
بالنسبة لقوة الانفجار وقوة الترند فقد وجدت أنه يمكن إعطاء المستخدم معلومات إضافية أخرى تخبره عن قوة الانفجار وقوة ميل الترند.
قوة الانفجار هي بكل بساطة نسبة الزيادة في ميل الخط الأصفر وهو خط البولنغر.
وقوة الميل هي نسبة الزيادة لعمود الماكد الأخير عن الخط الذي يسبقه.
بهذه المعلومات الإضافية استطعنا أن نحدد شروط أخرى للدخول في الصفقة مع بدأ الانفجار والذي يفترض أن يكون قويا.
لأنه أحيانا تتحقق شروط الانفجار ولكن بقوة ضعيفة ولذلك وضعنا ما يشبه الفلتر على القوة.
ويستطيع المستخدم تغيير هذه القيم حسب درجة مخاطرته التي يريدها.
الخصائص المتبقية هي خصائص التنبيه بحيث يقوم المؤشر آليا بتنبيه المستخدم لبدء حدوث الانفجار في كلا الاتجاهين.
كما أنه يقوم بتنبيهه أيضا للخروج من صفقته في حال دخل بها أصلا.
القسم الثالث:
كود PHP:double ind_buffer1[];
double ind_buffer2[];
double ind_buffer3[];
double ind_buffer4[];
//----
int LastTime1 = 1;
int LastTime2 = 1;
int LastTime3 = 1;
int LastTime4 = 1;
int Status = 0, PrevStatus = -1;
double bask, bbid;
القسم الرابع:
كود PHP:int init()
{
SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 2);
SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 2);
SetIndexStyle(2, DRAW_LINE, STYLE_SOLID, 2);
SetIndexStyle(3, DRAW_LINE, STYLE_DOT, 1);
//----
SetIndexBuffer(0, ind_buffer1);
SetIndexBuffer(1, ind_buffer2);
SetIndexBuffer(2, ind_buffer3);
SetIndexBuffer(3, ind_buffer4);
//----
IndicatorShortName("Waddah Attar Explosion: [S(" + Sensetive +
") - DZ(" + DeadZonePip + ") - EP(" + ExplosionPower +
") - TP(" + TrendPower + ")]");
Comment("copyright [email protected]");
return(0);
}
كذلك جعلنا المؤشر يظهر اسم المؤشر والخصائص التي اختارها المستخدم.
القسم الخامس:
كود PHP:int start()
{
// تعريف متحولات لوضع قيم مؤشرات الماكد والبولنغر وقوة كل منهما
double Trend1, Trend2, Explo1, Explo2, Dead;
double pwrt, pwre;
// حساب عدد الشمعات الجديدة فقط
int limit, i, counted_bars = IndicatorCounted();
//----
if(counted_bars < 0)
return(-1);
//----
if(counted_bars > 0)
counted_bars--;
limit = Bars - counted_bars;
// بدء الحلقة الرئيسية لحساب قيم خطوط المؤشر
for(i = limit - 1; i >= 0; i--)
{
// حساب قيمة الفرق بين الماكد للشمعة الحالية والشمعة التي تسبقها مباشرة وضرب الناتج في الحساسية لتكبير الإشارة
Trend1 = (iMACD(NULL, 0, 20, 40, 9, PRICE_CLOSE, MODE_MAIN, i) -
iMACD(NULL, 0, 20, 40, 9, PRICE_CLOSE, MODE_MAIN, i + 1))*Sensetive;
// نفس الحساب السابق ولكن للشمعة التي تسبقها
Trend2 = (iMACD(NULL, 0, 20, 40, 9, PRICE_CLOSE, MODE_MAIN, i + 2) -
iMACD(NULL, 0, 20, 40, 9, PRICE_CLOSE, MODE_MAIN, i + 3))*Sensetive;
// حساب الفرق بين خطي البولنغر للشمعة الحالية
Explo1 = (iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_UPPER, i) -
iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_LOWER, i));
// حساب نفس الفرق السابق ولكن للشمعة السابقة
Explo2 = (iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_UPPER, i + 1) -
iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_LOWER, i + 1));
// حساب قيمة المنطقة الميتة
Dead = Point * DeadZonePip;
// تصفير قيم المصفوفات
ind_buffer1[i] = 0;
ind_buffer2[i] = 0;
ind_buffer3[i] = 0;
ind_buffer4[i] = 0;
// رسم خطوط خضراء في حال كان اتجاه الماكد لأعلى
if(Trend1 >= 0)
ind_buffer1[i] = Trend1;
// رسم خطوط خضراء في حال كان الاتجاه لأسفل
if(Trend1 < 0)
ind_buffer2[i] = (-1*Trend1);
// رسم خط البولنغر
ind_buffer3[i] = Explo1;
// رسم الخط المنقط الأبيض للمنطقة الميتة
ind_buffer4[i] = Dead;
- 07-01-2008, 08:14 PM #86
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
القسم السادس:
وهو الجزء الخاص بنظام التنبيهات Alerts
يعمل هذا النظام على تنبيه المستخدم في حال بدء انفجار سعري وفق الشروط التي حددها في خصائص المؤشر.
والشرح في الكود
كود PHP:// التأكد أننا في الشمعة رقم صفر والأخيرة حتى يعمل نظام التنبيهات
if(i == 0)
{
// في حال تحققت الشروط التالية يجب التنبيه:
// قيمة الترند الحالي أكبر من الصفر
// قيمة الترند الحالي أكبر من قيمة الانفجار
// قيمة الترند الحالي أكبر من المنطقة الميتة
// قيمة الانفجار أكبر من المنطقة الميتة
// الانفجار الحالي أكبر من الانفجار السابق
// الترند الحالي أكبر من السابق
// لم يتجاوز عدد مرات التنبيه
// المستخدم يريد تنبيه انفجارات الشراء
// السعر تغير حتى لا ينبهه بدون تغير في السعر
if(Trend1 > 0 && Trend1 > Explo1 && Trend1 > Dead &&
Explo1 > Dead && Explo1 > Explo2 && Trend1 > Trend2 &&
LastTime1 < AlertCount && AlertLong == true && Ask != bask)
{
// حساب قوة الترند وقوة الانفجار
pwrt = 100*(Trend1 - Trend2) / Trend1;
pwre = 100*(Explo1 - Explo2) / Explo1;
bask = Ask;
// قوة الانفجار أكبر من القوة المحددة وكذلك قوة الترند
if(pwre >= ExplosionPower && pwrt >= TrendPower)
{
// تفعيل التنبيه في حال كان المستخدم يريد تفعيل التنبيه بشكل عام
if(AlertWindow == true)
{
// إعطاء المستخدم معلومات عن الوضع الحالي للانفجار السعري
Alert(LastTime1, "- ", Symbol(), " - BUY ", " (",
DoubleToStr(bask, Digits) , ") Trend PWR " ,
DoubleToStr(pwrt,0), " - Exp PWR ", DoubleToStr(pwre, 0));
}
// حتى في حال لم يكن المستخدم يفعل نظام التنبيه أظهر له المعلومات عن طريق الطباعة
else
{
Print(LastTime1, "- ", Symbol(), " - BUY ", " (",
DoubleToStr(bask, Digits), ") Trend PWR ",
DoubleToStr(pwrt, 0), " - Exp PWR ", DoubleToStr(pwre, 0));
}
LastTime1++;
}
Status = 1;
}
// نفس الشرح السابق لتنبيه المستخدم عن صفقات البيع
if(Trend1 < 0 && MathAbs(Trend1) > Explo1 && MathAbs(Trend1) > Dead &&
Explo1 > Dead && Explo1 > Explo2 && MathAbs(Trend1) > MathAbs(Trend2) &&
LastTime2 < AlertCount && AlertShort == true && Bid != bbid)
{
pwrt = 100*(MathAbs(Trend1) - MathAbs(Trend2)) / MathAbs(Trend1);
pwre = 100*(Explo1 - Explo2) / Explo1;
bbid = Bid;
if(pwre >= ExplosionPower && pwrt >= TrendPower)
{
if(AlertWindow == true)
{
Alert(LastTime2, "- ", Symbol(), " - SELL ", " (",
DoubleToStr(bbid, Digits), ") Trend PWR ",
DoubleToStr(pwrt,0), " - Exp PWR ", DoubleToStr(pwre, 0));
}
else
{
Print(LastTime2, "- ", Symbol(), " - SELL ", " (",
DoubleToStr(bbid, Digits), ") Trend PWR " ,
DoubleToStr(pwrt, 0), " - Exp PWR ", DoubleToStr(pwre, 0));
}
LastTime2++;
}
Status = 2;
}
// تنبيه المستخدم للخروج من الشراء
if(Trend1 > 0 && Trend1 < Explo1 && Trend1 < Trend2 && Trend2 > Explo2 &&
Trend1 > Dead && Explo1 > Dead && LastTime3 <= AlertCount &&
AlertExitLong == true && Bid != bbid)
{
bbid = Bid;
if(AlertWindow == true)
{
Alert(LastTime3, "- ", Symbol(), " - Exit BUY ", " ",
DoubleToStr(bbid, Digits));
}
else
{
Print(LastTime3, "- ", Symbol(), " - Exit BUY ", " ",
DoubleToStr(bbid, Digits));
}
Status = 3;
LastTime3++;
}
// تنبيه المستخدم للخروج من البيع
if(Trend1 < 0 && MathAbs(Trend1) < Explo1 &&
MathAbs(Trend1) < MathAbs(Trend2) && MathAbs(Trend2) > Explo2 &&
Trend1 > Dead && Explo1 > Dead && LastTime4 <= AlertCount &&
AlertExitShort == true && Ask != bask)
{
bask = Ask;
if(AlertWindow == true)
{
Alert(LastTime4, "- ", Symbol(), " - Exit SELL ", " ",
DoubleToStr(bask, Digits));
}
else
{
Print(LastTime4, "- ", Symbol(), " - Exit SELL ", " ",
DoubleToStr(bask, Digits));
}
Status = 4;
LastTime4++;
}
PrevStatus = Status;
}
// تصفير العدادت في حال تغيرت حالة الصفقات
if(Status != PrevStatus)
{
LastTime1 = 1;
LastTime2 = 1;
LastTime3 = 1;
LastTime4 = 1;
}
}
return(0);
}
//+------------------------------------------------------------------+
حتى لو وجدتموه معقدا بعض الشيء فهذا التعقيد لم يأت فجأة بل كان نتيجة تطويرات متلاحقة بعد تجارب طويلة.
فأي مؤشر يبدأ صغيرا وبسيطا ثم يزداد تعقيدا وصعوبة مع مرور الوقت وعمل التطويرات عليه.
- 07-01-2008, 08:35 PM #87
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
الله يزيدك من علمه قول أمين
مشكور على المجهود والتعب اللي تبذله في خدمه اخوانك
- 08-01-2008, 12:21 AM #88
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
جزاك الله كل خير
- 08-01-2008, 02:05 AM #89
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
الله يعطك الصحة و العافية
سؤالي هل يمكن ان تعمل قاموس شرح لجميع الكلمات مع ما تمثله حسب تسلسل الحروف الاتينية؟ من فضلكم
اخي وضاح هل يمكنك ان تأخد مؤشر سهل من الموجودين في الميتا و تشرح فيه بالتفصيل والأماكن اللتي يمكننا أن نغيرها فيه .
و شكرا
- 09-01-2008, 03:26 PM #90
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
ما شاء الله مجهود كبير واكثر من رائع
طريقة منظمة في الشرح
الله يعطيك الف عافية
تسجيل حضور ومتابعة وانشالله نتعلم لغة البرمجة على يديك
تحياتي
المواضيع المتشابهه
-
للمبتدأين (حلل وتعلم) ضع تحليلاتك وتعلم من اخطائك
By BahraiN in forum استفسارات وأسئلة المبتدئينمشاركات: 248آخر مشاركة: 14-05-2012, 10:27 PM -
اريد كتاب به مفاتيح طرق الاحتراف
By عزيز in forum استفسارات وأسئلة المبتدئينمشاركات: 13آخر مشاركة: 29-08-2006, 03:48 AM