Použití VB.NET pro obchodování na burze–7. díl

V dnešním díle to bude tak trochu spíš zábava, protože v praxi to nepoužijete. Ale je dobré vědět, že to VB.NET umí, že to umí nativně, bez nutnosti použít a platit software třetích stran a že to můžete použít. Řeč je o vykreslování grafů. Navážeme plynule na předchozí díly, stáhneme data z YAHOO a vykreslíme graf!

Kód

Kód uvedený níže přebírá většinu z toho, co jsme se naučili ve třetím díle, tedy stahuje data z YAHOO. Dále pak ze čtvrtého dílu jsme převzali design, kdy do regionu “pomocné metody, funkce a třídy” cpeme vše, co by nám v hlavní proceduře ubíralo na přehlednosti, tedy

  1. Pomocnou třídu pro uložení data a ceny, a
  2. Funkci, která z CSV souboru vytáhne datum a zavírací cenu akcie, a nově nyní
  3. Proceduru, která uloží graf do PNG souboru.

Aby Vám níže uvedený kód opravdu fungoval, bude třeba do projektu přidat Project –> Properties –> References odkaz na knihovnu System.Windows.Forms.DataVisualization. Ta je ovšem součástí .NET Frameworku od verze 3.51 a měli byste ji mít k dispozici.

Code Snippet
Imports System.Net
Imports System.IO
Imports Microsoft.VisualBasic.FileIO
Imports System.Globalization
Imports System.Threading
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Windows.Forms.DataVisualization.Charting

Module Module1
  Sub Main()

    'toto už jsme probírali
    Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture
    Dim myClient As WebClient = New WebClient()
    Dim reply As String = myClient.DownloadString("http://ichart.yahoo.com/table.csv?s=GLD&a=11&b=4&c=2013&d=8&e=19&f=2014")
    Dim Akcie_yahoo As List(Of Akcie) = ParsujDataZRetezce(reply)

    'vytvoříme nový graf
    Dim myChart As Chart = New Chart

    'a oblast, do níž se bude kreslit
    myChart.ChartAreas.Add(New ChartArea)

    'o nějakých rozměrech
    myChart.Width = 800 : myChart.Height = 600

    'vytvoříme novou sérii dat
    myChart.Series.Add(New Series("Ceny"))

    'jako zdroj dat nám poslouží seznam akcií získaných výše
    myChart.DataSource = Akcie_yahoo

    's tím, že na ose "X" budou datumy, na ose "y" budou pochopitelně ceny
    myChart.Series(0).XValueMember = "Datum"
    myChart.Series(0).YValueMembers = "Cena"

    'uložíme do souboru
    GrafDoObrazku(myChart, "graf.png")

    'eventuálně zobrazíme
    Process.Start("graf.png")

  End Sub

#Region "Pomocné metody, funkce a třídy"

  ''' <summary>
  ''' Vytvoří z grafu png soubor
  ''' </summary>
  ''' <param name="graf">Snímaný graf</param>
  ''' <param name="cesta">Cesta k výslednému souboru</param>
  ''' <remarks>MNůže fungovat pro libovolný objekt dědící z Control</remarks>
  Public Sub GrafDoObrazku(graf As Chart, cesta As String)
    Dim bitmapa As New Bitmap(graf.Width, graf.Height)
    graf.DrawToBitmap(bitmapa, graf.DisplayRectangle)
    bitmapa.Save(cesta, ImageFormat.Png)
  End Sub

  ''' <summary>
  ''' Vrátí seznam akcií na základě vstupu z CSV
  ''' </summary>
  ''' <param name="retezec">Vstupní CSV soubor jako řetězec</param>
  ''' <returns></returns>
  ''' <remarks></remarks>
  Function ParsujDataZRetezce(retezec As String) As List(Of Akcie)
    Dim Zasobnik As New List(Of Akcie)(200)
    Using myReader As StringReader = New StringReader(retezec)
      Using myparser As TextFieldParser = New TextFieldParser(myReader)
        myparser.TextFieldType = FieldType.Delimited
        myparser.Delimiters = New String() {","}
        myparser.CommentTokens = New String() {"Date"}
        Do While Not myparser.EndOfData
          Dim Radek As String() = myparser.ReadFields
          Zasobnik.Add(New Akcie(Radek(0), Radek(4)))
        Loop
      End Using
    End Using
    Return Zasobnik
  End Function

  ''' <summary>
  ''' Pomocná třída pro uložení data a ceny
  ''' </summary>
  ''' <remarks></remarks>
  Class Akcie
    Property Datum As Date
    Property Cena As Decimal
    Sub New(Datum, Cena)
      Me.Datum = Datum
      Me.Cena = Cena
    End Sub
  End Class

#End Region

End Module

V samotném kódu není žádná záludnost. Výsledný graf bude vypadat nehezky, nemá nadpis, popisky řad a má výchozí typ a barvy, ale to jsem udělal jen kvůli jednoduchosti. Vše se dá nastavit.

Ostatní články tohoto seriálu

  1. Použití VB.NET pro obchodování – zasílání e-mailů (25.2.2015)
  2. VB.NET, burza a Linux–není to šílené? (30.1.2015)
  3. Použití VB.NET pro obchodování na burze–10. díl (16.1.2015)
  4. Použití VB.NET pro obchodování na burze–9. díl (2.1.2015)
  5. Použití VB.NET pro obchodování na burze–8. díl (14.12.2014)
  6. Použití VB.NET pro obchodování na burze–7. díl (3.11.2014)
  7. Použití VB.NET pro obchodování na burze–6. díl (27.10.2014)
  8. VB.NET a burza – REALTIME data z Google–5. díl (20.10.2014)
  9. Použití VB.NET pro obchodování na burze–4. díl (13.10.2014)
  10. Použití VB.NET pro obchodování na burze–3. díl (6.10.2014)
  11. Použití VB.NET pro obchodování na burze - 2. díl (29.9.2014)
  12. Použití VB.NET pro obchodování na burze–1. díl (22.9.2014)
Příspěvek byl publikován v rubrice Nezařazené se štítky . Můžete si uložit jeho odkaz mezi své oblíbené záložky.

Napsat komentář

Vaše emailová adresa nebude zveřejněna.