
Добавил в каталог файлов — www.opentraders.ru/downloads/1450
extern double Lot = 0.1; //Начальный лот
extern double ShagLot = 0.05; //прогрессия лота
extern int MaxOrd = 35; //Максимум ордеров
extern double MaxLot = 10; //Максимальный лот
int PrevOrdTotalBuy=0;
//+-------------------------------------------------------------+//
double BuyLotsOptimized()
{
double LotSize=MarketInfo(Symbol(),MODE_LOTSIZE);
double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
double lot=Lot;
if(OrdTotalBuy()>PrevOrdTotalBuy && OrdTotalBuy()<=MaxOrd)
{
lot += ShagLot*(OrdTotalBuy()-1);
if(lot<=MinLot) lot=MinLot;
if(lot>=MaxLot) lot=MaxLot;
}
return (lot);
}
int li_188 = 100; //JPY
int digs = Digits;
if (StringFind(Symbol(), "JPY", 0) == -1) li_188 = 10000; //кроме пар с JPY
double OpenPrice = iOpen(Symbol(),PERIOD_D1,0) * li_188;
// алгоритм расчета уровней
double Mod=(180* MathSqrt(OpenPrice) - 225.0)/360;
double dir=(((180* MathSqrt(OpenPrice) - 225.0)/360)-Mod)*360;
string strdir = "Unknown: " + dir;
if (dir >= 0.0 && dir <= 90.0 || dir >= 180.0 && dir <= 270.0) strdir="Long";
if (dir > 90.0 && dir < 180.0 || dir > 270.0 && dir <= 360.0) strdir="Short";
double ld_124 = 0, ld_132 = 0, ld_148 = 0, ld_156 = 0, ld_164 = 0;
// Ширина сетки
if (dir >= 90.0) {
ld_124 = NormalizeDouble(dir / 90.0, 0);
ld_148 = dir / ld_124;
ld_164 = ld_148 / 180.0;
} else {
ld_132 = NormalizeDouble(90 / dir, 0);
ld_156 = dir * ld_132;
ld_164 = ld_156 / 180.0;
}
double Entry_1;
double Entry_2;
double TP1;
double TP2;
double SL;
double ld_196 = MathSqrt(OpenPrice);
if (strdir=="Long")
{
Entry_1 = NormalizeDouble(OpenPrice / li_188,digs); //White
Entry_2 = NormalizeDouble((ld_196 - ld_164 / 2.0) * (ld_196 - ld_164 / 2.0) / li_188,digs); //Orange
TP1 = NormalizeDouble((ld_196 + ld_164 / 2.0) * (ld_196 + ld_164 / 2.0) / li_188,digs); //Lime
TP2 = NormalizeDouble((ld_196 + ld_164) * (ld_196 + ld_164) / li_188,digs); //Green
SL = NormalizeDouble((ld_196 - ld_164) * (ld_196 - ld_164) / li_188,digs); //Red
}
if (strdir=="Short")
{
Entry_1 = NormalizeDouble(OpenPrice / li_188,digs); //White
Entry_2 = NormalizeDouble((ld_196 + ld_164 / 2.0) * (ld_196 + ld_164 / 2.0) / li_188,digs); //Orange
TP1 = NormalizeDouble((ld_196 - ld_164 / 2.0) * (ld_196 - ld_164 / 2.0) / li_188,digs); //Lime
TP2 = NormalizeDouble((ld_196 - ld_164) * (ld_196 - ld_164) / li_188,digs); //Green
SL = NormalizeDouble((ld_196 + ld_164) * (ld_196 + ld_164) / li_188,digs); //Red
}
extern double Lot = 0.1; //Начальный лот
extern double ShagLot = 0.1; //прогрессия лота на каждые "ShagBalans"
extern int ShagBalans = 1000; //шаг баланса кратный 1000
extern double Risk = 5; //если баланс меньше "ShagBalans" рассчитывается(%) от баланса
extern double MaxLot = 10; //Максимальный лот
//+-------------------------------------------------------------+//
double LotsOptimized()
{
double LotSize=MarketInfo(Symbol(),MODE_LOTSIZE);
double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
double lot=Lot;
lot=(int)AccountBalance()/ShagBalans;
lot=lot*ShagLot;
//баланс меньше 1000
if(AccountBalance()<ShagBalans)
{
lot=NormalizeDouble(AccountBalance()*Risk/LotSize,2);
if(lot<=MinLot) lot=MinLot;
if(lot>=MaxLot) lot=MaxLot;
}
return (lot);
}
Andrju81