Защита от пятизнака

 

Я тестирую свой советник в режиме все тики. Он не чувствителен к небольшим колебаниям, однако режим выставления рыночных ордеров с немедленным исполнением требует этого. Что бы оптимизировать работу тестера стратегий и не напрягать алгоритм чрезмерно частыми вызовами я решил вызывать основной алгоритм расчета, только если изменение цены будет больше или равно 1 классическому четырех значному тику. Вот что я написал:

MqlTick new_tick,
        old_tick;

void OnTick()
  {
   SymbolInfoTick(_Symbol, new_tick);
   if(MathAbs(new_tick.bid-old_tick.bid)<=0.0001){
      //Print(new_tick.bid, "; ", old_tick.bid, "; ", NormalizeDouble(new_tick.bid-old_tick.bid, 5));
      return;
   }
   else old_tick.bid=new_tick.bid;
   ...
  }

Покатит ли такой вариант?

 
Лучше нормализовать до четырех знаков, если нормализованные цены равны, то выпрыгивать.
 
Integer:
Лучше нормализовать до четырех знаков, если нормализованные цены равны, то выпрыгивать.
Не совсем понимаю почему вариант при нормализации лучше. Интересно, какой из этих двух вариантов быстрей?
 
C-4:
Не совсем понимаю почему вариант при нормализации лучше. Интересно, какой из этих двух вариантов быстрей?

С нормализацией медленней будет. С вашим способом будет зависимость от значения первого тика в начале теста, эксперт будет торговать на длительных участках только по ценам оканчивающимся  на какое-то одно и то же число. Ели для себя - нет проблем, а если на заказ - могут быть лишние вопросы.

 

 
Integer:

С вашим способом будет зависимость от значения первого тика в начале теста, эксперт будет торговать на длительных участках только по ценам оканчивающимся  на какое-то одно и то же число.

Но ведь можно нормализовать только первый тик. а потом от него и плясать
 
imho как-то так:
MqlTick new_tick;
double old_tick;

void OnTick()
  {
   SymbolInfoTick(_Symbol, new_tick);
   if(MathAbs(new_tick.bid-old_tick)<0.000099) return;
   old_tick=NormalizeDouble(new_tick.bid, 4);
   ...
  }
код проще написать, чем обьяснить :)
 
Нормализация так медленно работает?
 
gumgum:
Нормализация так медленно работает?
если брать в глобальном масштабе, то милисекунды на каждом тике могут вырасти в часы - на обширных оптимизациях.
 

А как при таком кодинге

if(MathAbs(new_tick.bid-old_tick.bid)<=0.0001)

 быть с йена-парами ?

 
yu-sha:

А как при таком кодинге

быть с йена-парами ?

Вместо 0.0001 ни кто не запрещает использовать _Digits или нечто подобное.
 

Предпочитаю пункты ставить именно так

double pPIP;

pPIP = 0.0150; // 150 пунктов

pTP=pAsk+pPIP

таким образом мне вообще все равно 5 знаков или 4

-------------------

кроме того я не теряю скорость на преобразованиях  типа

pPIP = 150; // для 4

pPIP = 1500; // для 5

pTP = pAsk + pPIP * Point; // PIP будет равно в итоге 0.0150


зачем это делать , когда проще сразу принять 0.0150 !

 
Причина обращения: