Снова прошу помощи... dooble...

 

Подскажите пожалуйста ...

есть процедура скачанная где-то из Code Base :

//+------------------------------------------------------------------+
//|                                               NormalizePrice.mq4 |
//|                                                             GF1D |
//|                                                                  |
//+------------------------------------------------------------------+
double NormalizePrice(double price,string SY="", bool round = true)
{
   double tickSize = MarketInfo(SY, MODE_TICKSIZE);
   if (tickSize==0) tickSize=MarketInfo(SY, MODE_POINT);
   int fullCount = price / tickSize;            // вычисляем количество полных тиков до цены
   double result = fullCount * tickSize;        // вычисляем результат, отбросив остаток   
   if (round)
   {
      double mod = price - result;              // вычисляем остаток
      
      if (mod >= tickSize / 2.0)                // если остаток можно округлить до большего тика
         result = result + tickSize;            // то прибавляем к цене этот тик
   }
   return(result);
}

Есть процедура написанная мною которая вычисляет стоп лосс на один пункт выше заданного с учетом спреда и того что на фьючерсах бывает разный Point :

//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sl - входящая цена уровня стоп лосса от источников сигнала              |
//|    SY - рабочий символ                                                     |
//+----------------------------------------------------------------------------+
double Sl_level_Sell_pos(double sl,string SY="")
{
      return(NormalizePrice(NormalizeDouble(sl+MarketInfo(SY ,MODE_TICKSIZE)+MarketInfo(SY,MODE_POINT)*MarketInfo(SY,MODE_SPREAD),MarketInfo(SY,MODE_DIGITS)),SY));
}

Теперь вопрос : почему она работает не во всех случаях . Например на WQ2 работает, а на JOK2 не работает ?

 
Добавлю что для контроля сделал чтобы писался Print и вот что получилось : GFK2 По цене = 148.275, Стоп лосс = 149.0921 хотя Digit там трехзначный, JOK2 По цене = 143.25, Стоп лосс = 145.3684 Digit двухзначный
 

А что вообще функция должна делать?

На сколько понял, округляет тики. Опишите подробнее что-то не разобрал.

 
Если например мувинг равен 70.32, а один тик равен 0.25 то и спред например два пункта то должно получится для sell округляем в большую сторону 70.50+ один тик 70.50+0.25 плюс спред 70.50+0.25+2*0.25=71.25 иногда получается отвлеченно говоря 71.2517 ...
 
lucka88:

Подскажите пожалуйста ...

есть процедура скачанная где-то из Code Base :

Есть процедура написанная мною которая вычисляет стоп лосс на один пункт выше заданного с учетом спреда и того что на фьючерсах бывает разный Point :

Теперь вопрос : почему она работает не во всех случаях . Например на WQ2 работает, а на JOK2 не работает ?




если у вас уровень стопа правильно рассчитан, то достаточно прибавить к нему (или отнять смотря что нужно) размер тиксайза и ничего не нужно нормализовать. т.к. и так уже все нормализовано.. а пункт на фьючерсах не катит, т.к. там все измеряется в тиках, а не пунктах.. а то получится прибавили пункт, а потом полученный уровень стопа нужно нормализовать до четности тиков, и в итоге округления уровень может остаться тот же самый ..
Причина обращения: