 # How to increase and decrease lot size in EA as balance grows/shrinks?

I’m not sure how to create code for an EA to increase lot size as an account grows and decrease lot size as the account shrinks. So if it starts at \$1000 and moves to \$2000 the lot size doubles where as if it falls to \$500 it cuts in half.

``````double LotAdjust(){
string baseCurr = StringSubstr(Symbol(),0,3);
string crossCurr = StringSubstr(Symbol(),3,3);
MqlTick last_tick;
SymbolInfoTick(_Symbol,last_tick);
// calculate risk based on free margin
//
double riskCapital = AccountInfoDouble(ACCOUNT_MARGIN_FREE) * Risk/100;

if(crossCurr == AccountInfoString(ACCOUNT_CURRENCY)) {
LTS = (riskCapital / StopLoss) / tickValue;
Print("Calculated lots (A/C currency = Quote currency): ", LTS);
} else if(baseCurr == AccountInfoString(ACCOUNT_CURRENCY)) {
//
LTS = ((Ask * riskCapital) / StopLoss) / tickValue;
Print("Calculated lots (A/C currency = Base currency): ", LTS);
} else if(crossCurr != AccountInfoString(ACCOUNT_CURRENCY)
&& baseCurr  != AccountInfoString(ACCOUNT_CURRENCY)) {
LTS = riskCapital / (StopLoss * tickValue);
Print("Calculated lots (A/C currency neither Base nor Quote currency): ", LTS);
}

// snap lot size to broker-happy value
//
double  lotStep = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);
double  minLot  = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
LTS            = MathRound(LTS/lotStep) * lotStep;

if(LTS < minLot) {
LTS = minLot;
}

return(LTS);

// another look.....
/*if (UseMM)Lots=AccountEquity()/Close/1000*Risk/100;
Lots = arrondirLots(Lots);
double minLot = MarketInfo(Symbol(), MODE_MINLOT);
double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
if (Lots<minLot)Lots=minLot;
if (Lots>maxLot)Lots=maxLot;
*/
}
``````

this is what i use… see its mql5 though, but you can translate it to 4.

others can help improve it if it does not work for you or you find errors.

``````//---------------------------------------------- Input parameters ---!
input string         Config_1      = "";       // Money Management
input double         StartLotSize  = 0.01;     // The starting lot size
input double         StartBalance  = 50.0;     // The starting balance
//---------------------------------------------- Money management ---!
double LotsOptimized(){
double LotStep=MarketInfo(Symbol(),MODE_LOTSTEP),LotSize=0;
if(LotStep==0.1){LotSize=NormalizeDouble(StartLotSize*(AccountFreeMargin()/StartBalance),1);}
if(LotStep==0.01){LotSize=NormalizeDouble(StartLotSize*(AccountFreeMargin()/StartBalance),2);}
if(LotSize<MarketInfo(Symbol(),MODE_MINLOT)){LotSize=MarketInfo(Symbol(),MODE_MINLOT);}
if(LotSize>MarketInfo(Symbol(),MODE_MAXLOT)){LotSize=MarketInfo(Symbol(),MODE_MAXLOT);}
return(LotSize);
}``````

Thanks for the reply! Is this mql4 or 5? If it’s 4, do I input this into the trade function section?