checkAd

    Memo: Volume-at-price-Charts mit gnuplot - 500 Beiträge pro Seite

    eröffnet am 27.05.17 15:15:51 von
    neuester Beitrag 27.05.17 18:20:37 von
    Beiträge: 12
    ID: 1.253.841
    Aufrufe heute: 0
    Gesamt: 352
    Aktive User: 0


     Durchsuchen

    Begriffe und/oder Benutzer

     

    Top-Postings

     Ja Nein
      Avatar
      schrieb am 27.05.17 15:15:51
      Beitrag Nr. 1 ()
      Einleitung und Hintergrund:

      (0) man kann sich natürlich auch bequem bei einem kommerziellen Chartlieferanten (probe-)anmelden, um sich Volume-at-price-Charts erstellen zu lassen. Allerdings wären dabei die Randbedingungen zu beachten:
      - von welchen (Auslands-)Börsen (also nicht nur USA, CAN, etc.) können bei einem bestimmten (Probe-)Abo eigentlich Kurse bezogen werden?
      - welche Funktionalitäten stehen zu welchem Preis überhaupt zu Verfügung?
      etc...

      Das wollte ich aber nicht für sehr sporadische Chart-Aufgaben tun und so griff ich schliesslich selbst zur Tastatur:

      (1) dabei dachte ich zuerst an R, mit mächtigen Funktionen um sich Kurse automatisch liefern zu lassen und dann mit wenigen Befehlen eigene Charts dazu darstellen zu lassen. Nach einigen Experimenten, v.a. im Bereich Volume-at-price-Charts, habe ich erkannt, dass das mit erheblichem Aufwand (bei mir) verbunden ist. MMn lohnt sich R, wer es z.B. sonst nicht (regelmässig) benutzt, nicht zu sehr für Charts. Der Lernaufwand kann leicht dramatisch ansteigen.

      (2) also bin ich schliesslich bei gnuplot gelandet (was ich auch sonst ab und so für graphische Visualisierungen benutze und damit auf einen kleinen Skripte-Vorrat zurückgreifen kann.)
      Avatar
      schrieb am 27.05.17 15:49:07
      Beitrag Nr. 2 ()
      Was sind Volume-at-price-(VAP)-Charts?
      VAP-Charts werden auch genannt:
      - Volume-By-Price-Charts (VBP)
      - Price-By-Volume-Charts (PBV)

      z.B. solche Charts (aus: http://www.investopedia.com/articles/trading/06/pbvchart.asp):



      Volume-at-price-Charts sind (heutzutage) bei den komm. Lieferanten sehr ausgefeilt. Sie zeigen die kumulierten Volumina farblich getrennt nach steigenden und fallenden Kursen.

      So weit möchte ich nicht gehen, um den Aufwand in Grenzen zu halten.

      Auch spielt dabei die Qualität der zugrundeliegenden Kursdaten, üblicherweise:
      - Date
      - Open
      - High
      - Low
      - Close
      - Volume
      - Adjusted Close
      ..eine Rolle.

      Adjusted Close-Daten werden schon kontrovers diskutiert, z.B. hier:
      https://www.bogleheads.org/forum/viewtopic.php?t=156147
      https://www.quora.com/Stocks-do-historic-financial-price-cha…

      Nun, Stock-Splits sollten schon berücksichtigt sein; aber Dividenden und Stock-Dividenden (siehe Performance-DAX zu Kurs-DAX) brauchen mMn nicht berücksichtigt werden. Yahoo und Google liefern üblicherweise split adjusted historical stock prices, was natürlich dann auch Open, High, Low, Close-Preise betreffen muss, um überhaupt einsatzbereite Daten bereitzustellen; siehe z.B.: https://help.yahoo.com/kb/SLN2311.html

      Eine Garantie gibt es dabei (natürlich) nicht.

      Man sieht, DIY (Do-It-Yourself) hat auch einen Vorteil: man ist (oft) irgendwie gezwungen sich vorher die Rohdaten ein bischen anzugucken. (Schon bei R kann das entfallen durch automatische Funtionenen dazu...).

      Ansonsten gilt GIGO: Garbage In, Garbage Out.
      Avatar
      schrieb am 27.05.17 16:16:46
      Beitrag Nr. 3 ()
      Rohdatenbezug
      Für meinen Test-VAP-Chart habe ich Yahoo-Daten manuell als csv-Datei bezogen (kann man, wie alles eigentlich im Internet-Daten-Handling, auch automatisieren; ist aber nicht der Punkt hier.), nämlich so:



      Auch dabei sind schon Überlegungen zu den Zeitintervallen, wie Tag, Woche oder Monat, anzustellen. Ich nahm "Daily". gnuplot kann sehr präzise zeichnen.

      Die downgeloadete csv-Datei habe ich direkt in MS Excel geöffnet, in Spalten eingelesen (dazu Spalte A markieren -> Daten -> Text in Spalten -> "Getrennt" -> "Komma" -> alle Spalten als Text wegen dem US-Dezimalpunkt) und Spalte "Adj Close" gelöscht, da ohne weitere Verwendung. (Der US-Dezimalpunkt muss (default-mässig) bleiben für gnuplot.)

      Diese Datei sichere ich wieder als csv-Datei. Ich schliesse Excel.

      In einem Text-Editor:
      - ersetze ich alle Spaltentrennzeichen ";" durch "," (wirklich nötig? Geht das auch schon in Excel ohne grössere Umstände?)
      ..und..
      - setze ich noch ein "#" in die Top-Zeile:
      Date;Open;High;Low;Close;Volume
      =>
      # Date;Open;High;Low;Close;Volume
      .. um sie gnuplot als Header-Zeile zugänglich zu machen. Diese Spaltenheader könnte gnuplot verwenden. (Alle Strings ohne White spaces sind jeweils ohne grösseren Aufwand ein Wort für gnuplot.)

      => also habe ich z.B. diese aufbereitete Rohdatenzeitreihe von alt bis neu (hier unterscheiden sich mitunter die Tools wie gnuplot, R, MATLAB, ... in ihren Bedürfnissen.):

      # ASX:BLK, Blackham Resources
      # Date,Open,High,Low,Close,Volume
      2015-05-26,0.175000,0.195000,0.175000,0.190000,2046367
      2015-05-27,0.185000,0.185000,0.180000,0.185000,518624
      2015-05-28,0.185000,0.185000,0.180000,0.180000,951059
      ...
      2017-05-23,0.320000,0.320000,0.275000,0.275000,5163024
      2017-05-24,0.285000,0.285000,0.265000,0.270000,6287031
      2017-05-25,0.275000,0.280000,0.240000,0.250000,6857974
      2017-05-26,0.270000,0.320000,0.260000,0.315000,7723836
      Avatar
      schrieb am 27.05.17 16:48:38
      Beitrag Nr. 4 ()
      Summary volumes at closing prices erzeugen für den Overlay-Chart
      Hierbei sind grundsätzlich zwei Wege denkbar:
      (a) zu Fuss
      oder
      (b) es gnuplot machen zu lassen.

      Beides hat Vor- und Nachteile.

      Der hauptsächliche Nachteil es gnuplot selber automatisch machen zu lassen besteht darin, die Ergbenisse zumindest beim ersten Mal und punktuell zu prüfen (sonst GIGO). Also müsste man zuerst sowieso händisch als Gegenkontrolle tätig werden. Bei mir waren es auch einfach Zeitgründe.

      Wie oben gesagt, Schickimicki-Features wie verschiedene Farben (Up, Down price movement <=> grün, rot) innerhalb des Volume-Barcharts habe ich alles weggelassen. Das soll hier keine Doktorarbeit werden.

      Also habe ich die aufbereitete Zeitreihendatei von oben, namens stock_data, wieder in Excel eingelesen, und hier nur die Spalten Close und Volume im ersten Schritt belassen.

      Excel: 2.Schritt:
      - alle Close-Preise in aufsteigender Folge zusammen mit ihren Volumina sortieren

      Excel: 3.Schritt:
      - Ziel: Teilergebnisse zu solchen Datenreihen erzeugen wie z.B.:
      Close Volume
      0,1400 374411
      0,1400 245147
      0,1400 287000
      0,1400 108178
      0,1450 382896
      0,1450 728000
      0,1450 365000
      0,1450 184792
      0,1450 147685
      0,1450 127128
      0,1450 95210
      0,1450 327778
      0,1450 58447
      0,1450 146242
      0,1450 77000
      0,1450 155200
      ...


      Excel:
      - markiere auch Header-Reihe mit Close und Volume und alle Zellen mit Close- und Volume-Werten
      - Menü: -> Daten -> Teilergebnisse -> nach "Close" gruppieren, unter Verwendung von Summe, Teilergebnisse addieren zu: "Volume"

      Excel: 4.Schritt - Extraktion der Teilergebnisse:
      - Excel-Gurus kennen hier sicherlich elegante Lösungen; ich mache einfach Copy und Value-Paste aller Teilergebniss; dann filtere ich nach den Teilergebnissen, lösche alle " Ergebnis"-Strings, ersetze alle dt. "," wieder mit US "." in den Preisen und sichere das Resultat in einer neuen csv-Datei namens vol_by_price_data, z.B.:

      # closing price, summary volume at this closing price
      0.140,1014736
      0.145,2795378
      0.150,3792251
      ...
      0.990,956681
      1.020,3355195
      1.110,1968286
      1.150,2271305
      Avatar
      schrieb am 27.05.17 17:00:26
      Beitrag Nr. 5 ()
      gnuplot installieren
      gnuplot (für Windows) von hier:
      http://www.gnuplot.info/ -> http://www.tatsuromatsuoka.com/gnuplot/Eng/winbin/

      Ich nahm die 64Bit-Version zum direkten Installieren in Windows namens:
      0005 gp510-20170524-win64-mingw.exe.zip, 18202222 bytes, 2017-05-24, md5sum b60b68ddd4692e773957c12654fcfc51

      (Vielleicht gibt's auch eine Online-IDE für gnuplot, so dass man nichts installieren muss. Allerdings ist gnuplot im Gegensatz zu R - und R-Umgebungen - geradezu lightweight.)

      Trading Spotlight

      Anzeige
      InnoCan Pharma
      0,1775EUR -7,07 %
      CEO lässt auf “X” die Bombe platzen!mehr zur Aktie »
      Avatar
      schrieb am 27.05.17 17:22:04
      Beitrag Nr. 6 ()
      gnuplot Tipps
      Die gnuplot-Umgebung ist - wie eigentlich jede heutzutage (immer noch) - etwas gewöhnungsbedürftig. So eine vollgraphische IDE darf man hier nicht erwarten, und muss/müsste eigentlich regelmässig üben.

      Ich lege den gnuplot-Ausführungspfad in meine Windows-PATH, und starte in der Windows-Konsole (cmd.exe) einfach gnuplot mit dem Skript:
      > gnuplot <script_name.plt>

      Dieses Skript erzeugt mir (regelmässig) eine Grafik-Datei (im Skriptverzeichnis als png-Datei z.B.) mit dem Plot. Da gibt's vielleicht auch andere, elegantere Wege.

      Meine (primitive) "Entwicklungsroutine" lautet also immer:
      (a) plt-Skript editieren
      (b) Windows-Konsole: > gnuplot <script_name.plt>
      (c) erzeugtes png-Bild auffrischen (SHIFT-R in IrfanView z.B.)

      ----------
      gnuplot hat selber auch eine "IDE":


      ..bei der es aber ein paar Unterschiede zur gewohnten Windows-Shell gibt, wie z.B.:
      gnuplot> pwd
      gnuplot> cd ".."
      gnuplot> cd "c:" == cd "C:"
      gnuplot> cd 'C:scriptsgnuplotstock_chart.plt'
      und NICHT: gnuplot> cd "C:scriptsgnuplotstock_chart.plt" <<< check ' vs " !!!
      > `dir && pause` --> press any key to return..

      Hilfe (in der gnuplot-Konsole) zu Schlüsselwörtern:
      gnuplot> help <keyword>
      gnuplot> help xtics
      Avatar
      schrieb am 27.05.17 17:28:22
      Beitrag Nr. 7 ()
      Code des gnuplot-Skripts: stock_chart.plt
      # stock_chart.plt
      #
      # gnuplot script
      #
      # faultcode, 26.05.2017
      #
      # Test on Win7, gnuplot v.5.1: OK!
      # good reads:
      # stackoverflow.com/questions/18894756/gnuplot-interchanging-axes/18898979#18898979
      #
      #
      # devel.ideas:
      # - calculate table and file for vol_by_price_data from stock_data inside this script
      # => no extra round via Excel would be needed!
      #
      #
      reset
      #
      # MODIFY to your needs:
      set title "Blackham Resources Ltd. nBLK, ASX - Yahoo data, with gnuplot 5"
      unset key
      #
      #
      ############################################################################################
      # MODIFY to your needs: #
      stock_data = "BLK_ASX_2.csv" # >>>>>>>>>>>>>>> MODIFY to your input data file
      vol_by_price_data = "BLK_ASX_2_vol-hist.csv" # >>>>>>>>>>>>>>> MODIFY to your input data file
      output_graph = "BLK_ASX_2.png" # >>>>>>>>>>>>>>> MODIFY to your destination dir
      Min = 0.1 # where binning starts: price >>>>>>>>>>>>>>> MODIFY to your needs
      Max = 1.2 # where binning ends: price >>>>>>>>>>>>>>> MODIFY to your needs
      Top = 1.5 # out of range top price >>>>>>>>>>>>>>> MODIFY to your needs
      Interval = 0.1 # price axis interval >>>>>>>>>>>>>>> MODIFY to your needs
      Width = 0.01 # 1 cent width >>>>>>>>>>>>>>> MODIFY to your needs
      Currency = "AUD" # >>>>>>>>>>>>>>> MODIFY to your needs
      Max_volume = 30 # for volume chart >>>>>>>>>>>>>>> MODIFY to your needs
      Top_volume = 50 # for volume at price chart >>>>>>>>>>>>>>> MODIFY to your needs
      Vol_step = 10 # >>>>>>>>>>>>>>> MODIFY to your needs
      Vol_divisor = 1000000 # >>>>>>>>>>>>>>> MODIFY to your needs
      # #
      ############################################################################################
      #
      #
      set terminal push # save the current terminal settings
      set terminal png size 1100,1100 # send output to png file
      set output output_graph
      #
      # set input date format:
      set timefmt "%Y-%m-%d"
      # VERY IMPORTANT: xdata is time data (not just datapoint numbers):
      set xdata time
      #
      set datafile separator ","
      #
      set logscale y
      set format y "%0.1f"
      set ytics Min, Interval, Max-Interval
      set yrange [Min:Top]
      set ylabel Currency
      #
      set xtics nomirror
      #
      # have a 2nd y-axis on the right side:
      set y2label Currency
      set logscale y2
      set format y2 "%0.1f"
      set y2tics Min, Interval, Max - Interval
      set y2range [Min:Top]
      #
      # have a 2nd x-axis for the volume as overlay inside the price chart:
      set x2range [Top_volume:0]
      set x2tics Top_volume,-Vol_step,0
      set x2label "cumulative volume by price" offset 40
      set format x2 "%1.0fm"
      #
      #
      #
      set grid
      #
      set lmargin 10
      set rmargin 10
      set bmargin 0
      #
      set format x ""
      #
      set multiplot
      #
      set size 1, 0.7
      set origin 0, 0.3
      set bmargin 0
      #
      plot stock_data using 1 : 2 : 3 : 4 : 5 with financebars lt 6,
      vol_by_price_data using ($2/1000000/2.0) : ($1) : ($2/1000000/2.0) : (Width/4.0) with boxxyerrorbars axes x2y2
      #
      #
      #
      ############# Volume chart below: #############
      unset title
      unset x2tics
      unset x2label
      unset y2label
      unset logscale y2
      unset y2tics
      unset y2range
      #
      set ylabel "volume"
      set bmargin
      #
      # set format x
      # set input date format:
      set timefmt "%Y-%m-%d"
      # set output date and time format:
      set format x "%Y-%m-%d"
      # VERY IMPORTANT: xdata is time data (not just datapoint numbers):
      set xdata time
      #
      #
      #
      set size 1.0, 0.3
      set origin 0.0, 0.0
      set tmargin 1.5
      #
      unset logscale y
      set autoscale y
      set format y "%1.0fm" # >>>>>>>>>>>>>>> MODIFY to your needs
      set yrange [0:Max_volume]
      set ytics 0, Vol_step, Max_volume
      #
      #
      # SPECIAL-LABEL: >>>>>>>>>>>>>>> MODIFY to your needs
      set label 1 "Real outlier with 27.2m" at "2016-07-01", 25 left
      #
      plot stock_data using 1 : ($6/Vol_divisor) with impulses lt 2
      #
      # need here before next command:
      unset multiplot
      #
      set output
      set terminal pop # restore the current terminal settings
      #
      #
      #
      ##############################################################
      # input data:
      # (a) stock_data:
      # # ASX:BLK, Blackham Resources
      # # Date,Open,High,Low,Close,Volume
      # 2015-05-26,0.175000,0.195000,0.175000,0.190000,2046367
      # 2015-05-27,0.185000,0.185000,0.180000,0.185000,518624
      # ...
      # 2017-05-24,0.285000,0.285000,0.265000,0.270000,6287031
      # 2017-05-25,0.275000,0.280000,0.240000,0.250000,6857974
      # 2017-05-26,0.270000,0.320000,0.260000,0.315000,7723836
      #
      # (b) vol_by_price_data:
      # # closing price, summary volume at this closing price
      # 0.140,1014736
      # 0.145,2795378
      # 0.150,3792251
      # ...
      # 1.020,3355195
      # 1.110,1968286
      # 1.150,2271305
      #
      # end of stock_chart.plt
      Avatar
      schrieb am 27.05.17 17:32:33
      Beitrag Nr. 8 ()
      Warnung: gnuplot-Konstrukte mit &quot;:&quot;
      Ich habe oben ein paar Konstrukte mit "A:A" in "A : A" ändern müssen, um die Interpretation als Smilies im WO-Posting zu verhindern. Man kann, und sollte, diese Konstrukte ohne die Leerzeichen links und rechts vom ":" schreiben.

      (Gibt es eigentlich einen Style Guide-Checker für gnuplot?)
      Avatar
      schrieb am 27.05.17 17:36:00
      Beitrag Nr. 9 ()
      voilà - der Ergebnis-Plot
      Avatar
      schrieb am 27.05.17 18:06:22
      Beitrag Nr. 10 ()
      Nochmal R et al - Analyzing Financial Data and Implementing Financial Models Using R
      Hier ist ein - wenn auch massiv weiterführendes - Buch zum Thema Finanzdaten und R (was ich nicht habe); wer sich also möglicherweise tiefer mit R in diesem Themenfeld auseinandersetzen will.
      Wobei sicherlich seit 2015 wieder neue R-Packages zu diesem Themenfeld dazugekommen sind.



      http://www.springer.com/de/book/9783319140742
      https://books.google.de/books?id=bo31BwAAQBAJ&pg=PA86&lpg=PA…

      Eine andere Möglichkeit wäre im Python-Umfeld nach (umfassenderen) Lösungen zu suchen, z.B. hier:
      http://shop.oreilly.com/product/0636920032441.do
      http://shop.oreilly.com/product/0636920037057.do
      Avatar
      schrieb am 27.05.17 18:20:16
      Beitrag Nr. 11 ()
      Schöne Arbeit von Dir! Daumen!
      Es ist doch ein hoher Aufwand. Dabei lernt man natürlich sehr viel.
      Kennst Du Prorealtime? EOD ist kostenlos. Hier der gleiche Chart:
      Avatar
      schrieb am 27.05.17 18:20:37
      Beitrag Nr. 12 ()
      gnuplot und horizontale Histogramme
      gunplot kennt (noch) keine horizontalen Histogramme, wie für einen Volume-at-price-Chart notwendig. (Obwohl man mit gnuplot - mit Übung - sehr gut vertikale Histogramme plotten kann.) Daher muss man z.Z. noch einen Kunstgriff (wie immer eigentlich!) anwenden. Hier in Form des:

      boxxyerrorbars Styles, kurz: boxxy.

      Siehe Anweisung:
      plot stock_data using 1:2:3:4:5 with financebars lt 6,
      vol_by_price_data using ($2/1000000/2.0) : ($1) : ($2/1000000/2.0) : (Width/4.0) with boxxyerrorbars axes x2y2


      Siehe dazu diese gute Übung (mein Skript braucht allerdings bei weitem nicht so viele - für mich vollkommen - erratische gnuplot-Anweisungen): https://stackoverflow.com/questions/18894756/gnuplot-interch…

      Ich stellte allerdings fest, dass es eine ganze Weile dauerte bis ich diesen Style (hoffentlich) korrekt anwandte.

      Also kürzt man sein zu entwickelndes Skript bis auf wenige Anweisungen runter und benutzt nur ganz wenig, vollkommen überschaubare Eingangsdaten, bis man glaubt ein plausibles Ergebnis zu haben. (So mach ich das eben..). Das kann durchaus ein paar Stunden dauern.

      Aber man lernt ja dabei auch für's nächste Mal.


      Beitrag zu dieser Diskussion schreiben


      Zu dieser Diskussion können keine Beiträge mehr verfasst werden, da der letzte Beitrag vor mehr als zwei Jahren verfasst wurde und die Diskussion daraufhin archiviert wurde.
      Bitte wenden Sie sich an feedback@wallstreet-online.de und erfragen Sie die Reaktivierung der Diskussion oder starten Sie
      hier
      eine neue Diskussion.
      Memo: Volume-at-price-Charts mit gnuplot