هذا الإكسبرت معدل من الأخطاء
بعض الإكسبرتات حتى إذا لم يكن بها أخطاء فتكون بطيئه إلى حد ما والسبب ليس في الكود لكن بسبب كثرة الحلقات المستخدمه ووضع الأوامر
Printable View
مساء الخير مستر دولار انني صرت استحي من كثر اسئلتي اليك لكن بصراحه ارغب في العلم لذلك اتمنى مساعدي
تم اضافه المعادلات الى الاكسبيرت لكي يقوم باقفال الصفقه عند تقاطع المتوسط لكن الاكسبيرت لا يفتح صفقات اتوقع السبب هومعادلات حساب الصفقات الحاليه للشراء والبيع وبصراحه لا اعرف لها بديل لاستطيع ان اضع نفس الاكسبيرت على اكثر من عمله في نفس الوقت مع تغير الماجيك نمبر
اخي مستر دولارالرجاء مساعدتي في الحل في هذا الاكسبيرت والله انه اتعبني وشكرا مستر دولار وجزاك الله كل خيركود PHP:extern int TakeProfit=28;
extern int StopLoss=18;
extern int MagicNumber = 122;
extern double Lot=0.1;//متوسط 14+28
int t1,t2;
extern bool CloseOppositeSignal=true;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double b,s,bsl,ssl,bt,st;
b= Ask;
s=Bid;
if (StopLoss>0)
{
bsl=b-StopLoss*Point;
ssl=s+StopLoss*Point;
}
else
{
bsl=0;
ssl=0;
}
if (TakeProfit>0)
{
bt=b+TakeProfit*Point;
st=s-TakeProfit*Point;
}
else
{
bt=0;
st=0;
}
// شروط الشراء السعر اعلى من متوسط 200 ومتوسط 50 اعلى من متوسط 200 الدخول مع تقاطع متوسط 14 و28 شراء
int cnt, ticket, total;
double m6=iMA(NULL,5,28,0,0,PRICE_CLOSE,1);//متوسط 28
double m7=iMA(NULL,5,28,0,0,PRICE_CLOSE,2);//متوسط 28
double m8=iMA(NULL,5,14,0,0,PRICE_CLOSE,1);//متوسط 14
double m9=iMA(NULL,5,14,0,0,PRICE_CLOSE,2);//متوسط 14
double r1=iMA(NULL,5,200,0,0,PRICE_CLOSE,1);//متوسط 200
double r2=iMA(NULL,5,50,0,0,PRICE_CLOSE,1);//متوسط 50
///////////////////////////////////////////////////////////
if (m8>m6&&m7>=m9&&CloseOppositeSignal==true)
{CloseSellOrders();}
if (m6>m8&&m9>=m7&&CloseOppositeSignal==true)
{CloseBuyOrders();}
//////////////////////////////////////
if( iClose(0,5,1)>r1&&r2>r1&&m8>m6&&m7>=m9
&&MyBuyRealOrdersTotal(MagicNumber)==0)
{
ticket=OrderSend(Symbol(),OP_BUY,Lot,b,3,bsl,bt,"",MagicNumber,0,Green );
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}
if( iClose(0,5,1)<r1&&r2<r1&&m6>m8&&m9>=m7
&&MySellRealOrdersTotal(MagicNumber)==0)
{
ticket=OrderSend(Symbol(),OP_SELL,Lot,s,3,ssl,st,"",MagicNumber,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
}
return(0);
}
return(0);
return(0);
//+---------------
// وظيفة لحساب عدد الصفقات الحالية (للشراء)
int MyBuyRealOrdersTotal(int MagicNumber)
{
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() == MagicNumber && OrderSymbol()==Symbol() && (OrderType()==OP_BUY))
{
if (t1==-1)
{
t1=OrderTicket();
}
else
{
if (t2==-1)
{
t2=OrderTicket();
}
}
c++;
}
}
return(c);
}
// وظيفة لحساب عدد الصفقات الحالية للبيع
int MySellRealOrdersTotal(int MagicNumber)
{
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() == MagicNumber&& OrderSymbol()==Symbol() && (OrderType()==OP_SELL))
{
if (t1==-1)
{
t1=OrderTicket();
}
else
{
if (t2==-1)
{
t2=OrderTicket();
}
}
c++;
}
}
return(c);
}
//+------------------------------------------------------------------+
int CloseBuyOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
}
}
return(0);
}
int CloseSellOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3);
}
}
}
return(0);
}
الاكسبيرت بسيط يفتح علىا كثر من عمله ويجني الارباح عند معادلات معينه
مرفق الاكسبيرت
وعليكم السلام ورحمة الله وبركاته
هذه الخاصية موجوده في الإكسبرت وهو خيار CloseOppositeSignal عند تفعيله فسوف يغلق الصفقه عند تغير إشارة المؤشر
والكود المسئول عن شروط الإغلاق هو
كود PHP:if (SS_1>0&&SS_2<=0&&CloseOppositeSignal)CloseSellOrders();
if (SS_1<0&&SS_2>=0&&CloseOppositeSignal)CloseBuyOrders();
السلام عليكم ورحمة الله
استاذ أسامه هذه الخاصيه ليست فعاله دائماً ففي بعض الأوقات يعكس المؤشر إشارته ولكن الاكسبيرت لايغلق الصفقه لذلك انا اريد ان يراجع الاكسبيرت صفقاته عند اغلاق كل شمعه ارجوا منك التكرم بعمل هذا الشرط بارك الله فيك لانه جوهر الاكسبيرت وسر نجاحه
تحياتي
تمام أخي أسامه ... تم حل امشكله و جزاك الله خيرا ..
هل هذه الداله أخي صحيحه و تعود بنوع آخر أمر معلق فتح و أغلق .
كود PHP:double LastPend(){
for(int i=OrdersTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && MagicNumberP==OrderMagicNumber()&& (OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT )){
double LastPend=OrderType();
}
}
return(LastPend);
}
السلام عليكم ورحمة الله وبركاته
استاذ اسامه اشكرك جزيل الشكر فعلا هذا هو التعديل المطلوب والاكسبيرت الان يعمل بشكل افضل من حيث الدخول والخروج ولكن فيه مشكله وهي ان الاكسبيرت في بعض الاحيان وليس دائما يضع استوب لوز عند نقطة الدخول برغم ان الاعدادات الستوب لوز= صفر والتك بروفت =صفر والبريك ايفن=صفر والموفستوب =صفر والترايلنج ستوب =صفر ..هل هذا خلل في الاكسبيرت؟؟؟ ارجو منك الافاده وحل المشكله مرفق كشف حساب يبين هذه المشكله
تحياتي لك
السلام عليكم و رحمة الله و بركاته
هل هناك طريقة استطيع بها قراءة بيانات بار bar معين بواسطة ال index له من على سيرفر الميتاتريدر و طبعا البار يكون خاص بفريم معين ؟؟
أو بمعنى آخر لتوضيح الفكرة : هل يمكن جلب بيانات من السيرفر بواسطة المؤشر (برمجيا أثناء التشغيل) علما بان هذه البيانات لا تكن موجودة من قبل فى ال history center على جهازى؟؟
نعم المؤشر يعمل بشكل صحيح
المؤشر الموجود لديك رابط صفحة إستدعاء الأخبار تغير وبالتالي سوف يظهر هذا الخطأ
لذلك أرفقت لك المؤشر بعد أن تم تعديله ووضع الرابط الصحيح
مرفق المؤشر مره أخرى
تأكد من أنك فعلت خيار إستدعاء ملفات الدل
الملف المرفق 338881