Przejdź do treści
MQL5 · MetaTrader 5 · po polsku
kod odczarowany

MQL5 / Pułapki

Wolumen na forex i flagi ticków

Wolumen w MT5 na forex to liczba ticków, nie obrót. Jak odczytać z flag ticka, co się faktycznie wydarzyło.

1 fragment kodu z tej strony przeszedł przez kompilator MetaEditor build 6090, 2026-08-05.

Rynki akcji czy futures posiadają scentralizowany wolumen. Wiedząc to, programiści przenoszący strategie wolumetryczne na rynek Forex (zdecentralizowany) często liczą na funkcję CopyTicks. Są oni przekonani, że volume w strukturze MqlTick odzwierciedla realną wielkość zrealizowanych kontraktów. To jedno z największych nieporozumień w środowisku MQL5, które prowadzi do błędnych sygnałów wejścia/wyjścia.

Czym jest Volumen na Forex w MT5?

Na rynku Forex broker nie zna globalnego wolumenu. Wskaźnik volume w MT5 to najczęściej Tick Volume – czyli liczba zmian ceny (ticków), a nie liczba transakcji czy wielkość w lotach. Nawet jeśli broker dostarcza "Real Volume" (z rynku ECN), jest to tylko wolumen płynności dostawców (Liquidity Providers) tego konkretnego brokera, a nie globalny rynek.

Wolumen na forex i flagi tickówWolumen w MT5 na forex to liczba ticków, nie obrót. Jak odczytać z flag ticka, co się faktycznie wydarzyło. Anatomia struktury MqlTick time_msc Czas z milisekundami bid / ask Aktualne ceny kwotowania last Ostatnia cena transakcyjna (często = 0 na FX!) volume Tick Volume (Liczba zmian ceny) flags TICK_FLAG_BID / ASK / LAST / VOLUME

Analiza flag ticka: Rozpoznanie prawdziwej akcji

Najbardziej niedocenianym polem w strukturze MqlTick jest flags. Pozwala ono odróżnić, czy dany tick to była zmiana ceny Bid, Ask, czy realnie zrealizowana transakcja (Last). Na Forex pole last jest często zerowe, ponieważ brokerzy nie raportują każdej mikrotakcji w czasie rzeczywistym. Strategie opierające się na rynkach giełdowych (np. indeksy w MT5) mogą z powodzeniem używać flag, by filtrować fałszywe ruchy.

MqlTick ticks[];
// Pobieramy 100 ostatnich ticków z dokładnością do milisekundy
int copied = CopyTicks(_Symbol, ticks, COPY_TICKS_ALL, 0, 100);

if(copied > 0) {
    // Analizujemy od najstarszego do najnowszego (CopyTicks domyślnie zwraca od najstarszego)
    for(int i = 0; i < copied; i++) {
        // Sprawdzamy flagi używając bitowego AND (&)
        bool bidChanged = (ticks[i].flags & TICK_FLAG_BID) == TICK_FLAG_BID;
        bool askChanged = (ticks[i].flags & TICK_FLAG_ASK) == TICK_FLAG_ASK;
        bool isTrade = (ticks[i].flags & TICK_FLAG_LAST) == TICK_FLAG_LAST;
        
        // Na rynku Forex spready potrafią się rozszerzać bez realnego ruchu ceny
        // Broker zmienia Ask, ale Last (transakcje) nie ma.
        if(askChanged && !isTrade) {
            // To prawdopodobnie tylko rozszerzenie spreadu przed newsami,
            // a nie napływ realnego wolumenu zleceń kupna!
            // Strategia oparta na wolumenie nie powinna tego liczyć jako "popyt".
        }
        
        // Uwaga na milisekundy: Czasami przychodzi 5 ticków w tej samej milisekundzie.
        // ticks[i].time_msc pozwala na budowę mikrowolumenu wewnątrz 1 sekundy.
        if(i > 0 && (ticks[i].time_msc - ticks[i-1].time_msc) == 0) {
            // Wybuch aktywności w ułamku sekundy (np. uderzenie w zlecenia oczekujące)
        }
    }
}