شكرا استاذ أسامه لم أفهم هذه الجمله عذرا .. و قمت بعمل التعديلات و لكن ايضا أحيانا يهمل الإكسبيرت فتح أحد الأوامر المعلقة ولا يتم إغلاق جميع الصفقات سويا .. رجاء الإطلاع و جزاك الله خيرا .
try.mq4
Printable View
شكرا استاذ أسامه لم أفهم هذه الجمله عذرا .. و قمت بعمل التعديلات و لكن ايضا أحيانا يهمل الإكسبيرت فتح أحد الأوامر المعلقة ولا يتم إغلاق جميع الصفقات سويا .. رجاء الإطلاع و جزاك الله خيرا .
try.mq4
شكرا استاذ أسامه لم أفهم هذه الجمله عذرا .. و قمت بعمل التعديلات و لكن ايضا أحيانا يهمل الإكسبيرت فتح أحد الأوامر المعلقة ولا يتم إغلاق جميع الصفقات سويا .. رجاء الإطلاع و جزاك الله خيرا .
try.mq4
عند الإغلاق أنت إستخدمت الحلقه while حتى يستمر في محاوله الإغلاق حتى يغلق جميع الصفقات لكن في نفس الوقت إستخدمت الأمر break لإنهاء الحلقه مباشرة فكأنك لم تفعل شيء
إحذف الأمر break أو يمكنك وضع شرط في حال قام بعمل 10 محاولات وما زالت الصفقات مفتوحه ينفذ الأمر بريك
مثال
ثانيا بالنسبه لوضع الأمر المعلق فالشروط صحيحه لكن يبدو غالبا إم أن الخطأ يحدث عندما تصل المضاعفه إلى رقم كبير تأكد بطابعة قيم سعر الدخول واللوت والهدف والأستوب وتأكد من رقم الخطأ الذي يظهركود PHP:int Tried;
while (firstclosed()=="lost" || firstclosed()=="profit" && orderscnt(OP_BUY)+orderscnt(OP_SELL)>1 )
{
CloseOrders();
Tried++;
if(Tried>=20)break ;
}
مرفق الإكسبرت بعد التعديل
الخطأ لديك في أنك وضعت الشرط عند البيع
والشرط عند الشراءكود PHP:&&orderscnt(OP_SELL)==0
فبالتأكيد عندما يفتح صفقة وتكون خاسره سيفتح الصفقه العكسيه المضاعفه لكن عندما يريد أن يفتح صفقه مضاعفه أخرى فلن يتحقق الشرط لأنه في هذه الحاله لدينا صفقه بيع واحده وصفقة شراء واحدهكود PHP:&&orderscnt(OP_BUY)==0
بالتالي أنت لا تحتاج إلى هذا الشرط أساسا ويكفي شرط نوع آخر صفقه
السلام عليكم ورحمه الله
تحية طيبة للجميع
اخي اسامة
اكسبيرت التخرج يعمل مع بعض البروكر ولا يعمل مع البعض لا ادري ما السبب حتى ان بعض البروكر يعمل في الباك تيست ولا يعمل ديمو مع انة لا يعطي اي اخطاء ارجوا ان تذكر لى بعض الاسباب التى تسبب هذه المشاكل من خلال خبرتك وتجاربك حتى احاول اصلاحها والبحث فيها حتى اني استخدمت كود خارجي للتجربة ولم يعمل عليها
وجزاك الله كل خير
مع تمنياتي للجميع بالتوفيق
لاتنساني من دعائك
شكرا جزيلا أستاذي .. أنا فعلا ألاحظ أن عدم وضع أمر معلق أحيانا يكون بعد الوصول لمضاعفات كبيره .
ولاحظت من مراقبة أسعار الدخول في نتائج الباك تيست أن أحيانا يكون الهدف والإستوب مختلفين من صفقه لأخرى في حدود نقطتان لذلك لا يكون إغلاق جميع الصفقات مع بعض و لكن كل صفقتين متتاليتين يغلقو في نفس التوقيت و ليس جميعهم سويا وحاولت حعل الهدف و الإستوب للصفقات الأمر المعلق هي هدف واستوب أول صفقه ربما يكون حلا لكن يعطي أخطاء ..
قمت بعمل دالتين ليعودا بستوب لوس و هدف آخر صفقه بالنوع و اللوت :
وجعلت هدف الأوامر المعلقه ستوب آخر صفقه بأول لوت و الإستوب هو هدف آخر صفقه بأول لوت :كود PHP:double last_sl(int type , double lot)
{
double last_sl ;
for(int i=OrdersTotal();i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&& type==OrderType()&& lot==OrderLots() )
{
last_sl=OrderStopLoss();
}
}
return(last_sl);
}
////
double last_tp(int type , double lot)
{
double last_tp ;
for(int i=OrdersTotal();i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&& type==OrderType()&& lot==OrderLots() )
{
last_tp=OrderTakeProfit();
}
}
return(last_tp);
}
.....كود PHP:
if(orderscnt(OP_BUY)>=1 && PendingOrders(OP_SELLSTOP)+PendingOrders(OP_BUYSTOP)==0 && last_type==OP_BUY )
{
// TP=s-(TakeProfit*point);
// SL=s+(StopLoss*point);
if(UseSLTP) TP=last_sl(OP_BUY,Lot1) ;
if(UseSLTP) SL=last_tp(OP_BUY,Lot1)+spr ;
OrderSend(Symbol(),OP_SELLSTOP,new(),s,3*Q,SL,TP,"dentist_hussein EA",MagicNumber,0,Red);
}
////////////////////////
if(orderscnt(OP_SELL)>=1 && PendingOrders(OP_BUYSTOP)+PendingOrders(OP_SELLSTOP)==0 && last_type==OP_SELL )
{
// TP=b+(TakeProfit*point);
// SL=b-(StopLoss*point);
if(UseSLTP) TP=last_sl(OP_SELL,Lot1) ;
if(UseSLTP) SL=last_tp(OP_SELL,Lot1)-spr ;
OrderSend(Symbol(),OP_BUYSTOP,new(),b,3*Q,SL,TP,"dentist_hussein EA",MagicNumber,0,Blue);
}
و أعتقد أن دالة إغلاق الصفقات لا تعمل لأن الصفقات جميعها تغلق على الستوب أو الهدف في لاباك تيست و لم يغلقها الإكسبيرت بنفسه .. هل ممكن السبب لأني أضفت إليها الحلقة بريك :
..كود PHP:void CloseOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
while (OrderType()==OP_BUY && orderscnt(OP_BUY)>0 ){
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,digits),3*Q);
if (orderscnt(OP_BUY)==0 )break;
}
while(OrderType()==OP_SELL && orderscnt(OP_SELL)>0 ){
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,digits),3*Q);
if (orderscnt(OP_SELL)==0 )break;
}
}
}
}
try.mq4
وجزاك الله كل خير .
وعليكم السلام ورحمة الله
أسمح لي بالمساعدة ، الباك تست لامشكلة مع المنصات لكن المشكلة أن بعض المنصات لاتقبل الأوردر مع الأستوب والبروفت وخاصة منصات ECN ، ضع الأمر مع ستوب وتك بروفت 0 وبعدها تعمل التعديل مودفاي للأمر من خلال رقم التكت ، الأكسبيرت مرفق بعد التعديل .
السلام عليكم استاذى الكريم
وكل عام وانت بخير
استاذى سؤال صعب على تلميذك
هو كيف يتم رابط الاكسبيرت بموقع اخبار : forexfactory
حتى يتم عمل اكسبيرت اخبار
هو لازم يكون فى ملف DLL
او ممكن عادى رابط الاكسبيرت بموقع الاخبار
وجزاك الله خيرا وزادك الله من علمه الذى لاينفذ
وعليكم السلام ورحمة الله وبركاته
أول ملاحظه هي هل البروكر من نوع ECN أو لا
بروكر ECN لا يقبل فتح الصفقه مع وضع هدف أو ستوب لها بل يجب فتح الصفقه وجعل الهدف والأستوي يساوي صفر ثم بعد فتحها تقوم بعمل مودفاي للأمر ووضع الهدف والأستوب الذي تريده
ثانيا إذا كان الأمر معلق فهل يقبل البروكر وضع الأمر المعلق عند هذه المسافه بعد البروكرات مثلا تقبل وضع الأمر المعلق على مسافه 5 نقاط من السعر الحالي وبعض البروكرات يجب أن يكون الأمر المعلق على بعد مثلا 20 نقطه على الأقل عن السعر الحالي
ثالثا الهدف والأستوب لوز بعض البروكرات تسمح بوضع حتى حتى 4 أو 5 نقاط بعض البروكرات لا تقبل أقل من 10 نقاط مثلا
رابعا السليبج أو إعادة التسعير تأكد إذا كان البروكر 5 أرقام أن تجعل إعادة التسعير مثلا بدل من 3 تجعلها 30
بعض البروكرات لا تقبل تشغيل الإكسبرتات أساسا على الديمو ويجب أن تراسلهم حتى تسمح لك بتشغيل الإكسبرت
أخيرا وفقك الله
السلام عليكم ورحمه الله
تحية طيبة للجميع
اخي اسامة
جزاك الله كل خير
معلومات مفيدة سوف استفيد منها عند كتابة الاكواد
هل ممكن رابط الاكسبيرت الذكي الذي صنعتة للبحث عن افضل اعدادات للموشر
وهل ممكن قلب موشر الحد الاسفل والاعلى للبلنجرباند وما هو الامر المستخدم حاولت ولم اصل الى نتيجة
مع تمنياتي للجميع بالتوفيق
لاتنساني من دعائك
أستاذي الفاضل ، هذه الدالة لتعديل العقود المفتوحة بالكامل لكن ماهي الأضافة الذي يجب أن تضاف بداخل الدالة لتعديل عقود فتحت اليوم فقط ودون أن تعدل عقود موجودة من الأيام السابقة ؟؟؟
كود PHP:void ModifyNewTP(int type)
{
for (int cnt = OrdersTotal() ; cnt >=0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() &&OrderType()==type)
{
if(OrderTakeProfit()!=GetFirstOrderPrice(type))
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),GetFirstOrderPrice(type),0);
}
}
}
double GetFirstOrderPrice(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);
}
يمكنك تعديلها بالشكل ده
وبالتالي سيقوم بتعديل العمليات المفتوحة بعد إفتتاح شمعة اليوم الحالي فقطكود PHP:void ModifyNewTP(int type)
{
for (int cnt = OrdersTotal() ; cnt >=0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() &&OrderType()==type && OrderOpenTime()>=iTime(Symbol(),PERIOD_D1,0))
{
if(OrderTakeProfit()!=GetFirstOrderPrice(type))
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),GetFirstOrderPrice(type),0);
}
}
}
بس حاول تجربها الاول لإني بعيد عن البرمجة من فترة وحاسس إن المعلومات كلها ساحت :no3: