
double Lots(double risk)
{
double lot;
if(Auto_Lots){
double Min_Lot = MarketInfo(Symbol(), MODE_MINLOT);
double Max_Lot = MarketInfo(Symbol(), MODE_MAXLOT);
double lot_step= MarketInfo(Symbol(), MODE_LOTSTEP);
lot=NormalizeDouble(AccountFreeMargin()*MaxRisk/100/1000,2);
lot=NormalizeDouble(lot,2);
lot=NormalizeDouble(lot/lot_step,0)*lot_step;
if (lot < Min_Lot) lot = Min_Lot;
if (lot > Max_Lot) lot = Max_Lot;
}
else lot=Lots;
return (lot);
} void MoveTrailingStop()
{
bool select,modify;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(mlow,Digits))||(OrderStopLoss()==0))
{
modify=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(mlow,Digits),OrderTakeProfit(),0,Blue);
}
}
else
{
if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(mhigh,Digits)))||(OrderStopLoss()==0))
{
modify=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(mhigh,Digits),OrderTakeProfit(),0,Red);
}
}
}
}
} if(TrailingStop>0)MoveTrailingStop();
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*point;}
OrderSend(Symbol(),OP_BUY,Lots(MaxRisk),NormalizeDouble(Ask,digits),Slippage*Q,SL,TP,"long",MagicNumber,0,Blue); 

المواضيع المتشابهه | ||||
| الموضوع | كاتب الموضوع | المنتدى | مشاركات | آخر مشاركة |
| طلبي موجه لكل المبرمجين و خصوصا الاستاد سمير | SAMIRMFS | منتدى المؤشرات و الاكسبرتات | 5 | 23 - 12 - 2014 04:13 PM |
| طلب تعديل على اكسبيرت / لاستاذ سمير | زياد99 | منتدى المؤشرات و الاكسبرتات | 16 | 23 - 02 - 2013 06:35 PM |