أين الإسكربت الذي تريد تعديله أخي العزيز
هل تريد عمل داله أو شرط يمنع فتح الصفقات في نفس الشمعه أم تسأل عن الكود بشكل كامل
Printable View
أستاذ أسامة ، هل إستدعاء المؤشر أكثر من مرة داخل الاكسيبرت قد يؤدي إلى ظهور أخطـاء مثل عدم إغلاق الصفقات المفتوحة أو عدم فتح صفقات على بعض الأزواج ، مثال الأكواد التالية بالاكسيبرت المرفق
الاكسيبرت يعمل ويحقق شروط إغلاق الصفقات بالباك تست ولكن عند العمل لايف تظهر أخطـاء ليس لها سبب مثل عدم الإغلاق حسب الشروط المحددة !! ، هل المشكلة من أكواد إستدعاء المؤشر !!كود PHP:double up =iCustom(NULL,MainTimeFrame1,"Auto Recommendations_WithAlert",2,shift);
double down =iCustom(NULL,MainTimeFrame1,"Auto Recommendations_WithAlert",3,shift);
double up2 =iCustom(NULL,MainTimeFrame1,"Auto Recommendations_WithAlert",2,shift+1);
double down2 =iCustom(NULL,MainTimeFrame1,"Auto Recommendations_WithAlert",3,shift+1);
double upp =iCustom(NULL,MainTimeFrame2,"Auto Recommendations_WithAlert",2,shift);
double downn =iCustom(NULL,MainTimeFrame2,"Auto Recommendations_WithAlert",3,shift);
double upp2 =iCustom(NULL,MainTimeFrame2,"Auto Recommendations_WithAlert",2,shift+1);
double downn2 =iCustom(NULL,MainTimeFrame2,"Auto Recommendations_WithAlert",3,shift+1);
double uppp =iCustom(NULL,MainTimeFrame3,"Auto Recommendations_WithAlert",2,shift);
double downnn =iCustom(NULL,MainTimeFrame3,"Auto Recommendations_WithAlert",3,shift);
double uppp2 =iCustom(NULL,MainTimeFrame3,"Auto Recommendations_WithAlert",2,shift+1);
double downnn2 =iCustom(NULL,MainTimeFrame3,"Auto Recommendations_WithAlert",3,shift+1);
double haOpen1=iCustom(NULL,Heiken_Ashi_TIME_FRAME,"Heiken_Ashi_Smoothed_Alert[1]",1,1);
double haOpen2=iCustom(NULL,Heiken_Ashi_TIME_FRAME,"Heiken_Ashi_Smoothed_Alert[1]",3,1);
double haOpen11=iCustom(NULL,Heiken_Ashi_TIME_FRAME,"Heiken_Ashi_Smoothed_Alert[1]",1,2);
double haOpen22=iCustom(NULL,Heiken_Ashi_TIME_FRAME,"Heiken_Ashi_Smoothed_Alert[1]",3,2);
double haClose1=iCustom(NULL,Heiken_Ashi_TIME_FRAME,"Heiken_Ashi_Smoothed_Alert[1]",0,1);
double haClose2=iCustom(NULL,Heiken_Ashi_TIME_FRAME,"Heiken_Ashi_Smoothed_Alert[1]",2,1);
double haClose11=iCustom(NULL,Heiken_Ashi_TIME_FRAME,"Heiken_Ashi_Smoothed_Alert[1]",0,2);
double haClose22=iCustom(NULL,Heiken_Ashi_TIME_FRAME,"Heiken_Ashi_Smoothed_Alert[1]",2,2);
double u1 =iCustom(NULL,5,"Auto Recommendations_WithAlert",2,shift);
double d1 =iCustom(NULL,5,"Auto Recommendations_WithAlert",3,shift);
double u2 =iCustom(NULL,5,"Auto Recommendations_WithAlert",2,shift+1);
double d2 =iCustom(NULL,5,"Auto Recommendations_WithAlert",3,shift+1);
double uu1 =iCustom(NULL,15,"Auto Recommendations_WithAlert",2,shift);
double dd1 =iCustom(NULL,15,"Auto Recommendations_WithAlert",3,shift);
double uu2 =iCustom(NULL,15,"Auto Recommendations_WithAlert",2,shift+1);
double dd2 =iCustom(NULL,15,"Auto Recommendations_WithAlert",3,shift+1);
double uuu1 =iCustom(NULL,30,"Auto Recommendations_WithAlert",2,shift);
double ddd1 =iCustom(NULL,30,"Auto Recommendations_WithAlert",3,shift);
double uuu2 =iCustom(NULL,30,"Auto Recommendations_WithAlert",2,shift+1);
double ddd2 =iCustom(NULL,30,"Auto Recommendations_WithAlert",3,shift+1);
double uuuu1 =iCustom(NULL,60,"Auto Recommendations_WithAlert",2,shift);
double dddd1 =iCustom(NULL,60,"Auto Recommendations_WithAlert",3,shift);
double uuuu2 =iCustom(NULL,60,"Auto Recommendations_WithAlert",2,shift+1);
double dddd2 =iCustom(NULL,60,"Auto Recommendations_WithAlert",3,shift+1);
الداله الأولى أريد إستخدامها لتعود لي بالقيم الموجودة داخلها من آخر لوت و آخر صفقة ربح أم خسارة ولكن للصفقات التي فتحت من الأوامر المعلقه و أعطيتها نفس ماجيك الصفقات المعلقة :
و نفس الداله و لكن لصفقات الماركت و أعطيتها نفس الماجيك :كود PHP:////// HISTORICAL LAST ONES FOR PENDING ORDERS BY MAGIC ///
string lastP;
for(int i=OrdersHistoryTotal();i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumberP)
{
double LastP_lots,LastP_SL,LastP_openprice, LastP_ordertype;
//for buy order
if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice()) lastP="profit";
if(OrderType()==OP_BUY && OrderClosePrice()<=OrderOpenPrice()) lastP="loss";
//for SELL order
if(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice()) lastP="profit";
if(OrderType()==OP_SELL && OrderClosePrice()>=OrderOpenPrice()) lastP="loss";
LastP_lots=OrderLots();
LastP_SL=OrderStopLoss();
LastP_openprice=OrderOpenPrice();
LastP_ordertype=OrderType() ;
break;
}
}
و الدالتين الأخيرتين للبحث في أول صفقه مره للصفقات التي فتحت عن طريق الأمر المعلق و الأخرى للتي فتحت ماركت و كل منهما بماجيك مختلف :كود PHP:////// HISTORICAL LAST ONES FOR MARKET ORDERS BY MAGIC ///
string lastM;
for(int ii=OrdersHistoryTotal();ii>=0;ii--)
{
OrderSelect(ii, SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
double LastM_lots,LastM_SL,LastM_openprice, LastM_ordertype;
//for buy order
if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice()) lastM="profit";
if(OrderType()==OP_BUY && OrderClosePrice()<=OrderOpenPrice()) lastM="loss";
//for SELL order
if(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice()) lastM="profit";
if(OrderType()==OP_SELL && OrderClosePrice()>=OrderOpenPrice()) lastM="loss";
LastM_lots=OrderLots();
LastM_SL=OrderStopLoss();
LastM_openprice=OrderOpenPrice();
LastM_ordertype=OrderType() ;
break;
}
}
و شرح الفكرة وإستخدامي للدوال موجوده في هذه المشاركةكود PHP:////// HISTORICAL LAST ONES FOR MARKET ORDERS BY MAGIC ///
string lastM;
for(int ii=OrdersHistoryTotal();ii>=0;ii--)
{
OrderSelect(ii, SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
double LastM_lots,LastM_SL,LastM_openprice, LastM_ordertype;
//for buy order
if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice()) lastM="profit";
if(OrderType()==OP_BUY && OrderClosePrice()<=OrderOpenPrice()) lastM="loss";
//for SELL order
if(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice()) lastM="profit";
if(OrderType()==OP_SELL && OrderClosePrice()>=OrderOpenPrice()) lastM="loss";
LastM_lots=OrderLots();
LastM_SL=OrderStopLoss();
LastM_openprice=OrderOpenPrice();
LastM_ordertype=OrderType() ;
break;
}
}
//========================
////// HISTORICAL FIRST ONES FOR MARKET ORDERS BY MAGIC ///
string firstM ;
for(int iii=OrdersHistoryTotal();iii<=1;iii--)
{
OrderSelect(iii, SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
double firstM_lots,firstM_SL,firstM_openprice, firstM_ordertype;
//for buy order
if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice()) firstM="profit";
if(OrderType()==OP_BUY && OrderClosePrice()<=OrderOpenPrice()) firstM="loss";
//for SELL order
if(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice()) firstM="profit";
if(OrderType()==OP_SELL && OrderClosePrice()>=OrderOpenPrice()) firstM="loss";
firstM_lots=OrderLots();
firstM_SL=OrderStopLoss();
firstM_openprice=OrderOpenPrice();
firstM_ordertype=OrderType() ;
break;
}
}
https://forum.arabictrader.com/t37612-181.html#2704
شكرا أخي أسامة على المساعده
اخي اسامه الفاضل تحيه وبعد في البدايه احب ان اشكرك على ما تقدمه لاخوانك من مساعده جزاك الله كل خير وجعلها الله في ميزان حسناتك ان شاء الله
اخي مستر دولار الفاضل انا تقريبا مبتدا لدي سوال بسيط اذا اردت ان اجعل اغلاق الصفقه بدل من وضع هدف معين ان يكون مثلا اشاره تقاطع الماكد اشاره عكسيه
اي الخروج من الصفقه بظهور اشاره عكسيه على الماكد مثلا فضلا وليس امرا ان امكن مثال بسيط او الداله واين اضعها وشكرا
الهم يسر للاخ اسامه وافتح عليه
واملا قلبه بحبك وارض عنه وعنا امين
--------------------------------------------------------------------------------
للتوضيح المطلوب اكثر مستر دولار
مرفق اكسبيرت من صنعي شروط الشراء هي وجود السعر اعلى من متوسط 200 ومتوسط 50 اعلى من متوسط 200 الدخول بعد تقاطع متوسط 14 و28 شراء
والبيع هو العكس ان يكون السعر اقل من متوسط 200 ومتوسط 50 اقل من 200 والدخول هو تقاطع متوسط 14 مع 28بيع
ما اريد ليس ظهور اشاره معاكسه(لانها على الشروط كامله سوف يصفر الحساب ) بل اريد ان يفتح بنفس الشروط مثلا دخل شراء (السعر ا على من 200 ومتوسط 50 اعلى من 200 وتقاطع 14 مع 28 شراء ) اريد الخروج من الصفقه سواء ربح او خساره بظهور تقاطع عكسي للمتوسطين 14 و28 فقط (اي مجرد تقاطعها ان يخرج ) ومع هذا ان لايكون الخساره اكثر من 20 نقطه
اي وقف الخساره هو تقاطع على خساره يخرج او اذا وصل خساره 20 نقطه ايهما اسبق
وجني الارباح هو التقاطع
اتمنى مساعدك اخي الفاضل وشكرا
مرفق الاكسبيرت
راجع كود الإكسبرت المرفق
سوف تجد شرط CloseOppositeSignal وهو المسئول عن إغلاق الصفقه في حال ظهور إشارة عكسيه بدلا من الإعتماد على الأستوب لوز
وسوف تجد الشرط
كود PHP:if (Open[1]<=ma1&&Close[1]>ma1&&CloseOppositeSignal==true)
{CloseSellOrders();}
if (Open[1]>=ma1&&Close[1]<ma1&&CloseOppositeSignal==true)
{CloseBuyOrders();}
يمكنك أن تقوم بعمل دالة لمعرفة آخر صفقة أغلقت على ستوب لوز في أي توقيت
مثال
ثم ستضع الشرط مع شروط فتح الصفقاتكود PHP:datetime LastLostOrder(){
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderProfit()<0){
return(OrderCloseTime());
}
}
return(0);
}
ومعناه أن توقيت آخر صفقة أغلقت على خساره كان أقل من توقيت إفتتاح الشمعه الحاليهكود PHP:if(LastLostOrder()<Time[0])
أنا أريد من هاتين الدالتين أن تعودا بقيم أول صفقه تم إغلاقها في التاريخ ... أحد الدوال لتأتي بقيم الصفقه التي فتحت عن طريق الأمر المعلق و الثانيه لتأتي بقيم الصفقه التي فتحت ماركت أو مباشر وميزت كل منهما بماجيك مختلف ...
جزاك الله كل خير مستر دولار
سوال بسيط ان شاء الله هل الاكسيبرت المرفق اذا حدث ان وصل السعر الى مدى وقف الخساره(مثلا 20 نقطه ) قبل تحقيق شرط اغلاق الصفقه هل يقوم باغلاق الصفقه
اي اغلاق الصفقه تحقق الشرط او وصول وقف الخساره
وادعو الله عز وجل ان يجعلك من اهل الجنه ويجزيك عن ما تقدمه لاخونك احسن جزاء وشكرا
بما أنك تريد أول صفقه تم فتحها فسوف تقوم بتعديل الحلقه فقط
ستستخدم البحث بدأ من 0 حتى عدد الصفقات المغلقه
كود PHP:string firstM ;
for(int iii=0;iii<OrdersHistoryTotal();iii+++)
{
OrderSelect(iii, SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
double firstM_lots,firstM_SL,firstM_openprice, firstM_ordertype;
//for buy order
if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice()) firstM="profit";
if(OrderType()==OP_BUY && OrderClosePrice()<=OrderOpenPrice()) firstM="loss";
//for SELL order
if(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice()) firstM="profit";
if(OrderType()==OP_SELL && OrderClosePrice()>=OrderOpenPrice()) firstM="loss";
firstM_lots=OrderLots();
firstM_SL=OrderStopLoss();
firstM_openprice=OrderOpenPrice();
firstM_ordertype=OrderType() ;
break;
}
}
//===========================
////// HISTORICAL FIRST ONES FOR PENDING ORDERS BY MAGIC ///
string firstP ;
for(int iiii=0;iiii<OrdersHistoryTotal();i++)
{
OrderSelect(iiii, SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumberP)
{
double firstP_lots,firstP_SL,firstP_openprice, firstP_ordertype;
//for buy order
if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice()) firstP="profit";
if(OrderType()==OP_BUY && OrderClosePrice()<=OrderOpenPrice()) firstP="loss";
//for SELL order
if(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice()) firstP="profit";
if(OrderType()==OP_SELL && OrderClosePrice()>=OrderOpenPrice()) firstP="loss";
firstP_lots=OrderLots();
firstP_SL=OrderStopLoss();
firstP_openprice=OrderOpenPrice();
firstP_ordertype=OrderType() ;
break;
}
}