رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة xcv114
جرب تضع
كود PHP:
OrderSelect(ticket,SELECT_BY_TICKET);
قبل أمر OrderModify
جزاك الله كل خير ياغالى ، ولكن المشكلة مازالت كما هى وأعتقد ان الخطـأ فـ الجزء الخاص بعمل مودفاى ولكن لا أعلم ما المشكلة فـ كود المودفاى .
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
واضح الآن أن السبب ليس في الشروط لأنه قام بتنفيذ أمر الطباعه لذلك الخطأ في الأمر OrderModify نفسه
ضع الكود
كود PHP:
bool modified=OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,digits),NormalizeDouble(TP,digits),0,Red);
if(modified==false)Print("Modify error :",GetLastError());
ثم إستخدام عدد المحاولات أكثر من مره لعمل مودفاي للأمر طالما أن قيمة modified تساوي فولس بنفس الطريقه التي إستخدمتها في أوامر فتح الصفقات
قمت بعمل التعديل المطلوب ولكن هل الجزء الخاص بإستخدام عدد المحاولات لعمل مودفاى صحيح !!
كود PHP:
int triednumber;
while(true)
{
if(IsTradeContextBusy()){Sleep(1000);}
else {
int ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,digits),slippage*Q,0,0," EA",MagicNumber,0,Blue);
if(ticket<0)Alert("Order Send Error "+GetLastError(),"||","open price for the order"+Ask);}
if(TP!=0||SL!=0&&ticket>0)
{
while(true)
{
bool modified=OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,digits),NormalizeDouble(TP,digits),0,Blue);
if(modified==false)Print("Modify error :",GetLastError());
triednumber++;
if(ticket<=0){
Sleep(500);
RefreshRates();}
else
break;
if(triednumber>20)break;
}
}
GlobalVariableSet("T"+Symbol(),Time[0]);
triednumber++;
if(ticket<=0){
Sleep(500);
RefreshRates();}
else
break;
if(triednumber>20)break;
}
وهل يجب تعريف متغير آخر مختلف لحلقة while الثانية أم أكتفى بالمتغير المستخدم سابقـا triednumber
رد:موضوع مخصص للأسئلة البرمجية
استاذ اسامة ، انا استخدم الكود التالى لعمل المضاعفات العادية 2 ، 4 ، 8 ، ...
كود PHP:
if(UseMultiplier){
if(WinorLoss()==false){Lots=lastlot()*Multiplier;}
if(WinorLoss()==true){Lots=Firstlot;}
}
أريد معرفة كيف يمكن ان استخدم طريقة مضاعفات أخرى مثل
1 - 1 - 2 - 3 - 5 - 8 - 13 - 21 - 34 - 55 - 89
أرجو شرح كيفية عمل ذلك .
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
راجع الإكسبرت المرفق سوف تجد هذا الكود
كود PHP:
if(UseFiboMultiplier_Sell){newLot=LastLot(OP_SELL,MagicNumber,1)+LastLot(OP_SELL,MagicNumber,2);}
الفكره في هذه المضاعفات هو أن حجم اللوت للمضاعفه التاليه تساوي مجموع حجم لوت آخر صفقتين
لذلك قمت بعمل داله لمعرفة حجم لوت آخر صفقتين ويتم جمعهم
اطلعت على الاكسيبرت ولكن وجدت المضاعفات تكون لصفقات البيع فقط وانا اريد المضاعفات لأى صفقة خاسرة بيع أو شراء ، ولذلك حذفت الجزء الخاص بنوع الصفقة من دالة LastLot كالتالى ..
كود PHP:
double LastLot(int M,int Q){
int d;
for(int i=OrdersTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
double L=OrderLots();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==M){
d++;
if(d==Q)return(L);
}
}
}
ووضعت الشروط ..
كود PHP:
if(UseFiboMultiplier_Sell){
if(WinorLoss()==false){Lots=LastLot(MagicNumber,1)+LastLot(MagicNumber,2);}
if(WinorLoss()==true){Lots=Firstlot;}
}
ولكن ظهر خطـأ عند عمل الاكسيبرت ولم يفتح المضاعفات
كود PHP:
OrderSend error 4051
invalid lots amount for OrderSend function
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
هذه هي شروط البيع والشراء التي وضعتها
كود PHP:
///- 2 ------------------------------------------------------------
if(orderscnt(OP_BUY)==1 && getcomment()=="first" ){
DeleteSellPendingOrders( MagicNumber);}
if(StopLoss==0||HideSL){SL=0;}else{SL=Bid+StopLoss*point;}
if(TakeProfit==0||HideTP){TP=0;}else{TP=Bid-TakeProfit*point;}
if(UseRecTP)TP=(sell-TP_R);
if(UseRecSL)SL=(sell+SL_R);
OrderSend(Symbol(),OP_SELLSTOP,Lots2,sell,3,SL,TP,"second" ,MagicNumber,0,Green);
PlaySound("Alert.wav");
Time0=Time[0];
///---
if( orderscnt(OP_SELL)==1 && getcomment()=="first" ){
DeleteBuyPendingOrders( MagicNumber);}
if(StopLoss==0||HideSL){SL=0;}else{SL=Ask-StopLoss*point;}
if(TakeProfit==0||HideTP){TP=0;}else{TP=Ask+TakeProfit*point;}
if(UseRecTP)TP=(buy+TP_R);
if(UseRecSL)SL=(buy-SL_R);
OrderSend(Symbol(),OP_BUYSTOP,Lots2,buy,3,SL,TP,"second",MagicNumber,0,Green);
PlaySound("Alert.wav");
Time0=Time[0];
هل تراها صحيحه بهذا الشكل ؟ أين شروط التوقيت الذي تقول أنك وضعته
الجمله الشرطيه if تكتب بهذا الشكل
كود PHP:
if(condition)
{
////////
}
وبين القوسين يتم كتابة الأوامر التي تنفذ مكان /////////
أيضا الشروط هنا
كود PHP:
if( last=="loss"
&& orderscnt(OP_BUY)==1
&& Last_lots==Lots1
&& getcomment()=="second" ){
}
Modify_Order(SL1);
هل ترى أنك وضعت الشروط بشكل صحيح ؟
أنت فتحت القوس ثم أغلقت مباشرة { } ولم تضع الشرط الذي سينفذ بداخله
راجع كل الكود وإضبط هذه الأخطاء
تمام أخي أسامه كان لدي مشكله في وضع الأقواس وشكرا جزيلا لتنبيهك و قمت بمراجعة كل الأكواد بالإكسبيرت لأظبط الاقواس فرجاء الإطلاع لأن الإكسبيرت عند تفعيله على الشارت ورسم الخطين لا يقوم بوضع الأوامر ..
الإكسبيـــــــرت
وجزاك الله كل خير
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة RED.HAT
السلام عليكم
MetaEditor is crashed
هل واجهتم هذه المشكلة
كل ما فتح اى اكسبيرت بصيغة mq4 تواجهنى هذه المشكلة
حملت المنصة مرة ثانية نفس المشكلة
هل من حل
عليكم السلام
هذه المشكلة حدثت معى من قبل عند وضع عدد كبير من المؤشرات او الاكسيبرتات داخل المنصة ، جرب تسطيب المنصة مرة أخرى ، واذا استمرت المشكلة جرب تسطيب الويندوز .