//=============================================================================================//
//расчеты уровней:
//---------------------------------------------------------------------------------------------//
double dZM, UrZM, dZF, UrZF, dDZ, dPZM, UrPZM, dSO, UrSO, UrZPb, UrZPs, UrOZP, bd$, sd$, fd$, UrCT, UrOZPZ, UrCTZ, idCT, UrZPbVlt, UrZPsVlt, UrZPfVlt,
idZP, UrRL, UrZPbTP, UrZPsTP, UrZPfTP, UrZPbdS, UrZPsdS, UrZPfdS,dUrRL, UrAut, UrTP_frz, UrSL_frz, idZM, dUrZP;
if(dlots != 0)
{
dZM = freemargin / (tickvalue * dlots); //расстояние от цены до уровня нулевой маржи
dZF = equity / (tickvalue * dlots); //расстояние от цены до полного слива
dDZ = dZF - dZM; //размер "мертвой" зоны
dPZM = dZF - dDZ * PZM / 100; //расстояние от цены до указанного % от уровня полного слива - сигнального уровня
dSO = dZF - dDZ * stop_out / 100; //расстояние от цены до уровня принудительного закрытия ордеров
if (dlots > 0) UrSO = Bid - dSO * Point; //значение уровня принудительного закрытия ордеров - StopOut
if (dlots < 0) UrSO = Ask - dSO * Point; //значение уровня принудительного закрытия ордеров - StopOut
if (dlots > 0) UrZM = Bid - dZM * Point; //значение уровня нулевой маржи
if (dlots < 0) UrZM = Ask - dZM * Point; //значение уровня нулевой маржи
if (dlots > 0) UrZF = Bid - dZF * Point; //значение уровня полного слива
if (dlots < 0) UrZF = Ask - dZF * Point; //значение уровня полного слива
if (dlots > 0) UrPZM = Bid - dPZM * Point; //значение % сигнального уровня
if (dlots < 0) UrPZM = Ask - dPZM * Point; //значение % сигнального уровня
if (dlots > 0) dUrRL = (dlots * lot_cena - freemargin) / (tickvalue * dlots); //расстояние до уровня Равного Лока
if (dlots < 0) dUrRL = (dlots * lot_cena + freemargin) / (tickvalue * dlots); //расстояние до уровня Равного Лока
if (dlots > 0) UrRL = Bid + dUrRL * Point; //уровень равного лока
if (dlots < 0) UrRL = Ask - dUrRL * Point; //уровень равного лока
if (dlots > 0) UrAut = UrRL + dSig * Point; //значение автоматического сигнального уровня для установки равного лока
if (dlots < 0) UrAut = UrRL - dSig * Point; //значение автоматического сигнального уровня для установки равного лока
if (BuyLots > 0 && SellLots > 0 && dlots > 0) UrOZP = Bid - ((BuyProfit + SellProfit) / (tickvalue * (dlots)) * Point); //уровень общего безубытка для открытых ордеров
if (BuyLots > 0 && SellLots > 0 && dlots < 0) UrOZP = Ask - ((BuyProfit + SellProfit) / (tickvalue * (dlots)) * Point); //уровень общего безубытка для открытых ордеров
}
if (BuyLots > 0) bd$ = d$/(BuyLots * tickvalue);
if (SellLots > 0) sd$ = d$/(SellLots * tickvalue);
if (dLots != 0) fd$ = d$/(dLots * tickvalue);
UrTP_frz = Ask + freeze * Point; //уровень зоны заморозки - для выставления отложеников и TP
UrSL_frz = Bid - freeze * Point; //уровень зоны заморозки - для выставления отложеников и SL
if (BuyLots > 0) UrZPb = Bid - (BuyProfit / (tickvalue * BuyLots) * Point); //уровень безубытка для BUY ордеров
if (SellLots > 0) UrZPs = Ask + (SellProfit / (tickvalue * SellLots) * Point); //уровень безубытка для SELL ордеров
if (BuyLots > 0) UrZPbTP = UrZPb + bTP * Point; //уровень безубытка + TP для BUY ордеров
if (SellLots > 0) UrZPsTP = UrZPs - sTP * Point; //уровень безубытка + TP для SELL ордеров
if (BuyLots > 0) UrZPbVlt = UrZPb + vlt * Point; //уровень безубытка + волатильность для BUY ордеров
if (SellLots > 0) UrZPsVlt = UrZPs - vlt * Point; //уровень безубытка + волатильность для SELL ордеров
if (BuyLots > 0) UrZPbdS = UrZPb + bd$ * Point; //уровень безубытка + $ для BUY ордеров
if (SellLots > 0) UrZPsdS = UrZPs - sd$ * Point; //уровень безубытка + $ для SELL ордеров
if (BuyLots > SellLots) UrZPfTP = UrOZP + fTP * Point; //уровень общего безубытка + TP для всех ордеров
if (SellLots > BuyLots) UrZPfTP = UrOZP - fTP * Point; //уровень общего безубытка + TP для всех ордеров
if (BuyLots > SellLots) UrZPfVlt = UrOZP + vlt * Point; //уровень общего безубытка + волатильность
if (SellLots > BuyLots) UrZPfVlt = UrOZP - vlt * Point; //уровень общего безубытка + волатильность
if (dLots != 0) UrZPfdS = UrOZP + fd$ * Point; //уровень общего безубытка + $ для всех ордеров
idZM = -dZM; //расстояния от текущей цены до уровня нулевой маржи (со знаком "-" - ниже текущей цены)
if (UrZPb > 0 && UrZPs > 0) dUrZP = (UrZPb - UrZPs)/Point; //расстояние между безубытками Buy и Sell
if (dlots != 0) UrCT = UrZPs + BuyLots * Point * dUrZP/(BuyLots + SellLots); //уровень "центра тяжести"
if (BuyLots == 0 && SellLots > 0) { UrCTZ = UrZPs; UrOZPZ = UrZPs; }
if (BuyLots > 0 && SellLots == 0) { UrCTZ = UrZPb; UrOZPZ = UrZPb; }
if (BuyLots > 0 && SellLots > 0) { UrCTZ = UrCT; UrOZPZ= UrOZP; }
if (dlots > 0) idZP = (UrOZPZ - Bid) * (znakov); //расстояние от текущей цены до уровня общего безубытка для открытых ордеров (со знаком "-" - ниже текущей цены)
if (dlots < 0) idZP = (UrOZPZ - Ask) * (znakov); //расстояние от текущей цены до уровня общего безубытка для открытых ордеров (со знаком "-" - ниже текущей цены)
if (dlots > 0) idCT = (UrCTZ - Bid) * (znakov); //расстояние от текущей цены до уровня общего безубытка для открытых ордеров (со знаком "-" - ниже текущей цены)
if (dlots < 0) idCT = (UrCTZ - Ask) * (znakov); //расстояние от текущей цены до уровня общего безубытка для открытых ордеров (со знаком "-" - ниже текущей цены)
//---------------------------------------------------------------------------------------------//
Syte