المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : دورة تعلم البرمجة باحتراف


الصفحات : [1] 2

MOVING_AVERAGE
23-11-2012, 05:16 PM
{ومن لجم علماً لجمه الله بلجام من نار يوم القيامة}


من هذا المنطلق ولان الله رزقني بفهم بعض الامور في البرمجة ورايت اخوتي هنا في المنتدي

باشد الحاجة لتعلم بعض الاساسيات لكي تضارب براحتك وتتغلب علي هذا السوق

رجائي الوحيد هو تسديد مستحقات الدورة

وهي الدعاء لي ولوالديا

اولا انا ناقل بعض المفاهيم والعبارات حرفيا من مختلف المنتديات لانني لم ابدء بالطبع

من لاشئ بل قرائت وفهمت الشروحات وسانقلها اليكم ان شاء الله

بتفصيل اكثر ان شاء الله

MOVING_AVERAGE
23-11-2012, 05:36 PM
في البداية نعرف لغة MQ4 تعريف بسيط

MQ4 هي لغة مخصصة للبرمجة علي منصة الميتاتريدر ويمكنها عمل عدت برامج تساعدنا في التجارة مثل

المؤشرات والاكسبريت

يمكننا كتابت هذه اللغة في محرر خاص موجود في منصة الميتاتريدر ونستطيع الوصول اليه من

الايقونة الصفراء من اعلي الشريط كما في الصورة

http://www.fx-arabia.com/vb/uploaded/8190_01353681368.jpg

او بالضغط علي F4

MOVING_AVERAGE
23-11-2012, 05:42 PM
ما هو الاكسبريت

هو برنامج يقوم بالمتاجرة الالية بدل عنك بحيث يقوم بفتح وغلق الصفقات وتغير هدفها وتتبع الربح

ومتابعتها ضمن الشروط التي برمج لها

ماهو المؤشر

هو برنامج يساعدك في التجارة باعطائك مثلا سهم للدخول او الخروج خط لمقاومة كتابة تضهر علي الشارت

لاكن لا يستطيع فتح او اغلاق اي صفقة اليا

MOVING_AVERAGE
23-11-2012, 05:48 PM
لكي نستطيع برمجة اكسبريت لابد ان نكون جيدين في برمجة المؤشر

نبدء علي بركت الله في كيفية برمجة المؤشر

في لغة MQ4 لا بد من معرفة امور وكلمات هامة جدا لكي نواصل الطريق الي برمجة المؤشر

من بين هذه الكلمات التي وجب علينا معرفتها

int -double-bool-string -color-datetime

وهي تعتبر المتغيرات الاساسية في لغة MQ4 حيت لا يخلو اي برنامج منها

MOVING_AVERAGE
23-11-2012, 06:01 PM
الكلمة الاولي int

تستخدم هذه الكلمة لتعريف متغير اختار اسمه كما اشاء علي انه رقم صحيح ( لا توجد فيه فواصل)

بالنسبة للمبتدئين في اللغة سيجدوا صعوبة قليلا ثم يتضح كل شئ في الامثلة وبعد اكمال كل المتغيرات

مثال 1

استخدام الكلمة int

اريد من البرنامج ان يحجز لي مكان في الذاكرة (ذاكرة البرنامج ) وهذا المكان لابد ان اعطيه اسم لكي يتعرف عليه البرنامج لما اناديه

واضع في هذا المكان رقم صحيح

التطبيق العملي

int A=50;

ان كان فيه اي اسئلة لا تترددوا

MOVING_AVERAGE
23-11-2012, 06:08 PM
الكلمة الثانية double

تستخدم هذه الكلمة لتعريف متغير اختار اسمه كما اشاء علي انه رقم فيه فواصل

التطبيق العملي

double n;

نلاحظ هنا ااني في المثال الاول اعطيت المتغير القيمة 10 وهنا لم اعط المتغير اي قيمة و الكتابتين صحيحتين


نلاحظ ان اي تصريح ينتهي بالفاصلة المنقوطة

MOVING_AVERAGE
23-11-2012, 06:16 PM
الكلمة الثالثة bool

تستخدم هذه الكلمة لتعريف متغير اختار اسمه كما اشار علي انه متغير منطقي يحمل معنين فقط اما صحيح او خاطئ

لما يكون صحيح نرمز له ب TRUE او بالرقم 1

لما يكون خاطئ نرمز له ب false او بالرقم 0

تطبيق عملي

bool c;هنا المتغير ياخذ تلقائيا القيمة صحيح

bool c=true;هنا ايضا المتغير ياخذ القيمة صحيح

bool c=1;هنا المتغير ياخذ ايضا القيمة صحيح

bool c=false ;bool c=0;وهنا المتغير ياخذ القيمة خطئ

لانستطيع التصريح بمتغير بقيمتين مختلفتين

MOVING_AVERAGE
23-11-2012, 06:23 PM
الكلمة الرابعة string

وتستخدم هذه الكلمة للتعريف متغير علي انه جملة من الحروف

تكتب هذه الجملة بين قوسين ثنائيين

تطبيق عملي

string e="MOVING";

maasa
24-11-2012, 12:10 AM
بارك الله فيك اخي الكريم . موضوع رائع اتمنى ان تستمر فيه

بالتوفيق ان شاء الله و سجلني متابع معك

MOVING_AVERAGE
24-11-2012, 12:46 PM
بارك الله فيك اخي الكريم . موضوع رائع اتمنى ان تستمر فيه

بالتوفيق ان شاء الله و سجلني متابع معك

ان شاء الله مكملين اخي لاكن احيانا لا يوجد وقت للكتابة

MOVING_AVERAGE
24-11-2012, 12:50 PM
الكلمة الخامسة color

وهي تقريبا مخصصة لهذه اللغة

تستخدم لتعريف متغير يحمل قيمة لون ما

مثال تطبيقي

color f=Red;

ملاحضة الالوان دائما تبدء بحرف كبير

MOVING_AVERAGE
24-11-2012, 12:53 PM
الكلمة السادسة والاخيرة في تعريف المتغيرات التي نحتاجها في البرمجة

datetime

تستخدم لتعريف متغير يحمل قيمة زمنية او تاريخ

MOVING_AVERAGE
24-11-2012, 01:09 PM
اول شئ نفتح المحرر كما اشرت في بداية الموضوع

ونتبع التالي

نفتح موضوع جديد كما في الصورة
http://www.fx-arabia.com/vb/uploaded/8190_01353751414.jpg
او نضغط علي Ctrl +N

نختار indecteur personnel

http://www.fx-arabia.com/vb/uploaded/8190_01353751676.jpg
نكتب اسم برنامجنا كما نريد

http://www.fx-arabia.com/vb/uploaded/8190_01353751714.jpg

واخير نضغط انهاء

http://www.fx-arabia.com/vb/uploaded/8190_01353751750.jpg

MOVING_AVERAGE
24-11-2012, 01:11 PM
سنجد الكود البرمجي الجاهز التالي وسنشرحه كله ان شاء الله

//+------------------------------------------------------------------+
//| 1.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
//----

//----
return(0);
}
//+------------------------------------------------------------------+

MOVING_AVERAGE
24-11-2012, 01:19 PM
وقبل شرح الكود السابق نشرح كيف نكتب تعليق في محرر النصوص

تعليق لا ينفذه البرنامج لاكن يقرئه المبرمج فقط ممكن يفيده عند مراجعة اي برنامج برمجه من قبل

اذن ما هي التعليقات وكيف اكتبها

التعليقات

أي لغة برمجة توفر للمبرمج القدرة على كتابة شرح أو تعليقات داخل الكود البرمجي نفسه

وظيفة هذا الشرح هي سهولة التعديل فيما بعد للكود نفسه أو شرح الكود لغير المبرمج وذلك

لتوضيح فكرة ما أو شرح طريقة استخدام البرنامج مثلا

داخل الكود البرمجي

الكلمات الملونه باللون الرمادي الباهت تسمى تعليقات وهو لا يؤثر على عمل الإكسبرت او

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

الكود يقوم بإستخدام التعليقا ويتم كتابة التعليقات بطريقتين

1 أن يسبق السطر علامة

//

2 إذا كانت التعليقات أكثر من سطر

/*

في بداية السطر

*/

في نهاية السطر

MOVING_AVERAGE
24-11-2012, 01:28 PM
تعديل بسيط الي ان نصل الي مكانه

MOVING_AVERAGE
24-11-2012, 01:35 PM
نلاحظ في الكود البرمجي الجاهز التعلقات التالية

//+------------------------------------------------------------------+
//| 1.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+

//---- indicators
//----

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+

وكلها برمجيا لا هدف منها وممكن نحذفها كلها ولا يتاثر البرنامج بها علي الاطلاق

وهي هدفها فقط توضيح المناطق للمبرمج واضهار معلومات تهم المبرمج

MOVING_AVERAGE
24-11-2012, 01:37 PM
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

وهذه الكتابة لحقوق الملكية للمبرمج ولن يحولها محرر النصوص للغة الالة اثناء معالجة الكود البرمجي

MOVING_AVERAGE
24-11-2012, 01:44 PM
#property indicator_chart_window

وهذا الكود يفيد ان البرنامج الذي سننشئه او المؤشر الذي نعمل عليه سيكون علي نفس الشارت

التي تكون فيها الشموع مثل مؤشر الاشموكو علي سبيل المثال

ولو وضعنا الكود التالي

#property indicator_separate_window

يعني ان المؤشر الذي نعمل عليه سيكون علي نافذة مستقلة مثل مؤشر RSI او مؤشر المومانتيوم

وعلي كل نحن نختار الناقذة التي نعمل عليها عند فتح صفحة جديدة

http://www.fx-arabia.com/vb/uploaded/8190_01353751750.jpg
لو ناشر علي العلامة من فوق ستكون نافذة البرنامج مستقلة عن النافذة الرئسية

لو فيه اي اسئلة لا تترددوا اخواني

Badr
24-11-2012, 04:00 PM
ممتااااااز ما شاء الله
متابع معك بشغف
و اتمنى اني ان شاء الله اقدر ابرمج اى مؤشر بعد كده

سمير محمد ارمان
24-11-2012, 06:54 PM
متابع معكم ان شاء الله
ماشاء الله موضوع ممتاز
جزاكم الله خير

MOVING_AVERAGE
24-11-2012, 11:33 PM
وبعد ان عرفنا النافذة التي سنعمل عليها

نجد 3 دوال

وسندرس الدوال لاحقا :1 (35):

الدالة الاولي

int init()
{
//---- indicators
//----
return(0);
}

الدالة الثانية

int deinit()
{
//----

//----
return(0);
}

الدالة الثالثة والاخيرة

int start()
{
int counted_bars=IndicatorCounted();
//----

//----
return(0);
}

وسنشرح في ما يلي كل دالة منفرده

MOVING_AVERAGE
24-11-2012, 11:39 PM
الدالة int init()هذه الدالة يتم إستدعائها مرة واحدة فقط عند بداية عمل الإكسبرت او المؤشر

في هذا القسم لا نستطيع وضع متغيرات خارجية ليتحكم بها المستخدم و أيضا في هذا القسم يمكننا استخدام

متحولات تم تعريفها في القسم السابق حيث لا يمكننا في القسم الاول استخدام متحول عرفناه في نفس القسم

مثلا: أنا عرفت المتحول A في القسم الاول على انه متغير من نوع اينيت يحمل القيمة 10

فأنا لا استطيع اعطاءه قيمة جديدة في نفس القسم الا بتغيير القيمة الاصلية و هي 10

اما في القسم الثاني فيمكنني اعطاءه أي قيمة أخرى عند تحقق شروط معينة

وسيتم التفصيل بشكل ممل لاحقا في التطبيقات

المهم الان لابد من معرفة ان الدالة انيت تقرء مرة واحدة فقط عند بداية البرنامج

MOVING_AVERAGE
24-11-2012, 11:44 PM
الدالة

deinit()

وهذه الدالة يتم إستدعائها مرة واحدة فقط عند نهاية عمل الإكسبرت او المؤشر

هذه الدالة يقرأها الميتاتريدر لمرة واحدة أيضا و لكن فقط عند الخروج من البرنامج أي عندما تحذف المؤشر

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

ويقراها ايضا عند تغير التايم فريم او تغير العملة

ومن بين المهام التي تقوم بها

حذف الارقام او الخطوط التي حفظتها في ذاكرة الميتاتريدر

وبالتطبيق سنفهم اكثر عمل هذه الدالة

MOVING_AVERAGE
24-11-2012, 11:47 PM
الدالة

start()

هذه الدالة هي الاهم في البرمجة لانها ستحتوي على معظم الاكواد و هذه الدالة يقرأها الميتاتريدر في كل

تحرك للسعر أي كلما تحرك السعر لنقطة واحدة سوف يقوم برنامج الميتا بقراءة الاكواد الموجودة في هذه

الدالة و تنفيذها

و اغلب العمل سيكون في هذه الدالة

jmeel
25-11-2012, 12:14 AM
دائما قيمة الأنسان بمايعطي وليس بما ياخذ
عمل رائع ، وجزاك الله خير

MOVING_AVERAGE
25-11-2012, 12:25 AM
ممتااااااز ما شاء الله
متابع معك بشغف
و اتمنى اني ان شاء الله اقدر ابرمج اى مؤشر بعد كده

ان شاء الله بعد كم صفحة ستكتب البرنامج الذي تريد

المهم اسئل عن اي شئ لم تفهمه

MOVING_AVERAGE
25-11-2012, 12:26 AM
متابع معكم ان شاء الله
ماشاء الله موضوع ممتاز
جزاكم الله خير

شرفني مرورك اخي وانا ايضا متابع مواضيعك الرهيبة في منتدي الجيران

MOVING_AVERAGE
25-11-2012, 12:28 AM
دائما قيمة الأنسان بمايعطي وليس بما ياخذ
عمل رائع ، وجزاك الله خير

بارك الله فيك اخي جميل

نعمل شئ ربما يفيدنا لما نختفي من هذه الدنيا

Qadri
25-11-2012, 03:57 AM
استاذ موفينج
السلام عليكم ورحمة الله

شكرا على الموضوع المهم وعلى الله تتفك عقدتى من اللغة دى على ايديك

ممكن تشرح لنا معنى الكود ده
int counted_bars=IndicatorCounted();
وليه دايما موجود فى المؤشرات؟
شكرا لك اخى

MOVING_AVERAGE
25-11-2012, 10:22 AM
استاذ موفينج
السلام عليكم ورحمة الله

شكرا على الموضوع المهم وعلى الله تتفك عقدتى من اللغة دى على ايديك

ممكن تشرح لنا معنى الكود ده
int counted_bars=IndicatorCounted();
وليه دايما موجود فى المؤشرات؟
شكرا لك اخى

بارك الله فيك

تابع معنا وستجد ما تحتاج

علي كل هذه الدالة ترجع لنا عدد الشموع الموجودة مسبقا وتضعها في متغير اسمه counted_bars ونوعه int

ولقد شرحت التصريح بالمتغيرات لو فهمته لفهمت علي الاقل نصف الكتابه

المهم ساخصص لهذ الدالة شرح وافي ان شاء الله لاكن في وقته

Qadri
25-11-2012, 01:22 PM
بارك الله فيك

تابع معنا وستجد ما تحتاج

علي كل هذه الدالة ترجع لنا عدد الشموع الموجودة مسبقا وتضعها في متغير اسمه counted_bars ونوعه int

ولقد شرحت التصريح بالمتغيرات لو فهمته لفهمت علي الاقل نصف الكتابه

المهم ساخصص لهذ الدالة شرح وافي ان شاء الله لاكن في وقته

شكرا علىالرد استاذنا اتمنى فقط الا تتاخر علينا نحن فى انتظار المزيد

tamer_taher22
25-11-2012, 01:41 PM
معك باذن الله

MOVING_AVERAGE
25-11-2012, 04:35 PM
شكرا علىالرد استاذنا اتمنى فقط الا تتاخر علينا نحن فى انتظار المزيد

ان شاء الله اخي كلما يتاح لي الوقت سانزل جزء

وانا لست استاذ انا مبتدء في الفوركس مثل الجميع اخي

MOVING_AVERAGE
25-11-2012, 10:40 PM
نكمل التعليقات لاكن الان نريد كتابة تعليق يضهر علي الشارت

يمكننا استخدام عدة وسائل منها

Comment("");

حيث نكتب بين القوسين اي نص نريد ان يضهر علي الشارت

ويمكننا ايضا ان نكتب قيمة متغير علي الشارت بوضع المتغير من دون اقواس في

Comment();

دائما نستخدم

Comment("");

داخل الدالة start

MOVING_AVERAGE
25-11-2012, 10:44 PM
تطبيق عملي

افتح صفحة برنامج جديد

واكتب علي الشارت الاسم الذي تريد ان تراه لما تتاجر

تطبيقي في المرفقات انتضر تطبيقاتكم

Qadri
26-11-2012, 12:44 AM
اتفضل وان شاء الله عشرة من عشرة

int start(){


comment("احذر التداول بالفوركس");

return (0);}

اعتقد ان return (0) افادت عدم تنفيذ الدالة مع كل تك .. صح ولا غلط؟

Qadri
26-11-2012, 12:46 AM
الدنيا متلخبطة ليه كده فى المشاركة؟ المشكلة دى تتحل ازاى؟

MOVING_AVERAGE
26-11-2012, 12:52 AM
اتفضل وان شاء الله عشرة من عشرة

int start(){


comment("احذر التداول بالفوركس");

return (0);}

اعتقد ان return (0) افادت عدم تنفيذ الدالة مع كل تك .. صح ولا غلط؟

تمام ماشاء الله عليك

لاكن لا تغير شئ في الدالة ستار اتركها كما هي

وضف فقط التعليق

MOVING_AVERAGE
26-11-2012, 12:54 AM
الدنيا متلخبطة ليه كده فى المشاركة؟ المشكلة دى تتحل ازاى؟

انتقل الي الوضع المتطور

ستجد فوق مكان كتابت النصوص ادراك كود php

اضغط عليه

واكتب المشاركت في وسط الكود لل PHP

او طرقة اخري

انتقل الي الوضع المتطور

اكتب الكود عادي

ثم ضلله واضغط علي ادرج كود php

MOVING_AVERAGE
26-11-2012, 06:43 PM
الرسم البياني ومفاتيحه

عند فتح منصت التداول سنلاحظ وجود رسومات مختلفه يمكن اختصارها في 3 انواع

الرسم البياني الخطي Liner chart

وهو الرسم البياني الذي يعبر فية عن سعر العملة على شكل خط تمثل كل نقطة سعر إغلاق العملة لكل فترة زمنية .

يعتبر أسلوب الرسم البياني الخطي هو أقل أنواع الرسوم البيانية استخداماً حيث يستأثر النوعان الآخران على

اهتمام أغلب المتاجرين لأن النوعين الآخرين يعطيان قدر أكبر وأدق وأوضح من المعلومات للمتاجر .

وفي الحقيقة لا يستخدم هذا النوع من الرسوم البيانية إلا قليلاً وبغرض الكشف عن

الأشكال patterns حيث أن الأشكال تظهر بشكل أوضح بهذا النوع من الرسوم البيانية .

MOVING_AVERAGE
26-11-2012, 06:49 PM
وهذا توضيح علي الشارت

http://www.fx-arabia.com/vb/uploaded/8190_01353944897.jpg

maasa
26-11-2012, 07:09 PM
شرح رائع و مستمر في المتابعة معك اخي الكريم

جزاك الله خيرا

( الواجب في المرفقات :1: )

MOVING_AVERAGE
27-11-2012, 11:30 PM
للاسف كما تعودت لا اهتمام

المهم انا اكمل الي ان امل واترك الموضوع

MOVING_AVERAGE
27-11-2012, 11:38 PM
الرسم البياني ذوالقضبان Bars chart


وهو الأسلوب الذي طورة المتاجرون ومازال شائعاً, حيث يتم التعبير عن حركة سعر عملة بشكل قضبان

فما هو القضيب وكيف يعبر عن حركة السعر ؟

يمثل القضيب وحدة واحدة من الفترة الزمنية التي تختارها .

سيمثل كل قضيب ساعة مثلا

أعلى القضيب يمثل أعلى سعر وصل إلية السعر خلال هذة الساعة .

أسفل القضيب يمثل أدنى سعر وصل إلية السعر خلال هذة الساعة .

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

الخط الصغير على يمين القضيب يمثل سعر الإغلاق وهو السعر الذي كان علية السعر عند نهاية هذة الساعة

http://www.fx-arabia.com/vb/uploaded/8190_01354048670.jpg

MOVING_AVERAGE
27-11-2012, 11:41 PM
الرسم البياني ذو الشموع اليابانية Japanese candle stick chart


وهو أسلوب آخر للتعبير عن حركة السعر طوره المتاجرون اليابانيون منذ القرن السابع عشر في العقود المستقبلية لأسواق الأرز لذا فقد ارتبط اسمه بهم وهو الأسلوب

الأفضل والأكثر وضوحاً من الأسلوب السابق وقد أصبح هذا الأسلوب في التعبير عن الأسعار هو الأسلوب السائد في مختلف أنحاء العالم وففي كافة الأسواق المالية

والمفضل لدى أغلب المتاجرين

ماهي الشمعة اليابانية ؟

يمثل المستطيل جسم الشمعة ويمثل الخطان المتقابلان ذيل الشمعة

وتمثل كل شمعة وحدة واحدة من الفترة الزمنية المختارة , تماماً كالقضبان

والشمعة اليابانية تأتي على شكلين : صاعدة و هابطة

الشمعة الصاعدة : هي الشمعة التي يكون جسمها فارغاً وتعبر عن صعود في السعر حيث :

يمثل أسفل الجسم السعر الذي كانت علية العملة عند بداية الفترة الزمنية

ويمثل أعلى الجسم السعر الذي كانت علية العملة عند نهاية الفترة الزمنية

ويمثل الذيل الأعلى أعلى سعر وصلت إلية العملة خلال الفترة الزمنية نفسها

ويمثل الذيل السفلي أدنى سعر وصلت إلية العملة خلال الفترة الزمنية نفسها

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

عند سعر وانتهى عند سعر أعلى

الشمعة الهابطة : هي الشمعة التي يكون جسمها مظللاً وتعبر عن انخفاض في السعر حيث :

يمثل أسفل الجسم السعر الذي كانت علية العملة عند نهاية الفترة الزمنية

ويمثل أعلى الجسم السعر الذي كانت علية العملة عند بداية الفترة الزمنية

ويمثل الذيل الأعلى أعلى سعر وصلت إلية العملة خلال الفترة الزمنية نفسها

ويمثل الذيل الأسفل أدنى سعر وصلت إلية العملة خلال الفترة الزمني نفسها

ولأنها شمعة تعبر عن هبوط السعر يكون السعر في نهاية الفترة ( سعر الإغلاق) أقل من السعر عند بداية الفترة (سعر الإفتتاح ) حيث السعر في هبوط فهو بدأ عند سعر

وانتهى عند سعر أقل

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

كما يمكنك باستخدام برنامج الرسوم البيانية أن تختار اللون الذي يناسبك للشموع المهم إنه دائماً هناك فارق في الشكل بين الشمعة الصاعدة والشمعة الهابطة

ستكون في كل الحالات قادراً وبنظرة سريعة من التمييز بين الشمعة الصاعدة والهابطة وهذا هو المهم .

MOVING_AVERAGE
28-11-2012, 12:05 AM
في لغة MQ4 نعبر عن ما سبق كالتالي


سعر الافتتاح Open price

ينكننا تمثيل وكتابة سعر الافتتاح باحد الشكلين التاليين


double iOpen( string symbol, int timeframe, int shift)

حيث

string symbol

هذه الكلمة تعني اسم الشارت وهو عبارة عن متغير من نوع string

يكتب بين قوسين مزدوجين

مثلا "EURJPY"

نستطيع وضع في هذه الخانة اما اسم الشارت بين قوسين مزدزجين

او 0 وهي تعني ان المؤشر يعمل علي اي شارت

NULL وهي ايضا تعني ان المؤشر يعمل علي اي شارت


int timeframe

هذه الكلمة تعني اسم متغير من نوع صحيح وترمز للفريم الذي نعمل عليه

مثلا فريم الساعة او فريم 15 دقيقة

ويمكن كتابة في هذه الخانة

0 للعمل علي اي تايم فريم

PERIOD_M5 او 5 للعمل علي فريم 5 دقائق

PERIOD_M15 او 15 للعمل علي فريم 15 دقائق

PERIOD_M30 او 30 للعمل علي فريم 30 دقائق

PERIOD_H1 او 60 للعمل علي فريم 60 دقائق ساعة

PERIOD_H4 او 240 للعمل علي فريم 4 ساعات

PERIOD_D1 او 1440 للعمل علي فريم اليوم

PERIOD_W1 او 10080 للعمل علي فريم الاسبوع

PERIOD_MN1 او 43200 للعمل علي فريم الشهر


int shift

هذه الكلمة تعني متغير صحيح وهي ترمز لرقم الشمعة

حيث ان الشمعة الحالية يرمز لها بالرقم 0

والتي قبلها يرمز لها ب 1 وهكذا

بعض الامثلة


افتتاح شمعة الاسبوع الحالي علي شارت EURUSD

iOpen("EURUSD",PERIOD_W1,0);ارجوا طرح اي سؤال لمن لم يفهم لان هذه المعلومات تعتبر اساسيات ولن ارجع لها لما نتقدم في الدروس

bendar
28-11-2012, 12:14 AM
واصل بارك الله فيك . و انا اطالب بتثبيت هذا الموضوع . لاهميته و لسهولة شرحه

maasa
28-11-2012, 12:19 AM
واصل بارك الله فيك . و انا اطالب بتثبيت هذا الموضوع . لاهميته و لسهولة شرحه

اقتراح جميل اتمنى تنفيذه من ادارة المنتدى

استمر اخي الكريم MOVING_AVERAGE

MOVING_AVERAGE
28-11-2012, 04:16 PM
واصل بارك الله فيك . و انا اطالب بتثبيت هذا الموضوع . لاهميته و لسهولة شرحه

اقتراح جميل اتمنى تنفيذه من ادارة المنتدى

استمر اخي الكريم MOVING_AVERAGE


اهلا اخواني

هل كل شئ واضح حتي الان ؟؟؟؟

MOVING_AVERAGE
28-11-2012, 04:22 PM
الطريقة الثانية لكاتبة سعر الافتتاح


Open[];


حيث نضع بين المعقوفتين رقم الشمعة

وهذه الكتابة اختصار للكتابة السابقة

نستخدمها لما نبرمج مؤشر يعمل فقط مع الشموع الضاهرة علي الشارت مباشرتا

نفس الشئ بالنسبة للهاي واللو والكلوز

MOVING_AVERAGE
28-11-2012, 04:24 PM
تطبيق مباشر

برمج مؤشر يضهر في الشارت اعلي علي اليسار

سعر الافتتاح و سعر الاغلاق وسعر الهاي وسعر اللوي للشمعة السابقة

MOVING_AVERAGE
28-11-2012, 04:25 PM
فيه مفاجئة بعد هذا التطبيق

عمل مؤشر احترافي للسعر

maasa
28-11-2012, 07:30 PM
اهلا اخواني

هل كل شئ واضح حتي الان ؟؟؟؟

كله تمام و عشرة على عشرة :1:

maasa
28-11-2012, 07:59 PM
الواجب :1:

MOVING_AVERAGE
28-11-2012, 09:30 PM
الواجب :1:


مشاء الله عليك

تصحيح فقط لاستخدام Comment

لو اردت مثلا اضهار الكتابات تخت بعض لا تكتب هكذا

Comment("open=");
Comment(op);
Comment("close=");
Comment(cl);
Comment("high=");
Comment(hi);
Comment("low=");
Comment(lo);

Comment("open=",op," close=",cl," high=",hi," low=",lo," thanks mr moving average");
وانما استخدم الكلمة "\n"بين الكلمات لكل ترتبهم اسفل بعضهم لو نستخدمها علي تطبيقك يصبح

int start()
{


double op = Open[1];
double cl = Close[1];
double hi = High[1];
double lo = Low[1];



Comment("open=",op,"\n","close=",cl,"\n","high=",hi,"\n","low=",lo,"\n","you're welcome mr maasa");


//----
return(0);
}
//+------------------------------------------------------------------+

maasa
28-11-2012, 09:40 PM
مشاء الله عليك

تصحيح فقط لاستخدام Comment

لو اردت مثلا اضهار الكتابات تخت بعض لا تكتب هكذا

Comment("open=");
Comment(op);
Comment("close=");
Comment(cl);
Comment("high=");
Comment(hi);
Comment("low=");
Comment(lo);

Comment("open=",op," close=",cl," high=",hi," low=",lo," thanks mr moving average");وانما استخدم الكلمة "\n"بين الكلمات لكل ترتبهم اسفل بعضهم لو نستخدمها علي تطبيقك يصبح

int start()
{


double op = Open[1];
double cl = Close[1];
double hi = High[1];
double lo = Low[1];



Comment("open=",op,"\n","close=",cl,"\n","high=",hi,"\n","low=",lo,"\n","you're welcome mr maasa");


//----
return(0);
}
//+------------------------------------------------------------------+

شكرا على التصحيح استاذي و مستمر في متابعة هذه الدورة الرائعة جزاك الله كل الخير عنها

اخوك الصغير مصطفى

MOVING_AVERAGE
28-11-2012, 09:40 PM
بعدما تعرفنا علي 4 معلومات مهمة حول الشمعة

التطبيق القادم سيكون هكذا

http://www.fx-arabia.com/vb/uploaded/8190_01354127907.jpg

اضهار السعر في اي زاوية من زوايا الشاشة باي لون و باي حجم

Mohamed_Amr
29-11-2012, 12:34 AM
الله ينور اخى الحبيب
وان شاء الله متابع معاك
وبالتوفيق ياغالى

Mohamed_Amr
29-11-2012, 12:39 AM
بعدما تعرفنا علي 4 معلومات مهمة حول الشمعة

التطبيق القادم سيكون هكذا

http://www.fx-arabia.com/vb/uploaded/8190_01354127907.jpg

اضهار السعر في اي زاوية من زوايا الشاشة باي لون و باي حجم

اخى الحبيب قبل الانتقال الى هذا التطبيق
ياريت توضح ايضا كيف تغيير اللون والخط للتطبيق الاول
وكيف نجعل الهاى واللو وسعر الافتتاح لليومى فقط وعلى كل الفريمات
وبالتوفيق ياغالى

MOVING_AVERAGE
29-11-2012, 12:48 AM
اخى الحبيب قبل الانتقال الى هذا التطبيق
ياريت توضح ايضا كيف تغيير اللون والخط للتطبيق الاول
وكيف نجعل الهاى واللو وسعر الافتتاح لليومى فقط وعلى كل الفريمات
وبالتوفيق ياغالى

عند استعمال Comment

لا يمكننا حسب علمي التحكم في لون وحجم الخط

اما سعر الافتتاح لليومي فانا شرحتها بالتدقيق فيما سبق حاول ترجع فقط لشرح سعر الافتتاح وانت تجد كل شئ

ويمكننا كتابة

iOpen(0,PERIOE_D1,1);
iClose(0,PERIOE_D1,1);
iHigh(0,PERIOE_D1,1);
iLow(0,PERIOE_D1,1);

للشمعة السابقة

بالنسبة للشمعة الحالية اكتب 0 مكان 1

MOVING_AVERAGE
29-11-2012, 12:49 AM
في لغة MQ4 نعبر عن ما سبق كالتالي


سعر الافتتاح Open price

ينكننا تمثيل وكتابة سعر الافتتاح باحد الشكلين التاليين


double iOpen( string symbol, int timeframe, int shift)
حيث

string symbol

هذه الكلمة تعني اسم الشارت وهو عبارة عن متغير من نوع string

يكتب بين قوسين مزدوجين

مثلا "EURJPY"

نستطيع وضع في هذه الخانة اما اسم الشارت بين قوسين مزدزجين

او 0 وهي تعني ان المؤشر يعمل علي اي شارت

NULL وهي ايضا تعني ان المؤشر يعمل علي اي شارت


int timeframe

هذه الكلمة تعني اسم متغير من نوع صحيح وترمز للفريم الذي نعمل عليه

مثلا فريم الساعة او فريم 15 دقيقة

ويمكن كتابة في هذه الخانة

0 للعمل علي اي تايم فريم

PERIOD_M5 او 5 للعمل علي فريم 5 دقائق

PERIOD_M15 او 15 للعمل علي فريم 15 دقائق

PERIOD_M30 او 30 للعمل علي فريم 30 دقائق

PERIOD_H1 او 60 للعمل علي فريم 60 دقائق ساعة

PERIOD_H4 او 240 للعمل علي فريم 4 ساعات

PERIOD_D1 او 1440 للعمل علي فريم اليوم

PERIOD_W1 او 10080 للعمل علي فريم الاسبوع

PERIOD_MN1 او 43200 للعمل علي فريم الشهر


int shift

هذه الكلمة تعني متغير صحيح وهي ترمز لرقم الشمعة

حيث ان الشمعة الحالية يرمز لها بالرقم 0

والتي قبلها يرمز لها ب 1 وهكذا

بعض الامثلة


افتتاح شمعة الاسبوع الحالي علي شارت EURUSD

iOpen("EURUSD",PERIOD_W1,0);ارجوا طرح اي سؤال لمن لم يفهم لان هذه المعلومات تعتبر اساسيات ولن ارجع لها لما نتقدم في الدروس




راجع هذا الدرس ستفهم ان شاء الله

Fxcol
29-11-2012, 02:30 AM
عمل رائع أخي شكرا لك
فكر أخي أنه بعد سنوات قد يأتي من يستفيد من هذه الدروس
جزاك الله خيرا

mamz2006
29-11-2012, 06:43 AM
اخي موفنق حفظك الله

عمل وخدمة عظيمه

جزاك الله خيرا

فانت انسان معطاء

بارك الله فيك

MOVING_AVERAGE
29-11-2012, 03:46 PM
كيف نرسم كائنا برمجيا علي الشارت

في هذه المرحلة نستخدم الدالة

دوال الرسم

وهي دوال تسمح لنا بانشاء عدد من الرسومات عللي الشارت

الصيغة العامة للدالة تكون كالاتي

ObjectCreate( string name, int type, int window, datetime time1, double price1, datetime time2=0, double price2=0, datetime time3=0, double price3=0)

حيث

string name

هو اسم الكائن الذي نريد برمجته

int type

نوع الكائن الذي نريد برمجته

int window

رقم النافذة التي يضهر عليها الكائن

دائما نتركها 0 لما نريد الكائن يضهر علي شارت الشموع

datetime time1

هو وقت الشمعة التي نريد الرسم منها

double price1

سعر الشمعة التي نريد الرسم منها

MOVING_AVERAGE
29-11-2012, 04:13 PM
مختلف الرسومات تعتمد علي نوع الرسم اي الخانة الثانية في صيغة الدالة

تطبيقنا يضهر لنا كتابة معينة علي الشارت ولهذا الغرض نستعمل النوع التالي

OBJ_LABELوعند كتابة الدالة الرسومية ستكون كالتالي

ObjectCreate("Market_Signal_Label", OBJ_LABEL, 0, 0, 0);يعني اعطينا لها اسم

وحددنا النوع

وضعناها في النافذة الرئسية

جعلناها لا تتعلق بالوقت ولا السعر عند وضع في خاناتهم 0

وبما ان دالتنا لاضهار الكتابة لابد ان نتبعها بالدالة التالية

ObjectSetTextوالكتابة العامة لها تكون كا الاتي

ObjectSetText( string name, string text, int font_size, string font=NULL, color text_color=CLR_NONE)حيث

string name

اسم الكائن وهو نفسه الاسم السابق

string text

الكتابة التي نريد ان تضهر علي الشارت

int font_size

حجم الخط

string font=NULL

نوع الخط الذي نريد الكتابة به

color text_color=CLR_NONE

لون الخط


مثلا انا اريد الخط ان يكون كا التالي

يضهر لي عبارة moving

حجم الخط 27

نوع الخط

Times New Roman

لون الخط ازرق

ستكون الترجمة كا التالي

ObjectSetText("Market_Signal_Label", "moving", 27, "Times New Roman", Blue);
المؤشر النهائي لم يكنمل بعد

تطبيق عملي

برمج مؤشر يضهر اي كتابه علي الشارت باللون الاصفر

maasa
29-11-2012, 11:33 PM
شرح واضح جدا

الواجب

واحد باللون الازرق و التاني بالاصفر :1:

Qadri
30-11-2012, 01:40 AM
كده تاخدونى على خوانه وتشرحو حاجات كتير وانا غايب ! .. ماشى
هاذاكر اللى فاتنى وارجع لكم

MOVING_AVERAGE
01-12-2012, 11:31 AM
شرح واضح جدا

الواجب

واحد باللون الازرق و التاني بالاصفر :1:



تمام الحمد لله علي كل شئ

MOVING_AVERAGE
01-12-2012, 11:58 AM
الان لكي نجعل الكتابه في الزاوية نستعمل الدالة

ObjectSetحيث الكتابة العامة للدالة كا الاتي

ObjectSet( string name, int index, double value) string name

اسمة الكائن

int index

هنا فيه عدد كثير جدا من الاحتملات التي ممكن نطبقها علي الكائن مثل لون او حجم الكائن وغيرها

لايمكنني توضيح كل شئ هنا لانها التجربة خير وسيلة للتعلم

double value

قيمة التغير الذي نريده

بالتطبيق علي مثالنا السابق

سيصبح لدينا

ObjectSet("Market_Price_Label", OBJPROP_CORNER, 1);حيث

OBJPROP_CORNER

تعني اننا نريد وضع الكائن في الزاوية ولدينا 4 زوايا اعلي يمين او يسار و اسفل يمين او يسار

1

اخترنا زاوية من الزوايا الاربعة السابقة

جربو المثال بتغير القيمة من 0 الي 3 للحصول علي كل الزوايا

يجب اتباع ما سبق بالكتالبة التالية لتكون الكتابة في اقصي الزاوية
ObjectSet("Market_Price_Label", OBJPROP_XDISTANCE, 1);حيث

OBJPROP_XDISTANCE

البعد بالبيكسل بالنسبة ل x

ObjectSet("Market_Price_Label", OBJPROP_YDISTANCE, 1);البعد بالبكسل بالنسبة ل Y

الخلاصة

نضيف الي تطبيقنا السابق الكتابة التالية لتضهر الكتابة في زاوية معينة من الشارت

ObjectSet("Market_Price_Label", OBJPROP_CORNER, 1);ObjectSet("Market_Price_Label", OBJPROP_XDISTANCE, 1);ObjectSet("Market_Price_Label", OBJPROP_YDISTANCE, 1);لم ينتهي المؤشر بعد

انتضر تعديل مؤشراتكم

لمن يكتفي فقط بالقرائة انت بهذا تضطرني ان اتوقف عن الشرح

+ لا تنسو مستحقات الدورة الدعاء لي ولوالديا

mamz2006
02-12-2012, 02:40 AM
اخي موفنق

جزاك الله خير على هذه الدورة الجميلة

وعندي اقتراح ياليت ان يتم تطبيقه لتكون الامور اوضح واشمل والاقتراح هو :

ان تاتي باكسبرت معين من الاكسبرتات المتداولة وتقوم بشرحه سطر سطر ووظيفه وظيفه

وهكذا نتعلم كيف ترتبط الوظائف ببعضها وتسلسلها - يعني سيكون الشرح اشمل واوضح على اكسبرت جاهز تقوم بتشريحه هنا في موضوعك المميز هذا

وقد لا يحتوي الاكسبرت المعين على كل الوظائف ولكن يمكن من خبرتك ان تاتي باكثر من اكسبرت لشرح كل الوظائف التي تريد شرحها وهي في التطبيق الفعلي العملي في اكسبرت حي

وفقك الله وبارك فيك

MOVING_AVERAGE
02-12-2012, 12:39 PM
اخي موفنق

جزاك الله خير على هذه الدورة الجميلة

وعندي اقتراح ياليت ان يتم تطبيقه لتكون الامور اوضح واشمل والاقتراح هو :

ان تاتي باكسبرت معين من الاكسبرتات المتداولة وتقوم بشرحه سطر سطر ووظيفه وظيفه

وهكذا نتعلم كيف ترتبط الوظائف ببعضها وتسلسلها - يعني سيكون الشرح اشمل واوضح على اكسبرت جاهز تقوم بتشريحه هنا في موضوعك المميز هذا

وقد لا يحتوي الاكسبرت المعين على كل الوظائف ولكن يمكن من خبرتك ان تاتي باكثر من اكسبرت لشرح كل الوظائف التي تريد شرحها وهي في التطبيق الفعلي العملي في اكسبرت حي

وفقك الله وبارك فيك



يوجد مفاهيم كثيرة جدا مثل الحلقات التكرارية والدوال المختلفة لكي يتم برمجة اكسبريت

وانا واضع برنامج ينتقل من اسهل المفاهيم الي اصعبها

لو ندخل مباشرتا في الاكسبريت لا يمكنني شرح دالة بالتفصيل

maasa
02-12-2012, 07:24 PM
اخر تحديث للمؤشر

جربت OBJPROP_CORNER بس مجاش في المنطقة اللي عاوزها بالظبط فقعدت اجرب في المحاور X و Y لغاية ما وصلت لاقصى اليمين العلوي في الشارت ( مكان حلو لاظهار السعر :1: )

MOVING_AVERAGE
02-12-2012, 07:55 PM
اخر تحديث للمؤشر

جربت OBJPROP_CORNER بس مجاش في المنطقة اللي عاوزها بالظبط فقعدت اجرب في المحاور X و Y لغاية ما وصلت لاقصى اليمين العلوي في الشارت ( مكان حلو لاظهار السعر :1: )



ممتاز اخي ان شاء الله الاسبوع القادم نكمل هذ المؤشر ونبدء في مؤشر البيفوت اليومي وانهي به الدوال الرسومية

maasa
02-12-2012, 08:39 PM
ممتاز اخي ان شاء الله الاسبوع القادم نكمل هذ المؤشر ونبدء في مؤشر البيفوت اليومي وانهي به الدوال الرسومية

بارك الله فيك اخي الكريم و رزقك و والديك الفردوس الاعلى ان شاء الله

سمير محمد ارمان
03-12-2012, 03:32 AM
الان لكي نجعل الكتابه في الزاوية نستعمل الدالة

ObjectSetحيث الكتابة العامة للدالة كا الاتي

ObjectSet( string name, int index, double value) string name

اسمة الكائن

int index

هنا فيه عدد كثير جدا من الاحتملات التي ممكن نطبقها علي الكائن مثل لون او حجم الكائن وغيرها

لايمكنني توضيح كل شئ هنا لانها التجربة خير وسيلة للتعلم

double value

قيمة التغير الذي نريده

بالتطبيق علي مثالنا السابق

سيصبح لدينا

ObjectSet("Market_Price_Label", OBJPROP_CORNER, 1);حيث

OBJPROP_CORNER

تعني اننا نريد وضع الكائن في الزاوية ولدينا 4 زوايا اعلي يمين او يسار و اسفل يمين او يسار

1

اخترنا زاوية من الزوايا الاربعة السابقة

جربو المثال بتغير القيمة من 0 الي 3 للحصول علي كل الزوايا

يجب اتباع ما سبق بالكتالبة التالية لتكون الكتابة في اقصي الزاوية
ObjectSet("Market_Price_Label", OBJPROP_XDISTANCE, 1);حيث

OBJPROP_XDISTANCE

البعد بالبيكسل بالنسبة ل x

ObjectSet("Market_Price_Label", OBJPROP_YDISTANCE, 1);البعد بالبكسل بالنسبة ل Y

الخلاصة

نضيف الي تطبيقنا السابق الكتابة التالية لتضهر الكتابة في زاوية معينة من الشارت

ObjectSet("Market_Price_Label", OBJPROP_CORNER, 1);ObjectSet("Market_Price_Label", OBJPROP_XDISTANCE, 1);ObjectSet("Market_Price_Label", OBJPROP_YDISTANCE, 1);لم ينتهي المؤشر بعد

انتضر تعديل مؤشراتكم

لمن يكتفي فقط بالقرائة انت بهذا تضطرني ان اتوقف عن الشرح

+ لا تنسو مستحقات الدورة الدعاء لي ولوالديا
بارك الله فيك اخي الكريم و رزقك و والديك الفردوس الاعلى ان شاء الله

maasa
05-12-2012, 01:47 AM
up up

MOVING_AVERAGE
07-12-2012, 02:12 PM
نكمل ان شاء الله المؤشر

وصلنا الي اضهار الكتابة في اقصي زاوية

لاكن عند حذف المؤشر تبقي الكتابة ولا تحذف

نستعمل هنا الدالة التي تعمل لما نحذف المؤشر او نغير الفريم او العملة

يعني الدالة التي تبدء عملها لما ينتهي عمل المؤشر

وقد شرحناها سابقا وهي الدالة

int deinit()
{

return(0);
}وهي موجودة مسبقا في الكود البرمجي

نضع في هذه الدالة الامر التالي

ObjectDelete("");نضع داخل القوسين اسم الكائن الرسومي

وهذا الامر لمسح الكائن الرسومي بعد حذف المؤشر من الشارت

فيصبح الكود كا التالي

int deinit()
{
ObjectDelete("Market_Price_Label");

return(0);
}ناتي الي اخر شئ نريد وضع مثلا السعر مكان الكتابة

وهذه العملية تختاج معرفة دوال اخري

سنرجع لها لاحقا

الي هنا انتهي مؤشرنا

اي كتابة نريد ان تضهر علي الشارت يمكننا عمل مؤشر احترافي لها

بقي امكانية اضهار السعر او الوقت سنتطرق لها في وقتها

MOVING_AVERAGE
07-12-2012, 02:17 PM
ارجو من الاخوة برمجت المؤشر بانفسهم وسنفتح ورشة نضع فيها مؤشرات الاخوة التي برمجوها بانفسهم

اعرف ان القليل جدا مهتم بالموضوع

في انتضار مؤشر مكتمل يضهر كتابة علي الشارت في الزاوية

المؤشر التالي هو البيفوت اليومي

MOVING_AVERAGE
07-12-2012, 02:30 PM
قبل البدء في مؤشر البيفوت سنعرج علي العمليات الاولية في MQ4

الموضوع موجه للجميع من من ليس لديه اي حلفية في البرمجة الي من لديه خلفية

هذه التعريفات بسيطة بالنسبة لمن لديهم معرفة

MOVING_AVERAGE
07-12-2012, 02:37 PM
بعض العمليات التي نحتاجها

سنقوم بشرح بعض العمليات التي نقوم بها أثناء برمجة أي برنامج بلغة ام كيو فور

سنقوم بشرح الاهم منها و ليس كلها

قبل استخدام اي متحول يجب تعريف البرنامج عليه اولا


int A=5;


int B=3;

قبل البدء بالعملية نحتاج مكان ثالث لكي نضع فيه قيمة أي عملية لكي يحتفض المؤشر او الاكسبريت بالناتج

في الذاكرة الخاصة به

int D;

اذن اقل شئ نحتاج اليه لاجراء عملية حسابية هو 3 اماكن في الذاكرة

قيمة المتغير الاول + قيمة المتغير الثاني + ناتج العملية

يمكن للمتغير ان ياخذ مختلف الانواع

ممكن يكون int او double او string .....

وفي مثالنا اخذنا int

يجب ان يكون ناتج العملية من النوع المتجانس

فمثل من غير الممكن ان ناخذ المتغير الاول و الثاني من نوع double والنتيجة من نوع int

يجب الانتباه كثيرا هنا

MOVING_AVERAGE
07-12-2012, 02:40 PM
عملية الجمع بين قيمتين


d=A+B;

سيكون الناتج

d=8

والذي يحتفظ به البرنامج في ذاكرته ولن يظهره لنا الا في حالة أمرنا البرنامج بإظهاره

MOVING_AVERAGE
07-12-2012, 02:42 PM
عملية الضرب

d=A*B;

عملية الطرح

d=A-B;

MOVING_AVERAGE
07-12-2012, 02:47 PM
عملية القسمة

d=A/B;

وهنا يجب الانتباه جيدا جدا

القسمة عملية تكون ناتجها في اغلب الاحيان ليس رقم صحيح يعني دائما او اغلب الاحيان تكون القسمة ناتجها فيه فواصل

فيجب هنا الاحتياط عند تعريف المتغير d

يجب مراعاة شروط تنفيذ العمليات فمثلا لا نستطيع القسمة علي 0

وهذه تعتبر حالة حرجة في الرياضيات وتقودنا الي النهايات والدخول في اعماق علم الرياضيات

MOVING_AVERAGE
07-12-2012, 02:52 PM
نكتفي بهذه التعاريف حاليا

لاكن يبقي علينا معرفة الاولويات بين هذه العمليات

الاولوية بين العمليات

يجب الانتباه ان البرنامج يراعي الاولوية بين العمليات فالضرب والقسمة لهم اولوية علي الجمع والطرح


والاقواس لها اولوية علي جميع العمليات



لن اشرح بالتفصيل هنا وساترككم تجتهدون وتسالون عن ما لم تفهموا

في انتضار اي اسئلة

مهم جدا ان تعرف الاولوية بين العمليات لانها اساس عملنا كله

لن اشرح هذه الاولوية عند التقدم في الدروس

اكرر في انتضار اي سؤال

maasa
07-12-2012, 07:10 PM
عودا حميدا استاذي . اشتقنا لك

في المرفقات المؤشر بنسخته الاخيرة كما طلبت

اما بالنسبة للعمليات فالشرح واضح و سهل جدا

MOVING_AVERAGE
08-12-2012, 12:38 AM
البيفوت اليومي

ماهو البيفوت

هو خط يحترمه السعر ويعتبره اما مقاومة او دعم

سمي يومي لانه يعتمد علي معطيات الفريم اليومي

هناك بيفوت اسبوعي او شهري وحي سنوي وكلها تبرمج بنفس الطريقة مع تغير المعطيات للفريم المذكور

هناك عدة طرق لحساب البيفوت اليومي لاكن اشهرها الطريقة التي سندرسها

طرقة حساب البيفوت اليومي

نفرض ان البيفوت نرمز له ب P

بينات اليوم السابق التي نحتاجها هي

الاغلاق

double close=iClose(0,PERIOD_D1,1);

الهاي

double high=iHigh(0,PERIOD_D1,1);

اللو

double low=iLow(0,PERIOD_D1,1);

هذه هي المعطيات التي نحتاجها

MOVING_AVERAGE
08-12-2012, 12:41 AM
طريقة حساب البيفوت اليومي

P=(close+high+low)/3

بعدما حصلنا علي قيمة البيفوت اليومي

نرسم خط يمثل لنا هذه القيمة علي الشارت

ونستخدم دوال الرسم التي تطرقنا اليها سابقا

MOVING_AVERAGE
08-12-2012, 12:54 AM
لرسم الخط الافقي نستخدم الدالة التالية ( مشروحة سابقا )

ObjectCreate

وفي الخانة الثانية للدالة

نستخدم الاختيار

OBJ_HLINE

ونستخدم السعر الذي يرسم منه هو P

والوقت الذي يرسم منه ونستخدم هنا اي وقت لان الخط الافقي يتعلق بالسعر فقط

ساستخدم الوقت

datetime t=iTime(0,PERIOD_D1,0);

بعد هذا المؤشر سنتطرق الي الوقت بالتفصيل

فيكون الكود البرمجي كا التالي لرسم خط

ObjectCreate("p",OBJ_HLINE,0,t,p);

نريد تلوين الخط مثلا بالاصفر نستخدم الدالة

ObjectSet

ونستخدم في الخانة الثانية

OBJPROP_COLOR

ويكون الكود البرمجي كا التالي

ObjectSet("p",OBJPROP_COLOR,Yellow);

في انتضار برمجت مؤشركم للنسخة الاولية

ثم نضيف الدعوم والمقاومات

اي اسئلة لا تترددوا

maasa
08-12-2012, 10:03 AM
المؤشر :1:

MOVING_AVERAGE
08-12-2012, 03:18 PM
المؤشر :1:


ممتاز ماشاء الله استعملة كل شئ وهذا هو المطلوب

ننتقل الي الدعوم والمقاومات تحسب كا التالي

r المقاومة

s الدعم

double r1=2*p-l;

double s1=2*p-h;

double r2=p+(r1-s1);

double r3=h+2*(p-l);

double s2=p-(r1-s1);

double s3=l-2*(h-p);


اكمل المؤشر ويصبح عندك مؤشر بيفوت من صنع محلي

:1 (43):

MOVING_AVERAGE
08-12-2012, 03:20 PM
l هي اللو Low


h هي الهاي High

maasa
08-12-2012, 08:14 PM
عملت كل حاجه تقريبا بس مش بيظهر غير البايفوت الاساسي :1 (75):

MOVING_AVERAGE
08-12-2012, 08:50 PM
عملت كل حاجه تقريبا بس مش بيظهر غير البايفوت الاساسي :1 (75):



هل انت متاكد انا حملت تطبيقك ووجدت الخطوط عادي ؟؟؟؟؟

MOVING_AVERAGE
08-12-2012, 08:52 PM
احذف ملف

6.ex4

اغلق المنصة ثم اعد المحاولة

maasa
08-12-2012, 10:10 PM
احذف ملف

6.ex4

اغلق المنصة ثم اعد المحاولة


كده تمام . شكرا باشمهندس :1:

مؤشر بايفوت صنع محلي :1 (64):

http://www.fx-arabia.com/vb/<a href=http://www.0zz0.com target=_blank>[img]http://www3.0zz0.com/2012/12/08/19/229290940.pnghttp://www3.0zz0.com/2012/12/08/19/229290940.png (http://www.0zz0.com)

Qadri
09-12-2012, 02:41 PM
السلام عليكم ورحمة الله

كيف حالك استاذ موفينج

مرفق مؤشر البيفوت قبل اضافة الدعوم والمقاومات ارجو ان تلفى عليه نظرة

عندىبعض الاسئلة ارجو ان يتسع صدرك لها:

انا اضفت اختيار اللون كمتغير خارجى وكذلك نوع الخط ولكنهم يظهرات كارقام فى نافذة الاختيار عند تشغيل المؤشر فما الخطا؟

السؤال الثانى البياتات التى يعتمد عليها المؤشر لا تتغير مع كل تك وبالتالى لسنا بحاجة الي دالة استارت فهل هذا صحيح؟

السؤال الاخير الا يوجد دليل بانواع اخطاء البرمجة التى يعطيها البرنامج ومقترحات حلولها؟

ان شاء الله سارفق المؤشر بعد اضافة الدعوم والمقاومات فى مشاركة اخرى

شكرا لك

Mohamed_Amr
31-12-2012, 01:05 AM
نتمنى الاستمرار اخى موفينج
وبالتوفيق

حسام ممدوح الصواف
01-01-2013, 11:28 PM
الله يبارك فيك و يرحم والديك و والدي رحمةواسعةودائمة

MOVING_AVERAGE
01-01-2013, 11:59 PM
السلام عليكم ورحمة الله

كيف حالك استاذ موفينج

مرفق مؤشر البيفوت قبل اضافة الدعوم والمقاومات ارجو ان تلفى عليه نظرة

عندىبعض الاسئلة ارجو ان يتسع صدرك لها:

انا اضفت اختيار اللون كمتغير خارجى وكذلك نوع الخط ولكنهم يظهرات كارقام فى نافذة الاختيار عند تشغيل المؤشر فما الخطا؟

السؤال الثانى البياتات التى يعتمد عليها المؤشر لا تتغير مع كل تك وبالتالى لسنا بحاجة الي دالة استارت فهل هذا صحيح؟

السؤال الاخير الا يوجد دليل بانواع اخطاء البرمجة التى يعطيها البرنامج ومقترحات حلولها؟

ان شاء الله سارفق المؤشر بعد اضافة الدعوم والمقاومات فى مشاركة اخرى

شكرا لك

وعليكم السلام ورحمة الله وبركاته

بعد الاطلاع علي تطبيقك فيه اخضاء خطيرة جدا

اولا الكود كما قلت يكتب داخل الدالة start لانها تتغير مع الوقت ولا يكتب داخل الدالة init

double close = iClose(0,PERIOD_D1,1);هذا الكود ليس صحيح اخي ينقصك 0 بعد 0 الاول

راجع الدروس


بالطبع اخي اللون سيضهر متغير صحيح لانك كتبت هذا

extern int pcolor = Yellow ;ونحن قلنا ان اللون متغير من نوع color

في مكان int ضع color

نوع الخط

extern int pcolormode = STYLE_SOLID;هذا الكود غير صحيح انت عرفت متغير من نوع int صحيح ثم اسندت اليه حروف ?????

راجع الدروس اخي

البينات التي يعتمد عليها المؤشر تتغير اخي لما يتغير اليوم

هي بينات تعتمد علي اغلاق وافتتاح وهاي ولو اليوم السابق لذا تحتاج 24 ساعة لتتغير

بعدما تنهي كتابة الكود اضغط علي compiler فيعطيك الاخضاء التي وقعت فيها

تصحيحها يعتمد علي مدي تمكنك من لغة البرمجة

بانتضار تصحيح اخطائك وارفاق المؤشر

MOVING_AVERAGE
02-01-2013, 12:01 AM
نتمنى الاستمرار اخى موفينج
وبالتوفيق

ان شاء الله اخي

واسف للتاخر في الرد كنت مشغول بتطوير بعض المؤشرات

MOVING_AVERAGE
02-01-2013, 12:03 AM
الله يبارك فيك و يرحم والديك و والدي رحمةواسعةودائمة


بارك الله فيك اخي ورحم الله جميع موتي المسلمين

والله ردك هو من جعلني اعود للموضوع

NTTnightmare
04-01-2013, 04:16 PM
السلام عليكم
شكرا أخ موفنج على الورشة الجميلة بالتوفيق

حسام ممدوح الصواف
04-01-2013, 09:25 PM
أنا يا أخى مبتدئ فىالفوركس وحتىالآن لم أحقق مكاسب وأخضى أنيصيبنى اليأس من المكسب وانا كبير فىالسن 47 سنة ولدى أولادفى الجامعةوكنت ارجوان يرزقنى الله منالفوركس اىدخل إضافى فهل أكرمك الله تساعدنى وتضع يدى على اول الطريق لقدانزلت كافةفديوهات الدكتور اسامةواستفدت منها كثير جدا ولكن اريد ان ابدأ بتوجهات من سيادتك تعلمالبرمجة يمكن يكون ربنا كاتب لىفيها خير الله يجازيككل خير أخوك المهندس حسام الصواف (إنشائى) و\احب الكومبيوتر و أنكانجهازى قديم جدا ومحتاج اغير الكى بورد ضرورى

MOVING_AVERAGE
04-01-2013, 10:28 PM
أنا يا أخى مبتدئ فىالفوركس وحتىالآن لم أحقق مكاسب وأخضى أنيصيبنى اليأس من المكسب وانا كبير فىالسن 47 سنة ولدى أولادفى الجامعةوكنت ارجوان يرزقنى الله منالفوركس اىدخل إضافى فهل أكرمك الله تساعدنى وتضع يدى على اول الطريق لقدانزلت كافةفديوهات الدكتور اسامةواستفدت منها كثير جدا ولكن اريد ان ابدأ بتوجهات من سيادتك تعلمالبرمجة يمكن يكون ربنا كاتب لىفيها خير الله يجازيككل خير أخوك المهندس حسام الصواف (إنشائى) و\احب الكومبيوتر و أنكانجهازى قديم جدا ومحتاج اغير الكى بورد ضرورى


ان شاء الله يا اخي تجد كل ما تحتاجه للتتعلم برمجة المؤشرات

اطلب او اسئل ما شئت وان شاء الله البي واجيب استفسراتك

MOVING_AVERAGE
04-01-2013, 10:30 PM
السلام عليكم
شكرا أخ موفنج على الورشة الجميلة بالتوفيق

بارك الله فيك اخي

وشكرا علي المرور العطر

MOVING_AVERAGE
04-01-2013, 10:35 PM
نكمل ان شاء الله الدورة

MOVING_AVERAGE
04-01-2013, 10:45 PM
قبل الدخول في المراحل القادمة لا بد من معرفة بعض الاساسيات المهمة

من بين هته الاساسيات المهمة العمليات التالية

MOVING_AVERAGE
04-01-2013, 10:51 PM
عملية الزيادة والتي نرمز لها ب

A++

حيث ان هذه الكتابة تعني زيادة قيمة 1 الي القيمة السابقة ل A

تفسير مبسط

اذا كانت قيمة A مثلا = 5

بعد كتابة

A++

تصبح قيمة A = 6

نفس الشئ بالنسبة لعملية الطرح

نستخدم الكتابة

A--

ومثل ما سبق تتغير قيمة A وتنقص ب 1

MOVING_AVERAGE
04-01-2013, 11:06 PM
عمليات المقارنة


وهي العمليات التي نستخدمها للمقارنة بين قيم المؤشرات

وهي اساس عمل اي مؤشر او اكسبريت

عملية المقارنة المساواة

وهذه العملية للمقارنة بين قيمتين اذا كانت الناتج صحيح ترجع لنا 1
واذا كان خاطئ ترجع لنا 0

كيف نستخدمها

الكتابة البرمجية للمقارنة المساواة كا التالي

A==Bوستفهم هذه العملية اكثر لما ندخل في الحلقة الشرطية

عملية المقارنة عدم المساواة

وهي لمقارنة عدم مساوات قيمتين

الكتابة البرمجية لها كالتالي

A!=Bعملية المقارنة اصغر

للمقارنة بين اصغر قيمتين

الكتابة البرمجية لها كالتالي

A<Bعملية المقارنة اصغر او يساوي

تجمع بين مقارنة اصغر قيمة او تساوي القيمتين

الكتابة البرمجية لها كالتالي

A<=Bعملية المقارنة اكبر

للمقارنة بين اكبر قيمتين

الكتابة البرمجية لها كالتالي

A>Bعملية المقارنة اكبر او يساوي

تجمع بين مقارنة اكبر قيمة او تساوي القيمتين

الكتابة البرمجية لها كالتالي

A>=Bفي انتضار اي استفسار قبل الدخول في الدالة الشرطية if

MOVING_AVERAGE
05-01-2013, 03:57 PM
قبل الدخول الي الدالة الشرطية if

نعرج علي شئ مهم جدا في عمليات المقارنة

المقارنة تحدث بين قيمتين او اكثر

فاذا كانت المقارنة بين 3 قيم مثلا

فمن المهم هنا الربط بين عمليات المقارنة

ومن ادوات الربط نستخدم التالي

اول اداة

&&

لربط عمليات المقارنة مع بعضها في نفس الوقت

وعملها مثل عمل حرف الواو في اللغة العربية

الربط بين عمليتين في نفس الوقت

اذا تحققت واحدة فقط فان الدالة ترجع لنا خطئ لان الربط لم يتحقق

وليكون الربط صحيح يشترط ان تتحقق العمليتين معا

ثاني اداة

||

لتنفيذ عملية علي الاقل من عمليات المقارمة

فان كانت عملية واحدة صحيحة فان الدالة ترجع لنا قيمة صحيحة

وعملها مثل عمل حرف او في اللغة العربية

ثالث اداة

!

وهي اداة لنفي العملية او عدم تحقق الشرط الذي بعدها

هي مثل حرف لا في اللغة العربية

في انتضار اي اسئلة

MOVING_AVERAGE
09-01-2013, 12:54 PM
ندخل ان شاء الله في الجملة الشرطية if

الجملة الشرطية if نستخدمها اذا اردنا تنفيذ عملية ما بعد او اثناء تحقق شرط معين

الهيكل العام للجملة الشرطية if يكون كالتالي

if()

لاتوجد نقطة فاصلة بعد قوسين الجملة if

نضع الشرط الذي نريد العمل بعده داخل اقواس الجملة if

نضع التنفيذ الشرط مباشرة بعد الجملة if

اذا كان تنفيذ الشرط فيه عدة سطور

نضعه بين حافضتين

ويصبح الهيكل النهائي ل if كالتالي


if(الشرط نضعه هنا )

{
جواب
}

في انتضار اي استفسار قبل البدء في امثلة if

NTTnightmare
09-01-2013, 01:24 PM
نتمنى الاستمرار اخى موفينج ويريت لو تعمل أمتلة لخطوط طول و عرض تتكون من 2 أو 3 شموع إذا أمكن
وبالتوفيق :1 (29):

MOVING_AVERAGE
09-01-2013, 02:15 PM
نتمنى الاستمرار اخى موفينج ويريت لو تعمل أمتلة لخطوط طول و عرض تتكون من 2 أو 3 شموع إذا أمكن
وبالتوفيق :1 (29):

ان شاء الله اخي سنكمل الدروس حتي الاحتراف

لم افهم طلبك اخي

خطوط علي اي اساس

+ ما نوع الخطوط افقية عمودية مائلة ؟؟؟؟

NTTnightmare
09-01-2013, 02:55 PM
بنسبة لفكرة المؤشر يرسم
خط ترند يتكون من
شمعتين high-close يساوي عدد من نقط وclose>open

المؤشر يرسم فقط على الشموع القريبة لنقل يومين

جزاك الله خيرا

MOVING_AVERAGE
10-01-2013, 04:09 PM
بنسبة لفكرة المؤشر يرسم
خط ترند يتكون من
شمعتين high-close يساوي عدد من نقط وclose>open

المؤشر يرسم فقط على الشموع القريبة لنقل يومين

جزاك الله خيرا

طلبك غير واضح اخي

علي كل هذا موضوع تعليم البرمجة لو تريد طلب مؤشر افتح موضوع واطلب فيه المؤشر مع الشرح بالتفصيل وبالصور

MOVING_AVERAGE
13-01-2013, 04:44 PM
نتابع ان شاء الله

استخدام الجملة if

مثال 1

اكتب برنامج بلغة mq4 يضهر علي الشارت رسالة مكتوب فيها نوع الشمعة السابقة

سانتضر اي محاولات ثم اكتب البرنامج ان شاء الله

مساعدة في كتابة البرنامج

نحتاج افتتاح واغلاق الشمعة لمعرفة نوعها

نحتاج عمليات المقارنة بين الافتتاح والاغلاق

نحتاج اضهار النتيجة علي الشارت

gozila
13-01-2013, 10:00 PM
لو سمحت لو عايز احدد ان
range bar الحالي اصغر او اكبر من اللي قبله

ممكن المساعدة

MOVING_AVERAGE
14-01-2013, 03:36 PM
لو سمحت لو عايز احدد ان
range bar الحالي اصغر او اكبر من اللي قبله

ممكن المساعدة


بالطبع اخي شئ بسيط جدا

اولا شئ لابد ان تفهم ماهو range

اذا كنت تقصد طول الشمعة كاملا يعني الفرق بين high و low

نستنتج ان
range=high-low

لكي نحسب range لابد ان تكون المتغيرات high و low ثابتة في الشمعة المحددة

يعني لا نستطيع حساب range الشمعة الحالية لانه متغير وغير ثابة

ممكن نحسب range الشمعة السابقة والتي قبل السابقة ونقارن بنهم

اذا كنت تقصد range للشموع لفترة زمنية محدد فهذا الامر يدخل فيه متغيرات للشمعة لم نصل اليها بعد

بما ان الموضوع تعليمي ياريت تحاول عمل المطلوب وساصحح لك الاخطء اخي

ان كنت تريد المؤشر اطلبه في موضوع منفصل

وياريت توضح الفكرة من استخدام الرنج علي الشارت ليستفيد الجميع

MOVING_AVERAGE
14-01-2013, 03:48 PM
نتابع ان شاء الله

استخدام الجملة if

مثال 1

اكتب برنامج بلغة mq4 يضهر علي الشارت رسالة مكتوب فيها نوع الشمعة السابقة

سانتضر اي محاولات ثم اكتب البرنامج ان شاء الله

مساعدة في كتابة البرنامج

نحتاج افتتاح واغلاق الشمعة لمعرفة نوعها

نحتاج عمليات المقارنة بين الافتتاح والاغلاق

نحتاج اضهار النتيجة علي الشارت



للاسف لم يحاول احد

المهم الحل هو كالتالي

open=Open[1];

close=Close[1];

if(open<close)


Comment("bar up ");

if(open>close)

Comment("bar down ");

MOVING_AVERAGE
14-01-2013, 04:01 PM
الشكل المكملة للجملة if

كما لا حظنا في المثال السابقة استخدمنا جملتين if

الاولي للشرط الاول

والثانية للشرط الثاني

ولاكن ممكن الاستغناء عن استعمال جملتين

لما يكون لدين شرطين او اكثر متعلقين ببعضهم

في هذه الحالة نستخدم


elseعوض استخدام الشرط الثاني


تطبيق عملي اكتب المثال السابق باستخدام التكملة else

ملاحضة

ليس خطئ ان تخطئ في التطبيق الخطئ ان لا تحاول التطبيق

وكل الناس تخطئ في البداية ثم يصبح الامر من البديهيات بالنسبة لك

ياريت الجميع يحاول

gozila
14-01-2013, 06:32 PM
اشكر حضرتك جدا علي سرعة الرد

لكن كنت عايز اعرف ازاي اكتب ان الهاي ناقص اللو للشمعة الحالية اصغر من الهاي ناقص اللو للشمعة السابقة

MOVING_AVERAGE
14-01-2013, 07:01 PM
اشكر حضرتك جدا علي سرعة الرد

لكن كنت عايز اعرف ازاي اكتب ان الهاي ناقص اللو للشمعة الحالية اصغر من الهاي ناقص اللو للشمعة السابقة

اخي ياريت ترجع لاول الدروس انا شرحت كل شئ وبطريقة بسيطة

وان لم تفهم ساعيد لك الشرح حتي تفهم كيف تكتب هذا الشرط

MOVING_AVERAGE
14-01-2013, 07:04 PM
في لغة MQ4 نعبر عن ما سبق كالتالي


سعر الافتتاح Open price

ينكننا تمثيل وكتابة سعر الافتتاح باحد الشكلين التاليين


double iOpen( string symbol, int timeframe, int shift)
حيث

string symbol

هذه الكلمة تعني اسم الشارت وهو عبارة عن متغير من نوع string

يكتب بين قوسين مزدوجين

مثلا "EURJPY"

نستطيع وضع في هذه الخانة اما اسم الشارت بين قوسين مزدزجين

او 0 وهي تعني ان المؤشر يعمل علي اي شارت

NULL وهي ايضا تعني ان المؤشر يعمل علي اي شارت


int timeframe

هذه الكلمة تعني اسم متغير من نوع صحيح وترمز للفريم الذي نعمل عليه

مثلا فريم الساعة او فريم 15 دقيقة

ويمكن كتابة في هذه الخانة

0 للعمل علي اي تايم فريم

PERIOD_M5 او 5 للعمل علي فريم 5 دقائق

PERIOD_M15 او 15 للعمل علي فريم 15 دقائق

PERIOD_M30 او 30 للعمل علي فريم 30 دقائق

PERIOD_H1 او 60 للعمل علي فريم 60 دقائق ساعة

PERIOD_H4 او 240 للعمل علي فريم 4 ساعات

PERIOD_D1 او 1440 للعمل علي فريم اليوم

PERIOD_W1 او 10080 للعمل علي فريم الاسبوع

PERIOD_MN1 او 43200 للعمل علي فريم الشهر


int shift

هذه الكلمة تعني متغير صحيح وهي ترمز لرقم الشمعة

حيث ان الشمعة الحالية يرمز لها بالرقم 0

والتي قبلها يرمز لها ب 1 وهكذا

بعض الامثلة


افتتاح شمعة الاسبوع الحالي علي شارت EURUSD

iOpen("EURUSD",PERIOD_W1,0);ارجوا طرح اي سؤال لمن لم يفهم لان هذه المعلومات تعتبر اساسيات ولن ارجع لها لما نتقدم في الدروس




حاول تفهم اخي هذا الدرس

ان تمكنت من فهمه سيسهل عليك كتابة الشرط

MOVING_AVERAGE
15-01-2013, 01:06 PM
للاسف لم يحاول احد

المهم الحل هو كالتالي

open=Open[1]; close=Close[1]; if(open<close)
Comment("bar up ");if(open>close)Comment("bar down ");


حل المثال بتطبيق else

نترك الشرط الاول عادي

بنا اننا برمجناه يعني نعرف معني الكتابة التي وضعناها

متي تكوزن الشمعة صاعدة ؟؟؟؟

تكون الشمعة صاعدة اذا كان اغلاق الشمعة اكبر من افتتاحها

وهذا هو الشرط الاول الذي وضعناه

اذا لم يتحقق الشرط الاول منطقيا

اما الاغلاق مساوي للافتتاح وهذا سناخذه في اخر كتابه للجملة if نتجاهله الان

واما ان يكون الاغلاق اصغر من الافتتاح وهذا الشرط يعني انا الشمعة نازلة

عند استخدام esle نحن نقصد اما افعل الشرط الاول if

else وفي حالة لم يتحقق الشرط الاول افعل كذا

برمجيا

open=Open[1];
close=Close[1];

if(open<close)
Comment(bar up);
else
Comment(bar down);

MOVING_AVERAGE
15-01-2013, 01:14 PM
اخر كتابه للجملة الشرطية if

اذا كان جواب الشرط له اكثر من احتمال

هنا نقوم بتجزئة الجواب الي عدة مراحل

ويتم هذا باستخدام

else if يعني اذا لم يتحقق الشرط الاول

ناخذ فقط جزء من باقي جواب الشرط ونضع عليه امر

تطبيق عملي للمثال السابق

المثال السابق فيه ثلاث حلات

الاولي الشمعة صاعدة

برمجيا

open=Open[1];close=Close[1];if(open<close)Comment(bar up);ناخذ جزء فقط من جواب الشرط للشمعة النازلة

else if(open>close)Comment(bar down);ناخذ باقي جواب الشرط

else Comment("open=close" );

MOVING_AVERAGE
15-01-2013, 01:18 PM
في انتضار الاسئلة التي لن تاتي بالطبع


الجملة الشرطية التالية هي الجملة

switch

ayoob
15-01-2013, 10:23 PM
السلام عليكم اخي الكريم ولله الان كيف شاهدة الموضع وجاري المتابعة من اول الصفحة وتحضير الاسئلة

ayoob
16-01-2013, 01:41 AM
الله يرحم والديك اخي عندي سؤل ان قمت بعمل اكسبيرات للماكد ولكن اريد ان اعرف كيفية تعريف حجم اللوت و الستوب والهدف في الدلة start #property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern int StopLoss=20;
extern int TakeProfit=20;
extern double Lot=0.10;
extern int MagicNumber=15000;


//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- Open price

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{



//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double m1,m2,m3,m4;
double SL,TP;

m1=iMACD("EURUSD",5,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
m2=iMACD("EURUSD",5,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
{
if(m2<0&&m1>0)

OrderSend(Symbol(),OP_BUY,Lot,Ask,33,TP,SL,"AYOOB",MagicNumber,0,Green);

}



if(m2>0&&m1<0){

OrderSend(Symbol(),OP_SELL,Lot,Bid,33,TP,SL,"AYOOB",MagicNumber,0,Red);

}
}

//----
return(0);

MOVING_AVERAGE
16-01-2013, 02:58 AM
الله يرحم والديك اخي عندي سؤل ان قمت بعمل اكسبيرات للماكد ولكن اريد ان اعرف كيفية تعريف حجم اللوت و الستوب والهدف في الدلة start #property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern int StopLoss=20;
extern int TakeProfit=20;
extern double Lot=0.10;
extern int MagicNumber=15000;


//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- Open price

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{



//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double m1,m2,m3,m4;
double SL,TP;

m1=iMACD("EURUSD",5,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
m2=iMACD("EURUSD",5,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
{
if(m2<0&&m1>0)

OrderSend(Symbol(),OP_BUY,Lot,Ask,33,TP,SL,"AYOOB",MagicNumber,0,Green);

}



if(m2>0&&m1<0){

OrderSend(Symbol(),OP_SELL,Lot,Bid,33,TP,SL,"AYOOB",MagicNumber,0,Red);

}
}

//----
return(0);


اخي نحن لم نصل بعد الي الاكسبريت مازلنا في المؤشرات لاكن لانك سددت ثمن الدور اليك الجواب

اول شئ نضع هذا الكود في الدالة init للتعامل مع البروكر 4 و 5 ارقام

double point;
int digits,Q;


ثم

int init()
{
Firstlot=Lots ;

if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;
digits=2;
}
if(Digits==4)
{
point=0.0001;
digits=4;
}
if(Digits==3)
{
point=0.01;
digits=3;
}
if(Digits==5)
{
point=0.0001;
digits=5;
}
return(0);
}

MOVING_AVERAGE
16-01-2013, 03:05 AM
داخل الدالة start

نعرف متغيرين

double SL,TP;

ثم داخل اقواس الشرط نضع

if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}



if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*poi nt;}

بالنسبة لعملية buy

و نضع داخل اقواس الشرط الثاني

if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;}

if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;}

MOVING_AVERAGE
16-01-2013, 03:09 AM
بالنسبة للوت انت عرفته في اول البرنامج ولا تحتاج تعريفه مرة اخري

MOVING_AVERAGE
16-01-2013, 03:10 AM
لو تريد شرح الاكواد بالتفصيل الممل انا حاضر

MOVING_AVERAGE
16-01-2013, 08:54 PM
قبل الدخول في الجملة الشرطية switch

نتطرق اولا الي الكلمة

Break;

هذه الكلمة توضع لانهاء الشرط والخروج الفوري من الحلقة

ayoob
16-01-2013, 08:59 PM
لو تريد شرح الاكواد بالتفصيل الممل انا حاضر
اهلا اخي بارك لله فيك علي ما تقدمة ياريت بس شوية شرح في جزء تعريف الستوب في الدلة Start

MOVING_AVERAGE
16-01-2013, 09:05 PM
اهلا اخي بارك لله فيك علي ما تقدمة ياريت بس شوية شرح في جزء تعريف الستوب في الدلة Start



انا شرحت لك اخي كيف تضيف الستوب لوز والتيك بروفيت

لا اعرف اين الاشكال بالتحديد

MOVING_AVERAGE
16-01-2013, 09:07 PM
اهلا اخي بارك لله فيك علي ما تقدمة ياريت بس شوية شرح في جزء تعريف الستوب في الدلة Start


ارفق الكود الذي كتبته والاشكال الذي وقعت فيه ليكون الشرح مختصر ومفيد اكثر

ayoob
17-01-2013, 04:23 PM
بارك لله فيك اخي هد هو الكواد وان شاء لله يكون صحيح
extern int StopLoss=0;
extern int TakeProfit=0;
extern double Lot=0.1;
extern int MagicNumber=14000;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- Open price

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{



//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
{
double SL,TP;
double MACD=iMACD("EURUSD",PERIOD_M15,12,26,9,MODE_CLOSE,MODE_MAIN,0);
double MACD1=iMACD("EURUSD",PERIOD_M15,12,26,9,MODE_CLOSE,MODE_MAIN,1);

if(MACD<0&&MACD1>0){
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*Point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*Poi nt;}

OrderSend(Symbol(),OP_BUY,Lot,Ask,33,SL,TP,"AYOOB",MagicNumber,0,Green);
}


if(MACD>0&&MACD1<0){

if(StopLoss==0)SL=0;}else{SL=Bid+StopLoss*Point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*Point;}
OrderSend(Symbol(),OP_SELL,Lot,Bid,33,SL,TP,"AYOOB",MagicNumber,0,Red);
}
}

//----
return(0);

ayoob
18-01-2013, 01:18 AM
السلام عليكم هد تطبيق لي مؤشر البيفوات :1 (77):
double HI=iHigh(0,PERIOD_D1,1);
double CL=iClose(0,PERIOD_D1,1);
double LW=iLow(0,PERIOD_D1,1);
double Pivot=(CL+HI+LW)/3;
double R1=2*Pivot-LW;
double S1=2*Pivot-HI;
double R2=Pivot+(R1-S1);
double R3=HI+2*(Pivot-LW);
double S2=Pivot-(R1-S1);
double S3=LW-2*(HI-Pivot);
datetime t=iTime(0,PERIOD_D1,0);

ObjectCreate("Pivot",OBJ_HLINE,0,t,Pivot);

ObjectSet("Pivot",OBJPROP_COLOR,Yellow);

ObjectCreate("R1",OBJ_HLINE,0,t,R1);
ObjectSet("R1",OBJPROP_COLOR,Red);
ObjectCreate("R2",OBJ_HLINE,0,t,R2);
ObjectSet("R2",OBJPROP_COLOR,Red);
ObjectCreate("R3",OBJ_HLINE,0,t,R3);
ObjectSet("R3",OBJPROP_COLOR,Red);
ObjectCreate("S1",OBJ_HLINE,0,t,S1);
ObjectSet("S1",OBJPROP_COLOR,Green);
ObjectCreate("S2",OBJ_HLINE,0,t,S2);
ObjectSet("S2",OBJPROP_COLOR,Green);
ObjectCreate("S3",OBJ_HLINE,0,t,S3);
ObjectSet("S3",OBJPROP_COLOR,Green);

ayoob
18-01-2013, 02:39 AM
السلام عليكم وهد تطبيق لي درس اغلاق وافتتاح الشموع اد كان الافتتاح اكبر من الاغلاق قم بي عمل تنبية ومعة لافتة BUY واد كان الاغلاق اقل من الافتتاح قم بي عمل تنبية ومعة لافتة Sell واد كان الاغلاق يساوي الافتتاح قم بعمل لافتة ومعة open==close
double D=Open[1];
double B=Close[1];
if(B>D)
Alert("BUY");
if(B<D)
Alert("SEll");
if(B==D)
Alert("Open=Cloes");

}
:1 (77):

MOVING_AVERAGE
19-01-2013, 12:36 AM
بارك لله فيك اخي هد هو الكواد وان شاء لله يكون صحيح
extern int StopLoss=0;
extern int TakeProfit=0;
extern double Lot=0.1;
extern int MagicNumber=14000;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- Open price

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{



//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
{
double SL,TP;
double MACD=iMACD("EURUSD",PERIOD_M15,12,26,9,MODE_CLOSE,MODE_MAIN,0);
double MACD1=iMACD("EURUSD",PERIOD_M15,12,26,9,MODE_CLOSE,MODE_MAIN,1);

if(MACD<0&&MACD1>0){
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*Point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*Poi nt;}

OrderSend(Symbol(),OP_BUY,Lot,Ask,33,SL,TP,"AYOOB",MagicNumber,0,Green);
}


if(MACD>0&&MACD1<0){

if(StopLoss==0)SL=0;}else{SL=Bid+StopLoss*Point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*Point;}
OrderSend(Symbol(),OP_SELL,Lot,Bid,33,SL,TP,"AYOOB",MagicNumber,0,Red);
}
}

//----
return(0);


صحيح في البروكر 4 ارقام فقط في بروكر 5 ارقام ستجد مشاكل

ارجع الي مشاركتي السابقة ستجد الحل

2- دقق في شروط فتح الصفقة اضن انك عكستها

MOVING_AVERAGE
19-01-2013, 12:39 AM
السلام عليكم وهد تطبيق لي درس اغلاق وافتتاح الشموع اد كان الافتتاح اكبر من الاغلاق قم بي عمل تنبية ومعة لافتة BUY واد كان الاغلاق اقل من الافتتاح قم بي عمل تنبية ومعة لافتة Sell واد كان الاغلاق يساوي الافتتاح قم بعمل لافتة ومعة open==close
double D=Open[1];
double B=Close[1];
if(B>D)
Alert("BUY");
if(B<D)
Alert("SEll");
if(B==D)
Alert("Open=Cloes");

}:1 (77):


للاسف هو صحيح لاكن غير كامل لان الدالة alert تكرر التنبيه طالما الشرط محقق

يعني التنبيه سيبقي يتكرر كل ما يتحرك السعر

فيه طريقة لنجعلها تنبه مرة واحدة فقط

ساذكرها لما نصل اليها

عودة الي الدورة

MOVING_AVERAGE
19-01-2013, 01:00 AM
بعدما تعرفنا علي الكلمة break

ندخل الي الجملة switch ةهي تشبه كثيرا الجملة if لاكنها اكثر اختصار منها

الهيكل العام للدالة switch



switch()
{


}

نكتب داخل اقواس switch المتغير مثلا x الذي نريد تنفيذ اوامر مختلفة علي حسب قيمه

وداخل الحاضنتين

نكتب قيم x مع الاوامر التي نريد

MOVING_AVERAGE
19-01-2013, 12:04 PM
مثال علي الدالة switch

نريد عمل مؤشر يضهر علي الشارت الفريم المستخدم في حالت اخترنا فريم 15 دقيقة فقط

ولا يضهر شئ في حالة الفريمات الاخري

لتنفيذ هذا المؤشر نستخدم الدالة

Period()

وهذه الدالة ترجع لنا تايم فريم الشارت الحالي

فيكون استخدام switch كالتالي

switch(Period())
{
case 15:
Comment("time = 15");
break;
default:
Comment("");

}

case

يعني في حالة القيمة التي تاتي بعده

default

يعني في حالة عدم تحقق القيم السابقة


في انتضار اي استفسار

ayoob
20-01-2013, 02:39 AM
السلام عليكم اخي بي النسبة للدلة case تم التحديد بها الفريم والدلة default ان لم تتحقق ان الفريم الدي تم تعريفة في الدلةcase هو الصحيح لن يطهر علي الشارت صحيح
هد تطبيق بسيط جعلتة يطهر علي فريم الساعة فقط

{

switch(Period())
{
case 60:
Comment("AYOOB Time =1H");
break;
default:
Comment("");
}
}

MOVING_AVERAGE
20-01-2013, 11:12 AM
السلام عليكم اخي بي النسبة للدلة case تم التحديد بها الفريم والدلة default ان لم تتحقق ان الفريم الدي تم تعريفة في الدلةcase هو الصحيح لن يطهر علي الشارت صحيح
هد تطبيق بسيط جعلتة يطهر علي فريم الساعة فقط

{

switch(Period())
{
case 60:
Comment("AYOOB Time =1H");
break;
default:
Comment("");
}
}

تطبيقك صحيح اخي

:1 (77):

MOVING_AVERAGE
20-01-2013, 03:06 PM
الحلقات التكرارية

هي حلقة تكرر نفس العمل اكثر من مرة علي حسب الاوامر التي نريدها كمبرمجين وتنتهي الحلقة في حالة انتهاء شروط تكرارها

يوجد نوعين من الحلقات التكرارية

الحلقة for

الحلقة while

MOVING_AVERAGE
20-01-2013, 03:13 PM
نبدء بالخلقة الاكثر اهمية

ونجدها كثيرا جدا في المؤشرات

بل لا يخلو اي مؤشر منها تقريبا

ويمكن تلخيض كتابتها كما يلي


for(x;y;z)
{

}حيث x بداية الحلقة

y نهاية الحلقة

z التغير المتتالي للحلقة

الموضوع بارد جدا ولا ردود رغم المشاهدات الكثيرة

الاغلبية تريد السمكة فقط لا تريد صيدها

ayoob
21-01-2013, 12:03 AM
السلام عليكم اخي متابع معاك بس ياريت مثال علي الحلقة for

MOVING_AVERAGE
21-01-2013, 12:07 AM
السلام عليكم اخي متابع معاك بس ياريت مثال علي الحلقة for


ساضع الامثلة وتكون بسيطة ان شاء الله

سمير محمد ارمان
21-01-2013, 12:42 AM
ساضع الامثلة وتكون بسيطة ان شاء الله

ياباشا ماشاء الله عليك
موضوع ممتاز ممتاز بجد
وانا بصراحة بتعلم منه كثير
جزاك الله خير وجعله الله فى ميزان حسناتك
ارجو عدم التوقف
نريد التعلم
بتوفيق اخى الكريم

ayoob
21-01-2013, 12:46 AM
ياباشا ماشاء الله عليك
موضوع ممتاز ممتاز بجد
وانا بصراحة بتعلم منه كثير
جزاك الله خير وجعله الله فى ميزان حسناتك
ارجو عدم التوقف
نريد التعلم
بتوفيق اخى الكريم
+1http://www.fx-arabia.com/vb/images/icons/icon7.gif

MOVING_AVERAGE
21-01-2013, 01:22 AM
مثال عن الحلقة for

هذا المثال بسيط لاكن يحتاج قليل من التركيز

نريد كتابت علي الشارت كلمة اكثر من مرة

مثلا fx-arabia fx-arabia fx-arabia

هنا انا كررت هذه الكلمة fx-arabia

3مرات واضهرتها علي الشارت

ناتي لتحليل العمل اولا ثم نبرمج المؤشر

اولا يلزمنا متغير من نوع string نخزن في الكتابه fx-arabia

يلومنا متغير اخر من نوع string نخزن فيه التكرارات

يلزمنا متغير اخير لكي يكرر لي الكتاب كما اريد انا

اولا

التصريح بالمتغير الاول

string f="fx-arabia ";

التصريح بالمتغير الثاني

string d="";

التصريح بعدد المرات التي اريد ان تضهر الكثابه

extern int N=3;

نكتب هذه الحلقة داخل الدالة start

for(int i=0;i<N;i++)
{
d=d+f;
}

Comment(d);


سيكتب لنا المؤشر fx-arabia

N مرة

حيث N وضعته متغير خارجي يمكن التحكم فيه

لو وضعته 5 يكتب fx-arabia 5 مرات

المؤشر في المرفقات

هذا استخدام بسيط للحلقة for



شرح كود for

الحلقة for وضعنا فيها قيمة ابتدائية i=0

وقيمة نهائية i<N

وزيادة كل مرة ب 1


في انتضار اي اسئلة

MOVING_AVERAGE
21-01-2013, 01:37 AM
المؤشر

brave_mind
21-01-2013, 04:57 PM
تحية كبيرة جدا جدا لصاحب هذا الموضوع الرائع
الاستاذ MOVING_AVERAGE

وبعد اذن استاذنا انا جمعت كل الدروس فى ملف واحد بصيغة pdf
حتى يستطيع القارىء متابعة الشرح فى المشاركات القادمة

الملف
http://www.mediafire.com/?8u5e5mh06ctmzhr

MOVING_AVERAGE
21-01-2013, 07:07 PM
تحية كبيرة جدا جدا لصاحب هذا الموضوع الرائع
الاستاذ MOVING_AVERAGE

وبعد اذن استاذنا انا جمعت كل الدروس فى ملف واحد بصيغة pdf
حتى يستطيع القارىء متابعة الشرح فى المشاركات القادمة

الملف
http://www.mediafire.com/?8u5e5mh06ctmzhr


بارك الله فيك اخي

ayoob
21-01-2013, 10:22 PM
السلام عليكم اخي مش فاهم ماد تعني بي d+d=fو ماد تعني بي i<h وماد تعني القيمة الابتدئية i=0

MOVING_AVERAGE
21-01-2013, 11:25 PM
السلام عليكم اخي مش فاهم ماد تعني بي d+d=fو ماد تعني بي i<h وماد تعني القيمة الابتدئية i=0

تمام اول سؤال

الدالة for كتبناها كا التالي



for(int i=0;i<N;i++)
}
d=d+f;
}



ماذا تعني هذه الكتابة

كما قلنا من قبل اول خانة في الخلقة for نكتب فيها القيمة الابتدائية للحلقة

هنا كتبنا القيمة الابتدائية للحلقة i=0

القيمة الوسطي هي القيمة النهائية للحلقة

i<N

و N عرفناها من قبل انها تساوي 3

يعني القيمة النهائية للحلقة هي i < 3

اخر خانة هي عملية الزيادة وكما شرختها من قبل اي اننا نضيف قيمة 1 الي القيمة السابقة ل i

d هو متغير من نوع string يعني ممكن يكون مجموعة حروف

لم نضع فيه شئ يعني قيمته فارغة

لو نعمل


Comment(d);


لن يضهر شئ

f متغير من نوع string فيه هذه الكلمة fx-arabia

الي الان لم ندخل في الية عمل for

1- تبدء الحلقة for من القيمة 0

d=d+f

يعني قيمة d اصبحت تساوي قيمة d السابقة + قيمة f

قيمة d السابقة فارغة قيمة f = fx-arabia

تصبح قيمة d = fx-arabia

تصل الحلقة الي الحاصنة الاخيرة فتعيد اختبار الشروط

بحيث i اصبحت = 1
وقيمة i مازالت اصغر من 3

يعيد تنفيذ d=d+f

حيث

قيمة d السابقة تساوي fx-arabia

و قيمة f = fx-arabia

تصبح قيمة d = fx-arabia fx-arabia

تصل الحلقة الي الحاصنة الاخيرة فتعيد اختبار الشروط

بحيث i اصبحت = 2
وقيمة i مازالت اصغر من 3

يعيد تنفيذ d=d+f

حيث

قيمة d السابقة تساوي fx-arabia fx-arabia

و قيمة f = fx-arabia

تصبح قيمة d = fx-arabia fx-arabia fx-arabia

تصل الحلقة الي الحاصنة الاخيرة فتعيد اختبار الشروط

بحيث i اصبحت = 3

اي ان شرط التكرار هنا غير صحيح فتخرج من الحلقة

وفي النهاية قيمة d التي خرجنا بها من الحلقة هي

d = fx-arabia fx-arabia fx-arabia

فلما نضهرها علي الشارت تضهر هذه الكتابة

MOVING_AVERAGE
22-01-2013, 01:41 PM
هل المثال علي حلقة for مفهوم او اضيف مثال اخر

gozila
22-01-2013, 03:14 PM
استاذ موفينج افريج محتاج اعمل الفكرة ديه مؤشر ضروري جدا لو تسمح ممكن المساعدة


if(High[0]-Low[0]<High[1]-Low[1] && Volume[0]>Volume[1] ) Alert

MOVING_AVERAGE
22-01-2013, 04:58 PM
استاذ موفينج افريج محتاج اعمل الفكرة ديه مؤشر ضروري جدا لو تسمح ممكن المساعدة


if(High[0]-Low[0]<High[1]-Low[1] && Volume[0]>Volume[1] ) Alert



حسب المؤشر اخي

ان كنت تستخدم حلقة تكرارية للمرور بجميع الشموع هنا لن تضع رقم الشمعة بل ستضع قيمة الشمعة


2- لديك خطئ في التحليل

High[0]

و
Low[0]

تعني هاي الشمعة الاخيرة ولو الشمعة الاخيرة وهي متغيرة مع الوقت الي حد انتهاء الشمعة

فمن الافضل عدم استخدام الشمعة الاخيرة


وبصفة عامة


تفضل الكود مع تغير الشمعة 0 ب 1 و الشمعة 1 ب 2



double spread2=High[2]-Low[2];
double spread1=High[1]-Low[1];
double vol2=Volume[2];
double vol1=Volume[1];

if(spread1<spread2&&vol1>vol2)
Alert("Hello");

gozila
22-01-2013, 05:45 PM
شكرا استاذ موفينج افريج علي سرعة رد حضرتك
عندي استفسار
تقصد ايه حضرتك بقيمة الشمعة
انا كنت عايز احدد انه لو الشمعة الحالية الاغلاق اعلي من السابقة تتم المقارنة او الاغلاق اسفل من السابقة تتم المقارنة...يعني عايز اقارن شمعتين او بارين من نفس الاتجاه ...يعني اقارن اتنين شمعتين صاعدين
او اتنين شمعتين هابطين لكن مقارنش شمعة صاعدة بشمعة هابطة.....يا ريت لو بالكود

ayoob
22-01-2013, 08:49 PM
هل المثال علي حلقة for مفهوم او اضيف مثال اخر
ياريت مثال اخرعلي الشموع اخي

zarymask
22-01-2013, 09:37 PM
moving average

جزاك الله خير

سأبدأ من بداية الدروس الى ان اصل للدروس الجديدة

MOVING_AVERAGE
22-01-2013, 11:49 PM
شكرا استاذ موفينج افريج علي سرعة رد حضرتك
عندي استفسار
تقصد ايه حضرتك بقيمة الشمعة
انا كنت عايز احدد انه لو الشمعة الحالية الاغلاق اعلي من السابقة تتم المقارنة او الاغلاق اسفل من السابقة تتم المقارنة...يعني عايز اقارن شمعتين او بارين من نفس الاتجاه ...يعني اقارن اتنين شمعتين صاعدين
او اتنين شمعتين هابطين لكن مقارنش شمعة صاعدة بشمعة هابطة.....يا ريت لو بالكود

لم افهم المطلوب جيدا

علي كل تابعنا في الدروس القادمة ساضع حلقة تكرارية علي الشموع

ومنها يمكنك ان تقارن اي شموع مثل ما تريد

MOVING_AVERAGE
22-01-2013, 11:50 PM
ياريت مثال اخرعلي الشموع اخي

المثال علي الشموع سيكون هو الدرس القادم ومنه نستطيع عمل اي شئ واي مؤشر

MOVING_AVERAGE
22-01-2013, 11:52 PM
moving average

جزاك الله خير

سأبدأ من بداية الدروس الى ان اصل للدروس الجديدة

ان شاء الله تستفاد من الدروس ولا تنساني من الدعاء لي وللوالدين بارك الله فيك

ayoob
23-01-2013, 07:07 PM
السلام عليكم هد تطبيق بسيط علي الحلقة ولكن عندي استفسار كل ما يتحرك السعر تتكرر الحلقة الاسم ثلاتة مرات؟
string A="AYOOB";
string B="";
extern int h=3;
{
for(int i=0;i<h;i++)
{
B=B+A;

}
Comment(B);
return(0);
}
http://www.fx-arabia.com/vb/uploaded/8360_11358957251.png

MOVING_AVERAGE
23-01-2013, 08:52 PM
السلام عليكم هد تطبيق بسيط علي الحلقة ولكن عندي استفسار كل ما يتحرك السعر تتكرر الحلقة الاسم ثلاتة مرات؟
string A="AYOOB";
string B="";
extern int h=3; {
for(int i=0;i<h;i++)
{
B=B+A;

}
Comment(B);
return(0);
}http://www.fx-arabia.com/vb/uploaded/8360_11358957251.png


نعم اخي كل ما يتحرك السعر تعيد الدالة نفسها

zarymask
24-01-2013, 01:19 AM
تطبيق عملي

افتح صفحة برنامج جديد

واكتب علي الشارت الاسم الذي تريد ان تراه لما تتاجر

تطبيقي في المرفقات انتضر تطبيقاتكم

تلميذ جديد
http://i.istockimg.com/file_thumbview_approve/21582050/2/stock-illustration-21582050-smart-student.jpg
الواجب الأول :1 (77):


//+------------------------------------------------------------------+
//| moe.mq4 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
comment("thanks for your efforts");
return(0);
}
//+------------------------------------------------------------------+


اللهم ارزق والد ووالدة اخينا moving average الفردوس الاعلى انك على كل شيئ قدير

MOVING_AVERAGE
24-01-2013, 03:45 PM
ندخل في اهم شئ في برمجة المؤشرات

دالة تكرار علي كل الشموع

تكتب هذه الدالة داخل الدالة start

وهي دالة for ولاكن باعددات معينة

MOVING_AVERAGE
24-01-2013, 03:51 PM
هذه الدالة ستار



int start()
{



return(0);
}



كل عملنا سيكون هنا

لما نقول نعرف متغير خارج الدالة start

يعني خارج هذه الدالة

بالنسبة للحلقة for التي ستمر علي كل الشموع سنكتبها داخل الدالة ستار

نكتبها بدون قيمة ابتدائية ولا نهائية

تكون كالتالي


int start()
{

for(i = ; i ; i)
{
}

return(0);
}

MOVING_AVERAGE
24-01-2013, 03:53 PM
سؤال قبل كتابة الكود

كيف ستمر for علي كل الشموع

ياريت نسمع ارائكم

ayoob
24-01-2013, 09:54 PM
يتم اخد قيمة الشمعة رقم 0 الي اخر شمعة موجودة علي الشارت

MOVING_AVERAGE
25-01-2013, 06:40 PM
يتم اخد قيمة الشمعة رقم 0 الي اخر شمعة موجودة علي الشارت

تمام للمرور علي كل الشموع ناخذ القيمة الابتدائية ل i هي 0

القيمة النهائية ل i هي عدد شموع الشارت

والزيادة في i هي 1

اخذنا الزيادة في i هي 1 لان الشموع تاخذ الترتيب 0 1 2 3 4 5 6 7

وهكذا

MOVING_AVERAGE
25-01-2013, 06:43 PM
تصبح الكتابة السابقة للحلقة كالتالي


int start()
{

for(i=0;i<x;i++)
{

// حيث x
//تمثل عدد الشموع علي الشارت
}
}

MOVING_AVERAGE
26-01-2013, 06:43 PM
كيف نعرف عدد الشموع علي الشارت ؟؟؟؟

لمعرفة عدد الشموع علي الشارت نستخدم دالة تحسب لنا عدد الشموع الموجودة تلقائيا

هذه الدالة هي


Bars


اذا نحسن الكتابة السابقة فتصبح


int start()
{

int x=Bars;
int i;
For(i=0;i<=x;i++)
{

}


return(0);
}

MOVING_AVERAGE
26-01-2013, 06:52 PM
لاكن لكي تصبح اللحلقة سريعة لا نعيد العمليات التي قمنا بها من قبل

قنستخدم معرف اخر يضهر لنا الشمعات التي حسبت من قبل

هذا المعرف يكتب كالتالي


int counted_bars=IndicatorCounted();


ولكي تبقي الحلقة فور سريعة وسلسة خصوصا اننا نتعامل مع تغيرات سريعة جدا للسعر

سنمررها فقط علي الشموع الجديدة

وبما ان لدينا كل الشموع

والشموع التي حسبت من قبل

فالشموع الجديدة هي نتيجة الطرح

نحسن الكتابة السابقة فتصبح


int start()
{
int counted_bars=IndicatorCounted();
int x=Bars-counted_bars;
int i;
For(i=0;i<=x;i++)
{

}


return(0);
}



قربنا من كتابة النواة لاي مؤشر

MOVING_AVERAGE
26-01-2013, 07:02 PM
هنا بقي لنا نناقش حلات الخطئ التي ممكن ان تصادفنا

اهم حالة هي

عدد الشموع المحسوبة غير موجود هنا نخرج لا ننفذ شئ

ونترجم هذه الكتابة الي


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


واذا كانت عدد الشموع المحسوبة اكبر من 0 و تشكلة شمعة جديدة هنا يعني ان اخر شمعة قد حسبت فننقص 1 لكي نتعامل مع الجديد فقط

الترجمة البرمجية


if(counted_bars>0) counted_bars--;


نحسن الكتابة النهائية للحلقة for التي تمر علي كل الشموع فتصبح



int start()
{

int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;



int x=Bars-counted_bars;

For(int i=0;i<=x;i++)
{

}


return(0);
}



هذه الكتابة الاخيرة مهمة جدا ولن نجد مؤشر لا يحتوي عليها

وهي اساس كل العمل

وكل ما سياتي بعدها سهل اذا فهمنا كيف تتنقل هذه الحلقة بين الشموع

في التالي شرح كيف تتنقل الحلقة

وماهي العلاقة بين i والشمعة الضاهرة علي الشارت

MOVING_AVERAGE
28-01-2013, 04:02 PM
ناتي الي اهم دروس الدورة

كيف نمثل افتتاح واغلاق وهاي ولو الشمعة الحالية + الشمعة السابقة في داخل الحلقة التكرارية for

اتفقنا علي الشكل النهائي للحلقة التكرارية

وسنستخدمه كما سبق لنا وكتبناه

الان

للشمعة الحالية 4 متغيرات نريد ان نعرفها

الشمعة السابقة 4 متغيرات نريد ان نعرفها

اذن يلزمني 8 متغيرات خارجية لاضع فيها القيم المختلفة

كيف احدد نوع هذه المتغيرات

يحدد نوع هذه المتغيرات خسب المتغير الاساسي الذي سنضعه فيها

مثلا الافتتاح هو متغير من اللنوع


double


فيلزمني تعريف المتغير الذي ساضع فيه الافتتاح علي انه


double


وهكذا بالنسبة للبقية

كما سبق وذكرنا يمكن التصريح بالافتتاح بطريقتين

اما

Open[0]


او


iOpen(0,0,0)


وشرحنا كل الارقام داخل الكتابه

الان نحن في داخل حلقة تكرارية

بدون اي تعقيدات سنعمل كالتالي

الشمعة الحالية هي في الترقيم الطبيعي تساوي 0

داخل الحلقة سنكتبها بدلالة i فقط

الشمعة السابقة هي في الترقيم الطبيعي تساوي 01

داخل الحلقة سنكتبها بدلالة i+1 فقط

وهكذا

تمرين

اكتب المتغيرات 4 للشمعة الحالية والسابقة بدلالة i

بطريقة التصريح 1 و 2

MOVING_AVERAGE
29-01-2013, 12:15 AM
حل التمرين السابق


الطريقة 1


int start()
{
int x,i;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
x=Bars-counted_bars;

for(i =0 ; i<x ; i++)
{

//من اجل الشمعة 0
double open0=Open[i];
double close0=Close[i];
double high0=High[i];
double low0=Low[i];

//من اجل الشمعة 1
double open1=Open[i+1];
double close1=Close[i+1];
double high1=High[i+1];
double low1=Low[i+1];



}

return(0);
}



الطريقة 2


int start()
{
int x,i;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
x=Bars-counted_bars;

for(i =0 ; i<x ; i++)
{

//من اجل الشمعة 0
double open0=iOpen(0,0,i);
double close0=iClose(0,0,i);
double high0=iHigh(0,0,i);
double low0=iLow(0,0,i);

//من اجل الشمعة 1
double open1=iOpen(0,0,i+1);
double close1=iClose(0,0,i+1);
double high1=iHigh(0,0,i+1);
double low1=iLow(0,0,i+1);



}

return(0);
}

MOVING_AVERAGE
29-01-2013, 12:20 AM
بعد ان عرفنا كيف نكتب الشمعة الحالية والسابقة واي شمعة نريد العمل عليها

سناتي الي مقارنة الشموع

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

مثلا نريد مقارنة الحجم الكلي للشمعة السابقة التي تحمل الرقم 1 يعني high - low

نقارنة بالشمعة التي تحمل الرقم 2

انتضر مشاركة اكثر منكم شباب

MOVING_AVERAGE
29-01-2013, 12:34 AM
حل المطلوب السابق يكون كالتالي

1 الحل باستخدام كتابة علي الشارت فقط


int start()
{
int x,i;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
x=Bars-counted_bars;

for(i =0 ; i<x ; i++)
{

//من اجل الشمعة 1
double spread1=iHigh(0,0,i+1)-iLow(0,0,i+1);


//من اجل الشمعة 2
double spread2=iHigh(0,0,i+2)-iLow(0,0,i+2);

// نقارن هنا بين حجم الشمعتين

if(spread1>spread2)
Comment(" bar1 > bar2");
else if(spread1<spread2)
Comment(" bar1 < bar2");
else
Comment("bar1 = bar2");


}

return(0);
}

MOVING_AVERAGE
29-01-2013, 03:36 PM
وصلنا الي استخدام تنبيه بواسطة الدالة


Alert


الصيغة الهامة للدالة هي


Alert();


يمكننا وضع داخل الدالة متغير او متغيرين او اكثر

يفصل بين كل متغير والاخر فاصلة

يمكن ان ياخذ المتخير اي نوع من الانواع المذكورة سابقا

مثال للدالة مع تنبيه


Alert("hello");

MOVING_AVERAGE
29-01-2013, 03:40 PM
حل المثال السابق باستخدام الدالة


for(i =0 ; i<x ; i++)
{

//من اجل الشمعة 1
double spread1=iHigh(0,0,i+1)-iLow(0,0,i+1);


//من اجل الشمعة 2
double spread2=iHigh(0,0,i+2)-iLow(0,0,i+2);

// نقارن هنا بين حجم الشمعتين

if(spread1>spread2)
Alert(" bar1 > bar2");
else if(spread1<spread2)
Alert(" bar1 < bar2");
else
Alert("bar1 = bar2");


}

return(0);
}


لاكن هنا يبقي لدينا مشكل وهو تكرار التنبيه طالما الشرط محقق

وسيسبب لنا ازعاج كبير

ماهو العمل برايكم شباب

Mohamed_Amr
29-01-2013, 03:42 PM
الله ينورك عليك استاذنا الحبيب

medz
30-01-2013, 12:56 AM
جزاك الله كل خير أخي موفنج عل هذا الموضوع المهم
يقول نبينا عليه الصلاة والسلام : من سلك طريقا يلتمس فيه علما سهل الله له به طريقا إلى الجنة
فأنت مأجور إن شاء الله فلا تزعل لو لم تجد مشاركة واسعة من الأعضاء وخصوصا في مواضيع البرمجيات
لا تيأس من قلة المشاركات وواصل فطالب العلم سيبحث عن موضوعك اليوم وغدا لأنه يحتاجه وأنت جعلك الله سببا في حاجة أخيك هذا
أنا شخصيا كنت أنفر من البرمجة إجمالا لأني كنت أضنها متعبة وطريقها طويل وهي تهم المتخصصون في البرامج فقط
لكن لما قرأت موضوعك وطريقتك السلسة في إيصال المعلومة وصبرك في انتضار تطبيقات الإخوة بدأت أستأنس بالموضوع وأتابع عبر الصفحات
فكلمة شكرا لا تفيك حقك فجزاك الله خير عن الجميع و فتح لك أبواب الخير وغفر لك ولوالديك ولجميع المسلمين
وعذرا علي الاطالة
وتقبل تحياتي

MOVING_AVERAGE
31-01-2013, 05:17 PM
الله ينورك عليك استاذنا الحبيب

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


بارك الله فيكم اخواني

MOVING_AVERAGE
31-01-2013, 05:25 PM
كيف نتخلص من التنبيه المستمر

نفكر كمبرمجين

لابد ان يتحقق الشرط مرة واحدة فقط يعمل تنبيه ثم يراجع الشرط فيجده غير محقق لا يعمل تنبيه

حتي يتحقق مرة اخري فيعيد التنبيه

من الوسائل المستخدمة لهذا الغرض والتي استخدمها شخصيا

الربط بوقت الشمعة

كيف ذلك

يعني اضع متغير ما ولا اعطيه اي قيمة

اضيف في شروط تنفيذ التنبيه ان قيمة هذ المتغير لا تساوي قيمة وقت الشمعة

في اول الامر سينفذ لنا التنبيه لان قيمة المتغير 0 لم نعطه قيمة من قبل

بعد عمل اول تنبيه نعطي هذا المتغير قيمة تساوي وقت الشمعة الحالي

تعيد الحلقة نفسها وتراجع الشروط

تجد ان المتغير اصبح يملك نفس قيمة وقت الشمعة الحالي فلا تنفذ التنبيه مرة اخري

واجب

لو فهمت الكتابة فوق

ترجمها الي لغة MQL4

اوراق الخريف
31-01-2013, 09:03 PM
بارك الله فيك
وغفر لك ولوالديك

هذه المرة الاولى التي انتبه للموضوع فيها
عمل ممتاز انا مازلت في الصفحة الخامسة لكن ان شاء اله ستجدني هنا
واياك ان تتوقف عن الشرح قبل ان تعطي كل ما عندك

بالتوفيق
وساحضر مجموعة استفسارات لاني كذلك غير محترف برمجة رغم اني اقوم بعمل برمجة لبعض الاكواد
لكن اطمح للاحتراف لاستطيع تطبيق كل ما يدور في راسي بشكل حرفي

بالتوفيق يا صديقي

MOVING_AVERAGE
02-02-2013, 01:26 AM
ننتقل الي البرمجة الفعلية للمؤشرات

ونبدء علي بركة الله بمؤشر تقاطع الموفينج

مع اضهار سهم لحضة التقاطع + تنبيه صوتي

مع امكانية التحكم بكل اعدادات الموفينج

alzaaem
02-02-2013, 03:53 PM
أخي الكريم , متى تبدأ بموضوع برمجة الاكسبرت؟

تحياتي

سمير محمد ارمان
02-02-2013, 04:59 PM
ننتقل الي البرمجة الفعلية للمؤشرات

ونبدء علي بركة الله بمؤشر تقاطع الموفينج

مع اضهار سهم لحضة التقاطع + تنبيه صوتي

مع امكانية التحكم بكل اعدادات الموفينج

متابع معك ان شاء الله
ارجو لك التوفيق

MOVING_AVERAGE
02-02-2013, 08:32 PM
أخي الكريم , متى تبدأ بموضوع برمجة الاكسبرت؟

تحياتي


قريبا ان شاء الله ساعمل دورة الاكسبريتات

متابع معك ان شاء الله
ارجو لك التوفيق

بارك الله فيك اخي سمير

MOVING_AVERAGE
02-02-2013, 09:00 PM
نبدء علي بركة الله

اولا كيف يمكننا منادات خط الموفينج افريج في MQL4

الموفينج هو خطئ تمثل قيمته متوسط السعر لدور نختاره من اعدادات الموفينج

يعني هذا المتوسط بالضررورة سيكون عدد من نوع double

اول شئ نحجز متغير من نوع double لنضع فيه الموفينج الذي نريده

ويكون التصريح بالموفينج كالتالي


double mov=iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)


وفيما يلي سنشرح كل برمتر وحده

MOVING_AVERAGE
02-02-2013, 09:07 PM
الحد الاول


string symbol


ويعني متغير من توع string

وهنا يمكننا وضع اسم الشارت الذي نريد العمل عليه

اذا كنا نريد عمل مؤشر يشتغل علي EURUSD

ساضع مكان اول حد الكتابة التالية


double mov=iMA( "EURUSD", int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)


اذا كنت اريد عمل مؤشر يقرء البينات من اي شارت يوضع علية

ساجع اول حد = 0 او NULL كما شرحت في اول الدروس


double mov=iMA( NULL, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift);

MOVING_AVERAGE
02-02-2013, 09:12 PM
الحد الثاني


int timeframe


وهو متغير من نوع صحيح

تحمل قيمته الوقت الذي نريد العمل عليه

وهو مشروح في اول الدروس

نفضل دائما وضعه 0 لكي يعمل علي اي شارت يوضع عليه

MOVING_AVERAGE
02-02-2013, 09:18 PM
الحد الثالث


int period
متغير من نوع صحيح

وهذا الحد نقصد به الدور الذي نريد العمل به

مثلا موفينج 50 يعني الدور هنا 50 ونضعه في هذا المكان

لكي نجعل الدور متغير خارجي يمكن التحكم به من اعددات

نعرفه خارج الدالة start

كالتالي


extern int PErioD=50;
ونضعه في دالة مندات الموفينج كالتالي


double mov=iMA( NULL, 0, PErioD, int ma_shift, int ma_method, int applied_price, int shift);
هل كل شئ واضح الي الان ؟؟؟؟

MOVING_AVERAGE
04-02-2013, 12:25 AM
نكمل علي بركة الله

MOVING_AVERAGE
04-02-2013, 12:33 AM
الحد الرابع


int ma_shift


متغير من نوع int

هذا المتغير نقصد به الازاحة لخط الموفينج

في اغلب الاحيان نتركه 0

اذا وضعنا مثلا 2 سنجد ان خط الموفينج تحرك بمسافة شمعتين الي الامام

واذا وضعناه -3 مثلا نجد ان الموفينج تحرك الي الخلف بمسافة 3 شنعات

في اغلب الاحيان لا نحتاج تعريف خارجي لهذا المتغير وهو ياخذ الرقم 0

ويصبح الكود السابق كالتالي


double mov=iMA( NULL, 0, PErioD, 0, int ma_method, int applied_price, int shift);

MOVING_AVERAGE
04-02-2013, 12:40 AM
الحد الخامس


int ma_method
متغير من نوع صحيح int

يمثل هذا المتغير نوع الموفينج

مثلا عند قولنا موفينج 50 سمبل او موفينج 50 اكسبنشل

لكل موفينج كتابه معينة

والحد الخامس هو الذي يبين لنا اما سمبل او اكسبنشل وفيما يلي القيم التي يستطيع اخذها الحد الخامس

1 بالنسبة للموفينج simple

Simple moving average

يمكن ان ياخذ


int ma_method
القيمة 0 او MODE_SMA

وكتطبيق علي الكود السابق


double mov=iMA( NULL, 0, 50, 0, 0, int applied_price, int shift);
او


double mov=iMA( NULL, 0, 50, 0, MODE_SMA, int applied_price, int shift);
هذه الكتابة لم تكتمل بعد لاكن الي حد الان نفهم اننا نشتغل علي موفينج 50 سمبل

MOVING_AVERAGE
04-02-2013, 12:46 AM
2- بالنسبة للموفينج Exponential

Exponential moving average

يمكن ان ياخذ الحد


int ma_method


القيمة 1 او MODE_EMA

وكتطبيق علي الكود السابق


double mov=iMA( NULL, 0, 50, 0, 1, int applied_price, int shift);


او


double mov=iMA( NULL, 0, 50, 0, MODE_EMA, int applied_price, int shift);



في هذا المثال نفهم اننا نشتغل علي موفينج 50 اكسبنشل

MOVING_AVERAGE
04-02-2013, 12:49 AM
3- بالنسبة للموفينج Smoothed

Smoothed moving average

يمكن ان ياخذ الحد


int ma_method


القيمة 2 او MODE_SMMA

وكتطبيق علي الكود السابق


double mov=iMA( NULL, 0, 50, 0, 2, int applied_price, int shift);


او


double mov=iMA( NULL, 0, 50, 0, MODE_SMMA, int applied_price, int shift);



في هذا المثال نفهم اننا نشتغل علي موفينج 50 سموث

MOVING_AVERAGE
04-02-2013, 01:09 AM
4- بالنسبة للموفينج Linear weighted

Linear weighted moving average

يمكن ان ياخذ الحد



int ma_method


القيمة 3 او
MODE_LWMA
وكتطبيق علي الكود السابق


double mov=iMA( NULL, 0, 50, 0, 3, int applied_price, int shift);


او


double mov=iMA( NULL, 0, 50, 0, MODE_LWMA, int applied_price, int shift);



في هذا المثال نفهم اننا نشتغل علي موفينج 50 Linear weighted

MOVING_AVERAGE
04-02-2013, 01:11 AM
بالمختصر

الحد

int ma_method


يمكن ان يحمل 4 قيم وكل قيمة تحدد لنا نوع من انواع الموفينج كما ذكرنا سابقا

MOVING_AVERAGE
04-02-2013, 01:18 AM
لكي نجعل هذا المتغير خارجي ويمكن التحكم به من الاعددات الخارجية للمؤشر

سنعرفه خارج الدالة start

كالتالي



extern int ma_method=0;


ونعطيه القيمة الابتدائية 0 يعني موفينج سمبل

حتي الان عرفنا متغيرين خارج الدالة start



extern int PErioD=50;


ويكون كتابة الكود كا التالي


double mov=iMA( NULL, 0, PErioD, 0, ma_method, int applied_price, int shift);


الكود لم يكتمل بعد

نحن قلنا ان قيمة


ma_method


تاخذ 0 او 1 او 2 او 3 فقط

ماذا لو وضع المستخدم قيمة اكبر من هذه القيم

يمكننا ببساطة اجبار المستخدم علي ادخال واحدة من هذه القيم

وسنتطرق الي ذللك في الدروس المتقدمة نوع ما

MOVING_AVERAGE
04-02-2013, 01:21 AM
سانتضر اي اسئلة او شئ لم يفهم

الهذلي
04-02-2013, 07:08 AM
اخي MOVING_AVERAGE
الله يجزيك بالجنه انت ومن تحب

لكن اخي ياليت ياليت ياليت ولو في ذالك تعب عليك

انك تجمع الشرح في ملف pdf لانه شرح جدا جميل وسلس ويفهم من المره الاولي

شاكر لك تعبك والله يكتب اجرك

اخوك
الهذلي

MOVING_AVERAGE
04-02-2013, 04:36 PM
اخي MOVING_AVERAGE
الله يجزيك بالجنه انت ومن تحب

لكن اخي ياليت ياليت ياليت ولو في ذالك تعب عليك

انك تجمع الشرح في ملف pdf لانه شرح جدا جميل وسلس ويفهم من المره الاولي

شاكر لك تعبك والله يكتب اجرك

اخوك
الهذلي

والله اخي لا اعرف كيفية رفعه في ملف pdf

وارجو من الاخوة ان يرفعو الدروس في ملف pdf

MOVING_AVERAGE
04-02-2013, 04:42 PM
الحد السادس


int applied_price


متغير من نوع int

يمثل هذا الحد القيمة التي نحسب علي اساسها المتوسط الحسابي

مثلا يمكن ان ياخذ قيمة الاغلاقات فقط او الافتتاحات فقط وهكذا وفيما يلي

قيم التي ممكن ان ياخذها هذا الحد

MOVING_AVERAGE
04-02-2013, 04:48 PM
يمكن ان ياخذ الحد السادس


int applied_price


قيم الاغلاقات وذلك باعطائه القيم

0 او PRICE_CLOSE

تطبيق علي الكود السابق


double mov=iMA( NULL, 0, PErioD, 0, ma_method,0, int shift);

او

double mov=iMA( NULL, 0, PErioD, 0, ma_method, PRICE_CLOSE, int shift);

MOVING_AVERAGE
04-02-2013, 04:49 PM
يمكن ان ياخذ الحد السادس


int applied_price


قيم الافتتاح وذلك باعطائه القيم

1 او PRICE_OPEN

تطبيق علي الكود السابق


double mov=iMA( NULL, 0, PErioD, 0, ma_method,1, int shift);

او

double mov=iMA( NULL, 0, PErioD, 0, ma_method, PRICE_OPEN, int shift);

MOVING_AVERAGE
04-02-2013, 04:55 PM
وكاختصار لقيم الحد السادس ساضعها كلها

قيم الهاي

2 او PRICE_HIGH

قيم اللو

3 او PRICE_LOW

قيم منتصف الشمعة

4 او PRICE_MEDIAN

قيم الهاي + اللو + الاغلاق / 3

5 او PRICE_TYPICAL

قيم الهاي + اللو + الاغلاق + الاغلاق / 4

6 او PRICE_WEIGHTED

لكي نضع هذا الحد كمتغير خارجي نستطيع التحكم به نعرفه خارج الدالة start

بنفس الخطواة مثل الحدود السابقة

في اغلب الاحيان ياخذ الحد السادس القيمة 0 للاغلاقات

MOVING_AVERAGE
04-02-2013, 04:59 PM
الحد الاخير


int shift


هذا الحد يمثل رقم الشمعة

وتم شرحه من قبل


تطبيق عملي اكتب كود للموفينج 7 اكسبنشل يعتمد علي الاغلاقات

واكتب كود للموفينج 15 سمبل يعتمد علي الاغلاقات

الشمعة السابقة لكلا الموفينجين

ارجو التفاعل مع المطلوب

الهذلي
04-02-2013, 06:03 PM
MOVING_AVERAGE

الله يكتب اجرك اخي واستاذي

ملاحظة حبيت اقولها لك

اتمنا منك طرح الدروس دون الالتفات لهل متابع لك ام لا لربمي هناك من تابع موضوعك ولو بعد سنه ثم يكتب لك اجره

ولربما من تابع موضوعك بعد موتك فياتيك اجرك وانت في قبرك لكن احتسب الاجر من الله دون ان يكسلك ابليلس عنه لن

ابليس مقصده من تكسيلك ان يمنعك من الاجر اللذي ان شاءالله يكتب لك

اخي واصل ولا تلتفت خلفك

بارك الله فيك

MOVING_AVERAGE
05-02-2013, 12:17 AM
MOVING_AVERAGE

الله يكتب اجرك اخي واستاذي

ملاحظة حبيت اقولها لك

اتمنا منك طرح الدروس دون الالتفات لهل متابع لك ام لا لربمي هناك من تابع موضوعك ولو بعد سنه ثم يكتب لك اجره

ولربما من تابع موضوعك بعد موتك فياتيك اجرك وانت في قبرك لكن احتسب الاجر من الله دون ان يكسلك ابليلس عنه لن

ابليس مقصده من تكسيلك ان يمنعك من الاجر اللذي ان شاءالله يكتب لك

اخي واصل ولا تلتفت خلفك

بارك الله فيك

بارك الله فيك اخي

MOVING_AVERAGE
05-02-2013, 12:20 AM
حل المثال السابق

موفينج اكسبنشل 7 للشمعة السابقة


double mov=iMA( NULL, 0,7, 0, 1, 0, i+1);


موفينج سمبل 15 للشمعة السابقة


double mov=iMA( NULL, 0,15, 0, 0, 0, i+1);


سؤال كيف نعرف لحضة التقاطع بين الموفينج 7 و 15

MOVING_AVERAGE
05-02-2013, 12:31 AM
http://www.fx-arabia.com/vb/uploaded/8190_01360013414.jpg

Lama-FX
05-02-2013, 01:35 AM
http://www.fx-arabia.com/vb/uploaded/8190_01360013414.jpg

مرحبا اخي MOVING_AVERAGE

يعطيك العافية على مجهودك وعطائك وشكرا للمجهود الذي تقدمة
انا مليش بالبرمجة

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

ممكن اساعدك
اصلي اختصاصي جرفك

MOVING_AVERAGE
05-02-2013, 01:40 AM
مرحبا اخي MOVING_AVERAGE

يعطيك العافية على مجهودك وعطائك وشكرا للمجهود الذي تقدمة
انا مليش بالبرمجة

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

ممكن اساعدك
اصلي اختصاصي جرفك



ههههه بارك الله فيك اخي انا احب الجديد والتغير

كل اسبوع اغير الصورة

الهذلي
05-02-2013, 09:43 PM
السلام عليكم ورحمة الله وبركاته

اخواني الحمد لله تعلمة كيف اعمل ملف pdf

وهذه تجميع الدورة من الصفحه 1 الى الصفحه 22

4shared folder - My 4shared (http://www.4shared.com/folder/uzLkV0Kk/_online.html)



حبية اسئل استاذي هل الدورة لحد الان انتهت ام يوجد بقيه

MOVING_AVERAGE
05-02-2013, 11:05 PM
السلام عليكم ورحمة الله وبركاته

اخواني الحمد لله تعلمة كيف اعمل ملف pdf

وهذه تجميع الدورة من الصفحه 1 الى الصفحه 22

4shared folder - My 4shared (http://www.4shared.com/folder/uzLkV0Kk/_online.html)



حبية اسئل استاذي هل الدورة لحد الان انتهت ام يوجد بقيه

بارك الله فيك اخي

الدورة مازالت مستمرة

MOVING_AVERAGE
05-02-2013, 11:10 PM
http://www.fx-arabia.com/vb/uploaded/8190_01360013414.jpg

كيف نحدد التقاطع برمجيا

نري وضعية الخطوط وترتيبها قبل التقاطع

نري وضعية الخطوط وترتيبها بعد التفاطع لنعرف التقاطع

MOVING_AVERAGE
05-02-2013, 11:24 PM
كتابة الموفينج في الشمعة قبل السابقة
ولنفرض انها شمعة قبل التقاطع
الموفينج 7


double mov7_2=iMA( NULL, 0,7, 0, 1, 0, i+2);


الموفينج 15

double mov15_2=iMA( NULL, 0,15, 0, 0, 0, i+2);


كتابة الموفينج في الشمعة السابقة
ولنفرض انها شمعة بعد التقاطع
الموفينج 7


double mov7_1=iMA( NULL, 0,7, 0, 1, 0, i+1);


الموفينج 15

double mov15_1=iMA( NULL, 0,15, 0, 0, 0, i+1);



ترتيب الموفينج اذا كان الاتجاه نازل

الموفينج 15 اعلي من الموفينج 7

ترتيب الموفينج اذا كان الاتجاه صاعد

الموفينج 15 اسفل الموفينج 7

يعني دائما الموفينج الاصغر هو الذي تتبعه حركة السعر

MOVING_AVERAGE
05-02-2013, 11:33 PM
ناخذ امثلة من الشارت لتقاطعات و نكتبها بدلالة الشمعة السابقة والتي قبلها

http://www.fx-arabia.com/vb/uploaded/8190_01360096030.jpg

في هذا المثال كان الاتجاه نازل

يعني الموفينج 15 اكبر من الموفينج 7

ثم اصبح صاعد

يعني الموفينج 15 اصغر من الموفينج 7

الترجمة البرمجية


double mov7_2=iMA( NULL, 0,7, 0, 1, 0, i+2);

double mov7_1=iMA( NULL, 0,7, 0, 1, 0, i+1);

double mov15_2=iMA( NULL, 0,15, 0, 0, 0, i+2);

double mov15_1=iMA( NULL, 0,15, 0,0, 0, i+1);

if(mov7_2<mov15_2&&mov7_1>mov15_1)
{
//اصبح الاتجاه صاعد
}




ان شاء الله يكون شرط تقاطع الموفينج مفهوم وحاضر لاي استفسرات

MOVING_AVERAGE
07-02-2013, 02:57 PM
اضن ان شرط التقاطع مفهوم

الان ان شاء الله بعدما فهمنا كيف نعبر عن التقاطع برمجيا يمكننا عمل اي شئ في لحضة التقاطع

عمل تنبيه واضن الامر بسيط لاننا عمل مؤشر للتنبيه من قبل

عمل كتابه علي الشارت والامر بسيط لاننا عمل كتابه من قبل

رسم سهم علي الشارت وهذا ما سنوضحه اكثر ان شاء الله

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

MOVING_AVERAGE
12-02-2013, 02:35 PM
الاسهم

الاسهم هي كائنات رسومية يمكننا رسمها في لغة mq4 بطريقتين

اما بواسطة ObjectCreat

او بواسطة الكائنات الرسومية التي ندمجها في المصفوفات

MOVING_AVERAGE
12-02-2013, 02:37 PM
طريقة رسم الاسهم بواسطة الكائنات الرسومية

تعتبر من اكثر الطرق المستخدمة في رسم الاسهم

كيف نستخدم هذه الطريقة

MOVING_AVERAGE
12-02-2013, 02:41 PM
لرسم اي كائن علي الشارت يجب ان نعلم البرنامج اننا سنستخدم كائنات رسومية

مثلا لرسم سهم نازل و سهم صاعد

نحتاج كائنين علي الشارت

لاعلام البرنامج اننا سنستخدم كائنين علي الشارت نستعمل الجملة التالية

#property indicator_buffers 2


اقصي حد للكائنات الرسومية في مؤشر هو 8 ولا نستطيع استخدام اكثر من هذا العدد

MOVING_AVERAGE
12-02-2013, 02:49 PM
بعد اعلام البرنامج اننا سنستخدم كائنين علي الشارت يمكننا التحكم بالوان هته الكائنات

وهذه الخطوة مهمة جدا جدا جدا

لاننا سنستعمل هذه الالوان عند برمجة الاكسبريت

سنستخدم لونين

الاول ازرق للسهم الصاعد

والثاني احمر للسهم النازل

يتم ترجمت ما سبق كالاتي


#property indicator_color1 Red
#property indicator_color2 Blue


لا يهم ترتيب الالوان في هذه المرحلة

اذا نعيد ما تم كتابته خارج الدالة start

ويفضل ان يكونو في الاعلي تحت نوع نافذة البرماند


#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue


هذه الكتابة تعني اننا نستخدم نافدة الشارت

سنستخدم كائنين علي نافذة الشارت

لون كائن احمر

لون الكائن الاخر ازرق

adel asran
12-02-2013, 08:39 PM
السلام عليكم اخى الغالى هل هذا نهاية مجهودك الرائع ام هناك تكلمة موضوعك في مكان اخر

MOVING_AVERAGE
13-02-2013, 03:14 PM
السلام عليكم اخى الغالى هل هذا نهاية مجهودك الرائع ام هناك تكلمة موضوعك في مكان اخر


الدورة مازالت مستمرة

ساحاول الكتابة اليوم ان شاء الله

MOVING_AVERAGE
13-02-2013, 04:11 PM
بعدما ان اعلمنا البرنامج اننا سنرسم كائنين علي الشارت

لابد الان من ربط هذين الكائنين بمصفوفتين

وقبل الربط نعرف مصفوفتين من نوع double

والتعريف يكون كالتالي


double CrossUp1[];
double CrossDown1[];



كل مصفوقة اعطيتها اسم خاص بها

اذا حتي الان كتبنا التالي


#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue

double CrossUp1[];
double CrossDown1[];

MOVING_AVERAGE
13-02-2013, 04:12 PM
كل هذه الكتابات تكون خارج الدالة start

hai1tham
14-02-2013, 09:08 PM
اخى الفاضل اريد التعمق اكثر فى البرمجه ارجو الافاده

MOVING_AVERAGE
15-02-2013, 01:07 PM
تابع معنا اخي ان شاء الله اليوم اكمل المؤشر الاول

MOVING_AVERAGE
15-02-2013, 01:10 PM
بعدما اعلمنا البرنامج اننا سنستخدم كائنين علي الشارت

وعرفنا مصفوفتين

ناتي الان لربط الكائن بالمصفوفة

واعطاء الكائن الشكل والنوع الذي سيظهر به علي الشارت

النوع يمكن للكائن ان يكون سهم, خط , هستوغرام ....

الشكل حسب النوع الذي تم اختياره

وعند اختيار اسهم نجد انواع اشكال كثيرة جدا للسهم

MOVING_AVERAGE
15-02-2013, 01:15 PM
تحديد نوع الكائن

لتحديد نوع الكائن نكتب التالي داخل الدالة


init



SetIndexStyle( int index, int type, int style=EMPTY, int width=EMPTY, color clr=CLR_NONE)


يمكن كتابة هذه الجملة الاخيرة بخانتين فقط

MOVING_AVERAGE
15-02-2013, 01:17 PM
شرح الجملة الاخيرة


int index


رقم الكائن الذي نتعامل معه في الجملة

مثلا عندنا في مثالنا كائنين

فالكائن الاول ياخذ الرقم 0

والكائن الثاني ياخذ الرقم 1

MOVING_AVERAGE
15-02-2013, 01:21 PM
int type


نوع الكائن الذي نريد اضهاره علي الشارت

ولكي نضهر سهم علي الشارت نستخدم الكلمة التالية


DRAW_ARROW


يعني الكتابة الي حد الان ستكون كالتالي


SetIndexStyle(0, DRAW_ARROW,

للكائن الاول

SetIndexStyle(1, DRAW_ARROW,

للكائن الثاني

MOVING_AVERAGE
15-02-2013, 01:30 PM
int style=EMPTY


هذه الكتابة لن تهمنا في حالة الاسهم

وسنتكتبها كالتالي


EMPTY


يمكننا التوقف الان وعدم اكمال باقي الخانات لو نريد

الكتابة الي حد الان


SetIndexStyle(0, DRAW_ARROW, EMPTY);

SetIndexStyle(1, DRAW_ARROW, EMPTY);


في هذه الكتابة عرفنا الانواع التي سنرسمها علي الشارت

انا انصح بالكتابة الي هنا فقط

MOVING_AVERAGE
15-02-2013, 01:32 PM
int width=EMPTY

هذه الكتابة للتحكم في حجم الكائن







color clr=CLR_NONE

وهذه الكتابة للتحكم في لون الكائن

MOVING_AVERAGE
15-02-2013, 01:33 PM
بما اننا اخترنا الاسهم فسيكون لها اشكال كثيرة جدا

MOVING_AVERAGE
15-02-2013, 01:41 PM
الكائن الاول لونه احمر

والكائن الثاني لونه ازرق

خسب الكتابات السابقة

الان نحن نريد ربط السهم النازل بالكائن الاول

والسهم الصاعد بالكائن الثاني

كما قلنا الكائن الاول هو 0

والكائن الثاني هو 1

لكي نربط الاشكال بالكائنات نستعمل التالي


SetIndexArrow( int index, int code)
حيث


int index
رقم الكائن


int code
كود الكائن

ويمكننا في هذه الخانة وضع اعداد ما بين 33 الي 255

وكل عدد له شكل معين

انا استخدم

الاعداد 233 للسهم الصاعد

234 للسهم النازل

اذا عملية تحديد الشكل ستكون كالتالي


SetIndexArrow(0, 234);
SetIndexArrow(1, 233);
وكل الكتابة التي شرحناها هي


SetIndexStyle(0, DRAW_ARROW, EMPTY);
SetIndexArrow(0, 234);

SetIndexStyle(1, DRAW_ARROW, EMPTY);
SetIndexArrow(1, 233);
حتي الان قمنا بتحديد نوع الكائن وشكل الكائن حسب اللون

MOVING_AVERAGE
15-02-2013, 01:45 PM
اخر شئ في داخل الدالة init

هو ربط الكائن بالمصفوفة التي عرفناها من قبل

ويتم الربط بواسطة الجملة


SetIndexBuffer( int index, double array[])


حيث


int index


رقم الكائن


double array[])


اسم المصفوفة

هنا يجب وضع اسم المصفوفة بدون


[]


نرجع الي مثالنا

MOVING_AVERAGE
15-02-2013, 01:54 PM
في مثالنا وضعنا

الكائن رقم 0 سهم احمر ونازل للاسفل فمن المنطقي ان نسميه


CrossDown1


الكائن رقم 1 بسهم ازرق وسهم صاعد الي الاعلي فمن المنطقي ان نسميه


CrossUp1


ترجمة ما سبق الي البرنامج


SetIndexBuffer(1, CrossUp1);

SetIndexBuffer(0, CrossDown1);


كل الكتابة السابقة هي


SetIndexStyle(0, DRAW_ARROW, EMPTY);
SetIndexArrow(0, 234);
SetIndexBuffer(0, CrossDown1);


SetIndexStyle(1, DRAW_ARROW, EMPTY);
SetIndexArrow(1, 233);
SetIndexBuffer(1, CrossUp1);

MOVING_AVERAGE
15-02-2013, 01:57 PM
يعني كتابتنا العامة للكود وادخال كائنين علي الشارت وتحديد نوعهم وشكلهم ولونهم

ستكون


#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue



double CrossUp1[];
double CrossDown1[];



//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0, DRAW_ARROW, EMPTY);
SetIndexArrow(0, 234);
SetIndexBuffer(0, CrossDown1);

SetIndexStyle(1, DRAW_ARROW, EMPTY);
SetIndexArrow(1, 233);
SetIndexBuffer(1, CrossUp1);


//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}

MOVING_AVERAGE
15-02-2013, 02:01 PM
لكي نعمل مؤشر احترافي لابد ان تضهر لنا خطوط الموفينجات علي الشارت

ولكي نضهر خطوط الموفينجات علي الشارت سنعيد نفس عملية الاسهم لاكننا بتغير نوع الكائن الي خط بدل السهم

وازالة شكل الخط لان الخط ليس له شكل

MOVING_AVERAGE
15-02-2013, 02:01 PM
في انتضار اي اسئلة لكي نكمل المؤشر

MOVING_AVERAGE
15-02-2013, 02:58 PM
لاضهار خطوط الموفينج سنستعمل كائنين اخرين علي الشارت

فتصبح الكتابة الاولي كالتالي


#property indicator_buffers 4


يعني سنستخدم 4 كائنات

2 للاسهم و 2 لخطوط الموفينج