У последней обновленной цены нет флагов TICK_FLAG_BUY или TICK_FLAG_SELL но при этом есть обьем, как так?
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { MqlTick last_tick; if(SymbolInfoTick(Symbol(),last_tick)){ if((last_tick.flags & TICK_FLAG_BUY)==TICK_FLAG_BUY)
printf("BUY - " + last_tick.flags + " Valume - " + last_tick.volume); else if((last_tick.flags & TICK_FLAG_SELL)==TICK_FLAG_SELL)
printf("Shell - " + last_tick.flags + " Valume - " + last_tick.volume); else printf("Other - " + last_tick.flags + " Valume - " + last_tick.volume); } return(rates_total); }
У меня код выполняется верно, но если вам будет удобнее то исправил проверку и добавил отображение значений флагов, чтобы было понятней о чем я говорю. У некоторых тиков присутствует только флаг
2 = TICK_FLAG_BIDи
4 = TICK_FLAG_ASK
а также присутствует объем. То есть строка
2019.09.20 10:20:10.392 2019.09.13 10:00:00 Other - 6 Volume - 3
говорит о том что
произошло изменение цены BID и ASK при этом прошел объем, но не указанно была ли это покупка или продажа. Почему так происходит?
У меня код выполняется верно, но если вам будет удобнее то исправил проверку и добавил отображение значений флагов, чтобы было понятней о чем я говорю. У некоторых тиков присутствует только флаг
2 = TICK_FLAG_BIDи
4 = TICK_FLAG_ASK
а также присутствует объем. То есть строка
2019.09.20 10:20:10.392 2019.09.13 10:00:00 Other - 6 Volume - 3
говорит о том что
произошло изменение цены BID и ASK при этом прошел объем, но не указанно была ли это покупка или продажа. Почему так происходит?
Не правильно, лимит с лимитом не сводится.
Когда кто-то убрал лимитный ордер в стакане или поставил происходит изменение цены BID или ASK, и это не значит что совершена сделка, в вашем примере объем указывается от последней сделки, к тому же потеря тиков, чтобы не терять тики надо использовать CopyTicks
Не правильно, лимит с лимитом не сводится.
Когда кто-то убрал лимитный ордер в стакане или поставил происходит изменение цены BID или ASK, и это не значит что совершена сделка, в вашем примере объем указывается от последней сделки, к тому же потеря тиков, чтобы не терять тики надо использовать CopyTicks
Вот пример, в стакане есть лимитный ордер
на продажу по 100 рублей а я выставляю лимитный ордер на покупку по 100 рублей (спред равен 0). Разве же эти 2 лимитника не
сводятся вместе до образования естественного спреда? И вот если следовать этой логикке то всё сходится. Появляется контракт с объемом
который изменил цену, при этом не было рыночной продажи или рыночной покупки.
А на счет потере тиков спасибо.
Вы получаете все тики: торговые и не торговые. Получайте только торговые тики (CopyTicks() или CopyTicksRange()) и проблем не будет (на реале открытия и бкс, по крайней мере их нет).
Я не понимаю, а с чего вы вообще взяли, что без флагов TICK_FLAG_BUY и TICK_FLAG_SELL в volume должен лежать всегда 0 ?
А Вы прочтите справку на функции CopyTicks и CopyTicksRange
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть индикатор который отображает объемы за каждый тик, но в результатах появляются объемы у которых нет флагов TICK_FLAG_BUY или TICK_FLAG_SELL. Каким образом появляется объем без флага кули или продажи? Хочу отметить что при загрузки истории тиков такого несоответствия нет. Инструмент Si Splice,M1, брокер Открытие.
кусочек результата выполнения
2019.09.20 10:20:10.275 2019.09.13 00:00:00 2 = TICK_FLAG_BID - тик изменил цену бид
2019.09.20 10:20:10.275 2019.09.13 00:00:00 4 = TICK_FLAG_ASK – тик изменил цену аск
2019.09.20 10:20:10.275 2019.09.13 00:00:00 8 = TICK_FLAG_LAST – тик изменил цену последней сделки
2019.09.20 10:20:10.275 2019.09.13 00:00:00 16 = TICK_FLAG_VOLUME – тик изменил объем
2019.09.20 10:20:10.275 2019.09.13 00:00:00 32 = TICK_FLAG_BUY – тик возник в результате сделки на покупку
2019.09.20 10:20:10.275 2019.09.13 00:00:00 64 = TICK_FLAG_SELL – тик возник в результате сделки на продажу
-----
2019.09.20 10:20:10.390 2019.09.13 10:00:00 Shell - 344 Volume - 3
2019.09.20 10:20:10.392 2019.09.13 10:00:00 Other - 6 Volume - 3
2019.09.20 10:20:10.393 2019.09.13 10:00:00 BUY - 312 Volume - 2
П.С. Изменил код чтобы никого не путать сокращенной записью