النتائج 3,961 إلى 3,975 من 10335
الموضوع: موضوع مخصص للأسئلة البرمجية
- 03-06-2013, 11:26 PM #3961
رد:موضوع مخصص للأسئلة البرمجية
وعليكم السلام ورحمة الله وبركاته
لو مثلا أنت لديك بعض الأوامر تريد تنفيذها في شروط معينه مثل كود إغلاق الصفقة فإذا لم يكن هناك ما يسمى الدوال
فكان يجب أن تكرر كود إغلاق الصفقات مع كل شرط هذه هي فكرة إستخدام الدوال
طريقة تعريف الدالة
سنأخذ كمثال داله بسيطه
كود PHP:double Function(double a,double b)
{
double c=a+b;
return(c);
}
جعلت الداله من نوع double فهذا يعني أنها ستأخذ قيم أرقام عشرية ويمكنك تعريفها كأي نوع آخر
int أو string أو bool أو datetime أو color جميع المتغيرات المعروفه
أو إذا كانت الداله لا تحفظ قيمه معينه وتنفذ شروط فقط تستخدم void لتعريفها أي أنها لا تعود بأي قيمه
بعد تعريف الداله بداخل القوسين ( ) هذا الجزء يسمى متغيرات الداله في المثال السابق جعلت
متغيرات الداله هو a و b وجعلتهم من نوع double أي ستأخذ أرقام عشرية
ثم بداخل أقواس الداله { } أقوم بكتابة الكود الذي أريد تنفيذه عند إستدعاء الداله
وفي نهاية الدالة أستخدم الأمر return وهو يستخدم لحفظ القيمه أو المخرجات النهائية للداله بحيث عندما أستدعي الداله سوف تعود بقيمة هذه المخرجات
مثلا لو كتبت
كود PHP:int Number = Function(5,10);
نأتي الآن للداله التي أرفقت الكود لها
كود PHP:void AddBuy(){
if(Q>ordersS(MagicNumberB)&&ordersS(MagicNumberB)>0){
for(int i=0;i<OrdersHistoryTotal();i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if(OrderType()==OP_BUY){
int type=OrderType();double open=OrderOpenPrice();double lott=OrderLots();double stop=OrderStopLoss();
double profit=OrderTakeProfit();
}
}{
if(Ask>open+3*point){
OrderSend(Symbol(),OP_BUYLIMIT,lott,open,3,stop,profit,"MR.dollar EA",MagicNumberB,0,Green);}
if(Ask<open-3*point){
OrderSend(Symbol(),OP_BUYSTOP,lott,open,3,stop,profit,"MR.dollar EA",MagicNumberB,0,Green);}
}
}
}
إسم الداله هو AddBuy وسوف تجد بين القوسين ( ) لا توجد أي قيمة فهذا يعني أن الداله لا تأخذ أي قيم متغيرات
الكود بداخل الداله وهو الذي سيتم تنفيذه عند إستدعاء الداله
كود PHP:for(int i=0;i<OrdersHistoryTotal();i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if(OrderType()==OP_BUY){
ثم يحدد إذا كانت الصفقة نوعها شراء يحفظ بيانات الصفقه ( سعر فتح الصفقه , حجم الوت , الهدف , الأستوب نوع الصفقه )
ثم إذا كانت السعر أكبر من سعر فتح الصفقه يضع أمر ليميت
كود PHP:if(Ask>open+3*point){
OrderSend(Symbol(),OP_BUYLIMIT,lott,open,3,stop,profit,"MR.dollar EA",MagicNumberB,0,Green);}
كود PHP:if(Ask<open-3*point){
OrderSend(Symbol(),OP_BUYSTOP,lott,open,3,stop,profit,"MR.dollar EA",MagicNumberB,0,Green);}
}
- 03-06-2013, 11:28 PM #3962
مثلا لو جعلت خيار DistanceBetweenBuyS =30 و جعلت Distance_AddBuyS =5
فسوف يضع أول أمر على بعد 30 نقطه ثم ثاني أمر على بعد 35 نقطه ثم ثالث أمر على بعد 40 نقطه وهكذا في كل مره يزود على عدد نقاط الإستيب DistanceBetweenBuyS بمقادر قيمة Distance_AddBuyS
هذا هو الشرح بإختصار
- 04-06-2013, 12:04 AM #3963
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم ورحمة الله وبركاته
افضل مابفتح موضوع جديد ارجوا قبول سؤالي هنا
قرات دروس الاستاذ مستر دولار واستفدت منها كثيرا ودروس الاستاذ حكيم
فجزاهم الله كل خير
اليوم قمت بعمل اول اكسبيرت يفتح صفقه ويغلقها
شعور جميل الكمبيوتر يتاجر عنك
المهم ....
موضوع اداره الصفقات والمضاعفات
مازلت في بدايه تعلم لغه Mql4 ولكن ياريت شرح لي هذه الفكره بشكل كود
على سبيل المثال قمت بعمل ميثود شراء وميثود بيع
عندما تتحق شروط شراء يدخل وعندما يتحقق شروط الببيع يدخل باستدعاء الميثود
يوجد متغير خارجي الاستوب :__
متغير خارجي الهدف :___
متغير خارجي عدد المضاعفات: 5
على فرض دخل صفقه شراء بهدف 25 واستوب 25
عكس السوق ضرب الاستوب تماام .؟
الصفقه الثانيه يدخل بحجم عقد يعوض الخساره السابقه في الصفقه الاولى + تحقيق هدف الثانيه
اذا تحقق الهدف في الصفقه الثانيه يكون هنا عوض الخساره في الصفقه الاولى فرضا 50 دولار
وفي الصفقه الثانيه حقق ربح 50 دولار اجمالي ماحققه في الصفقه 2 هو 100 $
على اي اساس يتم تحديد حجم اللوت .؟
يتم تحديده بناء على عدد المضاعفات كما هو موضح هنا 5
فهو يدخل في العقد الاول بناء على اذا ضرب استوب في 4 صفقات وحقق الهدف في صفقه 5
يعوض كل ماسبق + هدف الصفقه الخامسه
بمعنى صفقه 1 خسرانه صفقه 2 خسرانه صفقه 3 خسرانه 4 خسرانه لكن في 5 حقق هدفه
يقوم هنا بتعويض خساره 1 و2 و3 و4 + هدف 5 وكل هذا بناء على حجم العقد
في حال تحقق هدف صفقه الخامسه يتم تعويض كل ماسبق وتحقيق هدفه واذا خسرت صفقه الخامسه ينضرب المارجن كووووول
صارلي ساعات بحاول افكر كيف يتم عملها بشكل كود ماعرفت وكيف اساسا يتم حساب حجم اللوت لم اعرف المعادله لهذه طريقه
بعرف انها طريقه خـــطـــره ولكن ياريت مستر دولار او احد الاخوان يشرحها لنا ياريت مستر دولار هو من يشرح
لاني تعودت على دروسه
ايضا : في حال طفئ الجهاز او فصل النت ودخل الاكسبيرت ثاني مره يعرف نفسه هو حاليا في اي مضاعفه
اسف على الاطاله ولكني متحمس لغه MQL4
شــــكــــراً مستر دولار وشكرا لكل من يقدم مساعده لوجه الله
جزاكم الله خير
- 05-06-2013, 07:59 PM #3964
- 06-06-2013, 12:11 AM #3965
رد:موضوع مخصص للأسئلة البرمجية
تحديدك للمضاعفات يعتمد على فكرة الاستراتيجية
يعني في الاكسبيرت الذي عرضته في موضوع مستقل انا فتح عقد من نوع واحد بيع او شراء وملاحقة الهدف بنفس نوع الصفقة
هنا مضاعفاتي ستكون مضروب في 2 وبالتالي اعمل معادلة بحيث اذا تراجع السعر الى نقطة مرجعية ولتكن -50 سيكون لزام علي ضرب زيادة الصفقة القادمة بمعدل معين
لكن لنفترض انك تريد الوقف بالنسبة للخسارة = 3:1
يعني هدفك 3 اضعاف الوقف
هنا العملية تراكمية سيكون عليك عمل متغير للمجموع التراكمي
لنفرض متغير SLT يعطي خسارة اخر لوت وليست جميع اللوتات
وعندك خسارة تراكمية ل 5 لوتات SLT هي خسارة اللوت رقم 5
وتريد حساب اللوت رقم 6 مثلا
تضيف متغير آخر وتسميه GrossLoss يعني اجمالي الخسارة التراكمية من اول لوت الى اللوت الاخير وهو 5
المتغير الاخير يصبح كمعادلة
GrossLoss=GrossLoss+SLT فاذا كان اول لوت فيكون المتغير الاخير قيمته صفر كقيمة بدائية
ثم تعمل معادلة اخرى لحساب اللوت القادم
لنفرض M تعني لوت
TP هو الهدف
M=(TP+GrossLoss
/TP
يعني مجموع الخسارة التراكمية زائد الهدف ثم تقسم الناتج على الهدف ليعطيك قيمة اللوت ولكن قربه الى رقمين بعد الفاصلة
انا حاليا اعد اسكريبت مضاعفات وهذه فكرتي ولكن في طور التجربة
بالنسبة اذا اغلق الجهاز فانك تريد قيمة أخر لوت هنا عند حل وهو تحسب مجموع ordertotal في الهستوري - 1 وتاخذ قيمة اللوت وهي آخر صفقة تم قفلها ان اغلقت اما اذا كانت الصفقة موجودة تستطيع الحصول علي قيمة اللوت منها لكن المهم الخسارة التراكمية كيف تحصل عليها ؟
اذا كانت الصفقت قد اغلق فتبحث في الهستوري من خلال دالة البحث وعن طريق الماجك نمبر تعمل عملية مقارنة من اخر صفقة اغلقت فان كانت اخر صفقة رقمها سالب تأخذه وتجمعها مع الصفقة قبل الاخيرة المغلق بششرط ان تكون سالبة ولكن ان كانت الصفقة موجبة فهذا دليل على ان انه عند صفقتان اغلق بخسارة والتي قبلهما كانت رابحة وتاخذ المجموع التراكمي للخسارة وتضيفه على المفتوحة الحالية او ان لم يكن هناك صفقة مفتوحة فيكون اجمالي الخسارة عندك ومن المعادلة السابقة تحسب اللوت الجديد للصفقة الجديدة حتى تخرج بصافي ربح للصفقة الجديدة
الموضوع يتحاج الى تفكير رياضي بعض الشي
وانا اعد سكريبت لذلك وهذه فكرتي ولكن ان كانت هناك افكار اسهل من هذا فالنقاش مطروحآخر تعديل بواسطة wadi2012 ، 06-06-2013 الساعة 12:19 AM
- 06-06-2013, 02:19 AM #3966
رد:موضوع مخصص للأسئلة البرمجية
صراحه لم افهم عليك هذه عيب مني وليس منك لانه مازلت في بدايه هذه لغه ,,,
على كل حال رغبت بمعرفه كيف بتحكم بحجم العقد برمجيا وبشكل تومتيك
موضوع انني ابرمج اكسبرت مضاعفات او اكسبرت يفتح صفقات حقيقه فهذا شيئ بعيييييييد حالياً
يبدو انني لم اوضح طلبي بشكل مطلوب
سوف ابحث بالموضوع
جزاكم الله خير
- 06-06-2013, 02:28 AM #3967
رد:موضوع مخصص للأسئلة البرمجية
انا وضعت اكسبيرت وهو اول اكسبيرت لي بعد اقل من شهر تعلم وفكرته مضاعفات ووضعت ملف السورس اطلع عليه ولاحظ طريقتي في فتح صفقات بمضاعفات ولكن الكود بسيط لم اطوره لانه يحتاج بعض التطوير في حالة فتحت صفقات من عملات اخرى في نفس الوقت والفصل بينهم في حالة الاغلاق لكن اخذت في الاعتبار في حالة ان السيرفير او الكمبيوتر فصل فيمكن الاستمرار من اخر نقطة لانني استعيد اخر لوت ونوع الصفقة ودليل عدم فتح صفقات طالما هناك صفقة مفتوحة
آخر تعديل بواسطة wadi2012 ، 06-06-2013 الساعة 02:32 AM
- 06-06-2013, 06:45 PM #3968
رد:موضوع مخصص للأسئلة البرمجية
وعليكم السلام ورحمة الله وبركاته
يوجد أكثر من طريقة لتحديد عقود المضاعفات
الطريقة الأولى مثلا إذا كان الأستوب عدد نقاط ثابته بالتالي يجب أن تضاعف حجم اللوت كل مره مضروب في 2
فمثلا لو كان حجم ألوت لوت 0.1 لوت ولنفرض الخساره 50 نقطه بالتالي الخساره ستصبح 50 دولار
فحتى تعوض الخساره السابقه يجب أن يكون حجم اللوت التالي 0.2 حتى يكون الربح 50 نقطه أي الربح بالدولار سيكون = 50*0.2 = 100 دولار
وهكذا الصفقه الثالثه ستصبح 0.4 والصفقه الرابعه 0.8 والصفقه الخامسه 1.6
أي في كل مره ستضرب حجم آخر لوت * 2
مثال للكود
كود PHP:double LastOrderLot()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
return(OrderLots());
}
}
return(0);
}
كود PHP:newLot=LastOrderlot()*2;
- 06-06-2013, 06:46 PM #3969
- 07-06-2013, 02:53 PM #3970
رد:موضوع مخصص للأسئلة البرمجية
استادي ماستر دولار هل يمكن ان اجعل لللاكسبيرت 2 ماجيك نمبر لاني اريد جمع طريقتين في اكسبيرت واحد واريد ان اجعل لكل طريقة ماجيك نمبر حتى يسهل التعامل مع الصفقات
السؤال الثاني
الاكسبيرت سيكون لديه عدد كبير جدا من الشروط و المتغيرات واخشى ان وضعته داخل الدالة ستارت ا ان يؤثر هدا على سرعة الجهاز او السيرفر لانه على كل تك سيكون ضغط على المعالج
و اريد تشغيله على الساعة وان يقوم بالشروط مرة واحدة فقط خلال افتتاح ساعة جديدة ثم يتوقف حتى الافتتاح الجديد
لدلك افكر في جعل الاكسبيرت يعمل فقط ادا كان المتغير Minute() يساوي 1 حتى يخفف الضغط على المعالج
هل هناك حل اخر من غير هدا الحل؟
بارك الله فيك
- 07-06-2013, 07:46 PM #3971
مستر دولار أستاذي الكريم أرجو أن تكون في أفضل صحة وحال
في محاولة لبرمجة اكسبيرت لصديق واجهتني مشكلة رياضية بسيطة
لدينا مؤشر عبارة عن مستويات خطوط كل خط له اسم من H2 ; H1.... إلى H20
والمستويات عبارة عن كائن على الشارت وليس اندكس
وأريد فتح صفقة عند كل مستوى
إذن
عوض أن نضع شرط لكل مستوى كيف نختصر كثرة الأكواد إلى كود واحد يتحكم في جميع المستويات
يعني يكون عندنا شرط يتوفر على اسم من نوع Hi و i تحتسب من 1 إلى 20
ماهي معادلة i ؟
كود PHP:void TechnicalAnalysis()
{
double lineH=ObjectGet("Hi",OBJPROP_PRICE1);
if (Close[1] > lineH)
{
BuyOrder();
}
}
آخر تعديل بواسطة kira-h ، 07-06-2013 الساعة 07:53 PM
- 07-06-2013, 08:41 PM #3972
رد:موضوع مخصص للأسئلة البرمجية
بعد إذن أستاذ أسامة
تضع حلقة تبحث في الأرقام من 1 إلى 20 وتقوم بإضافة المتغير على إسم الكائن
كود PHP:
void TechnicalAnalysis()
{
for(int i=1;i<=20;i++){
double lineH=ObjectGet("Hi"+i,OBJPROP_PRICE1);
if (Open[1] < lineH && Close[1] > lineH)
{
BuyOrder();
}
}
}
خد بالك لازم تخلي الشرط بالشكل ده
كود PHP:if (Open[1] < lineH && Close[1] > lineH)
وإلا مثلا عند الكائن Hi3 سيعتبر أنه أعلى من Hi1 و Hi2 وبالتالي سيستمر في فتح عمليات
- 07-06-2013, 11:59 PM #3973
تسلم يالغالي على دعمك
بارك الله فيك إن شاء الله نتعلم هذه لغه قمت بتفريغ نفسي لدراسه اللغه بشكل جدي ,,,
لانه بالفعل شعور ممتع الكمبيوتر يتاجر عنك وانت عايش حياتك ولكن يلزمنا مجهود
المضاعفات بــحـــر وطلبي حاولت تعلم ابسط شيئ بالمضاعفات واجمل مضاعفات هي فيبوناتشي وباتجاه السوق
- 08-06-2013, 12:41 AM #3974
رد:موضوع مخصص للأسئلة البرمجية
اهلا استاذنا شكرا لك
لك الفضل بعد الله انت والاستاذ حكيم بدخولنا الى لغه MQL4 فجزاكم الله خير ونفع بكم
اذا سمحت لي بقوم باعاده طلبي السابق بتوضيح اكثر
وهنالك نقطه كانت غيبه عني وهي السبريد ...
هنا نعرف انه يتم ضرب بــ 2 حجم العقد ولكن المشكله هو كيف الاكسبيرت يحسب اول عقد له .؟
وليس بشكل يدوي يعني تجعل الاكسبيرت يقوم بحساب "أول عقد بشكل تومتيك " دون تدخل منك لتضع له اول عقد
ويقوم هو بحساب حجم العقد بناء على الهدف الذي تم وضعه والاستوب وعدد المحاولات + اقصى سبريد
في اكسبيرت بسيط جدا في حال كان فوق مستوى 50 RSI يقوم بالشراء اذا اسفل يبيع
ليس هذا المهم ولكن المهم هو تعديل حجم اللوت بشكل تومتيك في الاكسبيرت انا قمت بوضعها بشكل تعديل يدوي
الان يلزمنا متغير خارجي هو عدد المضاعفات
وحذف متغير لوت حتى الاكسبيرت يتحكم فيه بناء على
كم هو رأس المال حالياً
ماهو الهدف
ماهو الاستوب
اقصى سبريد ممكن يوصل له زوج ( وهنا نضيف للاكسبيرت اذا سبريد اكبر من maxspread يتجاهل الصفقه )
ماهو عدد المضاعفات فرضا قمت بوضع 5
الاكسبيرت يدخل الصفقه الاولى بحجم اللوت بناء على تعويض الصفقات + سبريدهم بمعدل 5 صفقات
مثلا ضرب استوب الصفقه 1 مثلا 20 نقطه وخسر 50 دولار + سبريد 4 هنا 54 دولار
الصفقه التاليه يدخل بحيث انه يعوض الصفقه 1 + سبريده الذي قمنا نحن بوضعه اساسا هو 4 يعني فقط يجمع زياده 4
وهكذا في حال وصل للصفقه 5 الاخيره يعوض كل ماسبق + سبريدهم + هدف الصفقه الحاليه وهو 20 نقطه
اذا خسرت الصفقه الخامسه يزورك المارجن كول
وهنا يجب ان ناخذ بعين الاعتبار يتعرف الاكسبيرت على نوع الحساب ميكرو ميني ستاندر وياخذ بعين الاعتبار رافعه الماليه بحيث اذا وصل المضاعفه 5 يقوم تنفيذها ولايخبرك انه راس المال لايكفي .!
واذا فصلت الكمبيوتر ورجعت تشغل الاكسبيرت يكمل عمله ولا كأن شيئ حدث ويكمل المضاعفات ,,,
هنالك مشكله ايضا اذا ستطعت تعديلها " جننتني " هي هنا
https://forum.arabictrader.com/t171452.html
جاوبوني الاخوه مشكورين اخبروني استعمل ميثود OrderModify وقمت بوضعها بالاكسبيرت الحالي
شغلت الاكسبيرت المرفق يوم الجمعه وايضا الهدف والاستوب يتغير .! احيانا يربح 7.76 واحيانا 8 واحيانا 9 دولار مع العلم الستوب ثابت والهدف ثابت والمسافه تظهر على الشارت متغيره مابين نقط الدخول والهدف والاستوب صحيت وجدته داخل صفقه مفتوحه بدون استوب وبدون هدف
ياريت لو لديك ترغم ميتاتريدر يلتزم بالاستوب والهدف 100 % بدون تغير تقوم اضافاتها للاكسبيرت
اتمنى منك تقوم بتعديل الاكسبيرت المرفق واضافه ماسبق وشرح الاضافات قمت بها لانه اكسبيرت سهل جدا
وراح بفهم الاضافات التي قمت بها بسرعه ولا ننسى انه لوت الاول الاكسبيرت هو من يحدده
بعتذر على الاطاااله
جزاكم الله خير ونفع بكم
- 08-06-2013, 01:11 AM #3975
رد:موضوع مخصص للأسئلة البرمجية
نعم يمكنك وضع أي عدد ماجيك نمبر كما تريد
يمكنك جعل الإكسبرت يقوم بالبحث عن تحقق الشروط مره واحده فقط مع بداية كل شمعه . وهذه الطريقة مفيده جدا في حال كان الإكسبرت يعتمد في الدخول على تحقق الشروط في الشمعه التي أغلقت بالتالي لن تؤثر على نتائج الإكسبرت
مثال
كود PHP:static int NewBar;
if(NewBar=Time[0])return;
NewBar=Time[0];
المواضيع المتشابهه
-
موضوع مخصص للاكسبيرتات اللتي يستخدمها الاعضاء على الحقيقي,,عندك اكسبيرت ممتاز ضعه هنا
By محمد معمو in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 11آخر مشاركة: 15-12-2023, 02:03 PM -
عااااااااااااجل ( موضوع مخصص للفرص الفورية)!!!
By عاشق الذبذبـة in forum توقعات وتوصيات سوق العملاتمشاركات: 280آخر مشاركة: 27-08-2009, 10:30 PM