# Tuning-Möglichkeiten und deren Auswirkungen

## Grundeinschätzung

Das System ist grundsätzlich auf Performance ausgelegt. Dennoch sind einige Optimierungsmöglichkeiten vorhanden, um das System hinsichtlich Reaktionsmöglichkeit und Aktualisierungsgeschwindigkeit zu steigern. Verstehen Sie die nachfolgenden Punkte bitte nur als Hinweise und nicht als unabdingbare Handlungsanweisungen!

## Austausch der Festplatte mit Solid-State-Disk (SSD-Platte)

Praxisbeispiel:

<div class="table-wrap" id="bkmrk-test-festplatte-ssd-"><table class="wrapped relative-table confluenceTable tablesorter tablesorter-default" role="grid"><colgroup><col></col><col></col><col></col><col></col></colgroup><thead><tr class="tablesorter-headerRow" role="row"><th aria-disabled="false" aria-label="Test: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="0" role="columnheader" scope="col" tabindex="0">Test

</th><th aria-disabled="false" aria-label="Festplatte: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="1" role="columnheader" scope="col" tabindex="0">Festplatte

</th><th aria-disabled="false" aria-label="SSD: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="2" role="columnheader" scope="col" tabindex="0">SSD

</th><th aria-disabled="false" aria-label=": No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="3" role="columnheader" scope="col" tabindex="0"></th></tr></thead><tbody aria-live="polite" aria-relevant="all"><tr role="row"><td class="confluenceTd" colspan="1">  
</td><td class="confluenceTd" colspan="1">Samsung HD250HJ 250 GB / SpinPoint S</td><td class="confluenceTd" colspan="1">Corsair P128 Solid State Drive 128 GB  
CMFSSD-128GBG2D, MLC-Chips</td><td class="confluenceTd" colspan="1">  
</td></tr><tr role="row"><td class="confluenceTd">Startzeit von SHAREholder  
(Hilfe / Infos) mit dem aktuellen Depot / Stammdaten

</td><td class="confluenceTd">4,4s

</td><td class="confluenceTd">2,8s

</td><td class="confluenceTd">![(grüner Stern)](https://shareholder.atlassian.net/wiki/s/1390985508/6452/54e101d7235b2d7307c412fdfb4c3bd12f35dd91/_/images/icons/emoticons/star_green.png) -37%

</td></tr><tr role="row"><td class="confluenceTd">Tai-Pan Vollaktualisierung über alle Titel (3447)

</td><td class="confluenceTd">9m / 14s  
554s

</td><td class="confluenceTd">4m 50s  
290s

</td><td class="confluenceTd">![(grüner Stern)](https://shareholder.atlassian.net/wiki/s/1390985508/6452/54e101d7235b2d7307c412fdfb4c3bd12f35dd91/_/images/icons/emoticons/star_green.png) -48%

</td></tr><tr role="row"><td class="confluenceTd">Filter "ADX über alle deutschen Titel"

</td><td class="confluenceTd">44,5s

</td><td class="confluenceTd">13s

</td><td class="confluenceTd">![(grüner Stern)](https://shareholder.atlassian.net/wiki/s/1390985508/6452/54e101d7235b2d7307c412fdfb4c3bd12f35dd91/_/images/icons/emoticons/star_green.png) -70%

</td></tr></tbody></table>

</div>Für die Nutzung von ML-Kursprognose-Systemen sollten Sie mind. 4GB freien Speicherplatz auf der SSD mit hohen Änderungsraten im System einplanen!

## Nutzung von Multi-Core-Systemen

Die Nutzung von starken Multi-Core-Systemen ist grundsätzlich in einfachen Anwendungsszenarien wie Marktlisten, Depotfunktionen und Chartansichten praktisch irrelevant. Durch den Ausbau der Börsensoftware in den letzten Monaten in Richtung Kursprognose mittels ML/KI-Algorithmen und automatischen Handelsstrategien sind die Anforderungen hier jedoch deutlich gestiegen für eine optimale Benutzung des Systems.

Die Berechnungen können hier zwischen Minuten und Tagen auseinanderliegen bei Durchführung eigener Trainings von Modellen.  
Nachfolgend eine einfache Einordnung von sehr rechenintensiven Prozessen.

<div class="table-wrap" id="bkmrk-anwendung-einordnung"><table class="wrapped confluenceTable" style="width: 100%;"><colgroup><col style="width: 3.09021%;"></col><col style="width: 14.7094%;"></col><col style="width: 12.4845%;"></col><col style="width: 9.39425%;"></col><col style="width: 14.446%;"></col><col style="width: 45.875%;"></col></colgroup><tbody><tr><th class="numberingColumn confluenceTh">  
</th><th class="confluenceTh">Anwendung</th><th class="confluenceTh">Einordnung</th><th class="confluenceTh" colspan="1">Mindestens</th><th class="confluenceTh">Empfehlung</th><th class="confluenceTh" colspan="1">Optimal</th></tr><tr><td class="numberingColumn confluenceTd" colspan="1">1</td><td class="confluenceTd" colspan="1">Marktlisten mit meheren (z.B. 5) eingeblendeten Indikatoren</td><td class="confluenceTd" colspan="1"><span class="status-macro aui-lozenge aui-lozenge-current conf-macro output-inline" data-hasbody="false" data-macro-id="f817df0c-f88b-4eb1-9117-ed67a0d88a92" data-macro-name="status">MITTLERE BELASTUNG</span>

</td><td class="confluenceTd" rowspan="2">1GB nutzbarer RAM</td><td class="confluenceTd" rowspan="2">SSD, 8GB,  
Core &gt;3GHz</td><td class="confluenceTd" rowspan="2">Nur mit **CPU-Power für Single-Thread**-Berechnungen kann der Prozess wesentlich beschleunigt werden. Multi-Core hat aktuell keine Auswirkungen. CPUs mit hoher Taktfrequenz sind Systemen mit hoher Core-Anzahl sind hier überlegen.</td></tr><tr><td class="numberingColumn confluenceTd">2</td><td class="confluenceTd">Durchführung von Strategieberechnungen z.B. Susan-Levermann-Strategie über alle Titel</td><td class="confluenceTd"><span class="status-macro aui-lozenge aui-lozenge-current conf-macro output-inline" data-hasbody="false" data-macro-id="546d248a-4b50-439d-b1df-1370129d47e9" data-macro-name="status">MITTLERE BELASTUNG</span>

</td></tr><tr><td class="numberingColumn confluenceTd">3</td><td class="confluenceTd">Durchführung von ML-Kursprognose-Trainings mit H2o</td><td class="confluenceTd"><span class="status-macro aui-lozenge aui-lozenge-error conf-macro output-inline" data-hasbody="false" data-macro-id="0f08d72c-d598-438f-887e-22571a14a19c" data-macro-name="status">EXTREME BELASTUNG</span>

</td><td class="confluenceTd" colspan="1">Windows 64 und Java 64 Bit zwingend

6GB RAM

</td><td class="confluenceTd">Windows 64 und Java 64 Bit zwingend

SSD, 16GB RAM,  
4 Core &gt;3GHz

</td><td class="confluenceTd" colspan="1">Die Datenvorbereitung erfolgt aus Speichermanagement-Gründen virtualisiert über das Dateisystem. Daher ist jede Optimierung in Richtung schneller **SSD (.M2)** hier optimal.  
  
Daneben arbeitet das H2o-Modell sehr speicherintensiv d.h. für die HDAX-Berechnung mit 5,10,30 Tage Kursvorausberechnung und binären, gerunderter und exakter Vorhersage sind **6GB nur für H2o** zwingend. Für alle US-Titel sollten bereits 12GB vorliegen. Die Nutzung des Speichers wird durch das System abgefragt und ist optimal bei 20GB Speicherzuweisung (wenn möglich), wenn bis zu 12 Modelle gleichzeitig benutzt werden.  
  
Die Berechnung erfolgt aktuell leider noch ohne GPU-Support, nutzt aber praktisch alle **Cores und Threads**. Ein AMD Threadripper oder i7-Intel mit **8 Cores** arbeitet daher sehr effizient, wenn die Taktfrequenz entsprechend hoch liegt.

*Mittelfristig ist die Hoffnung durch GPU-Support hier die Anforderungen wieder etwas zu reduzieren.*

</td></tr><tr><td class="numberingColumn confluenceTd" colspan="1">4</td><td class="confluenceTd" colspan="1">Durchführung von ML-Kursprognose-Vorhersagen (mittels H2o)</td><td class="confluenceTd" colspan="1"><span class="status-macro aui-lozenge aui-lozenge-error conf-macro output-inline" data-hasbody="false" data-macro-id="75c21211-d635-4143-bcdf-f3f59e2f4f43" data-macro-name="status">HOHE BELASTUNG</span>

</td><td class="confluenceTd" colspan="1">Windows 64 und Java 64 Bit zwingend

1GB nutzbaren RAM

</td><td class="confluenceTd" colspan="1">Windows 64 und Java 64 Bit zwingend

  
SSD, 8GB RAM,

Core &gt;2.5 GHz

</td><td class="confluenceTd" colspan="1">Die Datenvorbereitung erfolgt aus Speichermanagement-Gründen virtualisiert über das Dateisystem. Daher ist jede Optimierung in Richtung schneller **SSD (.M2)** hier optimal.

Die Prediction-Berechnung ist vor allem in der Datenaufbereitung der Eingangsdaten (Indikatoren) für die Modellberechnung sehr rechenintensiv. Diese Berechnung ist nur Single-Thread basierend möglich. Die Prediction selbst ist durch die Einschränkung der Speichermenge mit kleinen Systemen denkbar.

Daher auch hier ist **CPU-Power mit Single-Thread-Power** durch eine hohe Taktfrequenz optimal!

</td></tr></tbody></table>

</div>## Nutzung von Sammelabfragen

Internet-Kurs-Provider wie Yahoo bieten die Möglichkeit Kursdaten für mehrere Titel gleichzeitig abzufragen. Der Geschwindigkeitsgewinn ist hier enorm, insb. durch Verwendung von CSV-Inhalten, d.h. unnötige Layout-Fragmente wie HTML-Inhalte werden vermieden. Der DAX30 kann so innerhalb von 1,5s aktualisiert werden für die Tagesdaten gegenüber 40s bei einer Einzelabfrage über Consors.

Bitte versuchen Sie daher immer Kursanbieter zu nutzen mit:

- CSV-Datenlieferung (AlphaVantage, Finanzen, Comdirect)
- Möglichkeit zur Sammelabfrage (AlphaVantage)

## ML-Referenz-Performancewerte 

Auf dem Referenzsystem (16GB, Core™ i7-2600K, SSD)

Verwendete ShareHolder-Version 13.16.30 (04.10.2018)

<div class="table-wrap" id="bkmrk-prozess-berechnungsd"><table class="wrapped confluenceTable tablesorter tablesorter-default" role="grid"><colgroup><col></col><col></col><col></col></colgroup><thead><tr class="tablesorter-headerRow" role="row"><th aria-disabled="false" aria-label="Prozess: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="0" role="columnheader" scope="col" tabindex="0"><div class="tablesorter-header-inner">Prozess</div></th><th aria-disabled="false" aria-label="Berechnungsdauer: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="1" role="columnheader" scope="col" tabindex="0"><div class="tablesorter-header-inner">Berechnungsdauer</div></th><th aria-disabled="false" aria-label="Anmerkungen: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="2" role="columnheader" scope="col" tabindex="0"><div class="tablesorter-header-inner">Anmerkungen</div></th></tr></thead><tbody aria-live="polite" aria-relevant="all"><tr role="row"><td class="confluenceTd">Berechnung Trainings-und Validierungsdaten (10er Netz)  
Nasdaq, Rohstoffe, HDAX und Indizes</td><td class="confluenceTd">26min</td><td class="confluenceTd">doAutoMLBaseNetID=10  
doAutoMLH2oMemoryInGB=12  
doAutoMLExport=1  
doAutoMLExportMarktSelections=\[262144;32768;64;16\]

</td></tr><tr role="row"><td class="confluenceTd" colspan="1">Berechnung der ML-Modelle</td><td class="confluenceTd" colspan="1">5h 20min</td><td class="confluenceTd" colspan="1">doAutoMLTrain=1  
doAutoMLTrainMarktSelections=\[262144;32768;64;16\]  
doAutoMLTrainResponseColumnIDs=(Forecast\[5d\].MA\[1d\].ts,Forecast\[5d\].MA\[1d\].Rounded.Enum.ts,Forecast\[5d\].MA\[1d\].Binaer.ts,Forecast\[10d\].MA\[1d\].ts,Forecast\[10d\].MA\[1d\].Rounded.Enum.ts,Forecast\[10d\].MA\[1d\].Binaer.ts,Forecast\[30d\].MA\[1d\].ts,Forecast\[30d\].MA\[1d\].Rounded.Enum.ts,Forecast\[30d\].MA\[1d\].Binaer.ts)

</td></tr><tr role="row"><td class="confluenceTd" colspan="1">Berechnung der Vorhersagewerte</td><td class="confluenceTd" colspan="1">3h</td><td class="confluenceTd" colspan="1">doAutoMLPrediction=1  
doAutoMLPredictionModelIDs=(GBM-Net-10-HDAX.100ntrees.20depth.response\[Forecast\[10d\].MA\[1d\].Binaer.ts\];GBM-Net-10-HDAX.100ntrees.20depth.response\[Forecast\[10d\].MA\[1d\].Rounded.Enum.ts\];GBM-Net-10-HDAX.100ntrees.20depth.response\[Forecast\[10d\].MA\[1d\].ts\];GBM-Net-10-HDAX.100ntrees.20depth.response\[Forecast\[30d\].MA\[1d\].Rounded.Enum.ts\])  
doAutoMLPredictionWatchlistenIDs=\[4;16;512\]  
doAutoMLPredictionUseMaxStockDays=1000

</td></tr></tbody></table>

</div>##   
Schrittweise Optimierungen

- Nutzung einer RAM-Disk (512MB) welche für die temporär-Dateien verwendet werden (siehe Programmeinstellungen / Berechnungen / Temporäres Verzeichnis). Hier kann z.B. 
    - [https://sourceforge.net/projects/imdisk-toolkit/](https://sourceforge.net/projects/imdisk-toolkit/) (Open-Source)
    - [https://www.softperfect.com/products/ramdisk/](https://www.softperfect.com/products/ramdisk/)
    - [https://memory.dataram.com/products-and-services/software/ramdisk](https://memory.dataram.com/products-and-services/software/ramdisk)