Úvod do sviečkových grafov

Zápisník experimentátora

Hierarchy: Sviečkové grafy

Sviečkové grafy (candlestick) sú obľúbeným spôsobom vizualizácie údajov vo finančnom sektore. Tieto grafy používajú štyri hodnoty (open, high, low a close), ktoré slúžia na výpočet sviečkového grafu. V tomto článku sa pozrieme na to, ako nám tieto grafy môžu pomocť lepšie vizualizovať merané hodnoty.

Zaznamenávanie hodnoty merania v čase

Pomocou Arduina pomerne často meriame nejakú hodnotu a snažíme sa ju vizualizovať. Či už je to na nejakom displeji, alebo sa údaje len odosielajú cez sériový port do počítača, snažíme sa tieto údaje pretransformovať do podoby grafu. Arduino IDE 1.6.6 umožnilo používať program Serial Plotter, ktorý vie takéto grafy vykresľovať. Poďme si vytvoriť najprv ukážku nejakých údajov, ktoré by sme mohli týmto programom zobraziť. Použijeme náhodné údaje, pomocou ktorých dosiahneme takýto výsledok.

Program na generovanie podkladov pre graf je jednoduchý a je to len hranie sa s náhodnými číslami, kde umožňujeme grafu v nasledovnom kroku pridať alebo ubrať jednotku. Zdrojový kód si môžete stiahnuť na GitHub.

int value=50;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int valuemove=random(3)-1;
  value+=valuemove;
  value=constrain(value,0,100);
  Serial.println(value);
  delay(100);
}

OHLC

Ak z predchádzajúcich údajov zaznamenáme hodnoty open, high, low, close v pravidelných intervaloch, dostaneme úplne iný graf. Už to nebude spojitá čiara, ale dostaneme na obrazovku niekoľko sviečok, ktoré nám hovoria, ako sa daná hodnota vyvíjala v čase. Vieme z grafu hneď zistiť, na akej hodnote sa konkrétna sviečka začala, na akej hodnote sviečka skončila a vieme aj aké minimá a maximá dosahovala. Jedna sviečka predstavuje dohodnutý časový interval, taký ako sa nám práve hodí. Môže to byť minúta, ale aj hodina. Príklad grafu je na nasledovnom obrázku.

Získavanie OHLC hodnôt

Zaznamenanie OHLC údajov nie je zložité. Pomôžeme si predchádzajúcim generátorom náhodných hodnôt a zaznamenáme OHLC každých 10 sekund. Program je stiahnuteľný na GitHub.

struct OHLCData {
  int o;
  int h;
  int l;
  int c;  
};

const int ohlc_step=10000; // 10 seconds
int value=50;
unsigned long ohlc_next_step;
OHLCData ohlc;

void setup() {
  Serial.begin(9600);
  ohlc_next_step=millis()+ohlc_step;

  ohlc.o=value;
  ohlc.h=value;
  ohlc.l=value;
  ohlc.c=value;
}

void loop() {
  int valuemove=random(3)-1;
  value+=valuemove;
  value=constrain(value,0,100);

  unsigned long m=millis();
  if(m>ohlc_next_step) {
    Serial.print(ohlc.o);
    Serial.print(",");
    Serial.print(ohlc.h);
    Serial.print(",");
    Serial.print(ohlc.l);
    Serial.print(",");
    Serial.print(ohlc.c);
    Serial.println("");
    ohlc.o=value;
    ohlc.h=value;
    ohlc.l=value;
    ohlc.c=value;
    ohlc_next_step+=ohlc_step;
  } else {
    if(ohlc.h<value)
      ohlc.h=value;
    if(ohlc.l>value)
      ohlc.l=value;
    ohlc.c=value;
  }
  delay(100);
}

Tento program vygeneroval napríklad takéto údaje.

50,56,50,52
51,55,49,51
50,54,42,43
44,46,30,35
35,50,32,47
46,52,41,43

Nabudúce

V tomto článku sme si ukázali základné vysvetlenie sviečkových grafov. V pokračovaní sa budeme venovať meraniu teploty a výsledok budeme zobrazovať pomocou sviečkových grafov na displeji. Budeme pravdepodobne používať displej Nokia 5110 a teplotu budeme merať pomocou DS18B20 alebo LM335.


26.07.2016


Menu