Samouczek: Jak pisać własne komentarze do wykresów.

Jednym z interesujących aspektów używania języka formuł programu AmiBroker jest tworzenie automatycznych komentarzy do wykresów. Realizacja tego wygląda następująco:

  1. Tworzysz formułę komentarza składającą się z dwóch podstawowych elementów: stałego tekstu i wyrażenia AFL
  2. AmiBroker określa wartość wyrażenia używając zaznaczonego notowania i na tej podstawie generuje dynamicznie tekst
  3. Zestaw tekstów wraz z wyznaczonymi formułami jest wyświetlany w oknie komentarza (commentary output window)
  4. Dodatkowo na wykresie drukowane są strzałki zakup/sprzedaż

Dostęp do komentarzy uzyskujemy z menu Analysis->Commentary. Otwierając okno zobaczysz dwie zakładki: Commentary i Formula. W zakładce Formula możesz wprowadzic wyrażenie AFL, które zostanie wykorzystane przez program AmiBroker do utworzenia dynamicznego komentarza widocznego w zakładce Commentary. W dalszej części poprowadzimy Cię przez kolejne etapy pisania wlasnych komentarzy.

Tworzenie stałego tekstu

Stałe teksty (komunikaty) umieszczane w formułach muszą się zawierać w cudzysłowiach i kończyć średnikiem, jak to zostało pokazane na poniższym przykładzie:

"To jest przykładowy stały tekst";

Możesz pisać wiele komentarzy umieszczając je w oddzielnych wierszach w oknie komentarzy:

"To jest pierwsza linia tekstu";
"To jest druga linia tekstu";

Wprowadź te przykłady do pola edycji w zakładce Formula i przełącz się do zakładki Commentary. Zobaczysz ten sam tekst wyświetlany bez cudzysłowi i średników. Dzieje się tak dlatego, że AmiBroker przetworzył ten prosty tekst na łańcuch i wyświetlił go w oknie.

Wpisując teksty w wielu wierszach możesz za pomocą pokazanej powyżej metody lub używając prostej skwencji przełamującej linię ('\n'):

"To jest pierwsza linia tekstu\nTo jest druga linia tekstu\nTo jest trzecia linia tekstu";

Możesz także połączyć ciągi wyrażeń w jedną linię:

"To" +
" jest" +
" jedna"+
" linia" + " tekstu";

Myślę, że jesteś już zmęczony tymi prostymi przykładami. Weźmy się zatem za treść dynamiczną.

Zawartość dynamiczna

AFL oferuje kilka specjalnych funkcji uaktywniających dynamiczne komentarze, ale dwie z nich są szczególnie ważne: WriteVal() oraz WriteIF(). Funkcja WriteIF() jest wykorzystywana do wyświetlania tekstów warunkowych i będzie opisana w dalszej części artykułu, a tym czasem zobaczmy co możemy zrobić za pomocą funkcji WriteVal().

Podręcznik do AFL mówi:

SKŁADNIA writeval( LICZBA );
writeval( TABLICA );
ZWRACA ŁAŃCUCH (STRING)
ZASTOSOWANIE Funkcja ta może być wykorzystywana wyłącznie przez Guru tworzących komentarze. Jest używana do wyświetlenia liczbowej wartości zmiennej LICZBA lub TABLICA.

Tak więc jeżeli chcesz wyswietlić wartość liczby lub zaznaczonego notowania w tablicy, powinieneś użyć funkcji writeval(). Ale... zaczekaj chwileczkę - co to znaczy "zaznaczonego notowania w tablicy"? Pozwól mi to wyjaśnić za pomocą prostej formuły (proszę byś wprowadził ją w zakladce Formula):

writeval( close );

Po przełączeniu się do zakładki Commentary zobaczysz wartość ceny zamknięcia (tę samą która jest wyświetlana w nagłówku głównego arkusza cenowego). Ale gdy klikniesz na wykresie w innym miejscu, wybierając inną datę a następnie naciśniesz przycisk "Refresh", zobaczysz inną wartość - cenę zamknięcia zaznaczonego dnia. Tak więc funkcja writeval( close ) wyświetla wartość dotyczącą aktualnie zaznaczonego notowania w tablicy cen zamknięcia. Oczywiście funkcja ta działa w ten sam sposób z innymi tablicami. Pisząc

writeval( macd() );

otrzymasz dokładną wartość wskaźnika MACD w dniu który zaznaczyłeś na wykresie. Dysponując takim stanem wiedzy możemy stworzyć pewną statystykę:

"Cena zamknięcia= " + WriteVal( close );
"Zmiana od wczoraj = " + WriteVal( close - ref( close, -1 ) );
"Procentowa zmiana od wczoraj = " + WriteVal( roc( close, 1 ) ) + " %";
"MACD =" + WriteVal( macd() ) + " , Signal line =" + WriteVal( signal() );

Po przełączeniu się do Commentary zobaczysz co następuje:

Cena zamknięcia = 17.940
Zmiana od wczoraj = -0.180
Procentowa zmiana od wczoraj = -0.993 %
MACD = -0.001 , Signal line = 0.063

Proste, prawda? Możesz także zapisać symbol waloru dla danej akcji i zaznaczoną datę używając funkcji name() oraz date() jak poniżej:

"Dane statystyczne dla " + name() + " dla " + date();

Ale opuściliśmy tutaj możliwość wyświetlenia jednego komunikatu w przypadku spełnienia pewnego warunku i innego w przeciwnym razie...

Warunkowe wyświetlanie tekstu

AFL jest wyposażony w bardzo praktyczną funkcję zwaną WriteIF(), która powoduje wyświetlenie różnych tekstów w zależności od spełnienia lub nie zadanego warunku. Spójrzmy co mówi dokumentacja:

SKŁADNIA writeif( WYRAŻENIE, "TEKST PRAWDA", "TEKST FAŁSZ" )
ZWRACA LAŃCUCH (STRING)
ZASTOSOWANIE Funkcja ta może być wykorzystywana wyłącznie przez Guru tworzących komentarze. Jeżeli "WYRAŻENIE" przyjmuje wartość "prawda", wyświetlany jest "TEKST PRAWDA" jako komentarz. Jeżeli "WYRAŻENIE" przyjmuje wartość "fałsz", wyświetlany jest "TEKST FAŁSZ".

Tak więc możemy wyświetlić różne teksty w zależności od wyrażenia:

writeif( macd() > signal(), "MACD jest zwyżkujące ponieważ jest powyżej linii sygnałowej", "MACD jest aniżkujące ponieważ jest poniżej linii sygnałowej" );

Możemy połaczyć wiele wywołań funkcji WriteIf() uzyskując więcej możliwości:

"Aktualna sytuacja rynkowa dla "+ name() + " jest ";

avgcond1 = ( c > ema( close, 200) ) + 0.1 * ( close > ema( close, 90) ) + 0.1 * ( close > ema( close , 30 ) );
avgcond2 = -( c < ema( close, 200) ) - 0.1 * ( close < ema( close, 90) ) - 0.1 * ( close < ema( close , 30 ) );

WriteIf( avgcond1 == 1.2,
"silnie zwyżkująca",
WriteIf( avgcond1 == 1.1,
"zwyżkująca",
WriteIf( avgcond1 == 1.0,
"średnio zwyżkująca", "") ) ) +

WriteIf( avgcond2 == -1.2,
"silnie zniżkująca",
WriteIf( avgcond2 == -1.1,
"zniżkująca",
WriteIf( avgcond2 == -1.0,
"średnio zniżkująca", "") ) );

Powyższa formuła zwróci tekst "Aktualna sytuacja synkowa dla {symbol waloru} jest silnie zwyżkująca jeżeli średnia z 30 dni jest wyższa od średniej z 90 dni i średnia z 90 dni jest wyższa od średniej z 200 dni. W innych przypadkach formuła zwróci wyniki: zwyżkująca, średnio zwyżkująca, średnio zniżkująca, zniżkująca i silnie zniżkująca.

Aby uzyskać więcej przykladów tworzenia komentarzy AFL proszę odwiedzić bibliotekę formuł AFL a w szczególności zobaczyć formułę MACD która demonstruje wszystkie przedstawione tu techniki.

No to teraz jesteś już gotów aby ruszyć z własnymi komentarzami. Powodzenia!