1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
هذا الخطأ يحدث غالبا عندما يدخل الكود في حلقة غير منتهيه فتجعل الإكسبرت يتوقف عندها هل قمت بإضافة أي تعديل قد يؤثر بهذا الشكل
السبب من الإكسبرت وليس المنصه
انا قمت بتجربة الإعدادات التي توقف عندها الاكسيبرت عند العمل لايف ، وجدته توقف ايضا عند الباك تست وبعد مراجعة الحلقات داخل الاكسيبرت وجدت إنى مستخدم الحلقة while داخل دالة ستارت في شروط الإغلاق ..
كود PHP:
if(Use_USD_Profit_Global==true){//Close Total profit for all pairs >>> ACCount profit ||Close Total profit for one pair >>> profit2(OP_BUY)+profit2(OP_SELL)||***ADD Code to CloseOrders() Function
int triednumber2;
if(OrdersTotal()>0&&triednumber2<20){
while(true)
{
if(IsTradeContextBusy()){Sleep(1000);}
else {
if(AccountProfit()>=USD_Profit && Use_USD_Profit==true){
signalbuy1=false;signalbuy2=false;signalsell1=false;signalsell2=false;
CloseOrders();}
if(AccountProfit()<=-USD_Loss&&Use_USD_Loss==true){
signalbuy1=false;signalbuy2=false;signalsell1=false;signalsell2=false;
CloseOrders();}
if(AccountProfit()<=-(lossratio*AccountBalance()/100)&&LossRatio==true){
signalbuy1=false;signalbuy2=false;signalsell1=false;signalsell2=false;
CloseOrders();}
if(AccountProfit()>=(profitratio*AccountBalance()/100)&&ProfitRatio==true){
signalbuy1=false;signalbuy2=false;signalsell1=false;signalsell2=false;
CloseOrders();}
if(DayOfWeek()==5&&Hour()==CloseHour&&Closeby_EndofWeek==true){
signalbuy1=false;signalbuy2=false;signalsell1=false;signalsell2=false;
CloseOrders();}
}
}
triednumber2++;
}
}
وبعد حذف الحلقة عمل بدون مشاكل ولكن لي سؤال ، انا في شروط الشراء داخل نفس الاكسيبرت إستخدمت الحلقة بنفس الطريقة ولم تظهر هذه المشكلة اى الاكسيبرت لم يتوقف عن العمل على الشارت ما السبب !!
كود PHP:
if(signalbuy1==true||signalbuy2==true){
if(orderstotal()<MaxTrades){
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);***in Future Fix "Order Send Error 146،Order Send Error 129،Order Send Error 128"*** !!
}
signalbuy1=false;
signalbuy2=false;
GlobalVariableSet("T"+Symbol(),Time[0]);
triednumber++;
if(ticket<=0){
Sleep(500);
RefreshRates();}
else
break;
if(triednumber>20)break;
}
}
}
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
وعليكم السلام ورحمة الله وبركاته
مثال
كود PHP:
void delete(){
for(int i=0;i<OrdersTotal()-2;i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderType()>3){
OrderDelete(OrderTicket());
}
}
}
شكرا لك أستاذ أسامة على المساعدة
إنا نسأل الله أن يجعل كل ما تقوم به من مساعدة لإخوانك أن يكون في ميزان حسناتك
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم ورحمة الله وبركاته
عندما اقوم بتعريف المتغيرات داخل الاكسبرت وفي اثناء عمل الاكسبرت اقوم بتعيين قيم المتغيرات على حسب الحالات التي يمر بها الاكسبرت اثناء التداول وبذلك اقوم ببناء كمية الشروط التي احتاجها لفتح الصفقات
ولكن فجأة تنقطع الكهرباء او يقفل الميتاتريدر لاي سبب كان
وتضيع آخر قيمة للمتغيرات التي حددناها اثناء عمل الاكسبرت في جلسته الاخيرة وبالتالي تضيع مجموعة الشروط التي جمعتها شرطا بعد شرط اللازمة لفتح الصفقات
ونضطر الى بدء العمل من جديد بالقيم المبدئية
سؤالي هل يوجد امكانية لتخزين القيم في ملف خارجي تكست فايل مثلا في الهارد ديسك ومن ثم استدعاء هذه القيم المخزنة عند بدء تشغيل الاكسبرت
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة محمد بن حامد
السلام عليكم ورحمة الله وبركاته
عندما اقوم بتعريف المتغيرات داخل الاكسبرت وفي اثناء عمل الاكسبرت اقوم بتعيين قيم المتغيرات على حسب الحالات التي يمر بها الاكسبرت اثناء التداول وبذلك اقوم ببناء كمية الشروط التي احتاجها لفتح الصفقات
ولكن فجأة تنقطع الكهرباء او يقفل الميتاتريدر لاي سبب كان
وتضيع آخر قيمة للمتغيرات التي حددناها اثناء عمل الاكسبرت في جلسته الاخيرة وبالتالي تضيع مجموعة الشروط التي جمعتها شرطا بعد شرط اللازمة لفتح الصفقات
ونضطر الى بدء العمل من جديد بالقيم المبدئية
سؤالي هل يوجد امكانية لتخزين القيم في ملف خارجي تكست فايل مثلا في الهارد ديسك ومن ثم استدعاء هذه القيم المخزنة عند بدء تشغيل الاكسبرت
حاولت استخدام الامران GlobalVariableSet و GlobalVariableGet
ولكن المشكلة التي اواجهها في هذا الامر هي عندما اضع الاكسبرت في اكثر من عملة على المنصة
فلو اعطيت فيمة للمتغير بواسطة GlobalVariableSet في الاكسبرت الموجود لليورو دولار مثلا
فان القيمة نفسها تعطى لجميع العملات الاخرى المشبوك فيها الاكسبرت .
وهذا يعطي بالتاكيد نتائج غير مرغوبة
رد:موضوع مخصص للأسئلة البرمجية
استاذ اسامة ، هل يوجد اكسيبرت تم عمله من قبل بالمنتدى يعمل فقط على فكرة إغلاق العقد أو العقود المفتوحة على نقطة التعادل(صفر بروفت) ، أنا أعمل على فكرة مشابهة ولكن بالمضاعفات ، أرجو إرفاق الرابط إذا أمكن .
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
وعليكم السلام ورحمة الله وبركاته
نعم يمكن ذلك بإستخدام الداله FileWrite
مثال
كود PHP:
int file=FileOpen("name.csv",FILE_CSV|FILE_READ,";");
if(file>0)FileWrite("name.csv",15);
الرقم 15 هي البيانات التي أريد حفظها
name.csv هو إسم الملف الذي سيحفظ
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
يمكنك مراعاة ذلك بأن تضع إسم العمله مع إسم المتغير
مثال
كود PHP:
GlobalVariableSet("var"+Symbol()+Period(),Value);
وبالتالي سوف يتغير الإسم إذا تم وضع الإكسبرت على أكثر من عمله أو أكثر من تايم فريم
شكرا مستر دولار ، انا قلت مش ح يجيبها الا اسامة باشا
ما شاء الله عليك
بارك الله فيك وزادك علما ووسع رزقك وادخلك الجنة بغير حساب
تحياتي لك
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
لديك خطأ آخر في هذه الحلقات
كود PHP:
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;
}
}
//===========================
////// HISTORICAL FIRST ONES FOR PENDING ORDERS BY MAGIC ///
string firstP ;
for(int iiii=OrdersHistoryTotal();iiii<=1;iiii--)
{
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;
}
}
لاحظ بمجرد بداية عمل الإكسبرت سوف يدخل الإكسبرت في الحلقه
كود PHP:
for(int iii=OrdersHistoryTotal();iii<=1;iii--)
ولن يتوقف أبدا لأن الأمر Break لن يتنفذ لأنه لا يوجد صفقات فتحت بعد وأيضا شروط الحلقه لن تنتهي
هل يكون حلا أن أضع دوال خارج ستارت ؟؟؟
أم أضيف شرطا أن يخرج من الحلقة إذا لم يكن هناك صفقات مفتوحه ؟؟ و كيف يكون شكل الكود
و شكرا جزيلا