وعليكم السلام ورحمة الله وبركاته
لا يوجد تغيير في الكود حتى تجعل الإكسبرت يعمل على شارت الرينكو والسبب غالبا أن جزء من ضمن الشروط التي وضعتها لا يتحقق في شارت الرينكو لذلك لا يعمل الإكسبرت فحاول مراجعة هذه الشروط
Printable View
السلام عليكم حمة الله
أرجو من المشرف الاستاذ الفاضل MR.dollar ان يشرح لي هذا كود .
void OpenBUYOrder(double Lots,int Magic)
{
double sl,tp;
sl=Ask-StopLoss*Point;
tp=Ask+TakeProfit*Point;
if(Lots==FirstLots && hour>=StartTime && hour<=EndTime)
{
Ticket1=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,sl,tp ,"",Magic,0,Green);
if(Ticket1>0)
{
gT1=OrderSend(Symbol(),OP_SELLSTOP,Lots,sl,3,sl+St opLoss*Point,sl-TakeProfit*Point,"",Magic,0,Green);
gT2=OrderSend(Symbol(),OP_SELLSTOP,Lots,sl,3,sl+St opLoss*Point,sl-(TakeProfit*Point),"",Magic,0,Green);
}
else
{
Alert("ÎØÃ ÔÑÇÁ "," Err = ",GetLastError()," Price = ",Ask," Lots = ",Lots);
}
}
}
وعليكم السلام ورحمة الله وبركاته
تقوم بفتح أمر شراء ووضع أمرين بيع معلقين
من إعدادات الداله تضع حجم اللوت ورقم الماجيك نمبر للأوامر
ثم من شروط الدالةكود PHP:OpenBUYOrder(double Lots,int Magic)
إذا كان حجم اللوت المحدد يساوي قيمه FirstLot وكان التوقيت الحالي ضمن بداية ونهاية توقيت عمل الإكسبرت يتم فتح أمر الشراء
ثم وضع أمرين البيع المعلقين إذا فتح أمر الشراء بشكل صحيحكود PHP:if(Lots==FirstLots && hour>=StartTime && hour<=EndTime)
إذا لم يحدث تظهر تنبيه برسالة الخطأكود PHP:if(Ticket1>0)
{
gT1=OrderSend(Symbol(),OP_SELLSTOP,Lots,sl,3,sl+St opLoss*Point,sl-TakeProfit*Point,"",Magic,0,Green);
gT2=OrderSend(Symbol(),OP_SELLSTOP,Lots,sl,3,sl+St opLoss*Point,sl-(TakeProfit*Point),"",Magic,0,Green);
}
السلام عليكم اخوتي الاعزاء
هناك عدة صفقات مفتوحة شراء مثلا فأريد دالة تعود برقم العملية التي ربحها موجب للشراء
فكيف اكتب تلك الدالة .. وماذا لو اردت ان تكون الدالة لمعرفة ربح كل صفقات الشراء المفتوحة هل هي موجب ام سالب ؟؟
وجزاكم الله كل خير
وعليكم السلام ورحمة الله وبركاته
مثال دالة لمعرفة رقم العمليه المفتوحه الرابحه
بنفس الفكره سوف تستخدم الدالة لمعرفة هل جميع الصفقات الشراء رابحه أو لأكود PHP:int OrderInProfitNum()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==OP_BUY)
{
if(OrderProfit()>0)return(i);
}
}
return(0);
}
مثال
الداله ستعود بالقيمه true إذا كانت جميع الصفقات رابحه أو false إذا كان أحد الصفقات خاسرهكود PHP:bool IsOrderInProfit()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==OP_BUY)
{
if(OrderProfit()<0)return(false);
}
}
return(true);
}
السلام عليكم ورحمة الله وبركاته
ارجو ان تكرمون بشرح لهذه كواد.....
int LastClosedWiner()
{
int c=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && (OrderProfit()>0))
{
if(OrderType()==OP_BUY)
c=1;
else
c=-1;
}
}
return(c);
}
/////////////////////////////
// ÇáæÙíÝÉ ÇáÑÆíÓíÉ ;
int Procces_1()
{
double slot,ssl,stp,bw;
// Ýí ÍÇá áÇ íæÌÏ ÕÝÞÇÊ ÍÇáíÉ æßÇä åäÇß ÕÝÞÇÊ ãÚáÞÉ ÝÇÍÐÝåÇ áÃäå áÇ ÏÇÚí áåÇ
if(MyRealOrdersTotal(MagicNumber)==0 && MyPendingOrdersTotal(MagicNumber)==2)
{
DeletePendingOrders(MagicNumber);
return(0);
}
// Ýí ÍÇá áÇ íæÌÏ ÕÝÞÇÊ ÍÇáíÉ Ãæ ÕÝÞÇÊ ãÚáÞÉ ÝÞã ÈÝÊÍ ÕÝÞÉ ÈíÚ Ãæ ÕÝÞÉ ÔÑÇÁ ÍÓÈ ÑÛÈÉ ÇáãÓÊÎÏã ;
if(MyRealOrdersTotal(MagicNumber)==0 && MyPendingOrdersTotal(MagicNumber)==0 && hour>=StartTime && hour<=EndTime && winAndStop==false)
{
if(OpenWinerAgain==false)
{
if(OpenBuy)
{
OpenBUYOrder(FirstLots,MagicNumber);
}
else
{
OpenSELLOrder(FirstLots,MagicNumber);
}
return(0);
}
else
{
if(LastClosedWiner()==1)
{
OpenBUYOrder(FirstLots,MagicNumber);
}
else
{
OpenSELLOrder(FirstLots,MagicNumber);
}
return(0);
}
}
// Ýí ÍÇá Êã ÝÊÍ ÕÝÞÉ ÈíÚ Ãæ ÔÑÇÁ íÌÈ æÖÚ ÕÝÞÇÊ ãÚáÞÉ ãÚÇßÓÉ áåÇ äæÚÇ æÇÊÌÇåÇ
if(MyRealOrdersTotal(MagicNumber)==2 && MyPendingOrdersTotal(MagicNumber)==0)
{
OrderSelect(t1,SELECT_BY_TICKET,MODE_TRADES);
slot=OrderLots()*LotsDouble;
ssl=OrderStopLoss();
stp=OrderTakeProfit();
if(OrderType()==OP_BUY && slot<Maxlot)
{
gT1=OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,ssl+ StopLoss*Point,ssl-TakeProfit*Point,"",MagicNumber,0,Green);
gT2=OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,ssl+ StopLoss*Point,ssl-(TakeProfit*Point),"",MagicNumber,0,Green);
}
if(OrderType()==OP_SELL && slot<Maxlot)
{
gT1=OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,ssl-StopLoss*Point,ssl+TakeProfit*Point,"",MagicNumber ,0,Green);
gT2=OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,ssl-StopLoss*Point,ssl+(TakeProfit*Point),"",MagicNumb er,0,Green);
}
}
return(0);
}
// æÙíÝÉ áÍÓÇÈ ÚÏÏ ÇáÕÝÞÇÊ ÇáÍÇáíÉ
int MyRealOrdersTotal(int Magic)
{
int c=0;
int total=OrdersTotal();
t1=-1;
t2=-1;
for(int cnt=0; cnt<total; cnt++)
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
{
if(t1==-1)
{
t1=OrderTicket();
}
else
{
if(t2==-1)
{
t2=OrderTicket();
}
}
c++;
}
}
return(c);
}
// æÙíÝÉ áÍÓÇÈ ÚÏÏ ÇáÕÝÞÇÊ ÇáãÚáÞÉ ÝÞØ
int MyPendingOrdersTotal(int Magic)
{
int c=0;
int total=OrdersTotal();
for(int cnt=0; cnt<total; cnt++)
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP))
{
c++;
}
}
return(c);
}
// æÙíÝÉ áÍÐÝ ÇáÕÝÞÇÊ ÇáãÚáÞÉ
int DeletePendingOrders(int Magic)
{
int total=OrdersTotal();
for(int cnt=total-1; cnt>=0; cnt--)
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP))
{
OrderDelete(OrderTicket());
}
}
return(0);
}
//+------------------------------------------------------------------+
نعم سيعمل بدون مشاكل
يجب أن يكون لديك شارت الرينكو ويكون لايف على الميتاتريدر حتى يعمل, يمكنك إستخدام الإكسبرت المرفق لعمل شارت الرينكو
بالنسبه للباك تست قرأت بعض المواضيع التي تتكلم عن إمكانية عمل باك تست لشارت الرينكو لكن لم أجرب أحد هذه الطرق سابقا وأعتقد أنها لن تعطي نتائج دقيقه حتى إذا أمكن عملها
شكرا على ردك الكريم اخي العزيز مستر دولار
طبقت الدالة وهي تعمل رغم وجود التحذير الاتي
return value of 'OrderSelect' should be checked -------.mq4 193 3
والذي لا اعرف معناه تحديدا
.. ولكن وجدت ان هناك خطأ بطريقة تفكيري من الاساس
ولنفرض مثلا اني افتح شراء مع كل تقاطع ايجابي على الموفتج .. وعند وجود عدة صفقات مفتوحة خاسرة ثم التقاطع الاخير اعطي ربح ولنفترض للصفقة الاخيرة والقبل الاخيرة فانا اريد ان مع التقاطع العكسي ينظر للصفقات الرابحة فقط ويغلقها دون الصفقات الخاسرة
وانا اعطيت الامر كالتالي
وبالتالي مع التقاطع العكسي ووجود صفقة رابحة فهو يغلق جميع الصفقات المفتوحة بصرف النظر عن كونها رابحة ام خاسرة !!!كود PHP:if ( ma2>ma4 && ma1< ma3 && OrderInProfitNum(OP_BUY)>0 ) Close_Type(OP_BUY);
فما هو الحل يا استاذي الكريم بارك الله فيك
جزاك الله تعالى كل الخير مستر اسامه
فعلت الاكسبيرت ولكن الاكسبيرت الاخر لم يفتح ولا صفقة وظهرت ايضا ظهرت لى هذه الرسالة فى رسايل Experts
2015.11.06 17:05:27.015 renkolivecharts_pimped_v4_13 EURUSD,M5: Error: Dll calls must be allowed!
لا اعرف ماهو السبب مع انى مفعل خيار ال DLL ؟
وعليكم السلام ورحمة الله وبركاته
الداله الأول LastClosedWiner تقوم بمعرفة نوع آخر صفقه أغلقت هل هي بيع أو شراء
فإذا كانت شراء تعود بالقيمه رقم 1 وإذا كانت بيع تعود بالقيمه رقم -1
الداله DeletePendingOrders تقوم بحذف الأوامر المعلقه
الداله MyPendingOrdersTotal تحسب مجموع الأوامر المعلقه المفتوحه
الداله MyRealOrdersTotal تحسب مجموع الأوامر المفعله
الداله Procces_1
في البداية يقارن إذا كان مجموع الأوامر المعلقه 2 والأوامر المفعله 0 يقوم بحذف جميع الأوامر المعلقهكود PHP:if(MyRealOrdersTotal(MagicNumber)==0 && MyPendingOrdersTotal(MagicNumber)==2)
{
DeletePendingOrders(MagicNumber);
return(0);
}
بعد حذف الأوامر المعلقه إذا كان مجموع الأوامر المعلقه والمفعله 0 وتوقيت عمل الإكسبرت بين التوقيت المحدد يتحقق الشرط ويبدأ في تنفيذ الصفقاتكود PHP:if(MyRealOrdersTotal(MagicNumber)==0 && MyPendingOrdersTotal(MagicNumber)==0 && hour>=StartTime && hour<=EndTime && winAndStop==false)
إذا تم تحديد الإعدادات بفتح أمر شراء فيتم فتح الأمروإلا يتم فتح البيعكود PHP:if(OpenBuy)
{
OpenBUYOrder(FirstLots,MagicNumber);
}
else
{
OpenSELLOrder(FirstLots,MagicNumber);
}
إذا كان آخر صفقة رابحه أغلقت شراء فيتم فتح أمر شراء وإذا كانت بيع فيتم فتح أمر بيعكود PHP:if(LastClosedWiner()==1)
{
OpenBUYOrder(FirstLots,MagicNumber);
}
else
{
OpenSELLOrder(FirstLots,MagicNumber);
}
إذا كان عدد الأوامر المفتوحه 2 وعدد الأوامر المعلقه 0 فيتم وضع الأوامر المعلقه العكسيهكود PHP:if(MyRealOrdersTotal(MagicNumber)==2 && MyPendingOrdersTotal(MagicNumber)==0)
{
OrderSelect(t1,SELECT_BY_TICKET,MODE_TRADES);
slot=OrderLots()*LotsDouble;
ssl=OrderStopLoss();
stp=OrderTakeProfit();
if(OrderType()==OP_BUY && slot<Maxlot)
{
gT1=OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,ssl+ StopLoss*Point,ssl-TakeProfit*Point,"",MagicNumber,0,Green);
gT2=OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,ssl+ StopLoss*Point,ssl-(TakeProfit*Point),"",MagicNumber,0,Green);
}
if(OrderType()==OP_SELL && slot<Maxlot)
{
gT1=OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,ssl-StopLoss*Point,ssl+TakeProfit*Point,"",MagicNumber ,0,Green);
gT2=OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,ssl-StopLoss*Point,ssl+(TakeProfit*Point),"",MagicNumb er,0,Green);
}
}
return(0);
}
ضع شرط إغلاق الصفقه الرابحه فقط في شروط دالة الإغلاق
مثال
كود PHP:void Close_Type_Profit(int type)
{
for (int cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
int ticket=OrderTicket();
double lots=OrderLots();
int Otype=OrderType();
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol()&&OrderType()==type&&OrderProfit()>0)
{
if (Otype==OP_BUY)
{
bool action= OrderClose(ticket,lots,NormalizeDouble(Bid,Digits),3*P);
}
if (Otype==OP_SELL)
{
action= OrderClose(ticket,lots,NormalizeDouble(Ask,Digits),3*P);
}
}
}
}
كود PHP:if ( ma2>ma4 && ma1< ma3) Close_Type_Profit(OP_BUY);
الإكسبرت لا يفتح صفقات لكن يقوم بعمل شارت الرينكو وتأكد أن شموع شارت الرينكو بعد فتح الشارت أنها تتحرك فإذا كانت تتحرك سوف يعمل الإكسبرت بدون مشاكل
تأكد عند تفعيل الإكسبرت على الشارت أنك فعلت الخيار Allow DLL Imports من إعدادات الإكسبرت نفسه