مشاهدة النسخة كاملة : ممكن شرح الكود بالتفصيل
mahmoud1111
21-06-2018, 09:06 PM
مرحبا اخوتي ارجو ان يتم شرح الكود التالي
}
if((iBullsPower(NULL,0,13,PRICE_CLOSE,3)<iBullsPower(NULL,0,13,PRICE_CLOSE,2))&&(iBullsPower(NULL,0,13,PRICE_CLOSE,2)<iBullsPower(NULL,0,13,PRICE_CLOSE,1))&&(iBearsPower(NULL,0,13,PRICE_CLOSE,3)>iBearsPower(NULL,0,13,PRICE_CLOSE,2))&&(iBearsPower(NULL,0,13,PRICE_CLOSE,2)>iBearsPower(NULL,0,13,PRICE_CLOSE,1))&&(iBullsPower(NULL,0,13,PRICE_CLOSE,0)<0)) // Here is your open Sell rule
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
OrderSelect(result,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(TheStopLoss,Digits),NormalizeDouble(TheTa keProfit,Digits),0,Green);
}
return(0);
}
}
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL &&
OrderSymbol()==Symbol() &&
OrderMagicNumber()==MagicNumber
)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
{
if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
{
if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyP oint*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
int TotalOrdersCount()
{
int result=0;
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
if (OrderMagicNumber()==MagicNumber) result++;
}
return (result);
kira-h
22-06-2018, 06:18 PM
السلام عليكم
ارفق الكود بملف mql أو ضعه ضمن صيغة CODE بالمشاركة حتى يكون الكود منتظم
عموما الاكسبيرت يعتمد على مؤشرين BullsPower و BearsPower وشرط البيع يكون بمؤشر BullsPower البار 3 أصغر من البار 2 و البار 2 اصغر من البار 1 والبار الحالي أصغر من الصفر + بمؤشر BearsPower يكون البار 3 أكبر من البار 2 و البار 2 أكبر من البار 1
ثم يوجد دالة التريلينغ ستوب ودالة حساب عدد الصفقات المفعلة
mahmoud1111
22-06-2018, 09:24 PM
جزاك الله خيرا
kira-h
23-06-2018, 03:44 PM
بالتوفيق إن شاء الله
shivaa
24-12-2021, 06:03 PM
مرحبا اخوتي ارجو ان يتم شرح الكود التالي
}
if((iBullsPower(NULL,0,13,PRICE_CLOSE,3)<iBullsPow er(NULL,0,13,PRICE_CLOSE,2))&&(iBullsPower(NULL,0, 13,PRICE_CLOSE,2)<iBullsPower(NULL,0,13,PRICE_CLOS E,1))&&(iBearsPower(NULL,0,13,PRICE_CLOSE,3)>iBear sPower(NULL,0,13,PRICE_CLOSE,2))&&(iBearsPower(NUL L,0,13,PRICE_CLOSE,2)>iBearsPower(NULL,0,13,PRICE_ CLOSE,1))&&(iBullsPower(NULL,0,13,PRICE_CLOSE,0)<0 )) // Here is your open Sell rule
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
OrderSelect(result,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(TheStopLoss,Digits),NormalizeDouble(TheTa keProfit,Digits),0,Green);
}
return(0);
}
}
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL &&
OrderSymbol()==Symbol() &&
OrderMagicNumber()==MagicNumber
)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
{
if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
{
if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyP oint*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
int TotalOrdersCount()
{
int result=0;
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
if (OrderMagicNumber()==MagicNumber) result++;
}
return (result)
kira-h
24-12-2021, 08:19 PM
السلام عليكم
الشرح بالكود :
if((iBullsPower(NULL,0,13,PRICE_CLOSE,3)<iBullsPower(NULL,0,13,PRICE_CLOSE,2))//قيمة مؤشر الثيران بالشمعة 3 اصغر من قيمته بالشمعة 2
&&(iBullsPower(NULL,0,13,PRICE_CLOSE,2)<iBullsPower(NULL,0,13,PRICE_CLOSE,1))//قيمة مؤشر الثيران بالشمعة 2 اصغر من قيمته بالشمعة 1
&&(iBearsPower(NULL,0,13,PRICE_CLOSE,3)>iBearsPower(NULL,0,13,PRICE_CLOSE,2))//قيمة مؤشر الذببة بالشمعة 3 اكبر من قيمته بالشمعة 2
&&(iBearsPower(NULL,0,13,PRICE_CLOSE,2)>iBearsPower(NULL,0,13,PRICE_CLOSE,1))//قيمة مؤشر الذببة بالشمعة 2 اكبر من قيمته بالشمعة 1
&&(iBullsPower(NULL,0,13,PRICE_CLOSE,0)<0))//قيمة مؤشر الثيران بالشمعة الحالية اصغر من الصفر
// Here is your open Sell rule
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);//دالة تنفيذ امر البيع
if(result>0)//بعد فتح الصفقة
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0)//شروط الهدف
TheTakeProfit=Bid-TakeProfit*MyPoint;//معادلة الهدف
if(StopLoss>0)//شروط الوقف
TheStopLoss=Bid+StopLoss*MyPoint;//معادلة الوقف
OrderSelect(result,SELECT_BY_TICKET);//تحديد الصفقة المفتوحة
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(TheStopLoss,Digits),NormalizeDouble(TheTa keProfit,Digits),0,Green);//ليتم تعديل الهدف والوقف
}
return(0);
}
ملحوظة :
ترقيم الشموع برمجيا يبدأ من آخر شمعة، يعني :
الشمعة 0 هي آخر شمعة التي لم تغلق بعد (الشمعة الحالية)
الشمعة 1 هي آخر شمعة مغلقة
الشمعة 2 هي الشمعة التي قبل الشمعة 1
وهكذا ...
//---------------------------------------------------
ثم يليه دالة الترلينيغ ستوب :
for(int cnt=0; cnt<OrdersTotal(); cnt++)// لوب الصفقات المفتوحة
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);//البحث بالصفقات المفتوحة
if(OrderType()<=OP_SELL &&//شرط التنفيذ بصفقات البيع او الشراء الماركت
OrderSymbol()==Symbol() &&//على الزوج الحالي
OrderMagicNumber()==MagicNumber//بماجك نمبر محدد
)
{
if(OrderType()==OP_BUY)//إذا كانت الصفقات شراء
{
if(TrailingStop>0)//بعد تفعيل الترلينغ إذا كان اكبر من الصفر
{
if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)//إذا كان فرق السعر الحالي وسعر افتتاح الصفقة أكبر من قيمة التريلينغ ستوب
{
if(OrderStopLoss()<Bid-MyPoint*TrailingStop)//والستوب اصغر من سعر الترلينغ ستوب
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);//يتم تنفيذ تعديل الوقف الى سعر الترلينغ ستوب
return(0);
}
}
}
}
else//نفس الشيء إذا كانت الصفقات بيع
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
{
if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyP oint*TrailingStop,OrderTakeProfit(),0,Red);//وظيفة تعديل
return(0);
}
}
}
}
}
}
//---------------------------------------------------
ثم يليه دالة حساب عد الصفقات المفتوحة :
int TotalOrdersCount()//دالة حساب عدد الصفقات المفتوحة
{
int result=0;// عدد الصفقات مبدئيا 0
for(int i=0; i<OrdersTotal(); i++)//لوب عدد الصفقات
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);//البحث بالصفقات المفتوحة
if(OrderMagicNumber()==MagicNumber)//إذا كانت الصفقات ذات ماجك نمبر محدد
result++;//يحسب عددها
}
return (result)//والدالة تعود بنتيجة الحساب
}