Какое-то лишнее значение 1024 содержится в значении флагов:
//+------------------------------------------------------------------+ //| Test.mq5 | //| Copyright 2023, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2023, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- PrintFormat("FLAGS:\nTICK_FLAG_BID=%d\nTICK_FLAG_ASK=%d\nTICK_FLAG_LAST=%d\nTICK_FLAG_VOLUME=%d\nTICK_FLAG_BUY=%d\nTICK_FLAG_SELL=%d\n\nTICK:", TICK_FLAG_BID,TICK_FLAG_ASK,TICK_FLAG_LAST,TICK_FLAG_VOLUME,TICK_FLAG_BUY,TICK_FLAG_SELL); MqlTick array[1]={}; if(SymbolInfoTick(_Symbol,array[0])) { ArrayPrint(array); MqlTick tick=array[0]; int summ=0; Print("Flags in tick:"); if((tick.flags & TICK_FLAG_BID)==TICK_FLAG_BID) { Print("TICK_FLAG_BID"); summ+=TICK_FLAG_BID; } if((tick.flags & TICK_FLAG_ASK)==TICK_FLAG_ASK) { Print("TICK_FLAG_ASK"); summ+=TICK_FLAG_ASK; } if((tick.flags & TICK_FLAG_LAST)==TICK_FLAG_LAST) { Print("TICK_FLAG_LAST"); summ+=TICK_FLAG_LAST; } if((tick.flags & TICK_FLAG_VOLUME)==TICK_FLAG_VOLUME) { Print("TICK_FLAG_VOLUME"); summ+=TICK_FLAG_VOLUME; } if((tick.flags & TICK_FLAG_BUY)==TICK_FLAG_BUY) { Print("TICK_FLAG_BUY"); summ+=TICK_FLAG_BUY; } if((tick.flags & TICK_FLAG_SELL)==TICK_FLAG_SELL) { Print("TICK_FLAG_SELL"); summ+=TICK_FLAG_SELL; } PrintFormat("summ=%d, tick.flags-summ=%d",summ, tick.flags-summ); } } /* Результат: Test (EURUSD,M1) FLAGS: Test (EURUSD,M1) TICK_FLAG_BID=2 Test (EURUSD,M1) TICK_FLAG_ASK=4 Test (EURUSD,M1) TICK_FLAG_LAST=8 Test (EURUSD,M1) TICK_FLAG_VOLUME=16 Test (EURUSD,M1) TICK_FLAG_BUY=32 Test (EURUSD,M1) TICK_FLAG_SELL=64 Test (EURUSD,M1) Test (EURUSD,M1) TICK: Test (EURUSD,M1) [time] [bid] [ask] [last] [volume] [time_msc] [flags] [volume_real] Test (EURUSD,M1) [0] 2024.08.22 16:43:40 1.11285 1.11289 0.0000 0 1724345020602 1030 0.00000 Test (EURUSD,M1) Flags in tick: Test (EURUSD,M1) TICK_FLAG_BID Test (EURUSD,M1) TICK_FLAG_ASK Test (EURUSD,M1) summ=6, tick.flags-summ=1024 */ //+------------------------------------------------------------------+
А флаги проверять как в скрипте выше.
Здравствуйте.
Пишу код где мне надо по тикам BID что-то посчитать. Беру данные с функциями CopyTicksRange() и SymbolInfoTick(), но оба возвращают данные MqlTick с флагами не подходящими TICK_FLAG_*. В документации есть флаги:
- TICK_FLAG_BID – tick has changed a Bid price
- TICK_FLAG_ASK – a tick has changed an Ask price
- TICK_FLAG_LAST – a tick has changed the last deal price
- TICK_FLAG_VOLUME – a tick has changed a volume
- TICK_FLAG_BUY – a tick is a result of a buy deal
- TICK_FLAG_SELL – a tick is a result of a sell deal
А терминал возвращает вот такое значение:
То есть, TICK_FLAG_* это 2, 4, 8, 16, 32, 64, А сейчас Tick.flags возвращает 1026, 1028, 1030 и т.д.
Как теперь это проверять, и где можно про это прочитать (посмотреть)?
Все прочие биты являются внутренними (проставляются платформой для себя в различных ситуациях) и не документированы, потому что могут меняться. На форуме представители MQ рассказывали про некоторые такие доп.флаги - можно поискать контекстно (лучше гуглом). Они никак не мешают работать с публичными флагами.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
fxsaber, 2024.06.26 09:14
Билды торговых серверов позже 12.06.2024 (например, b4410) заполняют второй байт MqlTick.flags тиков (SymbolInfoTick и CopyTicks*).
void OnStart() { MqlTick Ticks[]; const int Amount = CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL, D'2024.06.01' * 1000); Print(AccountInfoString(ACCOUNT_SERVER)); // MetaQuotes-Demo for (int i = 0; i < Amount; i++ ) if ((bool)(Ticks[i].flags >> 8)) { // time = 2024.06.12 15:52:50.286 bid = 1.08241 ask = 1.08241 last = 0.00000 volume = 0 Print(Ticks[i].time); // 1158 TICK_FLAG_BID TICK_FLAG_ASK FLAG_UNKNOWN (1152) Print(Ticks[i].flags); break; } }
Например, про бит 128:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
Slava, 2018.12.04 11:09
2018.12.03 09: 58: 06.898 TicksInfo (EURUSD, M5) EURUSD: 2 tick: 2018.12.03 00: 52: 27.743 1.13335 / 1.13348 / 0.00000 0 флаги: 230
2018.12.03 09: 58: 06.898 TicksInfo (EURUSD, M5) EURUSD: 3 tick: 2018.12.03 00: 52: 27.821 1.13327 / 1.13343 / 0.00000 0 флаги: 230
2018.12.03 09: 58: 06.898 TicksInfo (EURUSD, M5) EURUSD: 4 tick: 2018.12.03 00: 52: 27.888 1.13326 / 1.13343 / 0.00000 0 флаги: 226
2018.12.03 09: 58: 06.898 TicksInfo (EURUSD, M5) EURUSD: 5 tick: 2018.12.03 00: 52: 27.965 1.13327 / 1.13345 / 0.00000 0 флаги: 230
2018.12.03 09: 58: 06.898 TicksInfo (EURUSD, M5) EURUSD: 6 tick: 2018.12.03 00: 52: 28.194 1.13328 / 1.13346 / 0.00000 0 флаги: 230
2018.12.03 09: 58: 06.898 TicksInfo (EURUSD, M5) EURUSD: 7 tick: 2018.12.03 00: 52: 28.265 1.13328 / 1.13346 / 0.00000 0 флаги: 96
2018.12.03 09: 58: 06.898 TicksInfo (EURUSD, M5) EURUSD: 8 tick: 2018.12.03 00: 52: 28.327 1.13326 / 1.13344 / 0.00000 0 флаги: 230
2018.12.03 09: 58: 06.898 TicksInfo (EURUSD, M5) EURUSD: 9 tick: 2018.12.03 00: 52: 28.405 1.13326 / 1.13344 / 0.00000 0 флаги: 96
2018.12.03 09: 58: 06.899 TicksInfo (EURUSD, M5) EURUSD: 10 tick: 2018.12.03 00: 52: 28.809 1.13326 / 1.13344 / 0.00000 0 флаги: 96
2018.12.03 09: 58: 06.899 TicksInfo (EURUSD, M5) EURUSD: 11 tick: 2018.12.03 00: 52: 29.289 1.13326 / 1.13344 / 0.00000 0 флаги: 96
Это - служебный флаг, который выставляет датафид, если у тика по какой-либо причине не был выставлен флаг TICK_FLAG_BID, при том что тик должен быть применён к бару.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте.
Пишу код где мне надо по тикам BID что-то посчитать. Беру данные с функциями CopyTicksRange() и SymbolInfoTick(), но оба возвращают данные MqlTick с флагами не подходящими TICK_FLAG_*. В документации есть флаги:
А терминал возвращает вот такое значение:
То есть, TICK_FLAG_* это 2, 4, 8, 16, 32, 64, А сейчас Tick.flags возвращает 1026, 1028, 1030 и т.д.
Как теперь это проверять, и где можно про это прочитать (посмотреть)?