عفوا استاذي الفاضل لقد وجدت الخطأ وقد كان نسياني لكتابة الشرط : if(StopEAToday)return;
لك تحياتي وأحترامي
Printable View
بسم الله
شكرا لكل القائمين على الموضوع وبصراحة بديت اتعلم امور احتاجها بالبرمجة
واجهني استفسار
هنالك مؤشرات لا يوجد بها index ما هية طريقة استخراج شرط البيع والشراء منها ؟؟
بالمرفقات مثال عن هذه المؤشرات
قمت بتغيير سعر مكان الأمر الجديد لـ 10 نقاط وتعديل الهدف والاستوب لوز كالتالى
وبالنسبة لتعريف ticket2 خارج ستارت ، انا قمت بعمل التعديل ولكن لى سؤال ، أنا غالبا أقوم بتعريف اى متغير ticket داخل ستارت مع أوردر سيند ولا تظهر أخطـاء ، ما السبب !!كود PHP:if(StopLoss==0){SL=0;}else{SL=(OpenPrice2()+20*point)-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=(OpenPrice2()+20*point)+TakeProfit*point;}
- بعد عمل ماسبق تم وضع الأمر المعلق وتحريكه مع السعر ولكن ظهر خطـأ
OrderModify error 1
- سأقوم بعمل الدالة وأخبرك النتيجة
استاذ اسامة ، فـ الاكسيبرت المرفق حذفت الكود الخاص بفترة الصلاحية
ولكن ظهرت أخطـاء عند الكومبايل ولم يعمل الاكسيبرت ، وحاولت حذف ما بداخل دالة init ولكن مازالت المشكلة موجودةكود PHP:if (gs_108 == "OVTM") gs_108 = "The product has expired";
مستر دولار / استاذ اسامة
الكود مظبوط وتمام بس انا مكنتش عاوز المضاعفات تضرب فى عدد صحيح وبمعنى اصح عاوز اققل المضاعفات
يعنى اضربها فى اى متغير وليكن 1.3 مثلا ولما جربت اغير النسبة اشتغلت على عقود مينى ولم عملت العقود ميكرو المضاعفات مشتغلتش
فأنا عاوز اخلى المضاعفات تشتغل مع الميكرو وشكرا
ممكن دالة لإكسبيريت مهمته تعديل الصفقات المفتوحة
الفكرة أنه يوجد لدي مثلا صفقة شراء أو بيع ، مثال توضيحي
قمت بشراء EURUSD عند مستوى 1.2344 والهدف مستوى 1.2377
و وضعت أمر تعزيزأولي لعملية الشراء عند مستوى 1.2304 والهدف 1.2384
ثم نزل السعر وتفعل أمر التعزيز الأولي
هنا الاكسبيريت يقوم بتعديل هدف العملية التعزيزية الاولية عند مستوى الدخول الأول للعملية الاساسية ( أي الهدف يكون 1.2344 )
كذلك تعديل الهدف الخاص بالعملية الأساسية إلى نقطة الدخول ( أي عند 1.2344 )
بحيث يكون الهدف لكلا الصفقتين هو 1.2344
أيضا لو نزل السعر وتفعلت صفقة التعزيز الثانية يقوم الاكسبيريت بتعديل جميع الصفقات وجعل هدفها نفس هدف الصفقة الثالثة
أرجوا أن تكون الفكرة وضحت لإني مبتدىء بالبرمجة ولم أفهم كيف أعمل هذه الفكرة
* الأوامر أضعها مسبقا ً حسب طريقتي الرقمية
* ربما يتفعل التعزيز الأولي ( التبريد الأولي ) فقط وربما أحياناً يتفعل التعزيز الثاني ( التبريد الثاني ) وربما أحيانا ً يتحقق الهدف من أول أوردر
* الفكرة هي تعديل الأهداف إذا تفعل التبريد الأولي والتعديل يكون هدف الصفقتين نقطة دخول الصفقة الأساسية ، وفي حال تفعل التبريد الثاني يكون الهدف للكل ( الصفقات المفتوحه ) هو نفس الهدف الخاص بصفقة التبريد الثاني
حسب ما أرى في الشارت المرفق فالصفقات أغلقت تماما على النقاط المحققه ( إذا كنت تقصد الصفقات التي عليها سهم )
فهي أغلقت على سعر إغلاق الشمعه السابقه عندما وصل السعر لها
أيضا الأفضل أن تجعل شروط الإغلاق
حتى في حال التحرك السريع للسعر وربما عدم المرور نقاط الأستوب فقد لا يغلق الإكسبرت الصفقات عندهاكود PHP:if(Bid<buys1||Ask>SeLLsl){CloseOrders();}
بالنسبه لإضافة مؤشرات بتايم فريم مختلف وعمل مؤشرات منها فهي تختلف قليلا عن الإكسبرتات
لماذا
لنفرض حاليا على شارت الساعه
ووصلت للشمعه رقم 10 وتريد حساب الشروط عندها فسوف تكون الشمعه المحدده بالخط الأحمر
الملف المرفق 333706
لكن عندما تذهب إلى فريم الأربع ساعات فأيضا رقم الشمعه سيكون 10
المحدده بالخط الأبيض
الملف المرفق 333705
لاحظ الفرق الذي حدث والخطأ وهذا نظرا لأنها عندما قام بحساب 10 شمعات على فريم الساعه في الحقيقه المفروض أن يقف عند الشمعه رقم 2 على فريم الأربع ساعات
وهذا ما قد يسبب الخطأ ونفس الخطأ على فريم اليومي أو أي فريم آخر
بالتالي الكود يجب أن يكون
كود PHP:int shift;
double up =iCustom(NULL,0,"auto recommended",2,i+1);
double down =iCustom(NULL,0,"auto recommended",3,i+1);
double up2 =iCustom(NULL,0,"auto recommended",2,i+2);
double down2 =iCustom(NULL,0,"auto recommended",3,i+2);
double IchimoA=iIchimoku(NULL,0,9,26,52,MODE_SENKOUSPANA,i+1);
double IchimoB=iIchimoku(NULL,0,9,26,52,MODE_SENKOUSPANB,i+1);
shift=iBarShift(Symbol(),Ichimoku_TIME_FRAME,Time[i],false);
double IchimoAA=iIchimoku(NULL,Ichimoku_TIME_FRAME,9,26,52,MODE_SENKOUSPANA,shift+1);
double IchimoBB=iIchimoku(NULL,Ichimoku_TIME_FRAME,9,26,52,MODE_SENKOUSPANB,shift+1);
shift=iBarShift(Symbol(),Ichimoku_TIME_FRAME_2,Time[i],false);
double IchimoAAA=iIchimoku(NULL,Ichimoku_TIME_FRAME_2,9,26,52,MODE_SENKOUSPANA,shift+1);
double IchimoBBB=iIchimoku(NULL,Ichimoku_TIME_FRAME_2,9,26,52,MODE_SENKOUSPANB,shift+1);
وعليكم السلام ورحمة الله وبركاته
اللون الآخضر الفاتح فهذا يعني أن البيانات التاريخيه تم أخذها من فريم الدقيقه ودقة الباك تست تعتمد على بيانات فريم الدقيقه
اللون الأخضر الغامق فهذا يعني أن البيانات التاريخيه تم أخذها من فريم 5 دقائق إلى 4 ساعات
اللون الأحمر الفاتح يعني أن دقة البيانات بدون وجود البيانات التاريخيه للفريم الأصغر من الفريم الذي تم إجراء الباك تست عليه
السلام عليكم
عندى سؤال بخصوص ال MQL5
أنا الان فى مرحلة برمجة مؤشراتى على ال MQL4 و الحقيقة الاكواد كثيرة جدا المهم الان بالنسبة لل MQL5 هل المفروض انى ابرمج مؤشراتى بها ام ان الافضل ان اظل على ال MQL4 ؟
و فى حالة اعتماد ال MQL5 المؤشرات السابقة لنا مش هنقدر نستخدمها مرة اخرى فماذا سيكون الحل؟
ستقوم بعمل دالة تأتي بعدد الأوردرات المفتوحة
ثم تقوم بعمل دالة أخرى تأتي بسعر فتح الأوردر الأولكود PHP:int orderstotal(int type){
int cnt=0;
for(int i =0;i<=OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber() && OrderType()==type){
cnt++;
}
}
return(cnt);
}
ثم تقوم بعمل دالة أخرى لتعديل التيك بروفتكود PHP:double FirstOrderPrice(int type)
{
for (int i=0;i<=OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() && OrderType()==type)
{
return(OrderOpenPrice());
}
}
return(0);
}
ثم تضيف الأكواد دي في دالة startكود PHP:void ModifyTP(int type)
{
for (int cnt = OrdersTotal() ; cnt >=0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
double tp=OrderTakeProfit();int ticket=OrderTicket();
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() &&OrderType()==type)
{
if(tp!=FirstOrderPrice(type))
OrderModify(ticket,OrderOpenPrice(),OrderStopLoss(),FirstOrderPrice(type),0);
}
}
}
وبالتالي لو كانت عمليات الشراء أكبر من 1 سيقوم بتعديل التيك بروفت لكل العمليات لسعر إفتتاح أول عملية شراءكود PHP:if(orderstotal(OP_BUY)>1){ModifyTP(OP_BUY);}
if(orderstotal(OP_SELL)>1){ModifyTP(OP_SELL);}
ولو عمليات البيع أكبر من 1 سيقوم بتعديل التيك بروفت لسعر إفتتاح أول عملية بيع
يعطيك ألف عافية يا مهندس يوسف
بس بطلبك طلب
أنا محتاج هالمهمة التالية من الاكسبيريت :
* إذا كانت عمليات الشراء المفتوحة تساوي 1 --> لا تعديل أو تغيير في الهدف للصفقة
* إذا كانت عمليات الشراء المفتوحة تساوي 2 سيقوم الاكسبيريت بتعديل التيك بروفت لكل العمليات لسعر إفتتاح أول عملية شراء
* إذا كانت عمليات الشراء المفتوحة تساوي 3 سيقوم الاكسبيريت بتعديل التيك بروفت لكل العمليات لنفس الهدف المحدد للصفقة رقم 3
ونفس الكلام ينطبق على عمليات البيع
كيف يتم ذلك
مثل هذه المؤشرات ترسم الأسهم أو الخطوط على الشارت ولذلك يوجد طريقتين لإستدعاء قيمهم
الطريقه الأولى وهي إضافة معادلات المؤشر للإكسبرت مباشرة
الطريق الثانيه إستخدام الداله
name هو إسم الكائن على الشارت سواء السهم أو الخط المرسوم أو مهما كانكود PHP:ObjectGet(name,index);
index وهو خاصية الكائن الذي قمت بإستدعائها فمثلا إذا أردت إستدعاء السعر لهذا الكائن سوف يكون
أو توقيت ظهور السهم مثلاكود PHP:ObjectGet("name",OBJPROP_PRICE1);
كود PHP:ObjectGet("name",OBJPROP_TIME1);
جزاكم الله خيرًا