Чт. Ноя 21st, 2024

Проверка корректности Тейк-профита и Стоп-лосса

Простая функция проверки уровней стоп-лосса и тейк-профита. Если какой-то из этих уровней слишком близко к цене открытия, функция вернет 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;
  }

от drivermql

Добавить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.