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): |
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, |
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 colorBlack = 16 colorDarkRed = 24 colorRed = 32 colorPink = 40 colorRose = 48 |
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) Nie wszystkie kombinacje mają sens, przykładowo (64+1) czyli wykres świecowy + wykres liniowy, da w rezultacie wykres świecowy (64) |
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;