MQL4 könyv   Beépített függvények  Egyéni indikátorok

Egyéni indikátorok

Az egyéni indikátorok függvényei lehetővé teszik, hogy kényelmesen elvégezzük a szükséges beállításokat az egyéni indikátorokon. Vizsgáljunk meg közülük néhányat (lásd még: Egyéni indikátorok létrehozása).

SetIndexBuffer() függvény

 bool SetIndexBuffer(int index, double array[])

A függvény az előzőleg létrehozott indikátor bufferhez globális szinten hozzárendel egy indikátorvonalat. Az indikátor buffereket az IndicatorBuffers() függvény segítségével hozzuk létre, az indikátor bufferek (indikátorvonalak) száma nem lehet több mint 8. A sikeres végrehajtás esetén visszaküldi a TRUE-t másképp visszaküldi a FALSE-t. A hibával kapcsolatos részletes információt a GetLastError() függvény végrehajtásával kaphatunk.

Paraméterek:

index - az indikátorvonal indexe (értéke 0-tól 7-ig lehetséges);

array[] - az indikátor bufferhez tartozó tömb neve.

SetIndexStyle() függvény

 void SetIndexStyle(int index, int type, int style=EMPTY, int width=EMPTY, color clr=CLR_NONE)

A függvény beállítja vagy módosítja az indikátorvonalak kinézetét.

Paraméterek:

index - az indikátorvonal indexe (az értéke 0-tól 7-ig lehetséges);

type – az indikátorvonal-típusa. Egy típus az indikátorvonalak típusának listájáról (lásd: Az indikátorvonalak stílusai);

style – a vonalstílus csak az 1 pixel szélességű vonalra használható. Egy vonalstílus a lehetséges  indikátorvonal stílusok közül.  Az EMPTY (alapértelmezett) érték esetén a stílus nem fog megváltozni (folytonos vonal);

width – vonal szélesség; értéke lehet - 1,2,3,4 vagy 5; az EMPTY érték esetén a szélesség változatlan marad;

clr – a vonal színe. A CLR_NONE üres érték azt jelenti, hogy a szín nem fog megváltozni (a #property indicator_colorN által meghatározott marad).

SetIndexLabel() függvény

void SetIndexLabel(int index, string text)

A függvény lehetővé teszi, hogy egy indikátor nevét láthassuk a Data Ablakban és az előugró buborékban.

Paraméterek:

index - az indikátorvonal indexe (az értéke 0-tól 7-ig lehetséges);

text - egy szöveg, ami leír egy indikátor vonalat. NULL azt jelenti, hogy a vonal értékét nem láthatjuk a Data Ablakban.

Példa egy egyszerű indikátorra (indicatorstyle.mq4), ami a bárok maximum értékeit mutatja és használja a fent leírt függvényeket:
//--------------------------------------------------------------------
// indicatorstyle.mq4 
// The code should be used for educational purpose only.
//--------------------------------------------------------------- 1 --
#property indicator_chart_window    // Indic. is drawn in the main window
#property indicator_buffers 1      // Amount of buffers
#property indicator_color1 Blue    // Color of the first line
 
double Buf_0[];                    // Indicator array opening
//--------------------------------------------------------------- 2 --
int init()                          // Special function init()
  {
  SetIndexBuffer(0,Buf_0);        // Assigning the array to the buffer
  SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Line style
  SetIndexLabel (0,"High Line");
  return;                          // Exit spec. function init()
  }
//--------------------------------------------------------------- 3 --
int start()                        // Special function start()
  {
  int i,                          // Bar index
  Counted_bars;                    // Amount of calculated bars
  Counted_bars=IndicatorCounted(); // Amount of calculated bars 
  i=Bars-Counted_bars-1;          // Index of the first uncounted
  while(i>=0)                      // Cycle for the uncounted bars
    {
      Buf_0[i]=High[i];            // value 0 of the buffer on ith bar
      i--;                          // Index calculation for the next bar
    }
  return;                          // Exit spec. function start()
  }
//--------------------------------------------------------------- 4 --

Az 1-2 blokk tartalmazza az indikátor általános beállításait. A #property direktívákkal megadjuk, hogy az indikátort a fő ablakban kell megjeleníteni, az indikátor egy buffert használ, az indikátorvonal színe kék. Ezen kívül az 1-2 blokkban létrehozunk egy buffer is.

A fenti függvényeket a 2-3 a blokkban használjuk. A bejegyzés:

 SetIndexBuffer(0,Buf_0); // Assigning the array to the buffer

társítja a 0 indexű indikátor vonalhoz a Buf_0 buffer. A következő:

 SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Line style

meghatározza a 0 indexel rendelkező indikátorvonal stílusát. A DRAW_LINE állandó azt jelzi, hogy egyszerű vonalat rajzolunk, a STYLE_SOLID állandó mutatja, hogy a vonal folytonos, és a vonalvastagság 2. A következő bejegyzésben:

  SetIndexLabel (0,"High Line");

nevet adhatunk a 0 indexű indikátorvonalnak. A megadott nevet láthatjuk a Data Ablakban és a chart ablakban felbukkanó buborékban. Az indikátorvonalak felcímkézése különösen akkor előnyös, ha az ablak sok indikátort tartalmaz; néha ez az egyetlen lehetőség, hogy megkülönböztessük az egyik vonalat a másiktól. 3-4 blokkban elvégezzük az indikátortömb elemértékeinek a kiszámítását, amelyek a bárok maximális értékeit mutatják (az indikátortömb kiszámítását leírtuk az  Egyéni indikátorok létrehozása részbenl).


Ha az indikátort egy különálló ablakban ábrázoljuk, akkor  vízszintes szintvonalakat is létrehozhatunk ebben az ablakban.

SetLevelValue() függvény

 void SetLevelValue(int level, double value)

A függvény a segéd indikátorablakban létrehoz egy vízszintes szintvonalat.

Paraméterek:

level – a szint sorszáma (0-31).

value - a megadott szint értéke.

A vízszintes szintek használata célszerű lehet, ha vizuálisan kell érzékelni, hogy az indikátorvonal a megadott érték alatt vagy fölött van. Azt az egyszerű indikátort, aki kiszámítja a bár maximum és minimum ára közti különbséget, lent mutatjuk be. A piaci események akkor érdekesek a felhasználónak (ebben a példában) ha az indikátorvonal a 0.001érték fölött vagy a -0.001 érték alatt van. A példa azt az indikátor mutatja, ami ábrázolja a High és Low közti különbséget

(linelevel.mq4):

//--------------------------------------------------------------------
// linelevel.mq4 
// The code should be used for educational purpose only.
//--------------------------------------------------------------- 1 --
#property indicator_separate_window // Indic. is drawn in a sep. window
#property indicator_buffers 1      // Amount of buffers
#property indicator_color1 Red      // Line color
 
double Buf_0[];                    // Indicator array opening
//--------------------------------------------------------------- 2 --
int init()                          // Special init() function
  {
  SetIndexBuffer(0,Buf_0);        // Assigning the array to the buffer
  SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Line style
  SetIndexLabel (0,"High/Low Difference");
  SetLevelValue (0, 0.0010);      // The horizontal line level is set
  SetLevelValue (1,-0.0010);      // Another level is set
  return;                          // Exit from spec.init() function
  }
//--------------------------------------------------------------- 3 --
int start()                        // Special start() function
  {
  int i,                          // Bar index
      Counted_bars;                // Amount of calculated bars 
 
  Counted_bars=IndicatorCounted(); // Amount of calculated bars 
  i=Bars-Counted_bars-1;          // Index of the first uncounted
 
  while(i>=0)                      // Cycle for the uncounted bars
    {
      Buf_0[i]=High[i]-Low[i];      // 0 value of the buffer on bar i
      if(Open[i]>Close[i])          // if the candle is black..
        Buf_0[i]=-Buf_0[i];        // .. then reverse the value
      i--;                          // Index calculation for the next bar
    }
  return;                          // Exit from spec.start() function
  }
//--------------------------------------------------------------- 4 --

A szóban forgó függvényt az indikátor 2-3 blokkjában használjuk. Ebben az esetben két vízszintes szintet határozunk meg. Az első érték a paraméterek listájában a vízszintes szint sorszáma, a második a szint értéke:

 SetLevelValue (0, 0.0010); // The level of the horiz. line is set
 SetLevelValue (1,-0.0010); // Another level is set

Az indicatorstyle.mq4 és linelevel.mq4 indikátorok paramétereit úgy állítottuk be, hogy a szimbólumablakban és a Data Ablakban is láthatók legyenek.


154. ábra. Az indikátor kinézete az ügyfélterminál különböző ablakaiban.

Két ablak - a Data ablak és a chart ablak látható a 154. ábrán. Megfigyelhető a High Line szöveg és az 1.3641 érték a Data Ablakban. Ugyanazokat a bejegyzéseket láthatjuk az előugró szövegbuborékban is. A Data Ablakban az indikátor működése alatt, az indikátorvonal neve változatlan, de az értéke a bejegyzés jobb oldalán a charton lévő kurzorpozíciótól függ. Az előugró buborékban lévő indikátorvonal-név annak a vonalnak a neve, amelyik vonalon az egérkurzor van.

A linelevel.mq4 indikátor segédablaka tartalmazza azokat a vízszintes szintvonalakat, amelyek a felhasználó beállításai szerint lettek elhelyezve. Ha a piros indikátorvonal fölött mozgatjuk a kurzort, akkor ennek az indikátorvonalnak a neve a "Difference between High and Low" és a kurzornál lévő értéke látható a felbukkanó ablakban.

Az egyéni indikátorok függvényei

Függvény Összefoglaló információ
IndicatorBuffers Lefoglalja az indikátorvonalak értékeit tartalmazó bufferek számára szükséges memóriaterületet. A bufferek száma nem lehet több 8-nál, és kevesebb annál, mint amit a #property indicator_buffers direktívában megadtunk. Ha az egyéni indikátornak több bufferre van szüksége számításhoz, ezzel a függvénnyel hozhatjuk létre a szükséges buffereket.
IndicatorCounted A függvény visszaküldi azon bárok számát, amelyek nem változtak meg az utolsó indikátorindítás óta. A bárok többsége nem igényel újraszámítást.
IndicatorDigits Beállítja a pontosságot (a tizedespont utáni karakterek számát) az indikátorértékek megjelenítésekor.
IndicatorShortName Beállít egy rövid nevet az indikátornak, az indikátor segédablakban és a Data Ablakban ezt a nevet láthatjuk.
SetIndexArrow A DRAW_ARROW stílusú indikátorvonalak rajzolásához kijelöl egy szimbólumot.
SetIndexBuffer A függvény az előzőleg létrehozott indikátor bufferhez globális szinten hozzárendel egy indikátorvonalat.
SetIndexDrawBegin Beállítja annak a bárnak az indexét ahol az indikátorvonal rajzolását el kell kezdeni.
SetIndexEmptyValue Beállítja az indikátorvonal üres értékét. Az üres értékeket nem rajzolja a terminál és nem mutatja a Data Ablakban.
SetIndexLabel Nevet ad az indikátorvonalaknak, ezt a nevet látjuk a Data Ablakban és a szöveg buborékban.
SetIndexShift Beállítja az indikátorvonal bárokhoz viszonyított helyzetét. A pozitív érték jobbra fogja elmozdítani az indikátorvonalat, a negatív érték balra. Vagyis az aktuális bárra kiszámolt értéket a shifttel eltolt bárra rajzolja a terminál.
SetIndexStyle Új vonaltípust: vonalstílust, vastagságot és színt ad a meghatározott indikátorvonalnak (lásd: Az indikátorvonalak stílusai).
SetLevelStyle A segédablakban lévő indikátor szintvonal stílusát állítja be (lásd:  Az indikátorvonalak stílusai).
SetLevelValue A segéd indikátorablakban létrehoz egy vízszintes szintvonalat.