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

MQL5 / Przepisy

Filtr spreadu przed wejściem

Jak odczytać bieżący spread, dlaczego wartość z SYMBOL_SPREAD bywa nieaktualna i jak nie wpaść w filtr, który blokuje handel na zawsze.

3 fragmenty kodu z tej strony przeszły przez kompilator MetaEditor build 6090, 2026-08-05.

Spread rozszerza się przy publikacji danych, przy otwarciu sesji i w weekendowej przerwie. Strategia o przewadze rzędu kilku punktów potrafi w tych momentach tracić wyłącznie na koszcie wejścia.

Dwa sposoby odczytu

Spread w punktach, dwa źródła
//--- wartość podawana przez serwer, zaokrąglona do punktów
long zSerwera = SymbolInfoInteger(_Symbol, SYMBOL_SPREAD);

//--- policzony z bieżącego kwotowania
MqlTick tick;
if(!SymbolInfoTick(_Symbol, tick))
   return;

double punkt = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
int zTicku = (int)MathRound((tick.ask - tick.bid) / punkt);

Wartości zwykle się zgadzają, ale SYMBOL_SPREAD bywa aktualizowana rzadziej niż same kwotowania. W momentach, o które w tym filtrze chodzi — czyli przy gwałtownym rozszerzeniu — liczenie z ticku jest wiarygodniejsze.

Filtr

Czy spread pozwala wejść
bool SpreadDopuszczalny(const string symbol, const int maksymalnyPunktow)
  {
   MqlTick tick;
   if(!SymbolInfoTick(symbol, tick))
      return false;

   double punkt = SymbolInfoDouble(symbol, SYMBOL_POINT);
   if(punkt <= 0.0)
      return false;

   int biezacy = (int)MathRound((tick.ask - tick.bid) / punkt);

   if(biezacy > maksymalnyPunktow)
     {
      PrintFormat("Spread %d pkt przekracza dopuszczalne %d — pomijam sygnał.",
                  biezacy, maksymalnyPunktow);
      return false;
     }

   return true;
  }

Filtr progresywny zamiast progu

Zamiast odrzucać sygnał, można doliczyć spread do kosztu i sprawdzić, czy przewaga jeszcze się w nim mieści:

Spread jako część kosztu, nie jako próg
double kosztWejscia = (tick.ask - tick.bid);
double oczekiwanyZysk = dystansCelu * punkt;

if(kosztWejscia > oczekiwanyZysk * 0.2)
   return false;      // koszt zjada ponad piątą część celu

Taki filtr sam dostosowuje się do instrumentu i nie wymaga strojenia progu.

W testerze tego nie zobaczysz

Tester strategii używa spreadu z historii albo wartości stałej i nie modeluje gwałtownych rozszerzeń. Filtr spreadu w backteście prawie nigdy się nie uruchamia, więc jego wpływ na wynik wygląda na zerowy — a na rachunku bywa różnicą między zyskiem a stratą. Więcej o tej rozbieżności w trzech modelach ticków.

Powiązane