Samouczek: Jak tworzyć własne eksploracje

AmiBroker w wersji 3.58 dostarczył nową funkcję w oknie Automatic Analysis nazwaną "Exploration". Ogólnie mówiąc, eksploracja (Exploration) działa w podobny sposób jak scan ale zamiast wyszukiwania i raportowania wyłącznie sygnałów kupuj/sprzedaj, pozwala generować indywidualnie skonstruowane raporty, które mogą dostarczyć dużo więcej informacji niż zwykły scan.

Powyższa idea eksploracji jest prosta - jedna zmienna zwana filter kontroluje które akcje/notowania są wyświetlane. Jeżeli do zmiennej dla danej akcji/notowania zostanie przypisana to wartość "prawda" (lub "1") zmienna ta zostanie wyświetlona w raporcie.

Przykładowo następująca formuła zaakceptuje tylko akcje z ceną zamknięcia większą niż 50:

filter = close > 50;

Zwróć uwagę na to, że Exploracja używa wszystkich ustawień zakresu i filrta używanych przez tester historyczny, zatem może pojawić się wiele sygnałów dla danego waloru jeśli wybrane zostanie ustawienie "Wszystkie notowania (all quotations)". Aby sprawdzić jedynie ostatni dostępny dzień, należy wybrać: " n last quotations" gdzie "n=1" tak jak pokazano tutaj:

A co z własnymi raportami?

Tak, tryb exploracja pozwala tworzyć i eksportować raporty, w których zawartość poszczególnych kolumn można dowolnie definiować a co najważniejsze - jest to bardzo rposte do osiągnięcia.

Po pierwsze - musisz zdefiniować ile kolumn ma być w raporcie. Zwróć uwagę, iż pierwsze dwie kolumny (ticker i data) są predefiniowane i nie mogą być zmienione. Zatem aby dodac jedną własnę kolumnę należy napisać np.

numcolumns = 1;
column0 = close;

Jak można zauważyć jedyne co należy zrobic to zdefiniować zmienną numcolumns - to powininna być ilość dodatkowych kolumn (nie wliczając dwóch predefiniowanych kolumn). Następnie wystarczy przypisać wartości które ma zawiera kolumna do zmiennej columnN (gdzie N=0,1,..... to numer kolumny (liczony od 0)

Po wciśnięciu przycisku"Explore" w oknie Automatic Analysis otrzymasz rezultat podobny do tego na poniższym rysunku:

Zwróć uwagę na to, iż tak naprwdę są to trzy kolumny - predefiniowane 'Ticker', 'Data' oraz własna kolumna 0 zawierająca ceny zamknięcia. Tylko walory z ceną zamknięcia wyższą niż 50 będą uwzględnione w raporcie.

Teraz po wciśnięciu przycusku "Export" wyniki ekspploracji zostaną zapisane do pliku CSV (comma separated values) który może być z łatwością użyty do dalszych analiz w innych programach (wliczając Excel)

Oprócz wymaganych zmiennych filter, numcolumns, columnN można jeszcze zdefiniować następujące dodatkowe zmienne:

Zmienna ColumnNname (gdzie N to numer danej kolumny) pozwala zdefiniować nagłówek kolumny. Zatem, w poprzednim przykładzie, zdefiniowanie

column0name = "Close";

Zmieni domyślny nagłówek pierwszej (samodzielnie definiowanej) kolumny "Column 0" na bardziej czytelny "Close".

Zmienna ColumnNformat (gdzie N to numer kolumny) pozwala na zdefiniowanie formatowania wartości w kolumnie. Domyślnie wszystkie zmienne wyświetlane są do drugiego miejsca po przecinku, ale można zmienić to ustwienie przez przypisanie innej wartości do tej zmiennej, np.: 1.5 da w rezultacie 5 cyfr po przecinku, 1.0 nie wyświetli miejsc po przecinku. Zatem użycie:

column0format = 1.4;

yświetli ceny zamknięcia z dokładnością do 4 miejsc po przecinku.
(Dla zaawansowanych użytkowników: część całkowita tej zmiennej może być użyta aby upewnić się, że wyświetlana liczba ma minimalną ilość znaków, a gdy liczba ma mniej znaków, zostają dodane spacje - 6.0 nie wyświetli cyfr po przecinku, ale liczba będzie mieć co najmniej 6 znaków (wliczając dodane spacje).)

Przykłady

Tryb exploracji jest niezwyle elastyczny, można np. wyeksportować zawartość całej bazy danych do plików CSV używając poniższej formuły:

filter = 1; /* all stocks and quotes accepted */
numcolumns = 5;
column0 = open;
column1 = high;
column2 = low;
column3 = close;
column4 = volume;
column0name = "open";
column1name = "high";
column2name = "low";
column3name = "close";
column4name = "volume";
column0format = 1.4;
column1format = 1.4;
column2format = 1.4;
column3format = 1.4;
column4format = 1.0;

Ten przykład wyświetli tylko walory o dużym wolumenie obrotu:

filter = volume > 5000000; /* adjust this threshold for your own needs */
numcolumns = 2;
column0 = close;
column1 = volume;

albo... wyświetli walory, gdzie wolumen obrotów jest 30% powyżej 40-dniowej średniej wykładniczej wolumenu.

filter = volume > 1.3 * ema( volume, 40 );
numcolumns = 2;
column0 = close;
column1 = volume;

Ta formuła pozwala eksportować wartości wielu wskaźników do dalszych analiz.

filter = close > ma( close, 20 ); /* only stocks trading above its 20 day MA*/
numcolumns = 10;
column0 = macd();
column1 = signal();
column2 = adx();
column3 = rsi();
column4 = roc( close, 15 );
column5 = mfi();
column6 = obv();
column7 = cci();
column8 = ultimate();
column9 = trix();

Nowe funkcjie w AFL

AFL zawiera teraz wiele funkcji ułatwiających tworzenie eksploracji. Są one opisane w AFL function reference. Tutaj zaprezentwany będzie jedynie krótki przegląd wybranych funkcji.

Nowe funkcji to:

Przykład 1:

AddColumn( Close, "Closing price", 1.4 )

zastępuje 4 komendy:

numcolumns = 1;
column0 = Close;
column0name = "Closing price";
column0format = 1.4;

Przykład 2:

Lista wszytkich cen (OHLCV):

Filter = 1;

AddColumn(Open,"Open");
AddColumn(High,"High");
AddColumn(Low,"Low");
AddColumn(Close,"Close");
AddColumn(Volume,"Volume");

Kiedy użwywana jest funkcja AddColumn() NIE MA POTRZEBY definiowania zmiennych NumColumns, ColumnN.

Dodatkowa porada:

Klikając na nagłówku kulumny można sortować listę rezultatów wg danej zmiennej.