النتائج 556 إلى 570 من 626
- 25-08-2014, 10:51 PM #556
- 28-08-2014, 09:43 PM #557
استاذي العزيز جميل
ما زلت اجد صعوبة في عمل الحلقات .. وما زلت اكتفي بنسخها
ارجو ان تشرحها بالتفصيل .. وكيف نجعلها تعود بقيمة ما او عدة قيم ؟؟
معلش يا استاذي بتقل عليك سامحني
وفيه اكسبيرت بحاول اعمله وهرفعه ليك بعد مخلص عشان تراجعه وتشوف ايه الاخطاء الي وقعت فيها
- 29-08-2014, 12:45 AM #558
الموضوع اسهل مما تتخيل ، ضع الدالة مثلا بنهاية الأكسبيرت ، خذ الدالة كمثال ترجع لنا بآخر تيكت يعني آخر صفقة . ثم نستخدم كومنت في دالة OnTick للتعلم بشكل سلس وسريع
كود PHP:int Ticket(){
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo){
return(OrderTicket());
}
}
return(0);
}
كود PHP:Comment(Ticket());
بعدها قم بتعديل الدالة مثلا اجعلها -2 ثم - 3 وستري التيكت الذي ستغير كل مرة حسب طلبك
لاتنسى ان تدخل مثلا 10 صفقات يدوي ولاتنسى ان تعدل في الدالة رقم الماجيك الى 0
الآن ستكون عرفت دور هذه الدالة وتستطيع ان تجعلها مثلا ترجع بآخر لوت لكن بدلا من int تجعل متغير الدالة double واذا اردت الرجوع بتأريخ فتح او اغلاق الصفقة ستجعل الدالة datetime
جرب هذا اليوم واثناء عمل السوق لأنها ستكون أوضح ولاتحتاج باك تست فقط اسحب الأكسبيرت الى الشارت .
بعد التجارب اخبرني ماوصلت له وبعدها نذهب الى نوع آخر من الدوال .
- 29-08-2014, 01:28 PM #559
جزاك الله خير يا استاذ جميل ..
انا شغال دلوقتي وبجرب وبحاول افهم .. وجبت التيكت من الهيستوري
بس كنت عاوز اعرف .. احنا ليه مثلا وضعنا i باكبر من الصفر ؟؟ وليه -- ؟؟
نفسي اكتب اجزاء الحلقة وانا عارف ايه المقصود بيها وايه المقصود ب SELECT_BY_POS
و SELECT_BY_TICKET
لأني لما استعملت التيكت اعطت قيمة 0
- 29-08-2014, 02:42 PM #560
- 29-08-2014, 03:19 PM #561
أعتذر عن التدخل ، و لكني أراك متصلاً فأحببت أن أعجل عليك بالإجابة
الصورة العامة لأمر اختيار الصفقة OrderSelect كالتالي:
كود:bool OrderSelect(int index, int select, int pool=MODE_TRADES)
أنا هنا سأشرح المثال السابق ، و أنت ستفهم بعدها فكرة الدالة من أول نظرة إن شاء الله
ما كتبته باللون الأزرق في الدالة العامة هي أنواع المتغيرات (أو الدوال)
1- وضع كلمة bool أمام الدالة يعني أنها ستعود في الأخير بقيمة ثنائية (بولينية) ، أي عائدين فقط true أو false
فالدالة لو نجحت في اختيار الصفقة ، فإنها ستعود عليك بالقيمة true .. و العكس صحيح
2- وضع كلمة int أمام بارميترات الدالة ، تعني أن القيم المدخلة (arguments) لهذه البارميترات يجب أن تكون من نوع أعداد صحيحة integer
الآن سأجيبك بشكل مباشر على سؤالك حذراً من تشتيت أفكارك
SELECT_BY_TICKET .. سيجعل الاندكس (الباراميتر الأول في الدالة) يعيد رقم التذكرة للصفقة (و هو رقم فريد لا يتكرر)
SELECT_BY_POS .. سيحعل الاندكس يعيد رقم الصفقة من القائمة .. و هي أرقام ترتيبية فقط ترتب قائمة الأوامر ..
أما بالنسبة للتناقص في for loop فهو ضرورة قصوى .. حتى لا يتم تجاوز اندكس في الترتيب ، و هذا ما سيحصل إن استخدمت العداد المتصاعد
عموماً لم لم تفهم أي جزئية من الشرح فأنا تحت الخدمة ..
تجاوزت بعض الأشياء - مثل شرح for loop - لأنني لا أعرف إلى مستوى أنت متقدم في البرمجة
تحياتي
- 29-08-2014, 03:22 PM #562
- 29-08-2014, 03:25 PM #563
ولايهمك اهلا بك في اي وقت
- 29-08-2014, 03:44 PM #564
- 29-08-2014, 03:57 PM #565
- 30-08-2014, 02:52 PM #566
استاذي جميل السلام عليكم
انا بدأت اعمل اكسبيرت سوبلكس بعد ما قريت عن الطريقة عشان مكنتش اعرفها
وناوي اغير شوية ان افتح عقدين في البداية ثم يسير كالمعتاد
وكما نصحتني ابتديت بدالة واحدة وهي الشراء لوضع شروطها ثم اكمل البيع
والحمد لله هي تعمل ولكن الامر المعلق يرفض ان يكون بقيمة لوت مضاعفة .. مش عارف ايه السبب
حاولت ان اجد حل ولكنه دائما يأتي بقيمة اللوت المبدأي ؟؟؟
وسؤال آخر ... انا بفترض ان يفتح مع بداية اليوم .. فماذا لو اردت ان يفتح علي كل شمعة حسب الشارت
ماذا ستكون الصيغة للشرط ؟؟؟؟
دمت بخير وصحة وسعادة يا رب
HRE- Supapleex-EA.mq4
- 30-08-2014, 05:29 PM #567
كل الأخطاء سبق تصحيحها وشرحها ويفترض أن لاتتكرر معاك .
1- هنا خطأ وعليك التصحيح نريد ان نضع معامل ضرب للوت فهل نستخدم bool وهي منطقية للفالس ترو ؟؟؟
كود PHP:extern bool Multi_Factor=2;
كود PHP:int LastOrderLot(int type){ for(int i=OrdersTotal()-1; i>=0; i--){ if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo && OrderType()==type){ OrderLots(); } } return(0);}
كود PHP:double SL=0,TP=0,Price=0,NewLot=Lots;Price=LastOrderPriceB()-(Step*points);if(Multi_Factor>1){ for(int i =0;i<OrdersTotal();i++){ if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo){ NewLot=NormalizeDouble(LastOrderLot(OP_BUY)*Multi_Factor,2);}}}
if(Stoploss>0) SL=Price+Stoploss*points; else SL=0;if(Takeprofit>0) TP=Price-Takeprofit*points; else TP=0;int ticket=OrderSend(Symbol(),OP_SELLSTOP,NewLot,Price,30,SL,TP,"HRE",MagicNo,0,clrRed);
}
كود PHP:for(int i =0;i<OrdersTotal();i++){ if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo){ NewLot=NormalizeDouble(LastOrderLot(OP_BUY)*Multi_Factor,2);}}
- 30-08-2014, 07:59 PM #568
والله يا استاذ جميل وشي منك في الارض
والخطأ الاول جه من اني كنت حاطط متغير منطقي يسمح بالمضاعفة من عدمه
وبعدين لقيت ان الاكسبيرت مش محتاج له لأنه اساسا يعتمد على المضاعفة فلغيت واحد ونسييت اغير معرف الثاني من bool الي double
والدالة كنت كاتب قبليها return ولكنت كانت تظهري تحذير بسبب تعريفها ب int وقعدت نص ساعة اغير فيها كل حاجة وسبحان الله الحاجة الوحيدة الي لم التفت ليها هي نوع القيمة العائدة بها .. ولما التحذير راح بعد ازالة return .. قلت يبقي كده صح .. هو انا هفهم اكتر من الكمبيوتر
اسف استاذي اخطاء لن اقع بها مستقبلا ان شاء الله .. فسامحني
تم التعديل والحمد لله .. وباقي اغير الشرط بان ينفذ كل شمعة حسب الشارت وليس على كل يوم جديد .
- 30-08-2014, 10:13 PM #569
ايه الاكسبيرت الغريب ده يا استاذ جميل ..
دالة OnTick عبارة عن سطرين
الاكسبيرت شغال تمام بس فيه مشكلة وانا عارف انك زهقت مني بس معلش استحملني
المشكلة هي في ان وضعت الاستوب بيساوي الهدف .. والمسافة لفتح العقود هي نفس مسافة الاستوب
يعني لو افترضنا ان الصفقة خسرت 20 نقطة وهي قيمة الاستوب فالمفروض ان تفتح الصفقة العكسية على نفس النقطة وتعطي 20 نقطة مكسب مضاعفة ..
لكن ما يحدث ان الاستوب ياتي مخالفا للهدف والمسافة ..
HRE- Supapleex-EA.mq4
- 31-08-2014, 12:22 AM #570
تفضل الأكسبيرت