Очень интересна Ваша тема. Прочитал практически все посты на 43 стр. немного потестил... Новые еще не тестил, но по расчёту лота до выхода новых использовал такой код... Может пригодится?
функцию void lots() заменил на:
double lots(double Risk)
{
double Free =AccountFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot =MathFloor(Free*Risk/100/One_Lot/Step)*Step;
if(Lot<Min_Lot) Lot=Min_Lot;
if(Lot>Max_Lot) Lot=Max_Lot;
if(Lot*One_Lot>Free) return(0.0);
return(Lot);
}
А обращение к ней заменил на:
Lot=NormalizeDouble(lots(percent_lot),Digits);