Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Поделись своими разработками. Это увеличит твой рейтинг.
Vasiliy Sokolov
21773
Vasiliy Sokolov 2010.08.11 20:00 

Я тестирую свой советник в режиме все тики. Он не чувствителен к небольшим колебаниям, однако режим выставления рыночных ордеров с немедленным исполнением требует этого. Что бы оптимизировать работу тестера стратегий и не напрягать алгоритм чрезмерно частыми вызовами я решил вызывать основной алгоритм расчета, только если изменение цены будет больше или равно 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;
   ...
  }

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

Dmitry Fedoseev
42920
Dmitry Fedoseev 2010.08.11 20:16  
Лучше нормализовать до четырех знаков, если нормализованные цены равны, то выпрыгивать.
Vasiliy Sokolov
21773
Vasiliy Sokolov 2010.08.11 20:50  
Integer:
Лучше нормализовать до четырех знаков, если нормализованные цены равны, то выпрыгивать.
Не совсем понимаю почему вариант при нормализации лучше. Интересно, какой из этих двух вариантов быстрей?
Dmitry Fedoseev
42920
Dmitry Fedoseev 2010.08.11 22:05  
C-4:
Не совсем понимаю почему вариант при нормализации лучше. Интересно, какой из этих двух вариантов быстрей?

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

 

o_o
Модератор
23696
o_o 2010.08.11 22:59  
Integer:

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

Но ведь можно нормализовать только первый тик. а потом от него и плясать
Aleksey Lebedev
6057
Aleksey Lebedev 2010.08.11 23:04  
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
1226
gumgum 2010.08.11 23:06  
Нормализация так медленно работает?
o_o
Модератор
23696
o_o 2010.08.12 01:50  
gumgum:
Нормализация так медленно работает?
если брать в глобальном масштабе, то милисекунды на каждом тике могут вырасти в часы - на обширных оптимизациях.
yu-sha
1042
yu-sha 2010.08.12 02:19  

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

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

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

Vasiliy Sokolov
21773
Vasiliy Sokolov 2010.08.12 17:14  
yu-sha:

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

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

Вместо 0.0001 ни кто не запрещает использовать _Digits или нечто подобное.
Yuriy Zaytsev
13907
Yuriy Zaytsev 2010.08.15 12:26  

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

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 !

 


12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий