Użycie stylów, kolorów, tytułów i parametrów w Kreatorze Wskaźników (Indicator Builder).

AmiBroker pozwala na określenie własnych stylów i kolorów wykresów tworzonych przy pomocy Kreatora wskaźników, co pozwala na większą elastyczność przy ich projektowaniu. Rozdział ten przedstawi, jak używać stylów i kolorów, a także, jak zdefinować pojawiający się w górnej części wykresu tytuł.

W Kreatorze Wskaźników dostępne są następujące zarezerwowane nazwy zmiennych:

Variable Usage Applies to
title

definiuje tekst tytułu wykresu

(nowa cecha w 4.20):
Jeśli zmienna Title jest używana, kolor tekstu należy zdefiniować wewnątrz string'a.
Kolory definiuje się przy użyciu ciągu znaków \\cXX gdzie XX jest dwucyfrowym kodem danego koloru \\c38 - definiuje kolor fioletowy, istnieje również ciąg specjalny \\c-1 który przywraca ustawienie koloru na domyślny kolor osi.
Przykładowo

Title = "To napisane jest w kolorze \\c38fioletowym \\c27a to w zielonym";

Możliwe jest również użycie nowej funkcji AFL, która znacząco ułatwia definiowanie kolorów. Ta funkcja to:
EncodeColor( colornumber ).
Zatem powyższy przykład można napisać również w ten sposób:

Title = "To napisane jest w kolorze " + EncodeColor( colorViolet ) + "fioletowym " + EncodeColor( colorGreen ) + "a to w zielonym.";

Tytuł o kilku liniach tworzony jest przy użyciu znaku przejścia do następnej lini \n, na przykład:
Title = "To jest pierwsza linia\nTto jest druga linia";

Kreator Wskaźników (Indicator Builder)
maxgraph definiuje maksymalną ilość wykresów prezentowanych w oknie tworzonego wskaźnika (domyślnie=3) Kreator Wskaźników (Indicator Builder)
graphN definiuje formułę dla wykresu numer N (gdzie N jest numerem z przedziału 0,1,2,..., maxgraph-1) Kreator Wskaźników (Indicator Builder)

graphNopen,
graphNhigh,
graphNlow,

definiuje dodatkowe tablice cen O, H, L dla wykresów świecoych i słupkowych. Kreator Wskaźników (Indicator Builder)
graphNcolor

definiuje indeks koloru N-tego wykresu. Indeksy te powiązane są z aktualnie używaną paletą kolorów (patrz: Preferences -> Color). Ponadto, istnieją również predefiniowane stałe łatwiejsze w stosowaniu niż numery kolorów:

colorCustom1 = 0
colorCustom2 = 1
colorCustom3 = 2
colorCustom4 = 3
colorCustom5 = 4
colorCustom6 = 5
colorCustom7 = 6
colorCustom8 = 7
colorCustom9 = 8
colorCustom10 = 9
colorCustom11 = 10
colorCustom12 = 11
colorCustom13 = 12
colorCustom14 = 13
colorCustom15 = 14
colorCustom16 = 15

colorBlack = 16
colorBrown = 17
colorDarkOliveGreen = 18
colorDarkGreen = 19
colorDarkTeal = 20
colorDarkBlue = 21
colorIndigo = 22
colorDarkGrey = 23

colorDarkRed = 24
colorOrange = 25
colorDarkYellow = 26
colorGreen = 27
colorTeal = 28
colorBlue = 29
colorBlueGrey = 30
colorGrey40 = 31

colorRed = 32
colorLightOrange = 33
colorLime = 34
colorSeaGreen = 35
colorAqua = 35
colorLightBlue = 37
colorViolet = 38
colorGrey50 = 39

colorPink = 40
colorGold = 41
colorYellow = 42
colorBrightGreen = 43
colorTurquoise = 44
colorSkyblue = 45
colorPlum = 46
colorLightGrey = 47

colorRose = 48
colorTan = 49
colorLightYellow = 50
colorPaleGreen = 51
colorPaleTurquoise = 52
colorPaleBlue = 53
colorLavender = 54
colorWhite = 55

Kreator Wskaźników (Indicator Builder)
graphNbarcolor definiuje tablicę zawierającą indeksy kolorów dla każdego rysowanego słupka - patrz opis poniżej. Kreator Wskaźników (Indicator Builder)
graphNstyle

definiuje styl N-tego wykresu. Styl określany jest jako combinacja (suma) jednego lub kilku poniższych znaczników (zamiast numerów możliwe jest również użycie predefiniowanych stałych określających style.

styleLine = 1 - Zwykły wykres liniowy (domyślny)
styleHistogram = 2 - wykres typu histogram
styleThick =4 - pogrubiony
styleDots = 8 - zawierający kropki
styleNoLine = 16 - nie zawierający lini
styleLog = 32 - skala semi-logarytmiczna
styleCandle = 64 - wykres świecowy
styleBar = 128 - wykres słupkowy
styleNoDraw = 256 - brak wykresu (skalowana jest jedynie oś Y)
styleStaircase = 512 - wykres schodkowy
styleSwingDots = 1024 - wyświetlanie punktów dla wykresu schodkowego
styleNoRescale = 2048 - brak skalowania osi
styleNoLabel = 4096 - brak etykiety (wartości wskaźnika)
stylePointAndFigure = 8192 - ---------point and figure--------
(new in 4.20):
styleArea = 16384 - wykres typu obszar (szeroki histogram)
styleOwnScale = 32768 - wykres używa oddzielnej skali
styleLeftAxisScale = 65536 - wykres wykorzystuje oddzielnej skali (niezależnej od skali osi Y)

Nie wszystkie kombinacje mają sens, przykładowo (64+1) czyli wykres świecowy + wykres liniowy, da w rezultacie wykres świecowy (64)

Uwaga do wykresów świecowych i słupkowych. Style te wykorzystują do wysowania wykresu N pośrednio tablice cen O, H, L. Dlatego zwykła formuła dla wykresu świecowego to: graph0=close; graph0style=64;.
W przypadku, gdy wykres świecowy/słupkowy ma opierać się na innych niż cena zamnknięcia danych, niezbędne będzie przedefiniowanie tablic O, H, L.

Kreator Wskaźników (Indicator Builder)
graphzorder Zmienna GraphZOrder pozwala na zmianę kolejności rysowania lini wskaźników. Gdy wartość GraphZOrder nie jest określona lub gdy równa jest 0 (fałsz) - używana jest stara kolejność (od ostatniego do pierwszego wykresu), natomiast gdy wartość GraphZOrder równa jest 1 (Prawda) - kolejność rysowania wykresów jest odwrócona. Kreator Wskaźników (Indicator Builder)

Nowe zmienne graphNstyle oraz graphNcolor (gdzie N jest z przedziału 0,1,2...) pozwalają na zmianę stylu na inny niż zwykły wykres liniowy. Zostanie to przedstawione na przykładzie wykresu wskaźnika ADX/DMI, który zdefiniowany w AFL ma postać:

maxgraph = 3;
graph2 = pdi(14);
graph1 = mdi(14);
graph0 = adx(14);
graph2style = graph1style = styleLine;
graph0style = styleLine | styleThick;
graph1color = colorRed;
graph2color = colorGreen;
graph0color = colorBlue;
title=name() + " - +DM" + writeval( graph2 )+ ", -DM" + writeval( graph1 )+
", ADX" + writeval( graph0 );

Pierwsza linia określa, że zostaną użyte 3 wykresy (jest to wartość domyślna, więc nie było konieczne jej definiowanie). Następne 3 linie określają formuły wykresów +DM, -DM oraz ADX. Następnie definiowane jest, iż wykresy graph2 oraz graph1 (+DM i -DM) będą rysowane jako zwykła linia, zaś wykres graph0 (ADX) będzie linią pogrubioną (1+4). W następnej kolejności definiowane są kolory, w oparciu o paletę kolorów. AmiBroker używa palety, która może być zmieniona przez użytkownika. Po wejściu w menu: Tools->Preferences->Colors, kliknięciu w Palette Editor zobaczyć można "kolory użytkownika (Custom colors)" - te 16 okienek kolorów pokazuje paletę AmiBrokera - pierwsze okienko oznacza kolor o indeksie 0, okienko następne - 1 itd. Zatem użycie w formule graph0color = 7 spowoduje zastosowanie koloru o indeksie 7 (czyli kolor z ósmego w kolejności okienka Edytora Palet). Ostatnia linia określa tytuł wykresu. Zamiast domyślnego wyświetlania <TICKERNAME> - <CustomIndicatorName> możliwe jest przedstawienie większej ilości informacji. W tym przykadzie tytuł zawiera nazwę symbolu oraz wartości +DM, -DM oraz ADX. Po przypisaniu dowolnego ciągu znaków (string) do zmiennej będzie on wyświetlony w miejsce wartości domyślnej.

Następny przykład to wykres wskaźnika Parabolic SAR rysowany ponad wykresem słupkowym:

graph0 = close;
graph0style = styleBar;
graph0color = 2;
graph1 = sar();
graph1style = styleDots | styleNoLine;
graph1color = 8;
title = "To jest mój tytuł: " + name() + " - SAR - " + writeval( graph1 );

W tym przykładzie wykres SAR rysowany jest przy użyciu samych kropek (graph1style = styleDots + styleNoLine). Wykres ceny (graph0) jest określony jako wykres słupkowy (graph0style=styleBar). W tym celu zmiennej graph0 przypisana jest wartość Close. Proszę zwrócić uwagę, iż w przypadku rysowania wykresów świecowych oraz słupkowyh pośrednio wykorzystane są również wartości tablic cen O,H, L (jeśli zmienne graphNopen, graphNhigh, graphNlow nie są zdefiniowane wewnątrz formuły), z uwagi na fakt, iż do narysowania tych wykresów potrzebna jest większa ilość danych niż tablica Close.

Jak można zauważyć, można łączyć style dodając wartości odpowiednich wskaźników stylów: 128+4 da w efekcie wykres słupkowy, natomiast 1+8 da wykres liniowy z kropkami. Użycie 256 nie narysuje niczego, AmiBroker przeskaluje jedynie oś Y w oparciu o dane. Opcja ta jest użyteczna, gdy zachodzi potrzeb przeskalowania wykresu w zależności od wartości danej tablicy, której wykresu nie chcemy rysować.

Jednak, nie wszystkie kombinacje mają sens, przykładowo (64+1) (wykres świecowy + liniowy) da w rezultacie wykre świecowy (style=64).

Funkcja Plot()

Zamiast używania zmiennych graphN możliwe jest użycie nowej funkcji Plot()
Plot( array, name, color/barcolor, style = 1 ) - przyśpieszającej tworzenie własnych wskaźników.

Poniższy przykład pokazuje, że pojedyncze wywołanie funkcji Plot() pozwala na zdefiniowanie koloru i stylu danego wykresu:

Plot( Close, "Close", colorBlack, styleCandle);

zatem zastępuje 4 linie:

graph0 = Close;
graph0name = "Close";
graph0color = 1;
graph0style = 64;

Pokoloruj swoje słupki.

Przy wykorzystaniu funkcji Plot() oraz zmiennych graph z łatwością można tworzyć wielokolorowe wykresy. W tym cely wystarczy zdefiniować tablicę kolorów. W poniższym przykładzie wzrastające słupki kolorowane są na zielono, zaś malejące na czerwono:

col = IIF( Close > Ref( Close, -1 ), colorGreen, colorRed );
Plot( Close, "Price", col, styleBar );

Ten sam efekt można osiągnąć używając zmiennych graph.

graph0barcolor = IIF( Close > Ref( Close, -1 ), colorGreen, colorRed );
graph0style = styleBar;
graph0 = Close;
graph0name = "Price";

Następny przykład jest praktycznie identyczny, z tą różnicą, że teraz rysowany jest wykres wolumenu obrotów.

col = IIF( Close > Ref( Close, -1 ), colorGreen, colorRed );
Plot( Volume, "Volume", col, styleHistogram | styleThick );

Mamy nadzieję, że podoba Wam się nowy, kolorowy wykres.

PlotForeign() function

Rysowanie wykresów kilku niezależnych symboi w jendym oknie jest bardzo proste gdy wykorzystana zostanie funkcja PlotForeign():

PlotForeign( tickersymbol, name, color/barcolor, style = styleCandle | styleOwnScale, minvalue = {empty}, maxvalue = {empty} )

Funkcja ta rysuje wykres ceny innego symbolu (symbol jest definiowany poprzez parametr tickersymbol). Drugi argument name określa nazwę pokazywaną w pasku tytułowym danego wykresu. Graph color może być statyczny (dy trzeci argument określony jest numerem) lub dynamiczny (gdy trzeci argument jest tablicą). Indeksy kolorów powiązane są z bieżącą paletą kolorów (patrz Preferences/Color)
style określa styl wykresu (możliwe wartości: patrz funkcja Plot() )

PlotForeign( "^DJI", "Dow Jones", colorRed );
PlotForeign( "^NDX", "Nasdaq 100", colorBlue );
PlotForeign( "^IXIC", "Nasdaq Composite", colorGreen );

Rózne wykresy i oddzielne skalowanie

Do rysowania wykresów skalowanych niezależnie od siebie można wykorzystać dwa nowe style: styleOwnScale oraz styleLeftAxisScale.

Proste jest również rysowanie 2 lub więcej dodatkowych wykresów używających własnej, jednak wspólnej skali.

minimum = LastValue( Lowest( Volume ) );
maximum = LastValue( Highest( Volume ) );

Plot( Close, "Price", colorBlue, styleCandle );

/* two plots below use OwnScale but the scale is common because we set min and max values of Y axis */
Plot( Volume, "Volume", colorGreen, styleHistogram | styleThick | styleOwnScale, minimum, maximum );
Plot( MA( Volume, 15 ), "MA volume", colorRed, styleLine | styleOwnScale, minimum, maximum );

Nowy styl: styleLeftAxisScale = 65536 - pozwala na rysowanie kilku wykresów o wspólnej skali innej niż skala głównego wykresu.
przykład: wykres ceny wraz z wykresem wolumenu obrotów i jego średnią kroczącą:

// Plot price plot and its moving average
Plot( Close, "Price", colorWhite, styleCandle );
Plot( MA( Close, 20 ), "MAC", colorRed );

// Now plot volume and its moving average using left-hand axis scaling
Plot( Volume , "Volume", colorBlue, styleLeftAxisScale | styleHistogram | styleThick );
Plot( MA( Volume,15), "MAV", colorLightBlue, styleLeftAxisScale );

Łatwe jest również rysowanie wszelkiego rodzaju wstążek (ribbons):

Plot( Close, "Price", colorBlue, styleCandle );
Plot( 2, /* defines the height of the ribbon in percent of pane width */
"Ribbon",
IIf( up, colorGreen, IIf( down, colorRed, 0 )), /* choose color */
styleOwnScale|styleArea|styleNoLabel, -0.5, 100 );

Using custom defined parameters

Nowe funkcje:

pozwalają na zdefiniowanie własnych parametrów we wskaźnikach. Po wciśnięciu prawego klawisza myszy na obszarze wykresu i wybraniu "Parameters" lub wciśnięciu kombinacji klwiszy Ctrl+R możliwa jest zmiana wartości parametrów w oknie Parameters i jednoczesne obserwowanie wpływu zmienianych parametrów.

Zachowanie to ilustruje poniższy prosty przykład:

period = Param("RSI period", 12, 2, 50, 1 );
Plot( RSI( period ), "RSI( " + WriteVal( period, 1.0 ) + ") ", colorRed );

Po wciśnięciu prawego klawisza myszy na obszarze wykresu i wybraniu "Parameters" lub wciśnięciu kombinacji klwiszy Ctrl+R możliwe jest obserwowanie zmian wykresu wraz ze zmianą położenia suwaka.

Kolejny przykład pokazuje iżycie funkcji ParamStr w celu odczytania oraz wybrania nazwy danego symbolu.

ticker = ParamStr( "Ticker", "MSFT" );
sp = Param( "MA Period", 12, 2, 100 );
PlotForeign( ticker, "Chart of "+ticker, ParamColor( "Price Color", colorLightYellow ), styleCandle );
Plot( MA( Foreign( ticker, "C" ), sp ), "MA(" + WriteVal( sp, 1.0 ) + ")", ParamColor( "MA Color", colorRed ) );

Poniższa formuła jest nieco bardziej skomplikowana i ilustruje użycie funkcji ParamColor do ustalania kolorów poszczególnych wykresów.

sp = Param( "RSI Period", 12, 2, 100 );
r = RSI( sp );
Plot( r, "RSI("+WriteVal(sp,1.0)+")", ParamColor("RSI Color", colorRed ) );

Buy = Cross( r, 30 );
Sell = Cross( 70, r );

PlotShapes( shapeUpArrow * Buy + shapeDownArrow * Sell, IIf( Buy, colorGreen, colorRed ) );

Następna formuła pozwala na optyczne dopasowanie wykresu cen z wykresem sinusoidy (przykład z listy mailowej AmiBroker):

Cycle = Param("cycle mths",12,1,12,1)*22;//264==12mth,22==1mth
xfactor = Param("stretch",1,0.1,2,0.1);//1==1yr,2==2yr
xshift = Param("slide",0,-22,22,2)/3.1416^2;//slide curve 1==5days

x = 2*3.1416/Cycle/xfactor;
y = sin(Cum(x)-xshift);

Plot(C,"Daily Chart", colorBlack,styleCandle|styleNoLabel);
Plot(y,"cycle = "+WriteVal(Cycle*xfactor/22,1.0)+" months",colorBlue,styleLine|styleNoLabel|styleOwnScale);

Po wciśnięciu prawego klawisza myszy, wybraniu opcji "Parameters" i zmianie położenia poszczególnych suwaków można obserwować zmiany kształtu i położenia sinusoidy.

Poniższy kod pozwala porównanie ruchów cen kilku instrumentów i łatwą zmianę porównywanych symboli w menu "Parameters".

The code shown below provides an easy way to get relative-performance chart and thanks to ParamStr() function it is easy to change the tickers being compared.

startpoint = Status("barvisible");
startpoint = startpoint - Ref( startpoint, -1 );

price = Close;
Plot( 100 * ( price/ValueWhen( startpoint, price ) - 1 ), Name(), colorRed, styleThick );

ticker = ParamStr("Ticker 1", "AMD" );
price = Foreign( ticker, "C");
Plot( 100 * ( price/ValueWhen( startpoint, price ) - 1 ), ticker, colorBlue );
ticker = ParamStr("Ticker 2", "MSFT" );
price = Foreign( ticker, "C");
Plot( 100 * ( price/ValueWhen( startpoint, price ) - 1 ), ticker, colorGreen );
ticker = ParamStr("Ticker 3", "IBM" );
price = Foreign( ticker, "C");
Plot( 100 * ( price/ValueWhen( startpoint, price ) - 1 ), ticker, colorBrown );
GraphXSpace = 3;