|
|
|
|
|
السلام عليكم ورحمه الله تعالى وبركاته
استاذى الكريم اسلام
انا الان عندى داله تغلق الصفقات الرابحه فقط كما طلبتها منك قبل ذلك
كود:
void }CloseProfitOnly(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
if(OrderType()==OP_BUY&&OrderProfit()>0)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3*Q);
}
if(OrderType()==OP_SELL&&OrderProfit()>0)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3*Q);
}
}
}
}
أنا الان أريد داله اخرى مشابهه لهذه الداله ولكن بتغيير بسيط
فأنا أريد داله تقوم بأغلاق أقل صفقه رابحه حجما وليس كل الصفقات الرابحه كما فى هذه الداله
وأيضا أريد داله تقوم بأغلاق أكبر صفقه رابحه حجما ...
يعنى المطلوب دالتيين
واحده لاغلاق اقل صفقه رابحه فقط
وأخرى لاغلاق أكبر صفقه رابحه
لاجراء بعض الاختبارات فى بعض الاكسبيرتات عندى
أرجوا ان تكون فكرتى وصلتك استاذى اسلام
منتظر ردك استاذى الغالى
سلام عليكم |
|
|
|
|
،،،وعليكم السلام ورحمة الله وبركاتة،،،
،،،اولا سوف تحتاج الى دالة لمعرفة اكبر ربح موجود،،،
كود:
double MaxProfit()
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if( OrderSelect(i, SELECT_BY_POS) && OrderMagicNumber()== MagicNumber && OrderSymbol()== Symbol() )
{
if( iBarShift(NULL,0,OrderOpenTime(),false) > 1 )
{
double Max_Profit = MathMax(Max_Profit,OrderProfit() );
}
else
{
Max_Profit = OrderProfit();
}
}
}
return(Max_Profit);
}
،،،بعد ذلك تحتاج الى دالة تقوم بالمرور على الصفقات واختيار صفقة واحدة ربحها اكبر من او يساوى اعلى ربح وتقوم باغلاقها،،،
كود:
void CloseMaxProfit()
{
int ticket;
double profit = MaxProfit();
for (int i =1 ;i>0;i--)
{
for (int x = OrdersTotal()-1;x>0;x--)
{
OrderSelect(x,SELECT_BY_POS);
if (OrderProfit() >= profit) ticket = OrderTicket();
}
OrderSelect(ticket,SELECT_BY_TICKET);
if (OrderType() == OP_BUY)
OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),NULL);
if (OrderType() == OP_SELL)
OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),NULL);
}
}