มันต้องระบุ ระยะ sl ด้วยครับ จะได้ขนาด lot ที่ต้องใช้
double GetLot(double open,double sl,double riskPerLevel)
{
double stopLossPips=0.0;
if(CheckDoubles(open,">",sl))
stopLossPips=open-sl;
else if(CheckDoubles(open,"<",sl))
stopLossPips=sl-open;
else return 0.0;
double p = riskPerLevel/stopLossPips;
double l = NormalizeDouble((p/MarketInfo(Symbol(),MODE_TICKVALUE))*Point,2);
return(l);
}
bool CheckDoubles(double a,string check,double b)
{
if(check==">")
{
if(a - b > Point / 2.0)return(1);else return (0);
}else if(check=="<"){
if(b - a > Point / 2.0)return(1);else return (0);
}else if(check==">="){
if(a - b > -Point)return(1);else return (0);
}if(check=="<="){
if(b - a > -Point)return(1);else return (0);
}else if(check=="!="){
if(MathAbs(a - b) > Point / 2)return(1);else return (0);
}else {
Print("Sorry you've entered a wrong check value");
}
return (0);
}
Usage:
double risk_percent = 5;
double risk_money=NormalizeDouble(((double)risk_percent/100.0)*AccountEquity(),2);
double lot=GetLot(order_open_price, order_sl_price, risk_money);
order_open_price = ราคาที่จะเปิดออร์เดอร์
order_sl_price = ราคา stoploss