Forex/Czas

Z Rainsted
Skocz do: nawigacji, wyszukiwania

Poniższy opis ma pomóc skonfigurować parametry czasowe rynku. Parametry te dotyczą wielu robotów i wskaźników.

Wirtualna doba

Wirtualna doba jest określeniem, który moment przyjmujemy za północ. Ma to wpływ na grupowanie okresów wielogodzinnych (od H2 do H12), dla których początkiem jest wirtualna północ, a także na określenie momentu zamknięcia dla świeczki D1 (zmiany ceny po wirtualnej północy trafią ewentualne do kolejnej świeczki D1). Wirtualna doba również określa punkt zerowy tablic M30.

Reorganizacja 2025-06

Na potrzeby uruchomienia robota ya_LK2410 potrzebne było uporządkowanie godzin, ponieważ rozgrywa on osobne sesje, a została zauważona różnica w danych pomiędzy Testerem Strategii a danymi brokera. Wprowadzone zasady są jeszcze weryfikowane co do prawidłowości:

  • Godziny sesji podawane mają być w UTC ze wskazaniem wariantu przechodzenia na czas letni (brak, daty europejskie, daty USA — market_DST).
  • Dane historyczne lub dostarczane przez brokera mają być uzupełnione o przesunięcie do UTC (market_BTZ) oraz wariant czasu letniego (market_BDS). Wg tego czasu ustalane również są rolowania (plik rolowań powiązany z brokerem).
  • Osobne ustawienie dotyczy wirtualnej doby (do UTC, na potrzeby H4 i statystyk M30 — market_M30), która również uwzględnia wariant czasu letniego (taki sam, jak godziny sesji — market_DST).

Dzięki temu ustawienia otwarcia rynków mają być niezależne od brokera oraz konfiguracji danych historycznych, natomiast wirtualną dobę można dopasować do przykładów autora strategii (np. H4). Począwszy od połowy czerwca 2025 poszczególne roboty są przerabiane na wykorzystanie powyższych kontekstów.

Przepływ danych o czasie jest następujący:

  • Ustawienia godzin sesji podane w UTC są przeliczane na czas brokera. Uwzględniane są tryby przechodzenia na czas letni brokera oraz rynku (instrumentu).
  • Filtrowanie danych sesji wykonywane jest granicami wyznaczonymi w kontekście czasu brokera.
  • Finalnie dane są umieszczane w kontekście wirtualnej doby.

Strefa czasowa północy

Strefę czasową definiuje się jako przesunięcie względem UTC+0 momentu północy określającego początek wirtualnej doby dla czasu zimowego. Obecnie jest to liczba z przedziału [0;23], przy czym zastosowanie będą miały głównie liczby 2 i 3.

Domyślną wartością jest 2, czyli północ czasu wschodnioeuropejskiego (np. Cypr — tak jest określana ta strefa ze względu na siedziby brokerów). Wartość ta została przyjęta ze względu na przerwę nocną, która w zależności od wyboru pomiędzy czasem letnim a zimowym, znajdować się będzie albo przed, albo po północy czasu cypryjskiego, niezależnie od ustawień czasu letniego. Unika się w ten sposób rozpoczęcia notowań w niedzielę (wg czasu środkowoeuropejskiego).

Strefę czasową można ewentualnie przestawić na 3 (teoretycznie czas moskiewski), dzięki czemu doba kończy się na zamknięciu rynków w USA (o godzinie 22:00 czasu polskiego), a późniejsze notowania zostaną doliczone do świecy kolejnego dnia.

Konfiguracja czasu letniego

Od 2025-09 ustawienia czasu letniego dotyczą osobno czasu brokera oraz osobno czasu rynku:

  • Brak zmiany czasu na letni.
  • Czas letni europejski. Zmiana czasu następuje pod koniec marca oraz października, czyli czas letni obowiązuje przez około 7 miesięcy w roku.
  • Czas letni USA. Zmiana czasu następuje w połowie marca oraz na początku listopada, czyli czas letni obowiązuje przez prawie 8 miesięcy w roku.

Ustawienia trybu zmiany na czas letni wybierają dwie z tablic korekt dla poszczególnych tygodni w roku, po czym wyliczana jest różnica dla każdego tygodnia roku. Pierwszym tygodniem roku (tzn. w1_letni[1]) jest ten, który zawiera środę. Jeśli styczeń zaczyna się w czwartek albo piątek, to te dni są traktowane jako zerowy (tzn. w1_letni[0]) tydzień roku. Tablica przesunięć godzin (w1_letni) ma 54 pozycje, ze względu na sposób wyliczania numeru tygodnia w roku. Zerowy tydzień roku może być współdzielony z rokiem poprzednim, a tydzień z indeksem 52 lub 53 — z kolejnym rokiem. Ma to jednak niewielkie znaczenie ze względu na dużą liczbę dni wolnych oraz niewielkie ruchy na rynkach.

Wirtualna doba, używana do świeczek wielogodzinnych oraz statystyk pozycji, ma osobno określoną północ i zmianę czasu na letni wg rynku.

Parametry czasu brokera

  • Wg stanu na sierpień 2025 jest to testowane, a poszczególne roboty i wskaźniki są przerabiane w tym kierunku.

Aby móc wpisać w roboty godziny otwarcia giełd w sposób niezależny od brokera, proponowane jest podawanie godzin zawsze względem wirtualnej doby, po ustawieniu jej strefy czasowej oraz trybu zmiany czasu na letni. Ponieważ dane spływają ze znacznikami czasu brokera, proponowane jest ustawienie zmiennych globalnych.

  • market_BTZ — strefa czasowa dla czasu zimowego brokera (1 = czas środkowoeuropejski, 2 = czas cypryjski)
  • market_BDS — tryb zmiany na czas letni: 0 = brak, 1 = wg EU, 2 = wg USA — wybiera odpowiednią tablicę przesunięć dla poszczególnych tygodni

Rozpoznane ustawienia:

  • mForex: market_BTZ=1, market_BDS=1 (czas PL, zmiana czasu EU)
  • FTMO: market_BTZ=2, market_BDS=2 (czas Cypr, zmiana czasu USA)

Godziny otwarcia rynku

Obecnie godziny są podawane w ułomnym zapisie sześćdziesiątkowym, czyli godzina 14:30 jest zapisana liczbą 1430. W ewentualnych planach na przyszłość jest przerobienie w kierunku zapisu z dwukropkiem.

W parametrach podaje się godzinę otwarcia (market_beg) oraz godzinę zamknięcia (market_end) względem UTC, wraz z trybem zmiany czasu na letni (market_DST).

Dodatkowo dla niektórych wskaźników można podać dodatkowe godziny:

  • Początek rysowania średnich sesyjnych (market_res) — zwykle godzinę przed otwarciem (market_beg).
  • Koniec rysowania sesyjnej SMA200 dla M2 (market_blu) — średnie te zaczynają się pokrywać, więc można jedną z nich wyłączyć przed zamknięciem (market_end).
  • Zapamiętanie ruchów pod koniec sesji (market_fab) — zwykle 45 minut przed zamknięciem (market_end).

Zgadywanie ustawień czasu

Na podstawie symbolu waloru mogą być automatycznie dobrane parametry. Przykładowo, dla nazw zawierających "US100", "US500" są ustawiane godziny rynku amerykańskiego, aby nie było potrzeby ręcznego ustawiania lub wczytywania parametrów z pliku. Zgadywanie można wyłączyć, jeśli działa błędnie.

W razie problemów ze zgadywaniem, można na wykresie umieścić obiekt (etykietę) o nazwie "ya_Market", zawierający nazwę (symbol), która jest rozpoznawana przez programy. Podstawowy system rozpoznawania indeksów giełdowych to dwuliterowy kod kraju i liczba walorów objętych indeksem (np. "US100", "DE40", "PL20").

Tablice M30

Tablice M30 mają 48 pozycji i dotyczą kolejnych trzydziestominutowych okresów, począwszy od północy wirtualnej doby. Tablice te mogą załączać otwieranie pozycji w wybranych godzinach, zmianę współczynników wagowych, a także służą do zliczania otwartych pozycji w poszczególnych okresach. Okres M30 został wybrany ze względu na otwieranie i zamykanie giełd pół godziny po pełnej godzinie. Jednocześnie, zestaw współczynników do wypełnienia tablic M30 ma 48 znaków, co jest bardziej czytelne, niż by było 96 znaków dla M15.

Początkowe wartości tablic można zapisać w postaci ciągów alfanumerycznych o długości 48 znaków. Dla danego ciągu określony jest mnożnik oraz przesunięcie. Domyślnie cyfry "0".."9" oznaczają wartości od 0.0 do 0.9, natomiast litery od "A" do "Z" wartości od 1.0 do 3.5.

  • Przykładowy ciąg znaków blokujący otwieranie pozycji w godzinach nocnych: "001111111111111111111111111111111111111111111100".
  • Przykładowy zestaw średniego rozmiaru OC świeczek M2 dla indeksu DE40, odnoszonego do 0.4 promila ceny: "0000766654444466AAJDCBAAA8999EBFEBBA9888888A5100" (na koniec 2022 roku).

Kody zawartości do tablic M30 mogą również zawierać liczbę minut (np. długość nierównomiernych okresów). W takim przypadku znaki od "0" do "9" i od "A" do "U" oznaczają liczby od 0 do 30, natomiast od "V" do "Z" są to liczby ujemne od -4 ("V") do -1 ("Z"). W szczególnych przypadkach może mieć to inne znaczenie, np. zakres od -17 do 18 (przy czym "Z" będzie raczej odpowiadać -1).

Szczegóły techniczne

Roboty i wskaźniki tworzone są tak, aby mogły być wykorzystane przez różne języki programowania.

MQL4

W ramach programów w MQL4 używane są trzy koncepty czasu.

  • Czas serwera, identyfikowany przez TimeCurrent(), DayOfYear() oraz DayOfWeek(), jest używany do znaczników czasowych obiektów (obliczeniowych oraz umieszczanych na wykresie) oraz porównywania zdarzeń wcześniej-później. Czas ten ma "zakładkę" oraz "lukę" w dniach zmiany czasu na letni (ale w dni bez handlu). Jako DayOfYear() jest też używany przy rolowaniach oraz do wyznaczania momentów zmiany czasu na letni oraz na zimowy.
  • Czas wirtualny, identyfikowany przez TimeCurrent()+TMarket::m30_deltat, wyznacza pozycję w wirtualnej dobie i stanowi o podziale dobowych zmian ceny na świeczki. W zależności od ustawień może nie uwzględniać zmiany na czas letni, albo uwzględniać zmianę dwa (Europa, USA) albo cztery razy w roku (zmiana czasu w Europie w innym terminie niż w USA). Komponent TMarket::m30_deltat jest wyliczany raz dziennie, przy pierwszej wykrytej zmianie wartości zwracanej przez DayOfYear(), co z kolei jest sprawdzane co minutę. Dla przyszłych robotów, rozgrywających ewentualnie kilka rynków jednocześnie, możliwe będzie użycie różnych ustawień dla każdego z rynków.
  • Czas UTC+0, wyliczany jako TimeCurrent()-TMarket::m30_deltat. Zwykle używany w drugą stronę, tzn. jako przeliczenie czasu UTC na czas brokera: StringToTime(czas_UTC)+market.utc_deltat, co np. pozwala umieszczać znaczniki czasowe na wykresie o określonej godzinie UTC (zmienna czas_UTC).

Tydzień roku w przedziale 0..53 jest wyliczany z wyrażenia (10+DayOfYear()-DayOfWeek())/7.