понятное дело что терминал только отображает то что ему дал сервер. ну уточним формулировку: действительно ли сервер посылает терминалу два левых тика? ведь мой 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);эт значит что любой эксперт или индикатор может в любой момент нарваться на это значение и сдуру решить по нему выставить сигнал на открытие ордера :(
Не надо отлаживать тиковые стратегии, они все грустные.
сорри - погорячился.
дело в том, что 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++; // увеличим счетчик }
Ага, у меня тоже сейчас на 5ке наверное под 70% претензий получаются из-за собственных ошибок и невнимательности.
Это про библиотеку?
По большому счету да, но не только. В отличие от 4ки, на 5ке я серьезно вознамерился избавляться (если это не затратно) от любого дублирования кода, т.е. что-то типа библиотеки функций Игоря.
Не всегда это нужно делать, и не всегда можно. Пятерка конечно по быстрее будет. Но ресурсы все равно надо беречь
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Отлаживая тиковый график наткнулся на некую особенность.
В конце текущей минуты на минутном графике (или наверно любого бара на другом ТФ) если прямо в эту секунду нет тика, терминал принудительно "закрывает" текущий бар и открывает новый. Но делает это очень "хитро": бар закрывается эмулированием прихода тика без цены!! (вместо него дает значение EMPTY_VALUE = 2147483647) и открывает новый бар с прошлым значением цены.
В результате имеем два лишних тика: вброшенная пустышка и дубликат. грустно както :((((
коментарии????