Wprowadzenie
Jedną z najbardziej przydatnych funkcji, dostępnych w oknie Analiza Automatyczna (Automatic analysis) jest testowanie-historyczne (back-test), które umożliwia zbadanie własnej strategii handlowej, przy wykorzystaniu danych historycznych. Pozwala ono na wgląd w słabe i mocne strony Twojego systemu, zanim zainwestujesz prawdziwe pieniądze. Już tylko ta jedna funkcja programu AmiBroker może zaoszczędzić wiele Twoich pieniędzy.
Pisanie wlasnych reguł transakcji
Na początku musisz sformulować obiektywne (lub mechaniczne) reguły otwierania i zamykania pozycji. Krok ten stanowi podstawę Twojej strategii i musi być dokładnie przemyślany, ponieważ system oszacuje w ten sposób Twoją tolerancję ryzyka, rozmiar portfela, metody zarządzania finansami oraz wiele innych indywidualnych czynników.
Mając już sformulowane reguły dokonywania transakcji, musisz je zapisać jako reguły kupna i sprzedaży w języku formuł (Formula Language) programu AmiBroker (jeżeli pragniesz testować także krótkie pozycje musisz dodatkowo wykonać tę procedurę dla sprzedaży krótkiej i zamknięcia krótkiej pozycji).
W tym rozdziale będziemy rozważać podstawową ruchomą średnią wykorzystywaną przez system. System bedzie kupował akcje gdy cena zamknięcia wzrośnie powyżej 45-dniowej ekspotencjalnej średniej ruchomej, natomiast sprzedaż akcji przeprowadzi gdy cena ta spadnie poniżej tej średniej.
Wykładnicza średnia krocząca może być obliczana w AFL, przy użyciu funkji wbudowanej EMA. Należy wówczas określić jedynie tablicę wejściową i okres czasu, dla którego ma być przeprowadzone uśrenienie. Zatem 45-dniową wykładniczą średnią kroczącą z cen zamknięcia można uzyskać przy wykorzystaniu następującego wyrażenia:
ema( close, 45 );
Identyfikator close odwołuje się do wewnętrznej tablicy zawierającej ceny zamknięć aktualnie analizowanej akcji.
W celu kontrolowania czy cena zamknięcia wykroczyła powyżej wykładniczej średniej kroczącej, wykorzystywana będzie wewnętrzna funkcja cross:
buy = cross( close, ema( close, 45 ) );
Powyższe wyrażenie definiuje warunek transakcji kupna. Przyjmuje ono wartość "1" lub "prawda" gdy cena zamknięcia wykracza powyżej ema( close, 45 ). W przeciwnym przypadku - gdy cena zamknięcia spadnie poniżej ema( close, 45 ), następujące wyrażenie opisujące warunek sprzedaży, przyjmuje wartość "1":
sell = cross( ema( close, 45 ), close );
Zauważ, że stosujemy tutaj tę samą funkcję cross, lecz odwrotną kolejność argumentów.
Zatem pełna formuła dla długoterminowych transakcji wygląda nasępująco:
buy = cross( close, ema( close, 45 ) );
sell = cross( ema( close, 45 ), close );
Ta formułą powinna zostać wpisana (lub skopiowana przy użyiu schowka) w polu "Reguły transakcji" ("Trading rules") w oknie Automatycznej Analizy (Automatic Analysis).
Testowanie historyczne
W celu przetestowania historycznego własnego systemu należy kliknąć przycisk Back test w oknie Automatic analysis. Naastępnie upewnij się czy formuła, zawierająca warunki kupna i sprzedaży została wpisana (jak opisano powyżej). Jeżeli formuła jest poprawna program AmiBroker zacznie analizować Twoje akcje według Twoich reguł transakcji i wygeneruje listę symulowanych transakcji. Cały proces przebiega bardzo szybko - przetestowanie tysięcy akcji to kwestia minut. Na ekranie wyświetli się okno postępu, które będzie pokazywać przybliżony czas ukończenia testu. Jeżeli chcesz zatrzymać proces kliknij przycisk Cancel w tym oknie.
Analizowanie wyników
Po zakończeniu procesu testowania w dolnej części okna Automatic analysis ukaże się lista symulowanych transakcji. (panel Results). Można sprawdzić, kiedy pojawiły się sygnały kupna i sprzedaży poprzez dwukrotne kliknięcie na transacji w panelu Results. W ten sposób będziesz otrzymywać nieprzefiltrowane sygnały dla każdego notowania w momencie spełnienia się warunków kupna i sprzedaży. Jeżeli chcesz zobaczyć tablice dla pojedynczej transakcji (otwarcie i zamknięcie aktualnie wybranej transacji) kliknij dwukrotnie interesujący Cię wiersz, trzymając wciśnięty klawisz SHIFT. Ewentualnie możesz wybrać sposób prezentacji, wybierając odpowiedni punkt z menu, które ukaże się po kliknięciu prawym klawiszem myszy na panelu wyników .
Ponadto klikając na przycisku Report, możesz otrzymać dodatkowo bardzo szczegółowe dane statystyczne odnośnie zachowania się Twojego systemu. Więcej informacji na temat zestawień statystycznych uzyskasz w opisie okna raportu (report window description).
Zmiana ustawień testowania historycznego
W procesie testowania historycznego program AmiBroker wykorzystuje predefiniowane wielkości, takie jak: wielkość portfela, okresowość (dziennie/tygodniowo/miesięcznie), wielkość zlecenia, interesujący kurs, stopy maksymalnej straty i pożądanego zysku, rodzaj transakcji, pola cenowe itp. Wszystkie te ustawienia mogą być zmieniane przez użytkownika w oknie ustawień (settings window). Po wprowadzeniu zmian w ustawieniach należy pamiętać o ponownym uruchomieniu testowania historycznego w celu zsynchronizowania wyników z ustawieniami.
Przykładowo w celu przeprowadzenia testu historycznego na notowaniach tygodniowych zamiast dziennych, należy kliknąć na przycisk Settings, wybrać Weekly w polu wyboru Periodicity, po czym kliknąć OK. Następnie należy uruchomić swoją analizę poprzez kliknięcie Back test.
Zastrzeżone nazwy zmiennych
Następująca tabela pokazuje zastrzeżone nazwy zmiennych, stosowanych przez Automatic Analyser. W dalszej części tego rozdziału opisano również ich znaczenie oraz przykłady zastosowania.
Zmienna | Użycie | Wykorzystywane w |
buy | definiuje warunek dokonania transacji "kupna" (otwarcie pozycji długiej) | Automatic Analysis, Commentary |
sell | definiuje warunek dokonania transacji "sprzedaży" (zamknięcie pozycji długiej) | Automatic Analysis, Commentary |
short | definiuje warunek dokonania transacji "krótka sprzedaż" (otwarcie pozycji krótkiej - sprzedaż pożyczonych akcji) | Automatic Analysis |
cover | definiuje warunek dokonania transacji "pokrycie" (zamknięcie pozycji krótkiej - odkupienie akcji) | Automatic Analysis |
buyprice | definiuje tablicę cen kupna (tablica ta jest wypełniana wartościami domyślnymi według ustawień w Automatic Analyser) | Automatic Analysis |
sellprice | definiuje tablicę cen sprzedaży (tablica ta jest wypełniana wartościami domyślnymi według ustawień w Automatic Analyser) | Automatic Analysis |
shortprice | definiuje tablicę cen sprzedaży krótkiej (tablica ta jest wypełniana wartościami domyślnymi według ustawień Automatic Analyser) | Automatic Analysis |
coverprice | definiuje tablicę cen pokrycia (tablica ta jest wypełniana wartościami domyślnymi według ustawień Automatic Analyser) | Automatic Analysis |
exclude | Jeżeli zmienna ta została zdefiniowana to przyjmując wartość prawda (lub 1) powoduje wykluczenie aktualnego symbolu z przeszukiwania/badania/testowania historycznego. Jest on również pomijany przy zakupie i przeprowadzanych kalkulacjach. Jest to przydatne gdy pragniesz zawęzić swoją analizę do pewnego zestawu symboli. | Automatic Analysis |
roundlotsize | definiuje zaokrąglanie rozmiaru bloku (do bloków po N-akcji/kontraktów), wykorzystywane podczas testowania historycznego (zobacz objaśnienia poniżej) | Automatic Analysis (new in 4.10) |
ticksize | definiuje minimalną zmianę ceny, która jest wykorzystywana do uszeregowania cen generowanych przez stopy (zobacz objaśnienia poniżej) | Automatic Analysis (new in 4.10) |
pointvalue | pozwala czytać i modyfikować wartość punktu w kontraktach terminowych (zobacz backtesting futures) | Automatic Analysis (new in 4.10) |
margindeposit | pozwala czytać i modyfikować limity kredytowe dla kontraktów terminowych (zobacz backtesting futures) | Automatic Analysis (new in 4.10) |
positionsize | Pozwala kontrolować ilość pieniędzy czy procent portfela, inwestowane podczas zawierania transakcji (zobacz objaśnienia poniżej) | Automatic Analysis (new in 3.9) |
Pojęcia zaawansowane
Do tej pory omówiono dość proste użycie testu historycznego. Jednakże program AmiBroker dostarcza wiele bardziej zaawansowane metody i pojęcia, które zostaną omówione w dalszej części tego rozdziału. Początkujący użytkownik powinien jednak najpierw zapoznać się dokładnie z łatwiejszymi tematami, opisanymi powyżej.
Zatem, jeżeli już zapoznałeś się z powyższymi tematami, poznaj teraz nowe elementy testu historycznego:
a) host skryptów AFL dla zaawansowanego twórcy formuł
b) poprawnione wsparcie programowe dla transakcji
krótkoterminowych
c) sposób kontroli polecenia realizacji cen ze sktyptu
d) różne rodzaje stopów w teście wstecznym
e) zmiana rozmiaru pozycji
f) zaokrąglanie rozmiaru bloku (do bloków po
N-akcji/kontraktów) oraz wielkość tiku
g) konto z limitem kredytowym
h) elementy testowania historycznego
Host skryptów AFL jest zaawansowanym tematem, który został omówiony w oddzielnym dokumencie dostępnym tutaj. Pozostałe aspekty są znacznie łatwiejsze do zrozumienia.
Wsparcie programowe dla transakcji krótkoterminowych
W poprzedniej wersji programu AmiBroker, jeżeli chciałeś przeprowadzić testowanie historyczne systemu stosując zarówno długo jak i krótkoterminowe transakcje, mogłeś jedynie symulować strategię stopu-i-odwrócenia. Po zamknięciu pozycji długiej natychmiast otwierana była pozycja krótka. Wynikało to z faktu, że zmienne zarezerwowane dla kupna i sprzedaży wykorzystywane były dla obydwu rodzajów transakcji.
Obecnie (w wersji 3.59 lub wyższej) istnieją oddzielne zmienne zarezerwowane dla otwierania i zamykania transakcji długo i krótkoterminowych:
buy - wartość "prawda " lub 1 otwiera pozycję długą
sell - wartość "prawda " lub 1 zamyka pozycję długą
short - wartość "prawda " lub 1 otwiera pozycję krótką
cover - wartość "prawda " lub 1 zamyka pozycję krótką
Zatem w celu przetestowania historycznego krótkich pozycji musisz zastosować zmienne short i cover.
Jeżeli zastosowałeś system stopu-i-odwrócenia (stop-and-reverse: zawsze na
rynku) przypisz sprzedaż (sell) do zmiennej short, a kupno (buy)
do zmiennej cover
short = sell;
cover = buy;
W ten sposób można symulować pracę programu w wersjach
wcześniejszych niż 3.59.
Obecnie jednak program AmiBroker pozwala na oddzielenie warunków przeprowadzania transakcji dla pozycji długich i krótkich. Pokazuje to następujący przykład:
// reguły otwarcia i zamknięcia pozycji długich:
buy = cross( cci(), 100 );
sell = cross( 100, cci() );
// reguły otwarcia i zamknięcia pozycji krókich:
short = cross( -100, cci() );
cover = cross( cci(), -100 );
Na przykładzie tym można zauważyć, że w przypadku gdy CCI
przyjmuje wartości z zakresu pomiędzy -100 a 100 wówczas
wypada się z rynku.
Kontrolowanie ceny transakcji
Obecnie program AmiBroker dostarcza 4 nowe zastrzeżone zmienne do określania cen, przy których następuje realizacja kupna, sprzedaży, sprzedaży krótkiej i pokrycia. Tablice te przyjmują następujące nazwy: buyprice, sellprice, shortprice i coverprice.
Zmienne te są głównie wykorzystywane do kontrolowania ceny transakcji:
BuyPrice = IIF( dzień tygodnia() == 1, HIGH, CLOSE );
// w poniedziałek kup po cenie najwyższej, w pozostałe dni po cenie zamknięcia
Zatem można napisać następujące formuły w celu symulowania realnych poleceń stopowania:
BuyStop = ... formuła definiująca poziom stopowania kupna;
SellStop = ... formuła definiująca poziom stopowania sprzedaży;
// jeżeli w ciągu dnia ceny wzrosną powyżej poziomu buystop (cena najwyższa > buystop)
// wydawane jest polecenie kupna (po cenie odpowiadającej buystop lub najniższej, w zależności która jest wyższa)
Buy = Cross( High, BuyStop );
// jeżeli w ciągu dnia ceny spadną poniżej poziomu sellprice (cena najniższa < sellstop)
// wydawane jest polecenie sprzedaży (po cenie odpowiadającej sellstop lub najwyższej, w zależności która jest niższa)
Sell = Cross( SellPrice, SellStop);
BuyPrice = max( BuyStop, Low ); // upewnij się czy cena kupna nie jest niższa od ceny najniższej
SellPrice = min( SellStop, High ); // upewnij się czy cena sprzedaży nie jest wyższa od ceny najwyższej
Należy zwrócić uwagę na fakt, że do tablicy zmiennych zawierającej buyprice, sellprice, shortprice i coverprice, program AmiBroker wstawia wartości zdefiniowane w oknie ustawień testu systemu (patrz poniżej). Zatem możesz, ale nie musisz definiować ich w swoich formułach. W przypadku nie zdefiniowania ich, program AmiBroker pracuje jak w starej wersji.
Podczas przeprowadzania testu historycznego program AmiBroker sprawdza, czy wartości przypisane cenom kupna, sprzedaży, sprzedaży krótkiej i pokrycia (buyprice, sellprice, shortprice, coverprice) mieszczą się w zakresie cena najwyższa-najniższa danego notowania. Jeżeli ten warunek nie jest spełniony, wówczas program AmiBroker przypisze odpowiednią wartość do ceny najwyższej (jeżeli wartość ta w tablicy cen jest wyższa od ceny najwyższej) lub do ceny najniższej (jeżeli wartość ta w tablicy cen jest niższa od ceny najniższej)
Stopy żądanych zysków
Jak widać na powyższym rysunku, w oknie ustawień testu systemu dostępne są nowe ustawienia dla stopów żądanych zysków. Stopy te są aktywowane gdy najwyższa cena w danym dniu przekroczy poziom stopu, który może być określony jako wartość wzrostu lub procent z ceny zakupu. Domyślnie stopy te są wywoływane przy cenie zdefiniowanej jako tablica sellprice (dla transakcji na pozycjach długich) lub tablica coverprice (dla transakcji na pozycjach krótkich). Można to zmienić używając elementu "Exit at stop".
Element "Exit at stop"
Jeżeli zaznaczysz w ustawieniach pole "Exit at stop", stopy będą aktywowane przy ściśle określonym poziomie stopu, tj. jeśli zdefiniujesz stop żądanego zysku jako +10%, a cena zakupu wynosiła 50, polecenie stopu zostanie wydane przy wartości 55, nawet jeśli Twoja tablica ceny sprzedaży zawiera inną wartość (na przykład cenę zamknięcia wynoszącą 56).
Stopy maksymalnej straty działają na podobnej zasadzie - są one uruchamiane gdy najniższa cena w danym dniu spadnie poniżej poziomu stopu, który może być określony jako wartość wzrostu lub procent z ccny zakupu.
Stopy kroczące
Ten rodzaj stopu jest używany by chronić zyski. Podążając bowiem za Twoją transakcją, każdorazowo po osiągnięciu przez pozycję nowej wysokości, stop kroczący umiejscawia się na wyższym poziomie. Jeżeli zysk spadnie poniżej poziomu stopu kroczącego, następuje wówczas zamknięcie pozycji. Mechanizm ten został zilustrowany na poniższym rysunku (przedstaiono 10% stop kroczący):
Stop kroczący, jak również dwa inne rodzaje stopów mogą być aktywowane z poziomu interfejsu użytkownika (okno ustawień dla Automatic analysis) lub za pomocą formuł - używając funkcji ApplyStop:
W celu odtworzenia powyższego przykładu musisz wprowadzić do formuły automatycznej analizy następujący kod:
ApplyStop( 2, 1, 10, 1 ); // 10% stop kroczący, tryb procentowy, wyjście po aktywacji stopu
lub możesz użyć predefiniowanych stałych, które są bardziej opisowe
ApplyStop( stopTypeTrail, stopModePercent, 10, True );
Stopy kroczące mażna także definiować za pomocą punktów (stałych kwot pieniężnych) lub wartości procentowych zysku (rysyka). W drugim przypadku wielkość parametru określa wartość procentową z zysków, którą z założenia można stracić bez aktywowania stopu. Zatem stop 20% zysku (ryzyka) zamknie transakcję z maksymalnym zyskiem $100, gdy zysk ten spadnie poniżej $80.
Stopy dynamiczne
Obecnie funkcja ApplyStop() pozwala zmieniać poziom stopu w czasie pomiędzy jedną a drugą transacją. Dzięki temu można łatwo wprowadzić np. stopy oparte na zmienności.
Przykładowo w celu zastosowania stopu maksymalnej straty, który wykorzystuje dopuszczalną wartość maksymalnej straty, wyznaczaną w oparciu o 10 dniowy średni prawdziwy zakres zmian (wskażnik ATR), należy napisać następującą formułę:
ApplyStop( 0, 2, 2 * ATR( 10 ), 1 );
lub można użyć predefiniowanych stałych, które są bardziej opisowe
ApplyStop( stopTypeLoss, stopModePoint, 2 * ATR( 10 ), True );
Powyższa funkcja umieści stop na pozycji odpowiadającej dwukrotności 10 dniowego wskażnika ATR poniżej ceny otwarcia.
Ponieważ wartość wskażnika ATR ulega zmianom pomiędzy jedną a drugą transacją - zatem wywołuje także dynamiczne zmiany w poziomie stopu oparego na zmienności. Należy zwrócić uwagę na fakt, że trzeci parametr w funkcji ApplyStop (wartość) jest określany przy otwieraniu transakcji i utrzymywany przez cały czas jej trwania. Zatem w powyższym przykładzie od daty otwarcia transakcji używana jest wartość ATR(10). Dalsze zmiany wskażnika ATR nie wpływają na poziom stopu.
Oto pełne informacje odnośnie składni funkcji ApplyStop:
APPLYSTOP (AFL 1.7) (AFL 1.8 stopy dynamiczne + dodane stopy kroczące)
SYNTAX | applystop( type, mode, amount, exitatstop ) |
RETURNS | nic |
FUNCTION | kontroluje stopy wbudowane z poziomu
formuł (pozwala optymalizować stopy) Parametry: Zamiast liczb można również zastosować następujące stałe: stopTypeLoss = 0 stopModeDisable = 0 |
EXAMPLE | applystop( 0, 1, optimize( "max. loss stop level", 10, 2, 30, 1 ), 1 ); |
Zarządzanie wielkością pozycji
Jest to nowy element zaimplementowany w wersji 3.9. Zmiana rozmiaru pozycji w teście historycznym jest wprowadzana przy użyciu nowych zmiennych zastrzeżonych
PositionSize = <tablica rozmiarów>
Obecnie możesz kontrolować kwotę lub wartość procentową
portfela, która jest inwestowana podczas zawierania danej
transakcji
Jeżeli mniej niż 100% dostępnej gotówki jest inwestowane, wówczas pozostała część oczekuje na interesujący kurs, zdefiniowany w ustawieniach.
W oknie ustawień AA dostępne jest nowe pole kontrolne: "Allow position size shrinking". Funkcja ta kontroluje w jaki sposób test historyczny traktuje sytuację, w której pożądana wielkość pozycji przewyższa dostępną gotówkę (przy użyciu zmiennej PositionSize). Po sprawdzeniu tej flagi następuje wprowadzenie pozycji o rozmiarze pomniejszonym do wartości dostępnej gotówki. Przed wprowadzeniem tej zmiany nie można dokonać otwarcia pozycji.
W celu sprawdzenia aktualnych rozmiarów pozycji wybierz tryb nowego raportu w oknie ustawień AA: "Trade list with prices and pos. size"
Na zakończenie przedstawiono przykład metody Tharpa opartej na wskaźniku ATR i kodowanej w AFL, która służy do zmiany rozmiaru pozycji:
Buy = <miejsce na Twoją formułę kupna>
Sell = 0; // sprzedaż tylko po aktywacji stopu
TrailStopAmount = 2 * ATR( 20 );
Capital = 100000; /* WAŻNE:Ustaw również tę wartość w
ustawieniach: Initial Equity */
Risk = 0.01*Capital;
PositionSize = (Risk/TrailStopAmount)*BuyPrice;
ApplyStop( 2, 2, TrailStopAmount, 1 );
Metodę tę można podsumować w następujący sposób:
Całkowity kapitał dla jednego symbolu wynosi $100,000, zaś
przyjęty poziom ryzyka to 1% tej kwoty. Poziom ryzyka
zdefiniowany jest następująco: jeżeli stop kroczący na akcji
$50, jest ustawiony na $45 (wartość dwukrotności ATR odniesiona
do pozycji), wówczas ryzyko $1000 jest dzielone przez stratę
$5, pozwalając na zakup 200 akcji. Zatem ryzyko straty wynosi
$1000, natomiast ryzyko alokacji wynosi 200 akcji x $50/akcję
czyli $10,000. W związku z tym
przeznaczając 10% kapitału na kupno ryzykujemy jedynie $1000. (Opracowany
fragment listu z poczty AmiBroker)
Zaokrąglanie rozmiaru bloku oraz rozmiar tiku
Zaokrąglanie rozmiaru bloku
Różne instrumenty są kupowane lub sprzedawane w różnych "jednostkach transakcyjnych" lub "blokach". Możesz na przykład kupić ułamkową liczbę jednostek funduszu powierniczego, ale nie możesz kupić ułamkowej liczby akcji. Czasami musisz kupować w pakietach po 10 lub 100 akcji. Obecnie program AmiBroker pozwala określać wielkość bloku przed symbolem oraz na poziomie globalnym.
Można zdefiniować przed-symbolicznie zaokrąglenie rozmiaru bloku na stronie Symbol->Informacje (rys. 3). Wartość zero oznacza, że symbol nie ma specjalnego zaokrąglenia rozmiaru bloku, więc wykorzystane zostanie domyślne zaokrąglenie ("Default round lot size" - ustawienia globalne), określone na stronie ustawień Automatycznej Analizy (rys. 1). Jeżeli domyśly rozmiar został także nastawiony na wartość zerową, wówczas dozwolone jest przeprowadzanie transakcji na ułamkowej ilości akcji/kontraktów.
Można także kontrolować zaokrąglanie rozmiaru bloku stosując formułę AFL, w której wykorzystywana jest zmienna zastrzeżona RoundLotSize, np.:
RoundLotSize = 10;
Rozmiar tiku
Ustawienie to kontroluje minimalną zmianę ceny dla danego symbolu. Można je definiować na poziomie globalnym i przed-symbolicznym. Podobnie jak w przypadku zaokrąglenia rozmiaru bloku, rozmiar tiku można definiować przed-symbolicznie na stronie Symbol->Informacje (rys. 3). Wartość zerowa powoduje, że program AmiBroker wykorzystuje domyślny rozmiar tiku ("default tick size"), zdefiniowany na stronie ustawień (rys. 1) w oknie Automatycznej Analizy. Jeżeli domyślny rozmiar tiku jest również zerowy oznacza to, że minimalna zmiana ceny nie istnieje.
Rozmiar tiku można również nastawić i pobrać z formuły AFL, wkorzystującej zmienną zastrzeżoną TickSize, np.:
TickSize = 0.01;
Należy zwrócić uwagę na fakt, że ustawienie rozmiaru tiku dotyczy TYLKO transakcji zamykanych przy użyciu wbudowanych stopów i/lub ApplyStop(). Test historyczny zakłada się, że dane cenowe spełniają wymagania rozmiaru tiku, więc nie zmienia tablicy cen dostarczonej przez użytkownika.
Zatem określenie rozmiaru tiku ma sens tylko wówczas, gdy używa się wbudowanych stopów, a w związku z tym sygnały zamykania są generowane po osiągnięciu "dozwolonej" ceny zamiast ceny obliczonej. Przykładowo w Japoni - nie można mieć ułamkowych części jena, dlatego należy globalnie zdefiniowć ticksize jako 1, a wówczas wbudowane stopy zamkną transakcję na poziomie całkowitym.
Konto z limitem kredytowym
W ustawieniu wymagań kredytowych (Margin requirement) definiuje się procentowo wymagania kredytowe dla całego konta. Wartość domyślna wymagań kredytowch wynosi 100. Oznacza to, że musisz dostarczyć 100% funduszy by otworzyć daną transakcję. W ten sposób działał test historyczny we wcześniejszych wersjach. Obecnie jednak można symulować konto z limitem kredytowym. Kiedy kupujesz na kredyt, wówczas w celu przeprowadzenia zakupu akcji pożyczasz pieniądze od swojego maklera giełdowego. Zgodnie z obecnymi przepisami możesz wyłożyć 50% ceny zakupu interesujących Cię akcji, a drugą połowę pożyczyć od swojego maklera. W celu przeprowadzenia symulacji takiego przypadku wprowadź 50 w polu wymagań kredytowych (patrz rys. 1). Jeśli zatem Twój kapitał początkowy wynosi 10000, możesz dokonać zakupu za 20000 zajmując wyższe pozycje. Należy zauważyć, że ustawienia te pozwalają określić limit kredytowy dla całego konta, który NIE dotyczy transakcji terminowych. Inaczej mówiąc możesz używać konta z limitem kredytowym jedynie do zakupu akcji.
Zobacz też:
Artykuł Backtesting systems for
futures contracts (Testowanie historyczne kontraktów
terminowych).