النتائج 31 إلى 45 من 192
الموضوع: أصنع أكسبرتك بنفسك
- 08-11-2011, 08:04 PM #31
نبدأ أولا بالنظر لصندوق الأعدادت للمؤشر كما بالصور التالية ويكون الكود الذي سنجربه هو
ويوجد بالمؤشر لون واحد لذلك سنجرب 0 فقط للرقم قبل الأخيركود:iCustom(NULL,0,"Laguerre",0.7,950,0,0)
- 08-11-2011, 08:10 PM #32
الخطوة التالية نعمل سكربت الأختبار ونضعه بالمجلد script ونشغله مرتين مرة للشمعة الحالية 0 ومرة علي بعد 5 شمعات ونقارن النتائج مع وجود المؤشر بملف المؤشرات
كود:#property show_confirm int start() { double Test; Test=iCustom(NULL,0,"Laguerre",0.7,950,0,0); Alert(Test); return(0); }كود:#property show_confirm int start() { double Test; Test=iCustom(NULL,0,"Laguerre",0.7,950,0,5); Alert(Test); return(0); }
سنجد النتائج متطابقة يعني الكود المطلوب هو
كود:iCustom(NULL,0,"Laguerre",0.7,950,0,0)
- 08-11-2011, 08:13 PM #33
مجهود متميز،
ارجوا ان يستفيد الاخوه من هذا العمل،
الله بارك فيك.
- 08-11-2011, 10:24 PM #34
وبعد أن عرفنا كود المؤشر نعمل الأكسبرت.
كود:extern int Takeprofit=60; extern int StopLoss=60; extern double Lot=0.1; extern int Magic=5489; double R; int init() { return(0); } int deinit() { Comment(""); return(0); } int start() { Comment("LaguerreEA"); int T; for (int i = 0; i < OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if ((OrderType() == OP_BUY||OrderType() == OP_SELL)&& T< OrderTicket()) { T= OrderTicket(); } } } R= iCustom(NULL,0,"Laguerre",0.7,950,0,0); if(R>0.75&&T==0) // Buy { T=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-StopLoss*Point,Ask+Takeprofit*Point,"",Magic,0,Red); if(T<0){ Sleep(5000); RefreshRates(); Print(GetLastError()); } } if(R<0.15&&T==0) //Sell { T=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+StopLoss*Point,Bid-Takeprofit*Point,"",Magic,0,Red); if(T<0){ Sleep(5000); RefreshRates(); Print(GetLastError()); } } return(0); }وهذا لنعرف الهدف ووقف الخسارة واللوت ورقم الميجك ونتحكم بهم من الأعدادات.كود:extern int Takeprofit=60; extern int StopLoss=60; extern double Lot=0.1; extern int Magic=5489; double R;
الكود Comment يظهر تعليق مكتوب علي أعلي الشارت علي اليسار وعندما لا نضع الكود المبين بدالة deinit سيظل التعليق ملتصق علي الشارت عندما ننزع الأكسبرتكود:int deinit() { Comment(""); return(0); } int start() { Comment("LaguerreEA");
وهذا الكود مهم عندما نريد للأكسبرت أن يعمل علي الديمو والحقيقي ويبين لنا هل توجد صفقات مفتوحة أم لا فلو كانت T=0 هذا يعني أنه لا توجد صفقات مفتوحة واذا كانت أقل من صفر يعني الأكسبرت حاول فتح الصفقة ولم يتمكن لوجود خطأ.كود:int T; for (int i = 0; i < OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if ((OrderType() == OP_BUY||OrderType() == OP_SELL)&& T< OrderTicket()) { T= OrderTicket(); } } }
كود المؤشر الذي سبق وأن عملناه ولكي يعمل ويعمل معه الأكسبرت لابد من وجود المؤشر بملف Indicator.كود:R= iCustom(NULL,0,"Laguerre",0.7,950,0,0);
وهذا شرط الشراء مع الكود الخاص بالشراء والرقم 3 هو السماحية وممكن نغيرها ل6 أو 10 وكلما كانت صغيرة زادت الدقة ولكن ممكن تجعل الأكسبرت لايفتح صفقات عندما تكون صغيرة .كود:if(R>0.75&&T==0) // Buy { T=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-StopLoss*Point,Ask+Takeprofit*Point,"",Magic,0,Red);
Ask وهو سعر الطلب و Bid هو سعر العرض .
و Point تساوي 0.0001 أو 0.00001 أو0.01 علي حسب الشركة والعملة . .
لو وجد الأكسبرت لم يفتح الصفقة سيقوم بالأنتظار 5 ثواني ويطبع لنا رقم الخطأعند Journal ونستطيع بعدها أن نراجع رقم الخطأ ونعرف سبب عدم فتحه للصفقاتكود:if(T<0){ Sleep(5000); RefreshRates(); Print(GetLastError()); } }آخر تعديل بواسطة Ram22 ، 08-11-2011 الساعة 10:28 PM
- 08-11-2011, 10:46 PM #35
أن شاء الله. ولا تكفي تعلم لغة MQL4 لمن يريد أن يصنع أكسبرتات ناجحة فلابد من تعلم لغات أخري فيوجد مبرمجين أجانب يصنعون برامج تقارن أستراتيجيات كثيرة ثم تختار أفضلها وتعد الأكسبرت اللازم لها بسرعة والمقارنة علي سنوات سابقة وعمل مثل هذا لا بد من تعلم لغات أخري غير MQL4 كي يتم عمله.
- 08-11-2011, 10:51 PM #36
- 09-11-2011, 02:43 AM #37
متابع معك اخى الكريم
سوف ابدأ التطبيق ابتداء من يوم السبت القام لانى الان اتابع من خارج منزلى .. على السريع يعنى
تقبل كامل احترامى استاذنا الكريم
- 09-11-2011, 07:36 PM #38
اين انت اليوم استاذنا الكريم ؟
متابع معك اخى رامى ومنتظر تكمله دروسك الجميله
تقبل ودى اخى
- 09-11-2011, 08:10 PM #39
الدوال الفرعية
الدالة الفرعية هي دالة تكون مسؤلة عن مهمة معينة بداخل الأكسبرت ويتم أستدعاء النتائج الي الدالة الرئيسية وتساعد علي تنظيم العمليات داخل الأكسبرت وبناء الأكسبرت المعقد جزء جزء.
وممكن تكون بهذا الشكل
أوكود:bool LastLow(int t,double r) { bool G; // Code return(G); }
كود:void LastLow(int t,double r) { bool G; // Code }كود:double LastLow(int t,double r) { double G; // Code return(G); }
- 09-11-2011, 08:21 PM #40
توجد لغات كثيرة مثل #C و ++C و فجول بيسك وماتلاب وكل لغة لها مميزاتها وعيوبها يعني ++C صعبة جدا وممتازة جدا والفجول بيسك سهلة وبها عيوب و #C تختلف عن MQL4 ولكن بها نوع من الشبه . والميزة باللغات الأخري أنك لو أتقنتها تستطيع عمل برنامج يحلل ويختبر ويعمل أكسبرت بمعرفتك وتعمل باك تست للأستراتيجيات بها الميزات التي تريدها .
- 09-11-2011, 08:36 PM #41
مثال : أعمل أكسبرت يقوم بأخبارنا أين يتحرك السعر الأن بالنسبة للمؤشر الموجود بالصورة بأستخدام الدوال الفرعية ويظهر لنا صندوق يخبرنا عن مكان السعر .
- 09-11-2011, 09:20 PM #42
الخطوة الأولي نعد الكود الذي نحتاجه لأستدعاء المؤشر ويكون عندنا خمسة أكواد نحتاج أن نختبرها
كود:R1= iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,0,0);
كود:R2=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,1,0);
كود:R3=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,2,0);
كود:R3=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,3,0);
كود:R3=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,4,0);
- 09-11-2011, 09:25 PM #43
- 09-11-2011, 09:51 PM #44
الخطوة التالية نعمل أسكربت الأختبار ونجرب الأكواد الخمسة السابقة
وبعد المقارنة يكونكود:#property show_confirm int start() { double R1,R2,R3,R4,R5; R1=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,0,0); R2=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,1,0); R3=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,2,0); R4=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,3,0); R5=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,4,0); Alert("المتغير الأول "+R1); Alert("المتغير الثاني "+R2); Alert("المتغير الثالث "+R3); Alert("المتغير الرابع "+R4); Alert("المتغير الخامس "+R5); return(0); }
أدني خط هو
والخط الذي يعلوه هوكود:iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,4,0)
والذي يعلوه هوكود:iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,2,0)
والذي يعلوه هوكود:iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,0,0)
والذي يعلوه هوكود:iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,1,0)
كود:iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,3,0)
- 09-11-2011, 11:01 PM #45
ويكون الأكسبرت هو
كود:int T; double Line1,Line2,Line3,Line4,Line5; int init() { Alarm(); return(0); } int start() { Alarm(); return(0); } int Pricenow(double price){ int Q; Lines(); if(price > Line4)Q=1; if(price < Line4&&price>Line2)Q=2; if(price < Line2&&price>Line1)Q=3; if(price < Line1&&price>Line3)Q=4; if(price < Line3&&price>Line5)Q=5; if(price < Line5)Q=6; return(Q); } void Lines(){ Line1=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,0,0); Line2=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,1,0); Line3=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,2,0); Line4=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,3,0); Line5=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,4,0); } void Alarm(){ T=Pricenow(Bid); if(T==1)Alert("السعر يتحرك فوق المؤشر"); if(T==2)Alert("السعر يتحرك تحت الخط العلوي وفوق الخط قبل العلوي"); if(T==3)Alert("السعر يتحرك فوق خط المركزوتحت الخط الذي قبله"); if(T==4)Alert("السعر يتحرك تحت خط المركز وفوق الخط الذي قبله"); if(T==5)Alert("السعر يتحرك مابين الخط الأخير والذي قبله"); if(T==6)Alert("السعر يتحرك تحت المؤشر"); }
ولتسهيل عمله قمنا بتقسيم الشارت لستة مناطق مرقمة من 1 الي 6 وتقوم هذه الدالة الفرعية بأرسال أرقام تبين مكان السعر
بينما تقوم هذه الدالة الفرعية بأعطاء قيم المؤشركود:int Pricenow(double price){ int Q; Lines(); if(price > Line4)Q=1; if(price < Line4&&price>Line2)Q=2; if(price < Line2&&price>Line1)Q=3; if(price < Line1&&price>Line3)Q=4; if(price < Line3&&price>Line5)Q=5; if(price < Line5)Q=6; return(Q); }
أما هذه الدالة الفرعية فترسل التنبيهكود:void Lines(){ Line1=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,0,0); Line2=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,1,0); Line3=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,2,0); Line4=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,3,0); Line5=iCustom(NULL,0,"Center of Gravity",125,2,0,2,1102,4,0); }
كود:void Alarm(){ T=Pricenow(Bid); if(T==1)Alert("السعر يتحرك فوق المؤشر"); if(T==2)Alert("السعر يتحرك تحت الخط العلوي وفوق الخط قبل العلوي"); if(T==3)Alert("السعر يتحرك فوق خط المركزوتحت الخط الذي قبله"); if(T==4)Alert("السعر يتحرك تحت خط المركز وفوق الخط الذي قبله"); if(T==5)Alert("السعر يتحرك مابين الخط الأخير والذي قبله"); if(T==6)Alert("السعر يتحرك تحت المؤشر"); }
الأكثر زيارة
رد مع اقتباس