Скачать MetaTrader 5

Левые тики?

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

Отлаживая тиковый график наткнулся на некую особенность.

В конце текущей минуты на минутном графике (или наверно любого бара на другом ТФ) если прямо в эту секунду нет тика, терминал принудительно "закрывает" текущий бар и открывает новый. Но делает это очень "хитро": бар закрывается эмулированием прихода тика без цены!! (вместо него дает значение EMPTY_VALUE = 2147483647) и открывает новый бар с прошлым значением цены.

В результате имеем два лишних тика: вброшенная пустышка и дубликат. грустно както :((((

коментарии????

IgorM М
4801
IgorM М  
возможно я ошибаюсь, но думаю дело не в терминале, а в сервере - наверное он дает команду закрыть и перерисовать ТФ, у Вас кажется название ТФ совпадает со стандартным
Всеволод
648
Всеволод  
Не надо отлаживать тиковые стратегии, они все грустные.
Сергей
712
Сергей  

понятное дело что терминал только отображает то что ему дал сервер. ну уточним формулировку: действительно ли сервер посылает терминалу два левых тика? ведь мой start дернулся два раза отрабатывая эти несуществующие тики.

и тут еще одна вредность. я получаю эту пустую цену со значением 2147483647(!!!) прямо из предопределенной переменной Bid

  double CurPrice = Bid; 
  
  // если настоящий тик а не эмулированный тик или обновление...
  if ( PrevVolume != Volume[0] ) // сдвинем старые тики назад
  {     
    if ( PriceCnt > 0 ) for (i = PriceCnt-1; i >= 0; i--) { Price[i+1] = Price[i];  PriceTime[i+1] = PriceTime[i]; }
    Price[0] = CurPrice; PriceTime[0] = TimeCurrent(); // запомним новый тик
    if ( PriceCnt < Bars-2) PriceCnt++;           // увеличим счетчик
  }

  string dbg = ""; for ( i=0;i<30;i++) dbg = dbg + "\n" + DoubleToStr(Price[i],6)+" "+TimeToStr(PriceTime[i],TIME_SECONDS);
  Comment(dbg);
эт значит что любой эксперт или индикатор может в любой момент нарваться на это значение и сдуру решить по нему выставить сигнал на открытие ордера :(
Сергей
712
Сергей  
splxgf:
Не надо отлаживать тиковые стратегии, они все грустные.
если вы не умеете плавать, это вовсе не означает что купание в море это пустая трата времени не приносящая ничего кроме грусти ;) :))
Сергей
712
Сергей  

сорри - погорячился.

дело в том, что Price - это буферный массив индикатора. при приходе нового тика терминал сам сдвигает его элементы "на один назад". в появившийся новый элемент ессесно вписывается EMPTY_VALUE. после этого я его еще раз сдвигаю назад и загоняю эту пустышку как вродебы полученное от сервера значение. вот так - работает правильно:

  bool OldBar = false; if ( PrevTime == Time[0] ) OldBar = true; 

  // если настоящий тик а не эмулированный тик или обновление...
  if ( PrevVolume != Volume[0] ) // сдвинем старые тики назад
  {     
    if ( OldBar && PriceCnt > 0 ) for (i = PriceCnt-1; i >= 0; i--) { Price[i+1] = Price[i];  PriceTime[i+1] = PriceTime[i]; }
    Price[0] = CurPrice; PriceTime[0] = TimeCurrent(); // запомним новый тик
    if ( PriceCnt < Bars-2) PriceCnt++;           // увеличим счетчик
  }

Комбинатор
16290
Комбинатор  
Ага, у меня тоже сейчас на 5ке наверное под 70% претензий получаются из-за собственных ошибок и невнимательности.
Victor Nikolaev
Модератор
15085
Victor Nikolaev  
TheXpert:
Ага, у меня тоже сейчас на 5ке наверное под 70% претензий получаются из-за собственных ошибок и невнимательности.

Это про библиотеку?
Комбинатор
16290
Комбинатор  
По большому счету да, но не только. В отличие от 4ки, на 5ке я серьезно вознамерился избавляться (если это не затратно) от любого дублирования кода, т.е. что-то типа библиотеки функций Игоря.
Victor Nikolaev
Модератор
15085
Victor Nikolaev  
TheXpert:
По большому счету да, но не только. В отличие от 4ки, на 5ке я серьезно вознамерился избавляться (если это не затратно) от любого дублирования кода, т.е. что-то типа библиотеки функций Игоря.

Не всегда это нужно делать, и не всегда можно. Пятерка конечно по быстрее будет. Но ресурсы все равно надо беречь
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий