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

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


MOVING_AVERAGE
04-02-2013, 01:28 AM
يسعدنا ان نقدم لكم دورتنا 2

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

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

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

ان شاء الله سنبدء بابسط الامور وصول الي عمل اكسبريت

الهذلي
04-02-2013, 06:49 AM
متابع معكم وعلى احر من الجمر

موفقين ان شاءالله

سمير محمد ارمان
04-02-2013, 09:25 AM
متابع معكم ان شاء الله
بتوفيق

MOVING_AVERAGE
04-02-2013, 06:03 PM
بارك الله فيكم اخواني

MOVING_AVERAGE
04-02-2013, 06:08 PM
الاكسبريت

هو برنامج يعمل تلقائيا اوامر للبيع او الشراء او اوامر معلقة للبيع او الشراء

يمكنه تحديد الربح و تحديد الخسارة

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

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

باختصار الاكسبريت يمكنه ان يعمل بدل منك وانت لست موجود علي الجهاز

MOVING_AVERAGE
04-02-2013, 06:14 PM
لماذا اذن بعض الاكسبريتات لا تنجح

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

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

فتح عندي اوامر ولم يفتح عند صديقي نفس الاوامر

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

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

نفس المنصة ونفس الاكسبريت

الجهاز الاول تضع باك تست علي المنصة ثم تشغل الاكسبريت

الجهاز الثاني لا تشغل شئ وضع الاكسبريت

ستلاخظ انه ينفذ صفقات في جهاز ولا ينفذ في جهاز اخر

MOVING_AVERAGE
05-02-2013, 11:52 PM
ماهي الية عمل الاكسبريت بصفة عامة

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

ان لم يحدد المبرمج بالتدقيق شروط الدخول او الخروج

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

MOVING_AVERAGE
05-02-2013, 11:55 PM
ماهي اوامر المتاجرة التي يمكن ان ينفذها الاكسبريت

يمكن للاكسبريت ان ينفذ اوامر الشراء او البيع المباشر

ومن هذه اللحضة لن نستخدم كلمة شراء او بيع بل سنستخدم كلمة شراء buy و بيع sell

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

ونطلق علي sell و buy اوامر مباشرة

MOVING_AVERAGE
05-02-2013, 11:58 PM
ممكن ان ينفذ الاكسبريت اوامر غير مباشرة

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

هذه الاوامر يطلق عليها اوامر معلقة

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

MOVING_AVERAGE
06-02-2013, 12:01 AM
البيع المعلق

يعني اننا نضع امر بيع بعيد عن السعر الحالي

يمكن امر البيع المعلق اعلي من السعر الحالي

ويمكن ان يكون البيع المعلق اسفل من السعر الحالي

ونفس الامر بالنسبة للشراء المعلق

حاضر لاي استفسار

The_Mask
08-02-2013, 03:36 AM
اولا


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

ثانيا

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

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

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

MOVING_AVERAGE
08-02-2013, 11:24 AM
اولا


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

ثانيا

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

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

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





انا لا اتحدث عن السكريبت

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

انا اتحدث في هته الدورة عن expert advisor

بالنسبة لسؤال البروكر سنتطرق اليه في اوانه

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

م.أحمد السليمان
08-02-2013, 05:27 PM
انا لا اتحدث عن السكريبت

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

انا اتحدث في هته الدورة عن expert advisor

بالنسبة لسؤال البروكر سنتطرق اليه في اوانه

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

بارك الله فيك أخي موفنغ افريج

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

تساهيل
08-02-2013, 05:31 PM
يسعدنا ان نقدم لكم دورتنا 2



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

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

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

ان شاء الله سنبدء بابسط الامور وصول الي عمل اكسبريت




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

واسف على الاطاله ... الله يوفق الجميع

ayoob
08-02-2013, 07:26 PM
متابعين ان شاء لله

MOVING_AVERAGE
13-02-2013, 04:15 PM
اذا هناك بالمختصر 6 انواع من البيع المختلف

1 بيع مباشر

1 شراء مباشر

2 بيع معلق

2 شراء معلق

MOVING_AVERAGE
13-02-2013, 04:28 PM
ماهي الامور التي لابد من معرفتها لكي ننفذ عمليات البيع والشراء بمختلف انواعها

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

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

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

هو ببساطة يشتري العملة بسعر ويبيعها بسعر اعلي

وهذا ما يسمي بسعر العرض او سعر البيع Ask

وسعر الطلب او سعر الشراء Bid

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

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

ولما البروكر يبيع يعني المتاجر يشتري بسعر Ask

ومختصر ما سبق بالنسبة للمتاجر

سعر الشراء المباشر Buy هو Ask

سعر البيع المباشر Sell هو Bid

في انتضار اي استفسار

MOVING_AVERAGE
13-02-2013, 04:37 PM
بارك الله فيك أخي موفنغ افريج

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

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

ومامعني الاوامر المختلفة

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

MOVING_AVERAGE
13-02-2013, 04:38 PM
بارك الله فيك على هذا الموضوع الاكثر من رائع
لطالما قمنا بالطلب من الاخوة المبرمجين اكسبريتات ومؤشرات
ونتعبهم معنا في تصميمها ولكن في الاخير تكون الفكرة والخطة لدينا ناقصة
مما يدفعها الى التخلي عنه ..
ويضيع تعب الاخوة المبرمجين بسبب تقصيرنا في دراسة الجدوى للاكسبريتات والمؤشرات
فطرحك لهذا الموضوع ان شاء الله يخفف عن الاخوة المبرمجين
وكذلك لتتضح لنا الصورة ولنعتمد على نفسنا ونساعد غيرنا في الربح من هذا السوق العنيد
ان شاء الله اكون من المتابعين لك خلال هذه الفترة -

واسف على الاطاله ... الله يوفق الجميع

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

MOVING_AVERAGE
13-02-2013, 04:39 PM
متابعين ان شاء لله

بارك الله فيك

MOVING_AVERAGE
13-02-2013, 04:51 PM
ماهو موقع Ask و Bid من السعر الحالي

وقبل ذلك ماهو السعر الحالي

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

يعني


Close[0];


هو السعر الحالي

سعر Ask يكون فوق السعر الحالي بعدد معين من النقاط

سعر Bid يكون نفسه السعر الحالي

MOVING_AVERAGE
13-02-2013, 05:01 PM
بعد معرفة موقع Ask و Bid

ننتقل الي التيكبروفيت

والاستوب لوز

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

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

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

MOVING_AVERAGE
13-02-2013, 05:03 PM
نقطة التسامح

هي النقطة التي يمكن ان يتسامج الاكسبريت في فتح صفقة في مجالها

مثلا لو اننا وضعنا نقطة التسامح = 3

يعني هنا الاكسبريت ممكن يتسامح علي اكثر تقدير في 3 نقاط لما يفتح الصفقة

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

MOVING_AVERAGE
13-02-2013, 05:07 PM
الماجيك نمبر

هو الرقم السحري المميز للاكسبريت

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

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

MOVING_AVERAGE
13-02-2013, 05:09 PM
ان شاء الله تم تعريف كل الامور التي نحتاجها لفتح صفقة ما

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

MOVING_AVERAGE
22-02-2013, 05:12 PM
نكمل الدورة بعد برمجة اول مؤشر لتقاطع الموفنجين

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

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

MOVING_AVERAGE
22-02-2013, 05:15 PM
ماهي الدالة المسؤولة عن تنفيذ اوامر البيع والشراء المختلفة ؟؟؟

انها الدالة


OrderSend


حيث الكتابة العامة لها كالتالي


int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)


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

MOVING_AVERAGE
22-02-2013, 05:21 PM
string symbol

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

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

نستخدم


0
او

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

مثلا EURUSD ويجب ان تكون الكتابة بين قوسين مزدوجين لا الخانة الاولي عبارة عن متغير من نوع string


"EURUSD"


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


Symbol()


حيث ياخذ اسم الشارت تلقائيا

magdyzaki
22-02-2013, 05:28 PM
اخى الكريم بعد اذنك انا عملت اكسبرت لاستراتيجية قوية انا مجربها وارباحها كبيرة بس ينقصنى شئ واحد فقط عشان يكتمل العمل
عايز اغلق الشراء عند تحقق شرطين وهما:
الاول ظهور السهم الاحمر فوق الشمعة الحالية
الثانى ظهور نقاط الباربوليك الابيض فوق الشمعة الحالية
لكن مش عارف اعملهم على الموقع Expert Advisor Builder for MetaTrader 4 (http://www.borsaat.com/vb/redirector.php?url=http%3A%2F%2Fsufx.core.t3-ism.net%2FExpertAdvisorBuilder%2F)
فارجو لو تكرمت تساعدنى وتقولى اختار ايه من الاختيارات
ولك جزيل الشكر

http://www.borsaat.com/vb/uploaded/58410_1361542138.png

MOVING_AVERAGE
22-02-2013, 05:29 PM
الخانة الثانية


int cmd


نكتب فيها الامر الذي نريد تنفيذه

اذا كان buy مباشر نكتب


OP_BUY


اذا كان امر sell مباشر نكتب


OP_SELL


ونفس الامر بالنسبة للبيع والشراء المعلق


OP_SELLSTOP



OP_BUYSTOP



OP_BUYLIMIT



OP_SELLLIMIT


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

MOVING_AVERAGE
22-02-2013, 05:32 PM
اخى الكريم بعد اذنك انا عملت اكسبرت لاستراتيجية قوية انا مجربها وارباحها كبيرة بس ينقصنى شئ واحد فقط عشان يكتمل العمل
عايز اغلق الشراء عند تحقق شرطين وهما:
الاول ظهور السهم الاحمر فوق الشمعة الحالية
الثانى ظهور نقاط الباربوليك الابيض فوق الشمعة الحالية
لكن مش عارف اعملهم على الموقع Expert Advisor Builder for MetaTrader 4 (http://www.borsaat.com/vb/redirector.php?url=http%3A%2F%2Fsufx.core.t3-ism.net%2FExpertAdvisorBuilder%2F)
فارجو لو تكرمت تساعدنى وتقولى اختار ايه من الاختيارات
ولك جزيل الشكر

http://www.borsaat.com/vb/uploaded/58410_1361542138.png

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

لو تريد الاوامر يدويا حضر

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

MOVING_AVERAGE
22-02-2013, 05:38 PM
الخانة الثالثة


double volume


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

ولكي نجعل اللوت متغير خارحي

نكتب


extern double Lots = 1;


حيث يمكننا التحكم بحكم العقد من الاعدادات الخارجية

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


Lots


اذا حتي الان لدينا امران واحد buy مباشر والاخر sell مباشر

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


OrderSend(Symbol(),OP_SELL,Lots



OrderSend(Symbol(),OP_BUY,Lots

MOVING_AVERAGE
22-02-2013, 05:43 PM
الخانة 4


double price
نكتب فيها سعر التنفيذ الذي ينفذ من عنده الاكسبريت الامر

وكما قلنا سعر تنفيذ buy هو


Ask
وسعر تنفيذ sell هو


Bid
وشرحتهم باستفاضة فيما سبق

اذا في هذه الخانة سنكتب سعر التنفيذ لكل عملية


OrderSend(Symbol(),OP_BUY,Lots,Ask,

OrderSend(Symbol(),OP_SELL,Lots,Bid

MoHaMeD EgY
23-02-2013, 12:23 AM
متابع معك
:1 (105):

e_aborawash
24-02-2013, 09:14 PM
شكرا على الموضوع الجميل
وارجوا المتابعة

MOVING_AVERAGE
24-02-2013, 11:08 PM
ان شاء الله سيتم تكملة دالة الاشراء والبيع في اقرب وقت

magdyzaki
25-02-2013, 03:19 AM
اخي انا لا استعمل هذا البرنامج الاوامر اكتبها يدويا

لو تريد الاوامر يدويا حضر

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

لو ممكن اخى الكريم تقولى كيف اجعل الاكسبرت يعمل على منصات 4 ارقام و 5 ارقام

MOVING_AVERAGE
25-02-2013, 12:24 PM
لو ممكن اخى الكريم تقولى كيف اجعل الاكسبرت يعمل على منصات 4 ارقام و 5 ارقام

هذا ما كنت اود شرحه لكي اكمل كتابة الدالة

ماهو الفرق بين منصة 5 ارقام و 4 ارقام

ولماذا الاكسبريت يشتغل في منصة 5 ارقام ولا يشتغل في منصة 4 ارقام في بعض الحالات عندما لا نضيف بعض الاختيارات

MOVING_AVERAGE
25-02-2013, 12:33 PM
الفرق الجوهري يكمن في قيمة النقطة المحسوبة

وقيمة النقطة علي حسب المنصة

اولا قيمة النقطة علي المنصة هي اصغر قيمة بعد الفاصلة

يعني في منصة 5 ارقام لو يكون عندنا هذا العدد
1.32354

قيمة النقطة حسب المنصة هي اصغر قيمة بعد الفاصلة

يعني 0.00001

اما قيمة النقطة التي نتاجر عليها هي 0.0001

وهنا يوجد الاختلاف بين منصة 4 و 5 ارقام

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

في دالة init

نضيف الكتابة التالية وهذه الكتابة لتحديد قيمة النقطة في منضة 4 و 5 ارقام

وعلي كل الازواج

لان ازواج الين فيها اما رقمين او 3 فقط حسب المنصة


int init()
{

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);
}


ونصبح نتعامل في كود الاكسبريت بدلالة point ب p الصغير وليس P كبيرة

magdyzaki
25-02-2013, 01:18 PM
الفرق الجوهري يكمن في قيمة النقطة المحسوبة

وقيمة النقطة علي حسب المنصة

اولا قيمة النقطة علي المنصة هي اصغر قيمة بعد الفاصلة

يعني في منصة 5 ارقام لو يكون عندنا هذا العدد
1.32354

قيمة النقطة حسب المنصة هي اصغر قيمة بعد الفاصلة

يعني 0.00001

اما قيمة النقطة التي نتاجر عليها هي 0.0001

وهنا يوجد الاختلاف بين منصة 4 و 5 ارقام

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

في دالة init

نضيف الكتابة التالية وهذه الكتابة لتحديد قيمة النقطة في منضة 4 و 5 ارقام

وعلي كل الازواج

لان ازواج الين فيها اما رقمين او 3 فقط حسب المنصة


int init()
{

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);
}


ونصبح نتعامل في كود الاكسبريت بدلالة point ب p الصغير وليس P كبيرة

استاذى الكريم حاولت اضيف الدالة ولكن فشلت لذلك انا ارفقت الاسكربت واتمنى من حضرتك تساعدنى وتضيف اليه المطلوب
اولا انه يعمل على المنصتين 4 و 5 ارقام
ثانيا عايز الخروج من البيع يكون بظهور سهم الفرى ريكومندشن ونقاط الباربوليك اسفل اخر شمعة مع اختراق خط 7 لخط 14 من فوق لتحت
والعكس بالنسبة للشراء
ويكون التبريد كل 50 نقطة
انا عارف انى هتعبك ولكن هذه الاستراتيجية تعتبر انجح استراتيجية انا جربتها

MOVING_AVERAGE
25-02-2013, 01:22 PM
استاذى الكريم حاولت اضيف الدالة ولكن فشلت لذلك انا ارفقت الاسكربت واتمنى من حضرتك تساعدنى وتضيف اليه المطلوب
اولا انه يعمل على المنصتين 4 و 5 ارقام
ثانيا عايز الخروج من البيع يكون بظهور سهم الفرى ريكومندشن ونقاط الباربوليك اسفل اخر شمعة مع اختراق خط 7 لخط 14 من فوق لتحت
والعكس بالنسبة للشراء
ويكون التبريد كل 50 نقطة
انا عارف انى هتعبك ولكن هذه الاستراتيجية تعتبر انجح استراتيجية انا جربتها

ياريت اخي ترفق المؤشر الذي يضهر الاسهم

magdyzaki
25-02-2013, 01:52 PM
ياريت اخي ترفق المؤشر الذي يضهر الاسهم

اتفضل

magdyzaki
25-02-2013, 04:03 PM
بارك الله فيك استاذى الكريم

المؤشرات التى سنستخدمها

7 موفنج افريج اكسبونينشال
14 موفنج افريج سيمبل
21 موفنج اكسبونينشال
55 موفنج سيمبل
100 موفنج سيمبل
100 موفنج اكسبونينشال
200 موفنج سيمبل
200 موفنج كسبونينشال
365 موفينج سمبل
1000 موفنج اكسبونينشال

فرى ريكومندشن
نقاط الباربوليك

الاستراتيجية عبارة عن
فتح الشراء عندما يتوفر 3 شروط
1- اختراق خط ال 21 و 7 لجميع الخطوط من تحت لفوق
2- ظهور السهم فرى ريكومندشن من تحت الشمعة الحالية
3- ظهور نقاط الباربوليك من تحت الشمعه الحالية
الخروج من الشراء عند حدوث 4 شروط
1- اختراق خط 7 لخط 14 من فوق لتحت
2- اختراق خط 7 لخط 14 و 21 من فوق لتحت
3- ظهور سهم الفرى ريكومندشن من فوق الشمعة
4- ظهور نقاط الباربوليك من فوق الشمعة

وطبعا العكس فى البيع


هذه فرصة شراء

http://www.borsaat.com/vb/uploaded/58410_1361796209.png

والعكس بيع

http://www.borsaat.com/vb/uploaded/58410_1361796766.png

MOVING_AVERAGE
25-02-2013, 11:53 PM
اخي لم اجد هذا المؤشر

فرى ريكومندشن

forex 2012
25-02-2013, 11:58 PM
اخي لم اجد هذا المؤشر

فرى ريكومندشن




اتفضل يا اخى ... بالمرفقات

رغم ان الموضوع تحول الى قسم طلبات اكسبرتات بعيد عن الدورة

MOVING_AVERAGE
26-02-2013, 12:00 AM
اتفضل يا اخى ... بالمرفقات

رغم ان الموضوع تحول الى قسم طلبات اكسبرتات بعيد عن الدورة



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

magdyzaki
26-02-2013, 01:27 AM
اخي لم اجد هذا المؤشر

فرى ريكومندشن




اتفضل استاذى الكريم فى المرفقات

abou fares
27-02-2013, 04:19 PM
استاذ موفينج انا بانتظار تكملت الموضوع لان طلبي هو اكسبيرت لهذا امؤشر

MOVING_AVERAGE
27-02-2013, 05:16 PM
استاذ موفينج انا بانتظار تكملت الموضوع لان طلبي هو اكسبيرت لهذا امؤشر

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

كل الوقت اخذه عمل الاكسبريتات

MOVING_AVERAGE
28-02-2013, 09:54 PM
الخانة 4


double price
نكتب فيها سعر التنفيذ الذي ينفذ من عنده الاكسبريت الامر

وكما قلنا سعر تنفيذ buy هو


Ask
وسعر تنفيذ sell هو


Bid
وشرحتهم باستفاضة فيما سبق

اذا في هذه الخانة سنكتب سعر التنفيذ لكل عملية


OrderSend(Symbol(),OP_BUY,Lots,Ask,

OrderSend(Symbol(),OP_SELL,Lots,Bid


نكمل من هنا ان شاء الله

MOVING_AVERAGE
28-02-2013, 10:00 PM
int slippage


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

يعني مثلا

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

نحن نستخدم دائما التسامح 3 نقاط علي اكثر تقدير

MOVING_AVERAGE
28-02-2013, 10:07 PM
الخانتين التاليتين


double stoploss


نضع فيها الاستوب لوز


double takeprofit


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

سؤال :

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

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

الجواب

لا

في هذه الخانة نضع السعر الذي نريد اغلاق الصفقة لما يصل الي السعر الحالي

سؤال اخر

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

الجواب

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


Ask


او


Bid


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

سنشرح مثلا علي عملية Buy

MOVING_AVERAGE
28-02-2013, 10:17 PM
في عملية


Buy
سعر تفعيل الصفقة هو


Ask
الهدف سيكون فوق سعر الدخول

والستوب لوز سيكون تحت سعر الدخول

مثلا نضع الهدف 10 نقاط

والستوي لوز 7 نقاط

اذا

سعر اغلاق الصفقة علي ربح سيكون

ask
+ 10 نقاط

سعر اغلاق الصفقة علي خسارة سيكون

ask
- 7 نقاط

وهنا الاشكال الذي يطرح بين مختلف المنصات

ولدينا نوعين من المنصات

منصة ذات 4 ارقام و 2 ارقام في عملات الين

في هذه المنصة قيمة النقطة علي المنصة = 0.0001 وهي نفسها قيمة النقطة التي نتاجر عليها

وفي عملات الين قيمتها 0.01

اذا في مثالنا السابق سيكون لدينا

سعر اغلاق الصفقة علي ربح سيكون

ask
+ 10*0.0001

سعر اغلاق الصفقة علي خسارة سيكون

ask
- 7*0.0001

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

سعر اغلاق الصفقة علي ربح سيكون

ask
+ 10*0.01

سعر اغلاق الصفقة علي خسارة سيكون

ask
- 7 *0.01

كيف نحل هذا المشكل اولا علي منصت 4 ارقام

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

لو كنا علي عملة فيها 4 ارقام بعد الفاصلة ستستعمل 0.0001

لو كنا علي عملة فيها 2 ارقام بعد الفاصلة ستستعمل 0.01

MOVING_AVERAGE
28-02-2013, 10:26 PM
هته الدالة تكتب قبل تنفيذ الدالة ستارت يعني في الدالة init

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


Digits


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

سنقارن علي حسب


Digits


ونضع متغير كلما وجد Digits يضع قيم تتناسب معه

نعرف متغير خارج الدالة start


double point;


ومتغير اخر سنستعمله في التسامح


int Q;


داخل الدالة init سنبدء المقارنة

وتكون بالشكل التالي


if(Digits==2)
{
point=0.01;
}


بالنسبة لعملات الين علي منصة 4 ارقام


if(Digits==4)
{
point=0.0001;
}


بالنسبة للعملات الرئسية علي اربع ارقام

MOVING_AVERAGE
28-02-2013, 10:32 PM
بعد ان حللنا مشكلة النقطة في منصت 4 ارقام ننتقل الي منصت 5 ارقام

في منصة خمس ارقام

سيكون لدينا 5 ارقام بعد الفاصلة في العملات الرئسية

اذا اصخر رقم الذي هو النقطة = 0.00001

وفي عملات الين نجد 3 ارقام بعد الفاصلة

والنقطة الافتراضية = 0.001

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

لاننا نحتاج قيمة النقطة دائما 0.0001 او 0.01

نعمل ايضا عملية مقارنة في الدالة init

وتكون كما يلي


if(Digits==3)
{
point=0.01;
}
if(Digits==5)
{
point=0.0001;
}


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


if(Digits==2)
{
point=0.01;
}
if(Digits==4)
{
point=0.0001;
}
if(Digits==3)
{
point=0.01;
}
if(Digits==5)
{
point=0.0001;
}

MOVING_AVERAGE
28-02-2013, 10:37 PM
اخر عملية مقارنة سنعملها لوجود فرق في كتابة التسامح علي منصة 4 ارقام و 5 ارقام

في منصة اربع ارقام نكتب التسامح مثلا 3 نقاط 3

في منصةخمس ارقام نكتب التسامح مثلا 3 نقاط 30


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

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


int Q;
ثم المقارنة كالتالي


if(Digits==5||Digits==3)Q=10;
else Q=1;
اذا وباختصار الدالة التي نستعملها لمقارنة النقطة هي


if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;
}
if(Digits==4)
{
point=0.0001;
}
if(Digits==3)
{
point=0.01;
}
if(Digits==5)
{
point=0.0001;
}

MOVING_AVERAGE
28-02-2013, 10:42 PM
الان ننتقل الي كتابة التيك بروفيت والاستوب لوز لعملية Buy مثلا


نضع متغير خارجي من نوع int

لتحديد نقاط الهدف مثلا

ومتغير اخر خارج الدالة ستار من نوع int لتحديد الخسارة

وضعنا المتغير من نوع int



extern int StopLoss=0;

extern int TakeProfit=0;

MOVING_AVERAGE
28-02-2013, 10:49 PM
تحديد الهدف

الهدف كما قلنا هو قيمة Ask زائد قيمة TakeProfit مضروبة في عدد النقاط

اذا

سنستعمل مثلا


double TP;


ونضع فيه القيمة كالتالي


TP=Ask+TakeProfit*point;


بالنسبة للستوب


double SL;



SL=Ask-StopLoss*point;


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

وهذا الخلل لو تركنا

الستوب لوز والتيك بروفيت = صفر من الاعددات الخارجية

لذا نعمل ايضا مقارمة لكي نتجنب هذا المشكل

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


if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TPb=Ask+TakeProfit*po int;}


وبهذا نكون حددنا الهدف والخسارة

Mohamed_Amr
28-02-2013, 10:56 PM
الله يفتح عليك اخى موفينج
وربى يزيدك علم ولى استفسار هل
ممكن عمل اكسبريت يعتمد على الرينج اليومى
مع امكانيه التحكم من اعداد الاكسبريت بتحديد الرينج يدوى
ان كان ممكن سوف اضع طلب مع الشرح
وربى يبارك فيك

MOVING_AVERAGE
28-02-2013, 10:56 PM
بالنسبة لل sell اترك لكم تنفيذ الفكرة


نرجع الي دالة الاوامر


OrderSend( Symbol(), OP_BUY, LOTS, Ask,3*Q,SL,TP,
OrderSend( Symbol(), OP_SELL, LOTS,Bid,3*Q,SL,TP,


مع ملاحضة ان الستوب لوز والتيك مختلفة في كل امر

الخانة الموالية


string comment=NULL


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

انا اتركها فارغة


""

MOVING_AVERAGE
28-02-2013, 10:58 PM
الله يفتح عليك اخى موفينج
وربى يزيدك علم ولى استفسار هل
ممكن عمل اكسبريت يعتمد على الرينج اليومى
مع امكانيه التحكم من اعداد الاكسبريت بتحديد الرينج يدوى
ان كان ممكن سوف اضع طلب مع الشرح
وربى يبارك فيك

اذا كان ممكن حساب الرنج وهذا امر بسيط

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

Mohamed_Amr
28-02-2013, 11:03 PM
اذا كان ممكن حساب الرنج وهذا امر بسيط

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

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

MOVING_AVERAGE
28-02-2013, 11:09 PM
الخانة الموالية


int magic=0


في هذه الخانة نضع رقم يمز الاكسبريت عن بقية الاكسبريتات

خارج الدالة start

نضع متغير خارجي فيه رقم لكي نستعمله في هذه الخانة


extern int MagicNumber=1234;

MOVING_AVERAGE
28-02-2013, 11:11 PM
datetime expiration=0


هذه الخانة تتعلق بالاوامر المعلقة

سنضعها = 0


color arrow_color=CLR_NONE


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

MOVING_AVERAGE
28-02-2013, 11:14 PM
وبكتابة كل ما تعلمناه من قبل

سنجد


OrderSend( Symbol(), OP_BUY, LOTS, Ask,3*Q,SL,TP,"",MagicNumber,0,Red);
OrderSend( Symbol(), OP_SELL, LOTS,Bid,3*Q,SL,TP,"",MagicNumber,0,Blue);


وهذا الكود لامرين مباشرين بالشراء والبيع

MOVING_AVERAGE
28-02-2013, 11:17 PM
ننتقل الي المؤشر الذي عملناه ونحاول تطبيق امر الشراء والبيع علي المؤشر

اولا نعيد شرح مكان الدخول

MOVING_AVERAGE
28-02-2013, 11:42 PM
سنعتمد علي اشارات المؤشر في الدخول

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

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

MOVING_AVERAGE
28-02-2013, 11:46 PM
كل ما شرحناه عن الاكسبريت


extern int StopLoss=0;

extern int TakeProfit=0;

extern int MagicNumber=1263;

extern int MaxTrades = 1;

extern double Lots = 0.1;

double point;

int digits,Q;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;
}
if(Digits==4)
{
point=0.0001;
}
if(Digits==3)
{
point=0.01;
}
if(Digits==5)
{
point=0.0001;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

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

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



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

MOVING_AVERAGE
28-02-2013, 11:55 PM
اولا نحتاج الي اشرات المؤشر الخارجي لكي يتم المتاجرة علي اساسها

لكي نستدعي اشرات المرشر الخارجي

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


iCustom


لمندات المؤشر الخارجي

وتكتب الدالة بالشكل التالي



double iCustom( string symbol, int timeframe, string name, ...


الخانتين الاوليتين تم شرحهم اكثر من مرة

الخانة 3


string name


نضع فيها اسم المؤشر الذي نريد استدعائه

Mohamed_Amr
28-02-2013, 11:57 PM
الله عليك متابع معاك لانى عندى مؤشر شبيه ونفسى فى اكسبريت ليه
من كل قلبى ربنا يفتح عليك ويزيدك

MOVING_AVERAGE
01-03-2013, 12:19 AM
اولا يجب انن نحدد الاشرات التي نريدها

نحن نريد سهم اما صاعد او نازل

اذن سنستدعي المؤشر للسهم الصاعد

ونستدعي المؤشر للسهم النازل

MOVING_AVERAGE
01-03-2013, 12:20 AM
وبطبيعة الحال الاستدعاء يجب ان نضعه في متغير اخر

MOVING_AVERAGE
01-03-2013, 12:31 AM
اسم المؤشر الذي برمجناه في الدورة هو


1 indicator


فيكون الاستدعاء كالتالي


double indigreen=iCustom(0,0,"1 indicator ",1,1);
double indired=iCustom(0,0,"1 indicator ",0,1);


1 للسهم الازرق
2 للسهم الاحمر

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

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

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

لمعرفة قيم الاسهم سنستخدم دالة الاضهار

Comment

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

بعد عمل الدالة Comment

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

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

لذا سناخذ مثلا رقم متوسط نقارن بالنسبة له

هذا الرقم ليكن 4000

اذا قيمت السهم اصغر من 4000 معناها السهم ضهر

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

MOVING_AVERAGE
01-03-2013, 12:32 AM
الكود الكامل للاستدعاء سيكون



extern int StopLoss=0;

extern int TakeProfit=0;

extern int MagicNumber=1263;

extern int MaxTrades = 1;

extern double Lots = 0.1;

double point;

int digits,Q;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;
}
if(Digits==4)
{
point=0.0001;
}
if(Digits==3)
{
point=0.01;
}
if(Digits==5)
{
point=0.0001;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
double indigreen=iCustom(0,0,"1 indicator ",1,1);
double indired=iCustom(0,0,"1 indicator ",0,1);


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

MOVING_AVERAGE
01-03-2013, 12:37 AM
اشرات الدخول للاوامر ستكون


if(indigreen<4000)
{
//امر شراء
}

if(indired<4000)
{
//امر بيع
}


لاكن لو نحلل قليلا هنا

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

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

اذا العقود التي سيفتحها ستكون كثيرة جدا

لتجنب هذه المشكلة نحدد له اقصي حد للمتاجرة

MOVING_AVERAGE
01-03-2013, 12:40 AM
نضع خارج الدالة start

متغير خارجي فيه اقصي حد للمتاجرة

مثلا انا اريد صفقة واحدة فقط

هنا اقصي حد للمتاجرة هو واحد

اذا

سنعمل التالي


extern int MaxTrades = 1;
وانا كتبتها في القالب الجاهز لكي لا نعيد كتابتها

MOVING_AVERAGE
01-03-2013, 12:47 AM
ساضيف شرط ان عدد الصفقات المفتوحة يكون اقل من اقصي حد للمتاجرة

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

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

وكيف نكتبها

وكيف نستدعيها

وهي تحتاج تركيز عالي لفهمها

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


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

اذا كانت وتعطينا عدد الصفقات المفتوحة

سواء اوامر مباشرة او اوامر معلقة

تكتب دالة حساب الصفقات خارج الدالة start

وفي اغلب الاحيان نكتبها اسفل الدالة start

وتكون كتابتها كالاتي


int orderstotal(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
return(cnt);
}
وعند اضافتها الي اكسبريتنا تصبح


extern int StopLoss=0;

extern int TakeProfit=0;

extern int MagicNumber=1263;

extern int MaxTrades = 1;

extern double Lots = 0.1;

double point;

int digits,Q;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;
}
if(Digits==4)
{
point=0.0001;
}
if(Digits==3)
{
point=0.01;
}
if(Digits==5)
{
point=0.0001;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
double indigreen=iCustom(0,0,"1 indicator ",1,1);
double indired=iCustom(0,0,"1 indicator ",0,1);

if(indigreen<4000)
{
//امر شراء
}

if(indired<4000)
{
//امر بيع
}


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

int orderstotal(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
return(cnt);
}

MOVING_AVERAGE
01-03-2013, 12:51 AM
وعند اضافة شرط فتح اقصي صفقة سيكون



extern int StopLoss=0;

extern int TakeProfit=0;

extern int MagicNumber=1263;

extern int MaxTrades = 1;

extern double Lots = 0.1;

double point;

int digits,Q;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;
}
if(Digits==4)
{
point=0.0001;
}
if(Digits==3)
{
point=0.01;
}
if(Digits==5)
{
point=0.0001;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
double indigreen=iCustom(0,0,"1 indicator ",1,1);
double indired=iCustom(0,0,"1 indicator ",0,1);

if(orderstotal()<MaxTrades&&indigreen<4000)
{
//امر شراء
}

if(orderstotal()<MaxTrades&&indired<4000)
{
//امر بيع
}


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

int orderstotal(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
return(cnt);
}


ببقي فقط اضافة اوامر البيع والشراء

انتضر مشاركاتكم ولا يهم ان كانت صحيحة او خاطئة المهم المشاركة للتعلم

shelilco30
03-03-2013, 06:45 PM
اخي الكريم موفينج كيف احدد الاعدادات يعني مثلاً هذا مؤشر عبارة عن قناة سعرية وعايز احدد للاكسبيرت الحد العلوي للقناة او الحد السفلي

http://www.fx-arabia.com/vb/uploaded/9204_11361893661.png (http://www.fx-arabia.com/vb)

وهذه هي اعداداته

http://www.fx-arabia.com/vb/uploaded/9204_11362323418.jpg (http://www.fx-arabia.com/vb)


فكيف افرق بين الحد العلوي للقناة والحد السفلي ..... ارجوا المساعدة

وهذا رابط تحميل المؤشر

http://www.fx-arabia.com/vb/uploaded/9204_11361901099.ex4

ولك جزيل الشكر

كيف تملاء هذه الخانات
http://www.fx-arabia.com/vb/uploaded/9204_11362323854.jpg (http://www.fx-arabia.com/vb)


ارجوا المساعدة

mimo2006
03-03-2013, 07:01 PM
مشكوووور اخي علي الموضوع :1 (105): (http://www.7rcat.com/games/browse.php?c=5)

MOVING_AVERAGE
03-03-2013, 09:44 PM
شباب هل الشرح مفهوم او غير مفهوم

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

farouk_cia
15-03-2013, 06:40 PM
شكرا ياباشا علي المجهود الرائع

MOVING_AVERAGE
15-03-2013, 07:27 PM
عمل اكسبريت متطور نوع ما لمؤشر RSI

سنضع فيه

الستوب لوز

التيك بروفيت

حجم العقد

اضافتا الي دالة ملاحقة الربح

مع الاخذ في الحسبان الدخول حسب اتجاه مؤشر ال zigzag

بحيث لو تشكلة قمة جديدة سندخل sell فقط

وان تشكل قاع جديد سندخل buy فقط

Mohamed_Amr
15-03-2013, 07:40 PM
متابعين معاك اخى مصطفى
عندى فكرة لعمل اكسبريت يعتمد على مؤشر rsi بشكل مختلف
وبالتوفيق حبيبى

MOVING_AVERAGE
15-03-2013, 10:09 PM
متابعين معاك اخى مصطفى
عندى فكرة لعمل اكسبريت يعتمد على مؤشر rsi بشكل مختلف
وبالتوفيق حبيبى

يمكن طرح افكارك ونضيفها للاكسبريت

MOVING_AVERAGE
15-03-2013, 10:11 PM
نبدء علي بركة الله بالقالب الجاهز التالي


extern int StopLoss=0;

extern int TakeProfit=0;

extern int MagicNumber=2233;

extern int MaxTrades = 1;

extern double Lots = 0.1;

double point;

int digits,Q;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;
}
if(Digits==4)
{
point=0.0001;
}
if(Digits==3)
{
point=0.01;
}
if(Digits==5)
{
point=0.0001;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

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



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




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

MOVING_AVERAGE
15-03-2013, 10:22 PM
نضيف RSI للشمعة الحالية


double rsi=iRSI(0,0,periodRSI,appliedRSI,shift);


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

خارج الدالة start


extern int periodRSI=14;

للتحكم في دور

extern int appliedRSI=0;

للتحكم في التطبيق علي الاغلاقات او الافتتاحات ...اخ

extern int shift=0;

للتحكم في الشمعة نضع 0 للحالية و 1 للسابقة وهكذا

MOVING_AVERAGE
15-03-2013, 10:31 PM
اذا سيصبح الكود بعد اضافة rsi والمتغيرات الخارجية


extern int periodRSI=14;
extern int appliedRSI=0;
extern int shift=0;
extern int StopLoss=0;
extern int TakeProfit=0;
extern int MagicNumber=2233;
extern int MaxTrades = 1;
extern double Lots = 0.1;
double point;

int digits,Q;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;
}
if(Digits==4)
{
point=0.0001;
}
if(Digits==3)
{
point=0.01;
}
if(Digits==5)
{
point=0.0001;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
double rsi=iRSI(0,0,periodRSI,appliedRSI,shift);


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

MOVING_AVERAGE
15-03-2013, 10:37 PM
يجب الان اضافة مؤشر zigzag لكي نكمل الاكسبريت

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

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

واذا اي احد له فكرت اكسبريت تعتمد علي rsi فليضعها وسيتم تنفيذها كمثال

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

دورة تعلم البرمجة باحتراف (http://www.fx-arabia.com/vb/showthread.php?t=27491)

meto123123
22-03-2013, 12:32 AM
ربنا معاك يا اخى
ويارب يرزقك الجنة ويزيدك من علمه

yasser81
27-03-2013, 09:17 AM
هل انتهى الموضوع......... الله يعينك يا اخونا فوفينج........ بالنسبة لل rsi كيف نضيف المستوياتniveaux ......

imaddine
28-03-2013, 12:47 AM
مشكور استاذ موفنج على هذه الدروس بارك الله فيك
ولو تكرمت وكان عندك وقت تكمل الدورة لاني فعلا استفذت منها

imaddine
28-03-2013, 01:21 AM
الواجب في المرفقات
اكسبريت للموفنج او المؤشر الذي قمت بعمله من موضوع
http://fx-arabia.net/vb/showthread.php?t=27491

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

تحياتي

MOVING_AVERAGE
28-03-2013, 01:43 PM
الواجب في المرفقات
اكسبريت للموفنج او المؤشر الذي قمت بعمله من موضوع
http://fx-arabia.net/vb/showthread.php?t=27491

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

تحياتي

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

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

imaddine
28-03-2013, 04:32 PM
ماشاء الله عليك

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

هذا هو الكود استاذ موفنج
extern double Lots = 0.1;
double point;
int digits,Q;
extern int StopLoss=0;
extern int TakeProfit=0;
extern int MaxTrades = 1;
extern int MagicNumber=1234;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;

}
int magic=0 ;
//----

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

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

double indigreen=iCustom(0,0,"imad ",1,1);
double indired=iCustom(0,0,"imad ",0,1);
if(orderstotal()<MaxTrades&&indigreen<4000)


if(orderstotal()<MaxTrades&&indired<4000)


double TP;
double SL;

TP=Ask+TakeProfit*point;
SL=Ask-StopLoss*point;

TP=Bid-TakeProfit*point;
SL=Bid+StopLoss*point;

if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*poi nt;}

if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;}

OrderSend(Symbol(),OP_BUY,Lots,Ask,3*Q,SL,TP,"",MagicNumber,0,Blue);
OrderSend(Symbol(),OP_SELL,Lots,Bid,3*Q,SL,TP,"",MagicNumber,0,Red);

//----

//----
return(0);
}
//+------------------------------------------------------------------+
int orderstotal(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
return(cnt);
}

MOVING_AVERAGE
28-03-2013, 04:48 PM
هذا هو الكود الذي استخدمته

سننتقل من كلمة الي كلمة لكي نكتشف الاخضاء الكثيرة التي وقعت فيها

MOVING_AVERAGE
28-03-2013, 04:50 PM
extern double Lots = 0.1;
double point;
int digits,Q;
extern int StopLoss=0;
extern int TakeProfit=0;
extern int MaxTrades = 1;
extern int MagicNumber=1234;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;

}
int magic=0 ;
//----

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

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







في هذا الجزء كل شئ جيد

وبالنسبة لهذه الكتابة


int magic=0 ;


ماهو هدفها ؟؟؟

سنتابع ونعرف

MOVING_AVERAGE
28-03-2013, 04:54 PM
بالنسبة للدوال خارج الدالة start


int orderstotal(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
return(cnt);
}
دالة تحسب عدد الصفقات التي فتحها الاكسبريت وهي صحيحة

MOVING_AVERAGE
28-03-2013, 04:58 PM
ندخل الي الدالة start

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

MOVING_AVERAGE
28-03-2013, 05:00 PM
هنا عرفنا متغيرين واسندنا الهم قيم المؤشر الخارجي الذي اسمه imad

ياريت ترفق المؤشر الخارجي لكي نفحصه ايضا


double indigreen=iCustom(0,0,"imad ",1,1);
double indired=iCustom(0,0,"imad ",0,1);

imaddine
28-03-2013, 05:02 PM
هنا عرفنا متغيرين واسندنا الهم قيم المؤشر الخارجي الذي اسمه imad

ياريت ترفق المؤشر الخارجي لكي نفحصه ايضا


double indigreen=iCustom(0,0,"imad ",1,1);
double indired=iCustom(0,0,"imad ",0,1);


هذا هو الكود استاذ موفنج
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Yellow
#property indicator_color4 Lime
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 2

double CrossUp1[];
double CrossDown1[];
double FastMA[];
double SlowMA[];
int width=EMPTY;
color clr=CLR_NONE;

extern int ExtPeriodFastMA = 8;
extern int ExtPeriodSlowMA = 14;

extern int ExtModeFastMA = 0;
extern int ExtModeSlowMA = 0;

extern int ExtPriceFastMA = 0;
extern int ExtPriceSlowMA = 0;
extern bool showMA=true;
//+------------------------------------------------------------------+
//| 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);

SetIndexStyle( 2, DRAW_LINE );
SetIndexBuffer( 2, FastMA );
SetIndexStyle( 3, DRAW_LINE );
SetIndexBuffer( 3, SlowMA );


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

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int x,i, counter;
double Range, AvgRange;
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++)
{
if(showMA==true)
{
FastMA[i] = iMA( NULL, 0, ExtPeriodFastMA, 0, ExtModeFastMA, ExtPriceFastMA, i );
SlowMA[i] = iMA( NULL, 0, ExtPeriodSlowMA, 0, ExtModeSlowMA, ExtPriceSlowMA, i );
}
Range=0;
AvgRange=0;
for (counter=i ;counter<=i+9;counter++)
{
AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
}
Range=AvgRange/10;
double fasterEMAprevious=iMA( NULL, 0, ExtPeriodFastMA, 0, ExtModeFastMA, ExtPriceFastMA, i+1 );
double fasterEMAprevious1=iMA( NULL, 0, ExtPeriodFastMA, 0, ExtModeFastMA, ExtPriceFastMA, i+2 );
double slowerEMAprevious =iMA( NULL, 0, ExtPeriodSlowMA, 0, ExtModeSlowMA, ExtPriceSlowMA, i+1 );
double slowerEMAprevious1 =iMA( NULL, 0, ExtPeriodSlowMA, 0, ExtModeSlowMA, ExtPriceSlowMA, i+2 );
if(fasterEMAprevious<slowerEMAprevious&&fasterEMAprevious1>slowerEMAprevious1)
{
CrossDown1[i+1]=High[i+1]+Range*0.5;
}
if(fasterEMAprevious>slowerEMAprevious&&fasterEMAprevious1<slowerEMAprevious1)
{
CrossUp1[i+1]=Low[i+1]-Range*0.5;

}


}

//----

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

MOVING_AVERAGE
28-03-2013, 05:18 PM
هذا هو الكود استاذ موفنج
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Yellow
#property indicator_color4 Lime
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 2

double CrossUp1[];
double CrossDown1[];
double FastMA[];
double SlowMA[];
int width=EMPTY;
color clr=CLR_NONE;

extern int ExtPeriodFastMA = 8;
extern int ExtPeriodSlowMA = 14;

extern int ExtModeFastMA = 0;
extern int ExtModeSlowMA = 0;

extern int ExtPriceFastMA = 0;
extern int ExtPriceSlowMA = 0;
extern bool showMA=true;
//+------------------------------------------------------------------+
//| 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);

SetIndexStyle( 2, DRAW_LINE );
SetIndexBuffer( 2, FastMA );
SetIndexStyle( 3, DRAW_LINE );
SetIndexBuffer( 3, SlowMA );


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

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int x,i, counter;
double Range, AvgRange;
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++)
{
if(showMA==true)
{
FastMA[i] = iMA( NULL, 0, ExtPeriodFastMA, 0, ExtModeFastMA, ExtPriceFastMA, i );
SlowMA[i] = iMA( NULL, 0, ExtPeriodSlowMA, 0, ExtModeSlowMA, ExtPriceSlowMA, i );
}
Range=0;
AvgRange=0;
for (counter=i ;counter<=i+9;counter++)
{
AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
}
Range=AvgRange/10;
double fasterEMAprevious=iMA( NULL, 0, ExtPeriodFastMA, 0, ExtModeFastMA, ExtPriceFastMA, i+1 );
double fasterEMAprevious1=iMA( NULL, 0, ExtPeriodFastMA, 0, ExtModeFastMA, ExtPriceFastMA, i+2 );
double slowerEMAprevious =iMA( NULL, 0, ExtPeriodSlowMA, 0, ExtModeSlowMA, ExtPriceSlowMA, i+1 );
double slowerEMAprevious1 =iMA( NULL, 0, ExtPeriodSlowMA, 0, ExtModeSlowMA, ExtPriceSlowMA, i+2 );
if(fasterEMAprevious<slowerEMAprevious&&fasterEMAprevious1>slowerEMAprevious1)
{
CrossDown1[i+1]=High[i+1]+Range*0.5;
}
if(fasterEMAprevious>slowerEMAprevious&&fasterEMAprevious1<slowerEMAprevious1)
{
CrossUp1[i+1]=Low[i+1]-Range*0.5;

}


}

//----

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

تمام هذا نفس المؤشر الذي شرحناه

MOVING_AVERAGE
28-03-2013, 05:21 PM
double indigreen=iCustom(0,0,"imad ",1,1);

هذا يرمز للسهم الازرق في الشمعة السابقة


double indired=iCustom(0,0,"imad ",0,1);

وهذا يرمز للسهم الاحمر في الشمعة السابقة




و نداء المؤشر صحيح اذا كان اسم المؤشر الذي واضعه مع المؤشرات imad

MOVING_AVERAGE
28-03-2013, 05:22 PM
يعني الفكرة انك تشتري او تبيع بضهور احد السهمين

الا هنا كل شئ صحيح

MOVING_AVERAGE
28-03-2013, 05:24 PM
ننتقل الي السطر الموالي


if(orderstotal()<MaxTrades&&indigreen<4000)
if(orderstotal()<MaxTrades&&indired<4000)

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

MOVING_AVERAGE
28-03-2013, 05:26 PM
هنا ايضا هذه الكتابة غير صحيحة


double TP;
double SL;
TP=Ask+TakeProfit*point;
SL=Ask-StopLoss*point;
TP=Bid-TakeProfit*point;
SL=Bid+StopLoss*point;



لماذا الكتابه غير صحيحة

سنشرحها خطوة بخطوة

MOVING_AVERAGE
28-03-2013, 05:34 PM
double TP;

هنا التعريف صحيح
double SL;
هنا التعريف صحيح

المشكلة في التالي

TP=Ask+TakeProfit*point;

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

SL=Ask-StopLoss*point;


جعلنا قيمة SL تساوي السعر الحالي Ask وانقصنا منه عدد النقاط التي نريدها

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

وعند تنفيذ اوامر sell فهي غير صحيحة



TP=Bid-TakeProfit*point;

هنا يقوم الاكسبريت بمسح القيمة السابقة ويضع قيمة جديدة وهي السعر الحالي Bid ناقص عدد النقاط

SL=Bid+StopLoss*point;

نفس الشئ يقوم الاكسبريت بمسح الاسناد الاول ووضع اسناد اخر

وهنا تداخل في وضع الاهداف والستوب لوز





بالمختصر نمسح هذه الكتابة ايضا ونرتب الكتابة اكثر

MOVING_AVERAGE
28-03-2013, 05:37 PM
نفس الامر بنسبة لهذه الكتابات

هي غير مرتبه وغير دقيقة


if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*poi nt;}
if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;}
OrderSend(Symbol(),OP_BUY,Lots,Ask,3*Q,SL,TP,"",MagicNumber,0,Blue);
OrderSend(Symbol(),OP_SELL,Lots,Bid,3*Q,SL,TP,"",MagicNumber,0,Red);

MOVING_AVERAGE
28-03-2013, 05:39 PM
سنعيد كتابة ما سبق بترتيب اكثر

MOVING_AVERAGE
28-03-2013, 05:41 PM
اولا نعرف المتغير الذي سنضع فيه الستوب لوز والتيك بروفيت


double TP;

double SL;

MOVING_AVERAGE
28-03-2013, 05:46 PM
نضع شرط ضهور السهم الازرق مع فتح صفقة واحدة فقط

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

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


if(orderstotal()<MaxTrades&&indigreen<4000)
{

}

if(orderstotal()<MaxTrades&&indired<4000)
{

}


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

وبيع عند ضهور سهم احمر

MOVING_AVERAGE
28-03-2013, 05:53 PM
وكما شرحنا من قبل ان في حالة الشراء

فان الامر سيتنفذ علي Ask

وهنا الربح بالنقاط يسمي TakeProfit

اذن الربح الذي نريد اغلاق الصفقة لما يصله السعر

هو سعر الدخول + عدد نقاط الربح

ونفس الامر بالنسبة للخسارة

اذا سيصبح الكود عند ضهور سهم ازرق ولاننا سندخل عملية Buy


double TP;

double SL;

if(orderstotal()<MaxTrades&&indigreen<4000)
{
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*poi nt;}
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
OrderSend(Symbol(),OP_BUY,Lots,Ask,3*Q,SL,TP,"",MagicNumber,0,Blue);
}

if(orderstotal()<MaxTrades&&indired<4000)
{
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;}
if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;}
OrderSend(Symbol(),OP_SELL,Lots,Bid,3*Q,SL,TP,"",MagicNumber,0,Red);
}



وهذا هو الكود الكلي برتيب اكثر

imaddine
28-03-2013, 05:58 PM
بارك الله فيك استاذي العزيز موفنج

imaddine
31-03-2013, 03:09 AM
استاذ موفنج والله اتعبتك معاي لو ممكن مساعدة بسيطة
حول الاكسبيرت الذي عملناه في الدورة فقد قمت ببعض التعديلات
عليه مثل اضافة التريلنج استوب وكذلك اغلاق الصفقة لما تكون اشارة
معاكسة لكن للاسف لم تتفعل اي من هذه الدوال في الاكسبيرت
بل اصبح يفتح 5 صفقات معا بدل صفقة واحدة رغم اني حددت
عدد الصفقات المفتوحة بصفقة واحدة فقط فارجو ان تشرح لي
الاخطاء التي وقعت فيها لان الاكسبيرت للتعلم فقط لا اكثر
وبارك الله فيك وجعله في ميزان حسناتك
extern double Lots = 0.1;
double point;
int digits,Q;
extern int MaxTrades = 1;
extern int StopLoss=0;
extern int TakeProfit=0;
extern int TrailingStop=0;
extern int TrailingStep=0;
extern int MagicNumber=1234;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;
}
}
int magic=0 ;

int orderstotal(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
return(cnt);
}
//----

//----

//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
Comment("");

if(TrailingStop>0)MoveTrailingStop();
//////////////////////////////////////////////////

double indigreen=iCustom(0,0,"imad",1,1);
double indired=iCustom(0,0,"imad",0,1);

//////////////////////////////////////////////////

double TP,SL;


if(indigreen<4000) {
if(orderstotal()<MaxTrades)
{CloseSellOrders();}
//Buy
if(TakeProfit==0){TP=0;}
else{TP=Ask+TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Ask-StopLoss*point;}
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,SL,TP,"",MagicNumber,0,Blue);

}

//////////////////////////////////////////////////


if(indired<4000){
if(orderstotal()<MaxTrades)
{CloseBuyOrders();}
//Sell
if(TakeProfit==0){TP=0;}
else{TP=Bid-TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Bid+StopLoss*point;}
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,TP,"",MagicNumber,0,Red);

}


}
//+------------------------------------------------------------------+




void CloseBuyOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
}
}

}
//////////////////////////////////////////////////
void CloseSellOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())

if (OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots(),Ask,3);
}

}

//////////////////////////////////////////////////
void MoveTrailingStop()
{

for(int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*point,digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*poin t,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)<NormalizeDouble(Bid-TrailingStop*point,digits))||(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(Bid-TrailingStop*point,digits),OrderTakeProfit(),0,Blu e);

}
}
}
else
{
if(TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*point,digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*point,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)>(NormalizeDouble(Ask+TrailingStop*point,digits)))| |(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(Ask+TrailingStop*point,digits),OrderTakeP rofit(),0,Red);

}
}
}
}
}
}

MOVING_AVERAGE
31-03-2013, 02:47 PM
استاذ موفنج والله اتعبتك معاي لو ممكن مساعدة بسيطة
حول الاكسبيرت الذي عملناه في الدورة فقد قمت ببعض التعديلات
عليه مثل اضافة التريلنج استوب وكذلك اغلاق الصفقة لما تكون اشارة
معاكسة لكن للاسف لم تتفعل اي من هذه الدوال في الاكسبيرت
بل اصبح يفتح 5 صفقات معا بدل صفقة واحدة رغم اني حددت
عدد الصفقات المفتوحة بصفقة واحدة فقط فارجو ان تشرح لي
الاخطاء التي وقعت فيها لان الاكسبيرت للتعلم فقط لا اكثر
وبارك الله فيك وجعله في ميزان حسناتك
extern double Lots = 0.1;
double point;
int digits,Q;
extern int MaxTrades = 1;
extern int StopLoss=0;
extern int TakeProfit=0;
extern int TrailingStop=0;
extern int TrailingStep=0;
extern int MagicNumber=1234;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;
}
}
int magic=0 ;

int orderstotal(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
return(cnt);
}
//----

//----

//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
Comment("");

if(TrailingStop>0)MoveTrailingStop();
//////////////////////////////////////////////////

double indigreen=iCustom(0,0,"imad",1,1);
double indired=iCustom(0,0,"imad",0,1);

//////////////////////////////////////////////////

double TP,SL;


if(indigreen<4000) {
if(orderstotal()<MaxTrades)
{CloseSellOrders();}
//Buy
if(TakeProfit==0){TP=0;}
else{TP=Ask+TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Ask-StopLoss*point;}
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,SL,TP,"",MagicNumber,0,Blue);

}

//////////////////////////////////////////////////


if(indired<4000){
if(orderstotal()<MaxTrades)
{CloseBuyOrders();}
//Sell
if(TakeProfit==0){TP=0;}
else{TP=Bid-TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Bid+StopLoss*point;}
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,TP,"",MagicNumber,0,Red);

}


}
//+------------------------------------------------------------------+




void CloseBuyOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
}
}

}
//////////////////////////////////////////////////
void CloseSellOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())

if (OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots(),Ask,3);
}

}

//////////////////////////////////////////////////
void MoveTrailingStop()
{

for(int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*point,digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*poin t,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)<NormalizeDouble(Bid-TrailingStop*point,digits))||(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(Bid-TrailingStop*point,digits),OrderTakeProfit(),0,Blu e);

}
}
}
else
{
if(TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*point,digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*point,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)>(NormalizeDouble(Ask+TrailingStop*point,digits)))| |(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(Ask+TrailingStop*point,digits),OrderTakeP rofit(),0,Red);

}
}
}
}
}
}



اول ملاحضة

لاحظ انك حذفت return

من الدالة start

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

imaddine
31-03-2013, 02:50 PM
اول ملاحضة

لاحظ انك حذفت return

من الدالة start

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


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

MOVING_AVERAGE
31-03-2013, 02:55 PM
فعلا لم انتبه لها
ربما حذفتها عند عملية التعديل

2- حاول ربط الشروط مع بعض في دلة شرطية واحدة باستعمال && ولا تجزء الشروط

imaddine
31-03-2013, 03:03 PM
2- حاول ربط الشروط مع بعض في دلة شرطية واحدة باستعمال && ولا تجزء الشروط

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

MOVING_AVERAGE
31-03-2013, 03:16 PM
ساحاول تجميع كل الشروط في شرط واحد فقط
بارك الله فيك استاذ موفنج


فيه شئ غير صحيح في برنامجك اخي

هو غلق الصفقات العكسية

ماهي شروط غلق الصفقات العكسية ؟؟؟؟؟

MOVING_AVERAGE
31-03-2013, 03:33 PM
لغلق الصفقات العكسية يشترط فقط ضهور السهم المعاكس

;غير شرط ان يكون عدد الصفقات اقل من mx trade

اذت لغلق الصفقات ضع الشرط منفصل علي شرط فتح الصفقات مع تغير الشروط

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

imaddine
31-03-2013, 03:33 PM
فيه شئ غير صحيح في برنامجك اخي

هو غلق الصفقات العكسية

ماهي شروط غلق الصفقات العكسية ؟؟؟؟؟

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

imaddine
31-03-2013, 03:36 PM
لغلق الصفقات العكسية يشترط فقط ضهور السهم المعاكس

;غير شرط ان يكون عدد الصفقات اقل من mx trade

اذت لغلق الصفقات ضع الشرط منفصل علي شرط فتح الصفقات مع تغير الشروط

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

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

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

MOVING_AVERAGE
31-03-2013, 03:57 PM
والله ان كان الامر ممكن ولا يسبب لك ازعاج لو يكون بطريقة
المناقشة او بنفس طريقة التي شرحت بها الدروس السابقة
يكون افضل

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

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

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

وهذا مبدء العمل فقط

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

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

نعود الي شروط الدخول في الصفقة

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

لكي يدخل في عملية buy او sell

لاكن لو وضعنا هذا الامر فقط

فالاكسبريت يقارن الشرط كل تحرك للسعر

وطالما الشرط صحيح سيدخل صفقة

مثلا في الشمعة السابقة ضهر سهم يشير الي buy

سيدخل اول صفقة buy

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

ان وجده صحيح سيعيد الدخول

ولكي نتفادي الدخول الكثير وضعنا شرط اخر ان يكون عدد الصفقات المفتوحة اصغر من اقصي حد

نريد المتاجرة به

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

عدد الصفقات المفتوحة نحصل عليه بواسطة الدالة orderstotal()

اذا سيصبح الشرط كالتالي

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


if(indigreen<4000&&orderstotal()<MaxTrades)
ماذا سيعمل الاكسبريت

سيقارن ان ضهر سهم في الشمعة السابقة

تحقق هذا الامر جيد

سيقارن ايضا عدد الصفقات المفتوحة

وعدد الصفقات المفتوحة الي الان 0 وهي اصغر من اقصي حد للمتاجرة الذي = 1

سيفتح صفقة

يتحرك السعر سيعيد المقارنة

هل ضهر السهم في الشمعة السابقة

تحقق هذا الامر جيد

سيقارن ايضا عدد الصفقات المفتوحة

وعدد الصفقات المفتوحة الي الان 1 وهي تساوي اقصي حد للمتاجرة الذي = 1

اذن لا يفتح صفقة

ويستمر الاكسبريت هكذا

ناتي الان لاغلاق الصفقات

نريد اغلاق صفقة لما تضهر اشارة عكسية فقط

لا يهمنا كم عدد الصفقات

اذا الشرط سيكون كالتالي

اذا ضهر سهم نازل اخرج من صفقات buy نترجمه


if(indired<4000)

{CloseBuyOrders();}
اي شئ غير مفهوم لا تتردد في طرحه اخي

imaddine
31-03-2013, 04:05 PM
اهم شئ في البرمجة ان تفهم ماذا تريد عمله

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

وهذا مبدء العمل فقط

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

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

نعود الي شروط الدخول في الصفقة

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

لكي يدخل في عملية buy او sell

لاكن لو وضعنا هذا الامر فقط

فالاكسبريت يقارن الشرط كل تحرك للسعر

وطالما الشرط صحيح سيدخل صفقة

مثلا في الشمعة السابقة ضهر سهم يشير الي buy

سيدخل اول صفقة buy

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

ان وجده صحيح سيعيد الدخول

ولكي نتفادي الدخول الكثير وضعنا شرط اخر ان يكون عدد الصفقات المفتوحة اصغر من اقصي حد

نريد المتاجرة به

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

عدد الصفقات المفتوحة نحصل عليه بواسطة الدالة orderstotal()

اذا سيصبح الشرط كالتالي

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


if(indigreen<4000&&orderstotal()<MaxTrades)
ماذا سيعمل الاكسبريت

سيقارن ان ضهر سهم في الشمعة السابقة

تحقق هذا الامر جيد

سيقارن ايضا عدد الصفقات المفتوحة

وعدد الصفقات المفتوحة الي الان 0 وهي اصغر من اقصي حد للمتاجرة الذي = 1

سيفتح صفقة

يتحرك السعر سيعيد المقارنة

هل ضهر السهم في الشمعة السابقة

تحقق هذا الامر جيد

سيقارن ايضا عدد الصفقات المفتوحة

وعدد الصفقات المفتوحة الي الان 1 وهي تساوي اقصي حد للمتاجرة الذي = 1

اذن لا يفتح صفقة

ويستمر الاكسبريت هكذا

ناتي الان لاغلاق الصفقات

نريد اغلاق صفقة لما تضهر اشارة عكسية فقط

لا يهمنا كم عدد الصفقات

اذا الشرط سيكون كالتالي

اذا ضهر سهم نازل اخرج من صفقات buy نترجمه


if(indired<4000)

{CloseBuyOrders();}
اي شئ غير مفهوم لا تتردد في طرحه اخي

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

ayoob
31-03-2013, 08:34 PM
الفرق الجوهري يكمن في قيمة النقطة المحسوبة

وقيمة النقطة علي حسب المنصة

اولا قيمة النقطة علي المنصة هي اصغر قيمة بعد الفاصلة

يعني في منصة 5 ارقام لو يكون عندنا هذا العدد
1.32354

قيمة النقطة حسب المنصة هي اصغر قيمة بعد الفاصلة

يعني 0.00001

اما قيمة النقطة التي نتاجر عليها هي 0.0001

وهنا يوجد الاختلاف بين منصة 4 و 5 ارقام

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

في دالة init

نضيف الكتابة التالية وهذه الكتابة لتحديد قيمة النقطة في منضة 4 و 5 ارقام

وعلي كل الازواج

لان ازواج الين فيها اما رقمين او 3 فقط حسب المنصة


int init()
{

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);
}
ونصبح نتعامل في كود الاكسبريت بدلالة point ب p الصغير وليس P كبيرة
ياريت اخي مصطفي يتم شرح اكتر عن هده الاكواد و كيفية كتابتة

imaddine
31-03-2013, 10:27 PM
ياريت اخي مصطفي يتم شرح اكتر عن هده الاكواد و كيفية كتابتة

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

MOVING_AVERAGE
31-03-2013, 11:16 PM
ياريت اخي مصطفي يتم شرح اكتر عن هده الاكواد و كيفية كتابتة


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

مثلا لو لدينا السعر 1.3625487021548

اصغر رقم يمكن الحصول عليه هو

0.0000000000001

واصغر رقم يسمي النقطة

في منصة 5 ارقام اصغر رقم هو 0.00001

في منصة 4 ارقام اصغر رقم هو 0.0001

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

لو ناخذ قيمة النقطة الافتراضية الموجودة اصلا في MQL وهي Point ب حرف P الكبير

ونريد اخذ الربح بعد 10 نقاط

وكما تعلم اخي ان الربح عند 10 نقاط لا يختلف حتي لو اختلفة المنصات 4 او 5

يعني

لو دخلنا عقد من منصة 4 ارقام ومنصة 5 ارقام من نفس السعر

الربح بعد 10 نقاط سيكون نفسه ؟؟؟

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

لذا عمل متغير اخر ووضعنا فيه قيمة النقطة مهما كانت المنصة

imaddine
01-04-2013, 12:41 AM
اخ موفنج اعلم اني اتعبتك معي لكن رغم اني قمت بحذف
دالة التريلنج لكن لم تحل المشكلة بقي يفتح 5 صفقات
مع كل اشارة ولم افهم لما 5 صفقات رغم اني غيرة الدالة
وجعلتها تفتح صفقة واحدة فقط دون اي متغير خارجي يتحكم
في عدد الصفقات وايضا يقوم بتفعيل مع اول اشارة
ولا يغلق الصفقة رغم اني وضعت دالة اغلاق الصفقة في
حال وجود اشارة عكسية
extern double Lots = 0.1;
double point;
int digits,Q;
extern int StopLoss=0;
extern int TakeProfit=0;
extern int MagicNumber=1234;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;
}
}
int magic=0 ;

int orderstotal(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
return(cnt);
}
//----

//----

//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
Comment(""+"\n"+""+"\n"+"/");

//////////////////////////////////////////////////

double indigreen=iCustom(0,0,"imad",1,1);
double indired=iCustom(0,0,"imad",0,1);
دالة استدعاء المؤشر
//////////////////////////////////////////////////

double TP,SL;

if(indigreen<5000&&LastOrder()>0&&orderstotal()<=1) {
{CloseSellOrders();}
دالة فتح صفقة مع جعل صفقة واحدة فقط + امر اغلاق الصفقة في الاشارة العكسية

//Buy
if(TakeProfit==0){TP=0;}
else{TP=Ask+TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Ask-StopLoss*point;}
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,SL,TP,"",MagicNumber,0,Blue);

}

//////////////////////////////////////////////////
if(indired<5000&&LastOrder()!=1&&orderstotal()<=1){
{CloseBuyOrders();}

دالة فتح صفقة مع جعل صفقة واحدة فقط + امر اغلاق الصفقة في الاشارة العكسية
//Sell
if(TakeProfit==0){TP=0;}
else{TP=Bid-TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Bid+StopLoss*point;}
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,TP,"",MagicNumber,0,Red);

}

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



دالة اغلاق صفقة الشراء في حال ظهور اشارة معاكسة
void CloseBuyOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
}
}

}
//////////////////////////////////////////////////
دالة اغلاق صفقة البيع في حال ظهور اشارة معاكسة
void CloseSellOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())

if (OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots(),Ask,3);
}

}

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

int LastOrder(){
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
return(OrderType());
}
}
return(2);
}

imaddine
01-04-2013, 12:51 AM
اخ موفنج اعلم اني اتعبتك معي لكن رغم اني قمت بحذف
دالة التريلنج لكن لم تحل المشكلة بقي يفتح 5 صفقات
مع كل اشارة ولم افهم لما 5 صفقات رغم اني غيرة الدالة
وجعلتها تفتح صفقة واحدة فقط دون اي متغير خارجي يتحكم
في عدد الصفقات وايضا يقوم بتفعيل مع اول اشارة
ولا يغلق الصفقة رغم اني وضعت دالة اغلاق الصفقة في
حال وجود اشارة عكسية
extern double Lots = 0.1;
double point;
int digits,Q;
extern int StopLoss=0;
extern int TakeProfit=0;
extern int MagicNumber=1234;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;
}
}
int magic=0 ;

int orderstotal(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
return(cnt);
}
//----

//----

//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
Comment(""+"\n"+""+"\n"+"/");

//////////////////////////////////////////////////

double indigreen=iCustom(0,0,"imad",1,1);
double indired=iCustom(0,0,"imad",0,1);
دالة استدعاء المؤشر
//////////////////////////////////////////////////

double TP,SL;

if(indigreen<5000&&LastOrder()>0&&orderstotal()<=1) {
{CloseSellOrders();}
دالة فتح صفقة مع جعل صفقة واحدة فقط + امر اغلاق الصفقة في الاشارة العكسية

//Buy
if(TakeProfit==0){TP=0;}
else{TP=Ask+TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Ask-StopLoss*point;}
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,SL,TP,"",MagicNumber,0,Blue);

}

//////////////////////////////////////////////////
if(indired<5000&&LastOrder()!=1&&orderstotal()<=1){
{CloseBuyOrders();}

دالة فتح صفقة مع جعل صفقة واحدة فقط + امر اغلاق الصفقة في الاشارة العكسية
//Sell
if(TakeProfit==0){TP=0;}
else{TP=Bid-TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Bid+StopLoss*point;}
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,TP,"",MagicNumber,0,Red);

}

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



دالة اغلاق صفقة الشراء في حال ظهور اشارة معاكسة
void CloseBuyOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
}
}

}
//////////////////////////////////////////////////
دالة اغلاق صفقة البيع في حال ظهور اشارة معاكسة
void CloseSellOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())

if (OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots(),Ask,3);
}

}

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

int LastOrder(){
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
return(OrderType());
}
}
return(2);
}


استاذ موفنج لقد وجدت الخطا في عدد الصفقات المفتوحة وهو في اكبر من اول يساوي
[PHP] if(indired<5000&&LastOrder()!=1&&orderstotal()<=1){
الخطا كان في <=

والكتابة الصحيحة هي
if(indired<5000&&LastOrder()!=1&&orderstotal()<1){

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

imaddine
01-04-2013, 06:56 PM
استاذ موفنج كيف الحال
والله لم افهم سبب الخطا لحد الساعة فكل دوال في مكانها
والاكسبيرت لا يعطي اي خطا لكن رغم ذلك فدالة اغلاق الصفقات
العكسية لم تفعل بحيث لو وضعته على الباك تيست يقوم
الاكسبيرت بفتح صفقة اول ما يظهر المؤشر لكن لا يغلق الصفقة
يتركها مفتوحة

imaddine
04-04-2013, 03:46 PM
استاذي موفنج كيف الحال
الحمد لله قمت ببرمجة اكسبيرت ونجحة فيه بحيث قمت بعمل
التريلنج وايضا خاصية اغلاق الصفقات عند الاشارة المعاكسة
وايضا قمت ببرمجة اكسبيرت لمؤشر اخر
لكن بينما كنت اريد مساعدة احد الاخوة صادفتني مشكلة
وهو انه قام بطلب اكسبيرت لاحد المؤشرات يقوم على خطوط
تشبه الدعوم والمقاومات فلما اردت العمل على المؤشر وجدت
انه لا توجد فيه اندكسات لتعريفها في الاكسبيرت ولم استطع
تعريف الخطوط وايضا دالة فتح صفقة بمجرد لمس السعر
لاحد الخطوط
http://www.fx-arabia.com/vb/uploaded/12839_01365079484.png
اعلم انك مشغول كثيرا فلو تكرمت وكان عندك وقت
لشرح طريقة عمل اكسبيرت لهذا النوع من المؤشرات
والا فارفق لي اي مؤشر واكسبيرت له نفس الفكرة
لمحاولة دراسة دواله
وبارك الله فيك

MOVING_AVERAGE
04-04-2013, 05:35 PM
استاذي موفنج كيف الحال
الحمد لله قمت ببرمجة اكسبيرت ونجحة فيه بحيث قمت بعمل
التريلنج وايضا خاصية اغلاق الصفقات عند الاشارة المعاكسة
وايضا قمت ببرمجة اكسبيرت لمؤشر اخر
لكن بينما كنت اريد مساعدة احد الاخوة صادفتني مشكلة
وهو انه قام بطلب اكسبيرت لاحد المؤشرات يقوم على خطوط
تشبه الدعوم والمقاومات فلما اردت العمل على المؤشر وجدت
انه لا توجد فيه اندكسات لتعريفها في الاكسبيرت ولم استطع
تعريف الخطوط وايضا دالة فتح صفقة بمجرد لمس السعر
لاحد الخطوط
http://www.fx-arabia.com/vb/uploaded/12839_01365079484.png
اعلم انك مشغول كثيرا فلو تكرمت وكان عندك وقت
لشرح طريقة عمل اكسبيرت لهذا النوع من المؤشرات
والا فارفق لي اي مؤشر واكسبيرت له نفس الفكرة
لمحاولة دراسة دواله
وبارك الله فيك


ان كانت الخطوط مرسومة بواسطة دالة الرسم CreateObject

فتحتاج لعمل دالة خارجية تبحث لك عن اخر القيم للخط

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

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

ان شاء الله ساضع مثالين عن الطريقتين

imaddine
04-04-2013, 10:34 PM
ان كانت الخطوط مرسومة بواسطة دالة الرسم CreateObject

فتحتاج لعمل دالة خارجية تبحث لك عن اخر القيم للخط

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

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

ان شاء الله ساضع مثالين عن الطريقتين

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

بارك الله فيك وفي انتضارك

maryocairo
05-04-2013, 07:32 AM
هية كدا الدورة خلصت شكل الموضوع جامد وهبتدى بأول صفحة شكرا لموفينج عل مجهوده

maryocairo
05-04-2013, 07:38 AM
وهية دى الدورة ال 2 ياريت لينك للدورة الاولى وشكرا تانى لموفينج

MOVING_AVERAGE
05-04-2013, 12:48 PM
هية كدا الدورة خلصت شكل الموضوع جامد وهبتدى بأول صفحة شكرا لموفينج عل مجهوده


بارك الله فيك

الدورة لم تنتهي

MOVING_AVERAGE
05-04-2013, 12:50 PM
وهية دى الدورة ال 2 ياريت لينك للدورة الاولى وشكرا تانى لموفينج

وهذا لينك الدورة الاولي لبرمجت المؤشرات وهي ايضا لم تنتهي

دورة تعلم البرمجة باحتراف (http://fx-arabia.com/vb/showthread.php?t=27491)

maryocairo
07-04-2013, 05:12 PM
وهذا لينك الدورة الاولي لبرمجت المؤشرات وهي ايضا لم تنتهي

دورة تعلم البرمجة باحتراف (http://fx-arabia.com/vb/showthread.php?t=27491)


شكرا ليكى اخ موفينج وربنا يعينك زى ما بتساعدنا

maryocairo
07-04-2013, 05:22 PM
وهذا لينك الدورة الاولي لبرمجت المؤشرات وهي ايضا لم تنتهي

دورة تعلم البرمجة باحتراف (http://fx-arabia.com/vb/showthread.php?t=27491)


شكرا ليكى اخ موفينج وربنا يعينك زى ما بتساعدنا

م. عبدالرحمن وردة
13-04-2013, 08:06 PM
السلام عليكم و رحمة الله و بركاته.

أخي "موفنج أفرج" بارك الله فيك و في والديك وجزاكم الله خير الجزاء.
*************************
عاوز استفسر استفسار صغير :
أزاي في البرنامج اقدر اعرف انا خسرت في الصفقه اللى فاتت او كسبت و ازاي اعرف اللى باقي من الرصيد.
علشان مثلا لو عاوز البرنامج يقف لو خسرت 10 مرات مثلا او وصل الرصيد ل 50 دولاي مثلا.

و شكرا.

ayoob
14-04-2013, 09:19 AM
السلام عليكم حاولت ابرمج اكسبيرات لي مؤشر RIS وشروط الشراء والبيع هي قطع خط 50 في البيع و الشراء ولكن عندي مشكلة في الجورنال في الامر OrderSend
الكود
extern int StopLoss=250;
extern int TakeProfit=250;
extern double Lot=0.1;
extern int Magic=15000;
int point;
int digits;
int Q;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double Ris1,Ris2;
double SL,TP;
Ris1=iRSI(Symbol(),PERIOD_M15,14,PRICE_CLOSE,1);
Ris2=iRSI(Symbol(),PERIOD_M15,14,PRICE_CLOSE,2);

if(Ris1>50&&Ris2<50&&OrdersTotal()==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,Q*3,SL,TP,"EA",Magic,0,Green);
}

if(Ris1<50&&Ris2>50&&OrdersTotal()==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,Q*3,SL,TP,"EA",Magic,0,Red);
}


}
return(0);
علما عند مسح كود تعريف الهدف والاستوب لوس وجعل الاستوب والهدف في الدلة OrderSend يشتغل الاكسبيرات بدون مشاكل مثال علي الكود
OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask+250*Point, Ask-250*Point,"EA",Magic,0,Green);
:1 (88):

ayoob
14-04-2013, 09:22 AM
صورة من الخطا في الجورنال
http://www.fx-arabia.com/vb/uploaded/8360_11365920515.png

ayoob
15-04-2013, 02:49 AM
:1 (104)::1 (88):

ayoob
15-04-2013, 10:57 PM
السلام عليكم اخي مصطفي عندي اكسبيرات لا يشتغل علي منصة الخمس ارقام ياريت يتم التعديل فية وشكرا مرفق الاكسبيرات

ayoob
16-04-2013, 01:49 AM
السلام عليكم اخي مصطفي عندي اكسبيرات لا يشتغل علي منصة الخمس ارقام ياريت يتم التعديل فية وشكرا مرفق الاكسبيرات
وهناك مشكلة اخري يفتح صفقات علي الباك تست عادي ولكن في الديمو لا يفتح بيعطي تنبية فقط؟؟؟:1 (88):

MOVING_AVERAGE
16-04-2013, 11:31 AM
السلام عليكم حاولت ابرمج اكسبيرات لي مؤشر RIS وشروط الشراء والبيع هي قطع خط 50 في البيع و الشراء ولكن عندي مشكلة في الجورنال في الامر OrderSend
الكود
extern int StopLoss=250;
extern int TakeProfit=250;
extern double Lot=0.1;
extern int Magic=15000;
int point;
int digits;
int Q;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double Ris1,Ris2;
double SL,TP;
Ris1=iRSI(Symbol(),PERIOD_M15,14,PRICE_CLOSE,1);
Ris2=iRSI(Symbol(),PERIOD_M15,14,PRICE_CLOSE,2);

if(Ris1>50&&Ris2<50&&OrdersTotal()==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,Q*3,SL,TP,"EA",Magic,0,Green);
}

if(Ris1<50&&Ris2>50&&OrdersTotal()==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,Q*3,SL,TP,"EA",Magic,0,Red);
}


}
return(0);علما عند مسح كود تعريف الهدف والاستوب لوس وجعل الاستوب والهدف في الدلة OrderSend يشتغل الاكسبيرات بدون مشاكل مثال علي الكود
OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask+250*Point, Ask-250*Point,"EA",Magic,0,Green);:1 (88):

لان المنصة التي تشتغل عليها منصة ecn

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

الحل انك تنزل الامر بدون هدف ولا وقف خسارة

ثم تغير الهدف ووقف الخسارة

MOVING_AVERAGE
16-04-2013, 11:41 AM
السلام عليكم اخي مصطفي عندي اكسبيرات لا يشتغل علي منصة الخمس ارقام ياريت يتم التعديل فية وشكرا مرفق الاكسبيرات

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

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

فيقوم بفتح صفقات لا تنتهي

MOVING_AVERAGE
16-04-2013, 11:47 AM
السلام عليكم و رحمة الله و بركاته.

أخي "موفنج أفرج" بارك الله فيك و في والديك وجزاكم الله خير الجزاء.
*************************
عاوز استفسر استفسار صغير :
أزاي في البرنامج اقدر اعرف انا خسرت في الصفقه اللى فاتت او كسبت و ازاي اعرف اللى باقي من الرصيد.
علشان مثلا لو عاوز البرنامج يقف لو خسرت 10 مرات مثلا او وصل الرصيد ل 50 دولاي مثلا.

و شكرا.

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

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

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

يعني ان الصفقة خسرت

ayoob
16-04-2013, 02:55 PM
لو تراجع شروط فتح الصفقة ستجد ان الشروط غير مكتملة

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

فيقوم بفتح صفقات لا تنتهي
طيب اخي مصطفي ياريت يتم التعديل فية لي يعمل علي منصات الخمس ارقام والاربع ارقام ومنصات ECN وشكرhttp://www.fx-arabia.com/vb/images/icons/icon7.gif

MOVING_AVERAGE
16-04-2013, 03:06 PM
طيب اخي مصطفي ياريت يتم التعديل فية لي يعمل علي منصات الخمس ارقام والاربع ارقام ومنصات ECN وشكرhttp://www.fx-arabia.com/vb/images/icons/icon7.gif


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

ساريك طريقة حذف الاخطاء احسن

اولا استعمل هذه الدالة لفتح اي صفقة

لكي ترتاح من مشاكل ECN


int open(int ty,double lot,double prc,int pof,int sll)
{
double sl=0,tp=0;
color clr;
bool modi;
string T;double pr;
if(ty==OP_BUY || ty==OP_BUYSTOP || ty==OP_BUYLIMIT)
{
if(sll>0){sl=prc-(sll*point);}else{sl=0;}
if(pof>0){tp=prc+(pof*point);}else{tp=0;}
clr=Green;
T="Ask ";
pr=NormalizeDouble(Ask,Digits);
}
if(ty==OP_SELL || ty==OP_SELLSTOP || ty==OP_SELLLIMIT)
{
if(sll>0){sl=prc+(sll*point);}else{sl=0;}
if(pof>0){tp=prc-(pof*point);}else{tp=0;}
clr=Red;
T="Bid";
pr=NormalizeDouble(Bid,Digits);
}
int tik=OrderSend(Symbol()
,ty
,lot
,NormalizeDouble(prc,Digits)
,10
,0
,0
,""
,MagicNumber
,0
,clr);
string t;
if(ty==OP_BUY)t="BUY";if(ty==OP_SELL)t="SELL";if(ty==OP_BUYSTOP)t="BUY STOP";if(ty==OP_SELLSTOP)t="SELL STOP";if(ty==OP_BUYLIMIT)t="BUY LIMIT";if(ty==OP_SELLLIMIT)t="SELL LIMIT";
if(tik>0)
{
if(tp>0 || sl>0)modi=OrderModify(tik,prc,NormalizeDouble(sl,Digi ts),NormalizeDouble(tp,Digits),0,CLR_NONE); else modi=true;
if(!modi){Print("Modify Err#= ",GetLastError()," ",Symbol()," ",Period()," Open Price= ",DoubleToStr(prc,Digits)," SL= ",DoubleToStr(sl,Digits)," Tp= ",DoubleToStr(tp,Digits));}
Print("Order Opened successfully " ,"Type ",t," LotSize ",lot," Price ",DoubleToStr(prc,Digits)," TP ",DoubleToStr(tp,Digits)," SL ",DoubleToStr(sl,Digits));
}
else
{
Print("OrderSend failed with error #",GetLastError(), " Type ",t," LotSize= ",lot," ",T,"Now= ",DoubleToStr(pr,Digits)," Price= ",DoubleToStr(prc,Digits)," TP= ",DoubleToStr(tp,Digits)," SL= ",DoubleToStr(sl,Digits)," Spread= ",MarketInfo(Symbol(),MODE_SPREAD));
}
//////
return(tik);

}


مثلا لو تريد فتح عملية BUY اكتب فقط


open(OP_BUY,Lots,Ask,TakeProfit,StopLoss) ;

MOVING_AVERAGE
16-04-2013, 03:11 PM
لكي ترتاح من مشكلة 5 ارقام

غير اي كتابة ملونة للكلمة Point

وجعلها فقط point ب حرف p الصغير وليس حرف P الكبير

بعدما تضع التالي في دالة init


if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;

}
جرب ضع التعديلات بنفسك

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

ayoob
16-04-2013, 04:41 PM
لكي ترتاح من مشكلة 5 ارقام

غير اي كتابة ملونة للكلمة Point

وجعلها فقط point ب حرف p الصغير وليس حرف P الكبير

بعدما تضع التالي في دالة init


if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;

}
جرب ضع التعديلات بنفسك

وان لم تشتغل معك ساعدل لك في الاكسبريت
السلام عليكم اخي مصطفي ان لسة مبتدأ في البرمجة ولكن وضعت التعديل الدي قلت علية وفتح صفقة علي الباك تست بدون هدف ولا استوب
extern int StopLoss=100;
extern int TakeProfit=10;
extern double Lot=0.10;
extern int Magic=14000;
int point,digits;
int Q;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits==5||Digits==3)Q=10;
else Q=1;
if(Digits==2)
{
point=0.01;

}
if(Digits==4)
{
point=0.0001;

}
if(Digits==3)
{
point=0.01;

}
if(Digits==5)
{
point=0.0001;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double STOK1,STOK2;
STOK1=iStochastic(Symbol(),PERIOD_M1,5,3,3,0,0,MOD E_MAIN,3);
STOK2=iStochastic(Symbol(),PERIOD_M1,5,3,3,0,0,MOD E_MAIN,3);
if(STOK1<15&&OrdersTotal()==0)
{
OrderSend(Symbol(),OP_BUY,Lot,Ask,Q*3,Ask*point,As k*point,"AYOOB",Magic,0,Green);
}
if(STOK2>85&&OrdersTotal()==0)

{
OrderSend(Symbol(),OP_SELL,Lot,Bid,Q*3,Bid*point,B id*point,"AYOOB",Magic,0,Red);
}http://www.fx-arabia.com/vb/uploaded/8360_11366119577.png

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

MOVING_AVERAGE
16-04-2013, 05:06 PM
تفضل تعديل فتح الصفقات


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


extern int MagicNumber=1011;
extern double lStopLoss = 100;
extern double sStopLoss = 100;
extern double lTakeProfit = 10;
extern double sTakeProfit = 10;


extern string jj="------";
extern int StopLoss=100;
extern int TakeProfit=10;


extern color clOpenBuy = Blue;
extern color clCloseBuy = Aqua;
extern color clOpenSell = Red;
extern color clCloseSell = Violet;
extern color clModiBuy = Blue;
extern color clModiSell = Red;
extern string Name_Expert = "Stok_scalper EA";
extern int Slippage = 0;
extern bool UseHourTrade = True;
extern int FromHourTrade = 0;
extern int ToHourTrade = 23;
extern bool UseSound = True;
extern string NameFileSound = "alert.wav";
extern double Lots = 2;
int digits,Q;
double point;


int init()
{


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);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
int start()
{

if (UseHourTrade){
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comment("Time for trade has not come else!");
return(0);
} else Comment("");
}else Comment("");
if(Bars<100){
Print("bars less than 100");
return(0);
}
if(lStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(lTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if(sStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(sTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}



double diStochastic0=iStochastic(NULL,60,5,3,3,MODE_EMA,P RICE_CLOSE,MODE_MAIN,3);
double d1=(15);
double diStochastic2=iStochastic(NULL,60,5,3,3,MODE_EMA,P RICE_CLOSE,MODE_MAIN,3);
double d3=(85);

if(AccountFreeMargin()<(1000*Lots)){
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (!ExistPositions()){

if ((diStochastic0<d1)){
open(OP_BUY,Lots,Ask,TakeProfit,StopLoss) ;
return(0);
}

if ((diStochastic2>d3)){
open(OP_SELL,Lots,Bid,TakeProfit,StopLoss) ;
return(0);
}
}
return (0);
}

bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) {
return(True);
}
}
}
return(false);
}

/*
void ModifyStopLoss(double ldStopLoss) {
bool fm;
fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopL oss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
*/

void OpenBuy() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossBuy();
ldTake = GetTakeProfitBuy();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldSto p,ldTake,lsComm,MagicNumber,0,clOpenBuy);
if (UseSound) PlaySound(NameFileSound);
}
void OpenSell() {
double ldLot, ldStop, ldTake;
string lsComm;

ldLot = GetSizeLot();
ldStop = GetStopLossSell();
ldTake = GetTakeProfitSell();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldSt op,ldTake,lsComm,MagicNumber,0,clOpenSell);
if (UseSound) PlaySound(NameFileSound);
}
string GetCommentForOrder() { return(Name_Expert); }
double GetSizeLot() { return(Lots); }
double GetStopLossBuy() { return (Bid-lStopLoss*Point);}
double GetStopLossSell() { return(Ask+sStopLoss*Point); }
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); }
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }

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



int open(int ty,double lot,double prc,int pof,int sll)
{
double sl=0,tp=0;
color clr;
bool modi;
string T;double pr;
if(ty==OP_BUY || ty==OP_BUYSTOP || ty==OP_BUYLIMIT)
{
if(sll>0){sl=prc-(sll*point);}else{sl=0;}
if(pof>0){tp=prc+(pof*point);}else{tp=0;}
clr=Green;
T="Ask ";
pr=NormalizeDouble(Ask,Digits);
}
if(ty==OP_SELL || ty==OP_SELLSTOP || ty==OP_SELLLIMIT)
{
if(sll>0){sl=prc+(sll*point);}else{sl=0;}
if(pof>0){tp=prc-(pof*point);}else{tp=0;}
clr=Red;
T="Bid";
pr=NormalizeDouble(Bid,Digits);
}
int tik=OrderSend(Symbol()
,ty
,lot
,NormalizeDouble(prc,Digits)
,10
,0
,0
,""
,MagicNumber
,0
,clr);
string t;
if(ty==OP_BUY)t="BUY";if(ty==OP_SELL)t="SELL";if(ty==OP_BUYSTOP)t="BUY STOP";if(ty==OP_SELLSTOP)t="SELL STOP";if(ty==OP_BUYLIMIT)t="BUY LIMIT";if(ty==OP_SELLLIMIT)t="SELL LIMIT";
if(tik>0)
{
if(tp>0 || sl>0)modi=OrderModify(tik,prc,NormalizeDouble(sl,Digi ts),NormalizeDouble(tp,Digits),0,CLR_NONE); else modi=true;
if(!modi){Print("Modify Err#= ",GetLastError()," ",Symbol()," ",Period()," Open Price= ",DoubleToStr(prc,Digits)," SL= ",DoubleToStr(sl,Digits)," Tp= ",DoubleToStr(tp,Digits));}
Print("Order Opened successfully " ,"Type ",t," LotSize ",lot," Price ",DoubleToStr(prc,Digits)," TP ",DoubleToStr(tp,Digits)," SL ",DoubleToStr(sl,Digits));
}
else
{
Print("OrderSend failed with error #",GetLastError(), " Type ",t," LotSize= ",lot," ",T,"Now= ",DoubleToStr(pr,Digits)," Price= ",DoubleToStr(prc,Digits)," TP= ",DoubleToStr(tp,Digits)," SL= ",DoubleToStr(sl,Digits)," Spread= ",MarketInfo(Symbol(),MODE_SPREAD));
}
//////
return(tik);

}

م. عبدالرحمن وردة
16-04-2013, 06:49 PM
يتم ذلك بواسطة مراجعة الصفقات الحالية والصفقات التي اغلقة

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

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

يعني ان الصفقة خسرت

حضرتك انا سؤالى عن الامر او المتغير الذي يقول لى حاله الصفقة الحالية او الصفقات الماضية.

MOVING_AVERAGE
17-04-2013, 10:56 PM
حضرتك انا سؤالى عن الامر او المتغير الذي يقول لى حاله الصفقة الحالية او الصفقات الماضية.

لم افهم بالتحديد السؤال

ayoob
18-04-2013, 09:49 AM
تفضل تعديل فتح الصفقات


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


extern int MagicNumber=1011;
extern double lStopLoss = 100;
extern double sStopLoss = 100;
extern double lTakeProfit = 10;
extern double sTakeProfit = 10;


extern string jj="------";
extern int StopLoss=100;
extern int TakeProfit=10;


extern color clOpenBuy = Blue;
extern color clCloseBuy = Aqua;
extern color clOpenSell = Red;
extern color clCloseSell = Violet;
extern color clModiBuy = Blue;
extern color clModiSell = Red;
extern string Name_Expert = "Stok_scalper EA";
extern int Slippage = 0;
extern bool UseHourTrade = True;
extern int FromHourTrade = 0;
extern int ToHourTrade = 23;
extern bool UseSound = True;
extern string NameFileSound = "alert.wav";
extern double Lots = 2;
int digits,Q;
double point;


int init()
{


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);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
int start()
{

if (UseHourTrade){
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comment("Time for trade has not come else!");
return(0);
} else Comment("");
}else Comment("");
if(Bars<100){
Print("bars less than 100");
return(0);
}
if(lStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(lTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if(sStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(sTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}



double diStochastic0=iStochastic(NULL,60,5,3,3,MODE_EMA,P RICE_CLOSE,MODE_MAIN,3);
double d1=(15);
double diStochastic2=iStochastic(NULL,60,5,3,3,MODE_EMA,P RICE_CLOSE,MODE_MAIN,3);
double d3=(85);

if(AccountFreeMargin()<(1000*Lots)){
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (!ExistPositions()){

if ((diStochastic0<d1)){
open(OP_BUY,Lots,Ask,TakeProfit,StopLoss) ;
return(0);
}

if ((diStochastic2>d3)){
open(OP_SELL,Lots,Bid,TakeProfit,StopLoss) ;
return(0);
}
}
return (0);
}

bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) {
return(True);
}
}
}
return(false);
}

/*
void ModifyStopLoss(double ldStopLoss) {
bool fm;
fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopL oss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
*/

void OpenBuy() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossBuy();
ldTake = GetTakeProfitBuy();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldSto p,ldTake,lsComm,MagicNumber,0,clOpenBuy);
if (UseSound) PlaySound(NameFileSound);
}
void OpenSell() {
double ldLot, ldStop, ldTake;
string lsComm;

ldLot = GetSizeLot();
ldStop = GetStopLossSell();
ldTake = GetTakeProfitSell();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldSt op,ldTake,lsComm,MagicNumber,0,clOpenSell);
if (UseSound) PlaySound(NameFileSound);
}
string GetCommentForOrder() { return(Name_Expert); }
double GetSizeLot() { return(Lots); }
double GetStopLossBuy() { return (Bid-lStopLoss*Point);}
double GetStopLossSell() { return(Ask+sStopLoss*Point); }
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); }
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }

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



int open(int ty,double lot,double prc,int pof,int sll)
{
double sl=0,tp=0;
color clr;
bool modi;
string T;double pr;
if(ty==OP_BUY || ty==OP_BUYSTOP || ty==OP_BUYLIMIT)
{
if(sll>0){sl=prc-(sll*point);}else{sl=0;}
if(pof>0){tp=prc+(pof*point);}else{tp=0;}
clr=Green;
T="Ask ";
pr=NormalizeDouble(Ask,Digits);
}
if(ty==OP_SELL || ty==OP_SELLSTOP || ty==OP_SELLLIMIT)
{
if(sll>0){sl=prc+(sll*point);}else{sl=0;}
if(pof>0){tp=prc-(pof*point);}else{tp=0;}
clr=Red;
T="Bid";
pr=NormalizeDouble(Bid,Digits);
}
int tik=OrderSend(Symbol()
,ty
,lot
,NormalizeDouble(prc,Digits)
,10
,0
,0
,""
,MagicNumber
,0
,clr);
string t;
if(ty==OP_BUY)t="BUY";if(ty==OP_SELL)t="SELL";if(ty==OP_BUYSTOP)t="BUY STOP";if(ty==OP_SELLSTOP)t="SELL STOP";if(ty==OP_BUYLIMIT)t="BUY LIMIT";if(ty==OP_SELLLIMIT)t="SELL LIMIT";
if(tik>0)
{
if(tp>0 || sl>0)modi=OrderModify(tik,prc,NormalizeDouble(sl,Digi ts),NormalizeDouble(tp,Digits),0,CLR_NONE); else modi=true;
if(!modi){Print("Modify Err#= ",GetLastError()," ",Symbol()," ",Period()," Open Price= ",DoubleToStr(prc,Digits)," SL= ",DoubleToStr(sl,Digits)," Tp= ",DoubleToStr(tp,Digits));}
Print("Order Opened successfully " ,"Type ",t," LotSize ",lot," Price ",DoubleToStr(prc,Digits)," TP ",DoubleToStr(tp,Digits)," SL ",DoubleToStr(sl,Digits));
}
else
{
Print("OrderSend failed with error #",GetLastError(), " Type ",t," LotSize= ",lot," ",T,"Now= ",DoubleToStr(pr,Digits)," Price= ",DoubleToStr(prc,Digits)," TP= ",DoubleToStr(tp,Digits)," SL= ",DoubleToStr(sl,Digits)," Spread= ",MarketInfo(Symbol(),MODE_SPREAD));
}
//////
return(tik);

}

تمام اخي مصطفي اضفت الكود واشتغل عادي وبي النسبة لي هد الكود ليس لة فائدة الان صحيح وقمت بي ازلة كلمة extren
double lStopLoss = 1000;
double sStopLoss = 1000;
double lTakeProfit = 100;
double sTakeProfit = 100;

ziyadiah
18-04-2013, 10:00 AM
يعطيك الف عافية اخي موفنج

م. عبدالرحمن وردة
18-04-2013, 01:11 PM
لم افهم بالتحديد السؤال

ما هو الكود او البرنامج الذي يحقق الشروط التالية:-
اظهار حاله الصفقة الماضية في commment
إيقاف البرنامج في حالة أن الرصيد أصبح أقل من 50 دولار.
إيقاف البرنامج في حالة خسارة عشر صفقات.

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

MOVING_AVERAGE
18-04-2013, 01:17 PM
ما هو الكود او البرنامج الذي يحقق الشروط التالية:-
اظهار حاله الصفة الماضية في commment
إيقاف البرنامج في حالة أن الرصيد أصبح أقل من 50 دولار.
إيقاف البرنامج في حالة خسارة عشر صفقات.

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


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

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


double pofet_HISTORY(){
double pr=0;
for(int p=0;p<OrdersHistoryTotal();p++){
OrderSelect(p,SELECT_BY_POS,MODE_HISTORY);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
pr=OrderProfit();
}
return(pr);
}


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


Comment(pofet_HISTORY());


يضهر لنا هل ربح او خسارة الصفقة الماضية

كيف اعرف ربح او خسارة

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

MOVING_AVERAGE
18-04-2013, 01:20 PM
ما هو الكود او البرنامج الذي يحقق الشروط التالية:-
اظهار حاله الصفقة الماضية في commment
إيقاف البرنامج في حالة أن الرصيد أصبح أقل من 50 دولار.
إيقاف البرنامج في حالة خسارة عشر صفقات.

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

ايقاف البرنامج

اولا لكي نحصل علي الرصيد نستخدم التالي


AccountBalance()


لكي نتحكم في عمل الاكسبريت اعتماد علي الرصيد

نضع من شروط فتح الصفقات


if(AccountBalance()>50)

م. عبدالرحمن وردة
19-04-2013, 08:57 PM
حالة الصفقة يعني لو كان يعني اضهار ربح الصفقة الماضية

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


double pofet_HISTORY(){
double pr=0;
for(int p=0;p<OrdersHistoryTotal();p++){
OrderSelect(p,SELECT_BY_POS,MODE_HISTORY);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
pr=OrderProfit();
}
return(pr);
}


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


Comment(pofet_HISTORY());


يضهر لنا هل ربح او خسارة الصفقة الماضية

كيف اعرف ربح او خسارة

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

ايقاف البرنامج

اولا لكي نحصل علي الرصيد نستخدم التالي


AccountBalance()


لكي نتحكم في عمل الاكسبريت اعتماد علي الرصيد

نضع من شروط فتح الصفقات


if(AccountBalance()>50)


ألف شكر أخي "موفنج افرج" , أجبت فأحسنت :)

abu ayoub
21-04-2013, 09:18 PM
السلام عليكم ورحمة الله وبركاته

أتابع معكم ان شاء الله، أنا جديد في هذا المجال رغم أن عملي كمبرمج برامج إدارية. بدأت منذ اسبوع تعلم فوركس واعجبني كثير هذا الموقع.

MOVING_AVERAGE
22-04-2013, 01:42 PM
السلام عليكم ورحمة الله وبركاته

أتابع معكم ان شاء الله، أنا جديد في هذا المجال رغم أن عملي كمبرمج برامج إدارية. بدأت منذ اسبوع تعلم فوركس واعجبني كثير هذا الموقع.


بالتوفيق لك اخي

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

ولا تتردد في طرح اي استفسار

هامور الصغير
23-04-2013, 09:39 PM
السلام عليكم ورحمة الله وبركاته
ماهو الفائده منه/ هل يتم الاعتماد عليه ؟

imaddine
24-04-2013, 02:03 AM
استاذ موفنج والله ممكن مساعدة في طريقة اضافت المضاعفات
فقد قمت ببرمجت اكسبيرت على رينكو يعمل على نفس
طريقة التي برمجت بها اكسبيرت الاخ بدوي اي انه يفتح صفقة
ولا يغلقها لا عند اغلاق شمعة عكسية يغلقها ويدخل مع اتجاه
الشمعة الجديدة وبالنسبة للاضافة ارده ان لا يغلق الصفقة الخاسرة
في الاشارة العكسية بل يضاعف اللوت +1 فقط اي 1 2 3 4 5 6 7
حتى يخرج من التذبذب
بمعنى انه لو كانت شمعة عكسية يراقب الصفقة لو كانت رابحة
يغلق الصفقة ويبدا من جديد لكن لو كانت خاسرة يحافظ عليها
ويفتح صفقة جديدة عكسية مثلا لوت البداية 0.10 اذا الصفقة الجديدة
0.20 ويبقى على هذا حتى تظهر اشارة عكسية ويكون مجموع الصفقات
موجب يغلق جميع الصفقات ويبدا من جديد

MOVING_AVERAGE
24-04-2013, 12:04 PM
استاذ موفنج والله ممكن مساعدة في طريقة اضافت المضاعفات
فقد قمت ببرمجت اكسبيرت على رينكو يعمل على نفس
طريقة التي برمجت بها اكسبيرت الاخ بدوي اي انه يفتح صفقة
ولا يغلقها لا عند اغلاق شمعة عكسية يغلقها ويدخل مع اتجاه
الشمعة الجديدة وبالنسبة للاضافة ارده ان لا يغلق الصفقة الخاسرة
في الاشارة العكسية بل يضاعف اللوت +1 فقط اي 1 2 3 4 5 6 7
حتى يخرج من التذبذب
بمعنى انه لو كانت شمعة عكسية يراقب الصفقة لو كانت رابحة
يغلق الصفقة ويبدا من جديد لكن لو كانت خاسرة يحافظ عليها
ويفتح صفقة جديدة عكسية مثلا لوت البداية 0.10 اذا الصفقة الجديدة
0.20 ويبقى على هذا حتى تظهر اشارة عكسية ويكون مجموع الصفقات
موجب يغلق جميع الصفقات ويبدا من جديد

اولا اخي لكي تفتح صفقة بلوت عادي تحتاج الي شروط

وصفقة بلوت مضاعة تحتاج الي شروط مغايرة

ماهي الشروط التي تفتح علي اساسها اللوت المضاعف لكي لجيبك

لان الشروط هي الاهم في البرمجة

imaddine
24-04-2013, 03:05 PM
اولا اخي لكي تفتح صفقة بلوت عادي تحتاج الي شروط

وصفقة بلوت مضاعة تحتاج الي شروط مغايرة

ماهي الشروط التي تفتح علي اساسها اللوت المضاعف لكي لجيبك

لان الشروط هي الاهم في البرمجة

الشروط هي نفس الشروط التي ذكرتها ان يقوم
بفتح صفقة بعد شمعة معاكسة وقد ارفقت لك مثال
لتوضيح الفكرة اكثر داخل المربع المرسوم
بعد اغلاق شمعة نازلة يخرج من البيع ويدخل شراء
ونفرض ان لوت 0.10 ما حصل ان الشمعة التالية اغلقت
نازلة اي صفقة خاسرة هنا لا يقوم باغلاق الصفقة الخاسرة
بل يتركها مفتوحة ويدخل بصفقة جديدة بيع بلوت 0.20
الشمعة التي بعدها صاعدة اي مجموع الصفقتين خاسر
لا يغلقهما ويدخل بصفقة ثالث شراء بلوت 0.3
بمعنى دالة تراقب الصفقات المفتوحة لو كانت رابحة
تغلق كل الصفقات في الانعاكس ولو كانت سالبة
تحافظ وتفتح صفقة جديدة +1 عن اخر لوت
http://www.fx-arabia.com/vb/uploaded/12839_01366805117.png

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

imaddine
25-04-2013, 12:55 AM
استاذ موفنج اعلم انك لا تمتلك الكثير من
الوقت نظرا لكثرت الطلبات فالله يكون في عونك
لكن لو سمحت ممكن ان تعدل على هذا الكود
وساقوم باطلاع عليه لدراسته من جديد لو سمحت
double TP,SL;

if(TrailingStop>0)MoveTrailingStop();
//////////////////////////////////////////////////
double openprice,lots,newLot;int s;
if(UseMultiplier){
for(s=0;s<OrdersTotal();s++){
OrderSelect(s,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==OP_BUY){
openprice=OrderOpenPrice();lots=OrderLots();
}
}{

هنا قمت بجعل المضاعف + وكمتغير خاجي جعلت Multiplier =1
حتى تكون المضاعفات 1 2 3 4 5 6
newLot=Multiplier+lots;
if(Ask<=openprice-Step*point&&orderstotal()>=1){
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*poi nt;}

OrderSend(Symbol(),OP_BUY,newLot,NormalizeDouble(A sk,digits),3,0,TP," ",MagicNumber,0,Blue);

}
}
for(s=0;s<OrdersTotal();s++){
OrderSelect(s,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==OP_SELL){
openprice=OrderOpenPrice(); lots=OrderLots();
}
}{

newLot=Multiplier+lots;
if(Bid>=openprice+Step*point&&orderstotal()>=1){
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;}
OrderSend(Symbol(),OP_SELL,newLot,NormalizeDouble( Bid,digits),3,0,TP,"",MagicNumber,0,Red);

}
}
}


//////////////////////////////////////////////////
static datetime NewBar;
if(orderstotal()==0)

{
// close orders
}

double Cl1=iClose(0,0,1);
double Cl2=iClose(0,0,2);

//////////////////////////////////////////////////

if(NewBar<Time[0])

if(Cl2<Cl1)
{CloseSellOrders();}

if(Cl2>Cl1)
{CloseBuyOrders();}

if(profit()>=ProfitTarget){
while(orderstotal()>0){CloseSellOrders();CloseBuyOrders();}
هنا المشكلة الاولى كيف اجعله يحافظ على الصفقات الخاسرة
دون اغلاقها
}
{
// close orders
}
//////////////////////////////////////////////////

if(Cl2<Cl1) {
if(orderstotal()<MaxTrades&&Time0!=Time[0])
{
{
// open orders
Time0=Time[0];
}
//Buy
if(TakeProfit==0){TP=0;}
else{TP=Ask+TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Ask-StopLoss*point;}
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,SL,TP,"",MagicNumber,0,Blue);
}
}
//////////////////////////////////////////////////


if(Cl2>Cl1){
if(orderstotal()<MaxTrades&&Time0!=Time[0])
{
{
// open orders
Time0=Time[0];
}
//Sell
if(TakeProfit==0){TP=0;}
else{TP=Bid-TakeProfit*point;}
if(StopLoss==0){SL=0;}
else{SL=Bid+StopLoss*point;}
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,TP,"",MagicNumber,0,Red);

}
}

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

void CloseBuyOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
}
}
}

void CloseSellOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3);
}
}
}
}
void MoveTrailingStop()
{

for(int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*point,digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*poin t,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)<NormalizeDouble(Bid-TrailingStop*point,digits))||(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(Bid-TrailingStop*point,digits),OrderTakeProfit(),0,Blu e);

}
}
}
else
{
if(TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*point,digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*point,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)>(NormalizeDouble(Ask+TrailingStop*point,digits)))| |(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(Ask+TrailingStop*point,digits),OrderTakeP rofit(),0,Red);

}
}
}
}
}
}

اعتمدت هنا على دالة اغلاق على ربح معين لكن لو امكن
جعل الطريقة كما شرحتها يخرج عند اشارة عكسية مهما كان
الربح كبير او صغير او حتى على نقطة التعادل
double profit(){
double c;
for(int i=0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
c=c+OrderProfit();
}
}
return(c);
}


طبعا ان يحافظ على الصفقات الخاسرة ويضاعف اللوت
1 2 3 4 5 اي كل مرة +1 وعندما تكون الاشارة عكسية
والمحصلة ربح يغلق كل الصفقات ويعيد من جديد
وبارك الله فيك

abou fares
01-05-2013, 05:49 PM
سؤال للاساتذ موفينج لدي اكسبيرت احاول ان اتعلم البرمجة من خلاله ولكن لدي مشكلة لم اجد لها حل وارجوا منك اعطائي المعادلة اللازمة : المشكلة هي عند تحقق شروط الدخول للصفقة شراء او بيع الاكسبيرت يفتح صفقة وعند وصول الصفقة للهدف لا يتوقف الاكسبيرت عن فتح الصفقات لان مازالت جميع الشروط متحققة للبيع او للشراء ارجوا منكم المساعدة وشكرا .

abou fares
04-05-2013, 03:11 PM
للتذكير

احمد ابو القاسم
05-05-2013, 10:59 PM
متابع معك وجزاك الله خيرا

MOVING_AVERAGE
06-05-2013, 12:11 PM
الشروط هي نفس الشروط التي ذكرتها ان يقوم
بفتح صفقة بعد شمعة معاكسة وقد ارفقت لك مثال
لتوضيح الفكرة اكثر داخل المربع المرسوم
بعد اغلاق شمعة نازلة يخرج من البيع ويدخل شراء
ونفرض ان لوت 0.10 ما حصل ان الشمعة التالية اغلقت
نازلة اي صفقة خاسرة هنا لا يقوم باغلاق الصفقة الخاسرة
بل يتركها مفتوحة ويدخل بصفقة جديدة بيع بلوت 0.20
الشمعة التي بعدها صاعدة اي مجموع الصفقتين خاسر
لا يغلقهما ويدخل بصفقة ثالث شراء بلوت 0.3
بمعنى دالة تراقب الصفقات المفتوحة لو كانت رابحة
تغلق كل الصفقات في الانعاكس ولو كانت سالبة
تحافظ وتفتح صفقة جديدة +1 عن اخر لوت
http://www.fx-arabia.com/vb/uploaded/12839_01366805117.png

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

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

MOVING_AVERAGE
06-05-2013, 12:13 PM
سؤال للاساتذ موفينج لدي اكسبيرت احاول ان اتعلم البرمجة من خلاله ولكن لدي مشكلة لم اجد لها حل وارجوا منك اعطائي المعادلة اللازمة : المشكلة هي عند تحقق شروط الدخول للصفقة شراء او بيع الاكسبيرت يفتح صفقة وعند وصول الصفقة للهدف لا يتوقف الاكسبيرت عن فتح الصفقات لان مازالت جميع الشروط متحققة للبيع او للشراء ارجوا منكم المساعدة وشكرا .

تمام سارفق لك مثال مع عدم الشراء في حالة تحققت الشروط

imaddine
06-05-2013, 04:18 PM
ساجيبك بالشرح الممل مع لكود ان شاء الله

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

ayoob
07-05-2013, 05:50 AM
تفضل تعديل فتح الصفقات


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


extern int MagicNumber=1011;
extern double lStopLoss = 100;
extern double sStopLoss = 100;
extern double lTakeProfit = 10;
extern double sTakeProfit = 10;


extern string jj="------";
extern int StopLoss=100;
extern int TakeProfit=10;


extern color clOpenBuy = Blue;
extern color clCloseBuy = Aqua;
extern color clOpenSell = Red;
extern color clCloseSell = Violet;
extern color clModiBuy = Blue;
extern color clModiSell = Red;
extern string Name_Expert = "Stok_scalper EA";
extern int Slippage = 0;
extern bool UseHourTrade = True;
extern int FromHourTrade = 0;
extern int ToHourTrade = 23;
extern bool UseSound = True;
extern string NameFileSound = "alert.wav";
extern double Lots = 2;
int digits,Q;
double point;


int init()
{


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);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
int start()
{

if (UseHourTrade){
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comment("Time for trade has not come else!");
return(0);
} else Comment("");
}else Comment("");
if(Bars<100){
Print("bars less than 100");
return(0);
}
if(lStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(lTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if(sStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(sTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}



double diStochastic0=iStochastic(NULL,60,5,3,3,MODE_EMA,P RICE_CLOSE,MODE_MAIN,3);
double d1=(15);
double diStochastic2=iStochastic(NULL,60,5,3,3,MODE_EMA,P RICE_CLOSE,MODE_MAIN,3);
double d3=(85);

if(AccountFreeMargin()<(1000*Lots)){
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (!ExistPositions()){

if ((diStochastic0<d1)){
open(OP_BUY,Lots,Ask,TakeProfit,StopLoss) ;
return(0);
}

if ((diStochastic2>d3)){
open(OP_SELL,Lots,Bid,TakeProfit,StopLoss) ;
return(0);
}
}
return (0);
}

bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) {
return(True);
}
}
}
return(false);
}

/*
void ModifyStopLoss(double ldStopLoss) {
bool fm;
fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopL oss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
*/

void OpenBuy() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossBuy();
ldTake = GetTakeProfitBuy();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldSto p,ldTake,lsComm,MagicNumber,0,clOpenBuy);
if (UseSound) PlaySound(NameFileSound);
}
void OpenSell() {
double ldLot, ldStop, ldTake;
string lsComm;

ldLot = GetSizeLot();
ldStop = GetStopLossSell();
ldTake = GetTakeProfitSell();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldSt op,ldTake,lsComm,MagicNumber,0,clOpenSell);
if (UseSound) PlaySound(NameFileSound);
}
string GetCommentForOrder() { return(Name_Expert); }
double GetSizeLot() { return(Lots); }
double GetStopLossBuy() { return (Bid-lStopLoss*Point);}
double GetStopLossSell() { return(Ask+sStopLoss*Point); }
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); }
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }

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



int open(int ty,double lot,double prc,int pof,int sll)
{
double sl=0,tp=0;
color clr;
bool modi;
string T;double pr;
if(ty==OP_BUY || ty==OP_BUYSTOP || ty==OP_BUYLIMIT)
{
if(sll>0){sl=prc-(sll*point);}else{sl=0;}
if(pof>0){tp=prc+(pof*point);}else{tp=0;}
clr=Green;
T="Ask ";
pr=NormalizeDouble(Ask,Digits);
}
if(ty==OP_SELL || ty==OP_SELLSTOP || ty==OP_SELLLIMIT)
{
if(sll>0){sl=prc+(sll*point);}else{sl=0;}
if(pof>0){tp=prc-(pof*point);}else{tp=0;}
clr=Red;
T="Bid";
pr=NormalizeDouble(Bid,Digits);
}
int tik=OrderSend(Symbol()
,ty
,lot
,NormalizeDouble(prc,Digits)
,10
,0
,0
,""
,MagicNumber
,0
,clr);
string t;
if(ty==OP_BUY)t="BUY";if(ty==OP_SELL)t="SELL";if(ty==OP_BUYSTOP)t="BUY STOP";if(ty==OP_SELLSTOP)t="SELL STOP";if(ty==OP_BUYLIMIT)t="BUY LIMIT";if(ty==OP_SELLLIMIT)t="SELL LIMIT";
if(tik>0)
{
if(tp>0 || sl>0)modi=OrderModify(tik,prc,NormalizeDouble(sl,Digi ts),NormalizeDouble(tp,Digits),0,CLR_NONE); else modi=true;
if(!modi){Print("Modify Err#= ",GetLastError()," ",Symbol()," ",Period()," Open Price= ",DoubleToStr(prc,Digits)," SL= ",DoubleToStr(sl,Digits)," Tp= ",DoubleToStr(tp,Digits));}
Print("Order Opened successfully " ,"Type ",t," LotSize ",lot," Price ",DoubleToStr(prc,Digits)," TP ",DoubleToStr(tp,Digits)," SL ",DoubleToStr(sl,Digits));
}
else
{
Print("OrderSend failed with error #",GetLastError(), " Type ",t," LotSize= ",lot," ",T,"Now= ",DoubleToStr(pr,Digits)," Price= ",DoubleToStr(prc,Digits)," TP= ",DoubleToStr(tp,Digits)," SL= ",DoubleToStr(sl,Digits)," Spread= ",MarketInfo(Symbol(),MODE_SPREAD));
}
//////
return(tik);

}

تمام اخي مصطفي الان اريد كيفية اضافة متغيرات خارجية لي مستويات البيع والشراء لي الاستوكستك ان قمت بي اضافة اعدادت الاستوكستك ولكن لم اعرف كيفية اضافة متغيرات خارجية لي مستويات الاستوكستك مثلا اريده يشتري من مستوى 25 عشرين وليس 15 او البيع من 70 وليس 85 لانه الاعدادت دخل الاكسبيرات بيع من 85 وشراء من 15 ياريت يتم شراح الكود حتي اقوم بي الاضافة وشكرا
http://www.fx-arabia.com/vb/images/icons/icon7.gif

MOVING_AVERAGE
08-05-2013, 01:10 AM
تمام اخي مصطفي الان اريد كيفية اضافة متغيرات خارجية لي مستويات البيع والشراء لي الاستوكستك ان قمت بي اضافة اعدادت الاستوكستك ولكن لم اعرف كيفية اضافة متغيرات خارجية لي مستويات الاستوكستك مثلا اريده يشتري من مستوى 25 عشرين وليس 15 او البيع من 70 وليس 85 لانه الاعدادت دخل الاكسبيرات بيع من 85 وشراء من 15 ياريت يتم شراح الكود حتي اقوم بي الاضافة وشكرا
http://www.fx-arabia.com/vb/images/icons/icon7.gif


double diStochastic0=iStochastic(NULL,60,5,3,3,MODE_EMA,P RICE_CLOSE,MODE_MAIN,3);
double d1=(15);
double diStochastic2=iStochastic(NULL,60,5,3,3,MODE_EMA,P RICE_CLOSE,MODE_MAIN,3);
double d3=(85);


لاحظ اخي هنا المستويات التي يشتري منها الاكسبريت

d1=15
غيره مثل ما تريد

و

d2=85

غيره مثل ما تريد

ayoob
08-05-2013, 05:07 AM
double diStochastic0=iStochastic(NULL,60,5,3,3,MODE_EMA,P RICE_CLOSE,MODE_MAIN,3);
double d1=(15);
double diStochastic2=iStochastic(NULL,60,5,3,3,MODE_EMA,P RICE_CLOSE,MODE_MAIN,3);
double d3=(85);
لاحظ اخي هنا المستويات التي يشتري منها الاكسبريت

d1=15
غيره مثل ما تريد

و

d2=85

غيره مثل ما تريد
اهلا اخي مصطفي قمت بي عملهم كمتغير خارجي وغيرت القيم الي 25 و 70 ولم ينفد الشراء او البيع من المستويات المطلوبة وينفد من المستويات الافترضية التي هو علية:1 (13):
extern double d1=15;
extern double d3=85;

misho2007
11-05-2013, 03:45 AM
بصراحه شرح اكتر من رائع وبسيط جدا

وانا كان ليا استفسار

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

طيب هل ينفع ياخد اوامر للبيع والشراء من شئ خارجى؟ الايميل مثلا

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

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

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

يعنى انا عارف ان الاكسبرت يقدر يقرا من ملفات ال DLL هل لو تم حفظ معلومات البيع والشراء من الايميل بشكل ما وحفظها فى ملف DLL هل من الممكن ان يقوم الاكسبرت بقرائتها من ملف ال DLL ؟؟


فى انتظار ردك الغالى

tamer_taher22
11-05-2013, 02:58 PM
يسعدنا ان نقدم لكم دورتنا 2

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

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

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

ان شاء الله سنبدء بابسط الامور وصول الي عمل اكسبريت





السلام عليكم

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

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

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

1- طبعا هناك اصدقاء لديهم اكسبريتات تحتاج الى تعديلات حتى يستفيدوا منها و لكن هذا بصراحة يشتت التسلسل للدروس و بالتالى الواحد بيفقد التركيز فى اوقات كثيرة
2- هذا الموضوع تعليمى مشكورا منك و ليس الزاما بينما انا و غيرى نريد ان نتعلم كيف نصطاد السمك لذلك اريد منك لو تكرمت تقوم بشرح اكسبريت بسيط يقوم بعملية الشراء و البيع المباشر بدون اى مؤشرات حتى نتعلم الاساسيات و نتأكد من تنصيبه على الشارت و تفعيله بنجاح
3- نقوم باستخدام بعض المؤشرات البسيطة مثلا عند اغلاقات الشمعة او افتتاح الاسواق او المؤشرات التقليدية
4- اتمنى ان يكون هناك واجبات و الاسئلة تكون فى المرحلة اللى احنا فيها الى ان تصل بنا الى مستوى قريب منك
5- فى حالة مثلا هناك دالات جاهزة مثل الارقام العشرية او عدد الصفقات المفتوحة يمكننا ان نستأذنك بارفاقها لنا
6- ارجو منك لو تكرمت ترتيب الدورس مثل الدرس الاول و الثانى و هكذا
7- اعذرنى انى جئت متأخر و لكنى كنت ابحث عن مساعد مثلك

MOVING_AVERAGE
18-05-2013, 12:41 AM
السلام عليكم

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

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

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

1- طبعا هناك اصدقاء لديهم اكسبريتات تحتاج الى تعديلات حتى يستفيدوا منها و لكن هذا بصراحة يشتت التسلسل للدروس و بالتالى الواحد بيفقد التركيز فى اوقات كثيرة
2- هذا الموضوع تعليمى مشكورا منك و ليس الزاما بينما انا و غيرى نريد ان نتعلم كيف نصطاد السمك لذلك اريد منك لو تكرمت تقوم بشرح اكسبريت بسيط يقوم بعملية الشراء و البيع المباشر بدون اى مؤشرات حتى نتعلم الاساسيات و نتأكد من تنصيبه على الشارت و تفعيله بنجاح
3- نقوم باستخدام بعض المؤشرات البسيطة مثلا عند اغلاقات الشمعة او افتتاح الاسواق او المؤشرات التقليدية
4- اتمنى ان يكون هناك واجبات و الاسئلة تكون فى المرحلة اللى احنا فيها الى ان تصل بنا الى مستوى قريب منك
5- فى حالة مثلا هناك دالات جاهزة مثل الارقام العشرية او عدد الصفقات المفتوحة يمكننا ان نستأذنك بارفاقها لنا
6- ارجو منك لو تكرمت ترتيب الدورس مثل الدرس الاول و الثانى و هكذا
7- اعذرنى انى جئت متأخر و لكنى كنت ابحث عن مساعد مثلك

اهلا بك اخي

بالنسبة لك مثلا ستجد ان اللغة بسيطة جدا لانها اساسا مشتقة من لغة c

نفس الحلقات التكرارية

نفس المتغيرات تقريبا

ممكن ان تدمج لغة c# مع mql4 لعمل مؤشر او اكسبريت قوي

وذلك عن طريق dll

MOVING_AVERAGE
18-05-2013, 12:44 AM
بصراحه شرح اكتر من رائع وبسيط جدا

وانا كان ليا استفسار

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

طيب هل ينفع ياخد اوامر للبيع والشراء من شئ خارجى؟ الايميل مثلا

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

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

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

يعنى انا عارف ان الاكسبرت يقدر يقرا من ملفات ال DLL هل لو تم حفظ معلومات البيع والشراء من الايميل بشكل ما وحفظها فى ملف DLL هل من الممكن ان يقوم الاكسبرت بقرائتها من ملف ال DLL ؟؟


فى انتظار ردك الغالى


بالطبع اخي

لو انك مبرمج او لك نضرة عن البرمجة

فملفات dll ممكن تعمل اي دوال ممكن تتخيلها