//+----------------------------------------------------------------------------+
//| Ожидаемый профит по ТП
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ( "" - любой символ, |
//| NULL - текущий символ) |
//| op - операция ( -1 - любая позиция) |
//| mn - MagicNumber ( -1 - любой магик) |
//+----------------------------------------------------------------------------+
double ProfitIFTakeInCurrency(string sy="")
{
if(sy=="0")
sy=_Symbol; // Текущий символ
int k=PositionsTotal(); // Подсчёт открытых позиций
long m=0; // Способ расчета прибыли: 0 - Forex, 1 - CFD, 2 - Futures
double l; // Размер контракта в базовой валюте инструмента
double p; // Размер пункта в валюте котировки
double t; // Минимальный шаг изменения цены инструмента в валюте котировки
double v; // Размер минимального изменения цены инструмента в валюте депозита
double s=0; // Подсчёт стопа в валюте депозита
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(m_position.SelectByIndex(i))
{
if(m_position.PositionType() <= 1 && (m_position.Symbol() == sy || sy == "") && m_position.TakeProfit() > 0)
{
l=SymbolInfoDouble(m_position.Symbol(),SYMBOL_TRADE_CONTRACT_SIZE);
m=SymbolInfoInteger(m_position.Symbol(),SYMBOL_TRADE_CALC_MODE);
p=SymbolInfoDouble(m_position.Symbol(),SYMBOL_POINT);
t=SymbolInfoDouble(m_position.Symbol(),SYMBOL_TRADE_TICK_SIZE);
v=SymbolInfoDouble(m_position.Symbol(),SYMBOL_TRADE_TICK_VALUE);
// Print("m: ",m);
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
if(m_position.TakeProfit() > 0)
{
// Print("m_position.Volume(): ",m_position.Volume(),"; m_position.TakeProfit() - m_position.PriceOpen(): ",m_position.TakeProfit() - m_position.PriceOpen(), "; p: ", p);
if(m==0)
s+= m_position.Volume() * v * ((m_position.TakeProfit() - m_position.PriceOpen())/p);
// s += (m_position.TakeProfit() - m_position.PriceOpen()) * l * m_position.Volume();
// s += (m_position.TakeProfit() - m_position.PriceOpen())/p*v*m_position.Volume(); //Profit: (close_price - open_price) * Contract_Size*Lots
if(m==1)
s += (m_position.TakeProfit() - m_position.PriceOpen())/p*v/t/l*m_position.Volume();
if(m==2)
s += (m_position.TakeProfit() - m_position.PriceOpen())/p*v*m_position.Volume();
s += m_position.Commission() + m_position.Swap();
}
}
if(m_position.PositionType()==POSITION_TYPE_SELL)
{
if(m==0)
s += (m_position.PriceOpen()-m_position.TakeProfit()) / p * v * m_position.Volume();
if(m==1)
s += (m_position.PriceOpen()-m_position.TakeProfit())/p*v/t/l*m_position.Volume();
if(m==2)
s += (m_position.PriceOpen()-m_position.TakeProfit())/p*v*m_position.Volume();
s += m_position.Commission() + m_position.Swap();
}
}
}
}
return(NormalizeDouble(s,2));
}