تم حل الاشكالية ولي استفسار اخر
اقتباس:
المشاركة الأصلية كتبت بواسطة ahmedsh
السلام عليكم اخي كيف الحال عساك بخير وسعاده
قمت بتكوين دالة خارجيه باستخدام الـ Modify وهي كالاتي :-
كود:
void OrdersModify(int type)//دالة تعديل الاهداف حسب النوع
{
bool s,m;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber() ;
if(sy==Symbol()&&mn==magic&&ty==type)
{
if(ty==OP_SELL)
{
if(NormalizeDouble(tp,Digits)!=NormalizeDouble(LastOrder("Price",2,OP_SELL),Digits))
{
m=OrderModify(tk,op,sl,LastOrder("Price",2,OP_SELL),0,Red);
}
}
if(ty==OP_BUY)
{
if(NormalizeDouble(tp,Digits)!=NormalizeDouble(LastOrder("Price",2,OP_BUY),Digits))
{
m=OrderModify(tk,op,sl,LastOrder("Price",2,OP_BUY),0,Blue);
}
}
}
}
}
تعديل الاهداف للصفقة
كود:
if(Orderscnt(OP_BUY)>1&&Orderscnt(OP_SELL)==0)OrdersModify(OP_BUY);//إذا تحقق وجود أكثر من صفقة شراء يقوم بتفعيل دالة تعديل
if(Orderscnt(OP_SELL)>1&&Orderscnt(OP_BUY)==0)OrdersModify(OP_SELL);//إذا تحقق وجود أكثر من صفقة بيع يقوم بتفعيل دالة تعديل
وكل شيء يعمل تمام ولكن في البداية فقط يعني بعد مرور 63 صفقة يبدأ الخلل وهو
يستمر فتح الصفقات ولكن لا يحرك او يضع الـ Modify فما هو الخلل وهل استخدامي للدالة NormalizeDouble كده صحيح
لاني اشك ان هيا السبب في هذا الموضوع انتظر رد حضرتك وسوف اضع صوره توضيح من الباك تست
حيث ان الـ Modify كانت تعمل بالشكل المطلوب من البداية حتى رقم الصفقة 63 ثم بعد ذلك توقفت عن العمل
لكن دالة الصفقات المعاكسه ودالة ارقام الصفقات تعمل ايضا كل المشكله توقف الـ Modify
وكل الشكر والتقدير لك
خلاص اخي مستر دولار بعد عدة محاولات تم اكتشاف الحل جزاك الله كل خير
هذا كود لفتح صفقات عكسيه في حال عكس السعر
كود:
if(Orderscnt(OP_BUY)>0&&Ask<=LastOrder("Price",OP_BUY)-Takeprofit*point)
{
NewLots=LastOrder("Lots",1,OP_BUY)+LastOrder("Lots",2,OP_BUY);
buy = OrderSend (Symbol(),OP_BUY,NewLots,Ask,3,0,0,NULL,magic,0,Blue);
}
////////////////////////////////////////////////////////////////////////////////
if(Orderscnt(OP_SELL)>0&&Bid>=LastOrder("Price",OP_SELL)+Takeprofit*point)
{
NewLots=LastOrder("Lots",1,OP_SELL)+LastOrder("Lots",2,OP_SELL);
sell = OrderSend (Symbol(),OP_SELL,NewLots,Bid,3,0,0,NULL,magic,0,Red);
}
كنت اريد التعديل بحيث من نفس مكان العكس يفتح ايضا صفقة في الاتجاه الصحيح للصفقة
مثال على ذلك لدي صفقة Buy وSell وليهم اهداف في حالة اصابة احد الاهداف وليكن Buy الكود يفتح من هدفها واحده Sell معاكسة
بلوت مضاعف يصبح عندي 2 ٍSell بناء على دوال خارجيه عندي احتاج ان اقوله ايضا من نفس المكان افتح واحده اخرى Buy باللوت الافتراضي
جربت باكثر من طريقة لكن لم تفلح معي
وكل الشكر والتقدير لكم