LotDec = log10(1 / MarketInfo(Symbol(), MODE_LOTSTEP));
MinLot = MarketInfo(Symbol(), MODE_MINLOT);
extern int DynamicLot = 1; // 0=BaseLot, 1=FreeMargin, 2=Equity, 3=Balance
extern double RiskFactor = 0.003; // риск от средств счёта для динамического лота
............................................
// динамический лот рассчитывается исходя из текущего размера собственных средств
// эмпирика: каждые 100$ свободных средств = 0.1 лота при EquityRisk = 0.1
// без динамики hi/lo по барам и учёта максимального количества ордеров
// внешняя переменная DynamicLot определяет источник (в порядке убывания агрессивности):
// 1) свободные для открытия ордера, 2) средства без учёта маржи, 3) баланс (практики не имеет)
double lot, lot_sell, lot_buy;
switch(DynamicLot)
{
case 1: lot = AccountFreeMargin() / 100 * RiskFactor; break;
case 2: lot = AccountEquity() / 100 * RiskFactor; break;
case 3: lot = AccountBalance() / 100 * RiskFactor; break;
default: lot = BaseLot; break;
}
if (EquLot)
{
lot_buy = NormalizeDouble(lot * MathPow(LotExp, MathMax(count_buy, count_sell)), LotDec);
lot_sell = lot_buy = MathMin(MathMax(lot_buy, BaseLot), MaxiLot);
}
else
{
lot_buy = NormalizeDouble(lot * MathPow(LotExp, count_buy), LotDec);
lot_buy = MathMin(MathMax(lot_buy, BaseLot), MaxiLot);
lot_sell = NormalizeDouble(lot * MathPow(LotExp, count_sell), LotDec);
lot_sell = MathMin(MathMax(lot_buy, BaseLot), MaxiLot);
}
guest111