Проверка корректности Тейк-профита и Стоп-лосса
Простая функция проверки уровней стоп-лосса и тейк-профита. Если какой-то из этих уровней слишком близко к цене открытия, функция вернет false. Во входные параметрый уже нужно передавать ценовые уровни стопа и тейка, а не их выражение в пунктах.
Например,
if(CheckStopLoss_Takeprofit(OP_BUY,Ask-(300*_Point),Ask + (300*_Point))
{
//тут код модификации ордера
}
Функция:
bool CheckStopLoss_Takeprofit(int type,double SL,double TP)
{
//— получим уровень SYMBOL_TRADE_STOPS_LEVEL
int stops_level=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
if(stops_level!=0)
{
PrintFormat("SYMBOL_TRADE_STOPS_LEVEL=%d: StopLoss и TakeProfit must be"+
" not closer than %d points from closing open",stops_level,stops_level);
}
//—
bool SL_check=false,TP_check=false;
//— проверяем только два типа ордеров
switch(type)
{
//— операция покупка
case OP_BUY:
{
//— проверим StopLoss
if(Bid-SL > stops_level*_Point) SL_check = true;
if(TP-Bid > stops_level*_Point) TP_check = true;
if(SL_check && TP_check) return true;
else return false;
}
//— операция продажа
case OP_SELL:
{
if(SL-Bid>stops_level*_Point)SL_check=true;
if(Bid-TP>stops_level*_Point)TP_check=true;
if(SL_check && TP_check) return true;
else return false;
}
break;
}
return false;
}