Билд 1430
Ошибка проявляется в следующем:
Это не ошибка.
MarketBookGet выдает содержимое стакана всегда, так как стакан существует всегда сам по себе.
MarketBookAdd не включает стакан как вам кажется, а только включает генерацию событий OnBookEvent.
Каждая программа сама управляет включением/выключением генерации потока событий OnBookEvent, так что они друг другу не мешают.
Это не ошибка.
MarketBookGet выдает содержимое стакана всегда, так как стакан существует всегда сам по себе.
MarketBookAdd не включает стакан как вам кажется, а только включает генерацию событий OnBookEvent.
Я описал ситуацию.
Хорошо не ошибка!
Но как проверить, что стакан уже добавлен на чарт?
Добавлено
Ведь если и светник и индикатор используют один и тот же стакан цен, при установке оба добавят стакан цен (не страшно),
но при удалении советника или индикатора, стакан цен будет убран и оставшийся индикатор или советник останется без стакана :)
Как быть???
Я описал ситуацию.
Хорошо не ошибка!
Но как проверить, что стакан уже добавлен на чарт?
Что значит добавлен на чарт? Стакан существует сам по себе всегда.
В своей программе вы лишь управляете "включить или выключить генерацию потока событий стакана фукцией MarketBookAdd в мою собственную программу".
Прочтите внимательно оба моих ответа, пожалуйста. У вас в корне неверное понимание.
Что значит добавлен на чарт? Стакан существует см по себе всегда.
В своей программе вы лишь управляете "включить или выключить генерацию потока событий стакана фукцией MarketBookAdd".
Если я вкличил, то должен выключить
Тогда второй элемент на чарте останется без стакана
Повторюсь
И советник и индикатор используют один и тот же стакан цен
добавлено
Как быть?
Если я вкличил, то должен выключить
И советник и индикатор используют один и тот же стакан цен
Используйте MarketBookRelease.
И контролируйте логику вызовов в подчиненных индикаторах самостоятельно, пожалуйста. Если боитесь, что удаленный в рантайме индикатор (вдруг они у вас без контроля внешние) вдруг выключит поток уведомлений на своей динамической выгрузке, то прост вызовите еще раз MarketBookAdd.
Это же элементарно.
Что значит добавлен на чарт? Стакан существует сам по себе всегда.
В своей программе вы лишь управляете "включить или выключить генерацию потока событий стакана фукцией MarketBookAdd в мою собственную программу".
Прочтите внимательно оба моих ответа, пожалуйста. У вас в корне неверное понимание.
Используйте MarketBookRelease.
И контролируйте логику вызовов в подчиненных индикаторах самостоятельно, пожалуйста. Если боитесь, что удаленный в рантайме индикатор (вдруг они у вас без контроля внешние) вдруг выключит поток уведомлений на своей динамической выгрузке, то прост вызовите еще раз MarketBookAdd.
Это же элементарно.
Да, я тоже так думал, но раньше, когда я удалял индикотор, у меня
переставал работать стакан в советнике. Сейчас проверил на билде 1430 - работает.
Если даже ни одна программа (скрипт советник индикатор) не пользуется стаканом, все равно данные стакана поступают в терминал?
Конечно, если символ активен в маркетвотче.
Да, я тоже так думал, но раньше, когда я удалял индикотор, у меня
переставал работать стакан в советнике. Сейчас проверил на билде 1430 - работает.
Да, странности действительно есть. Вернее не странности, а особенности, опытным путем установлено - если число вызовов marketbookrelease для одного инструмента >= число вызовов marketbookadd, то события onbookevent для инструмента перестают поступать во все советники.
Видимо такая логика зашита в терминал (подсчет кол-ва вызовов).
Например - тестовый советник:
input int release_cnt = 1;
int OnInit() {
if (MarketBookAdd(_Symbol) ) {
Print("OnInit, MarketBookAdd success, symbol: "+ _Symbol);
return(INIT_SUCCEEDED);
} else {
return(INIT_FAILED);
}
}
void OnDeinit(const int reason) {
for (int i=0; i<release_cnt; i++) {
Print("OnDeinit, do MarketBookRelease ... symbol: " + _Symbol);
MarketBookRelease(_Symbol);
}
}
void OnBookEvent(const string &symbol) {
if ( symbol == _Symbol) {
Print("s_ask: " + SymbolInfoDouble(_Symbol, SYMBOL_ASK) + " |s_bid: " + SymbolInfoDouble(_Symbol, SYMBOL_BID));
}
}
На одном и том же инструменте поставить на два разных таймфрема. У одного задать release_cnt = 2, тогда если его отключить - по второму тоже события перестанут поступать.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Билд 1430
Ошибка проявляется в следующем:
Есть ситуации, когда и советник и индикатор используют один и тот же стакан цен.
Но когда мы просто проверяем есть ли стакан, то на чистом чарте, где точно никто не запрашивал
стакан цен мы получаем следующее:
Получается, что стакан уже добавлен? НО
Когда мы ставим брэкпоинт в функции OnBookEvent, то оказывается, что стакан цен вовсе не добавлен:
Как же проверить был ли уже добавлен стакан цен?
Добавлено
Ведь если и светник и индикатор используют один и тот же стакан цен, при установке оба добавят стакан цен (не страшно),
но при удалении советника или индикатора, стакан цен будет убран и оставшийся индикатор или советник останется без стакана :)
Как быть???