Skip to main content

Learnings & MLAlgotrader-Releases

Das Logbuch wird von oben nach unten geführt, so dass die aktuellsten Einträge immer oben stehen. Das ganze System ist ausschließlich (vorerst) für meine private Nutzung. Ich dokumentiere hier nur meinen Fortschritt und Erkenntnisse. Es geht dabei gar nicht um die Ergebnisse selbst, sondern sich selbst nur einmal klar zu schreiben und die eigenen Gedanken etwas zu strukturieren. Ich selbst bin hauptberuflich als PO tätig und daher kein Hard-Core-Entwickler. Ich habe aber Spaß daran, die Sachen für mich zum Laufen zu bringen und meine Dev-Skills nicht komplett einrosten zu lassen.

2023-01-14

Schließen der Positionen nun mit Logging-Daten in der UI

image.png

Kalender-Stopp-Kennzeichnungen und Mirror-Trading

Durch Kalender-Markierungen können Positionen automatisch gemeinsam geschlossen werden. Diese Positionen können nach der Black-Period aber automatisch wieder eröffnet werden, solange auf dem Simulationskonto die Position noch im Gewinn liegt. Da keine Unterscheidung zwischen manuellen Stopps und Kalender-Event-Stopps vorhanden war, wurde die Positionen im Mirror-Trading nicht automatisch wieder neu geöffnet. Dies ist nun nachgezogen.

Manuelles Copy-Trading von der UI aus

Die Möglichkeit auch manuell einzugreifen sollte nun ausgebaut werden insb. da auf den D2-Konten Trades laufen können, die so in D1 und damit auch nicht für P1 gespiegelt werden, weil die Strategie noch nicht global freigeschaltet wurde.

In Einzelfällen kann es aber Sinn machen sowohl auf D1 als auch aus D2-Konten eine manuelle Spiegelung der Position vorzunehmen. Dies ist nun möglich inkl. umfangreichen formatierten JSON-Logging, die dann in der UI als JSON-Tree angezeigt wird. Da das System nur für mich ist, sollte das technische Logging unproblematisch sein.

image.png

Optimierungen für Mobile-Nutzung

Über CSS-Media-Filter werden nun angepasste Designs auf kleineren Notebook-Bildschirmen bzw. speziell auf dem Mobile-Endgeräten angezeigt. Das System lässt sich damit auch unterwegs nutzen. 

2023-01-08

Kurs-Delta-Analyse nach Wirtschaftsnachrichten (Kursreaktionsmuster)

Pro Kalender-Eintrag und pro ausgewähltes Symbol lässt sich nun eine direkte Kurs-Delta-Betrachtung darstellen, um so zu prüfen, wann und wir eine Kursreaktion zu einem gemeldeten Wirtschaftsindikator erfolgt ist. Trigger für mich für die Analyse war die imposante Bewegung am Freitag nachdem die Arbeitslosenzahlen gemeldet worden sind. 

Hier ist bereits zwischen 14:30 und 15:30 eine hohe Volatilität zu sehen gewesen mit Schwankungen in einer Range von bis zu 515 Punkten. Dies zerreißt so meine Standard-Stopp-Strategie. Um 15:30 wird in der 15min-Kerze dann nochmals 0.6% bzw. 243 Punkten nachgegeben, um dann endgültig eine Entscheidung nach oben zu nehmen.

Damit wäre in diesem Fall es günstig gewesen aus dem Markt fern zu bleiben mit der Meldung der Arbeitslosen-Statistik und für min. 60min keinen Einstiegspunkten zu folgen auf dem P-Konto. Erst danach dürfen Signale wieder ausgewertet werden, auch auf Basis noch nicht ausgestoppter Positionen auf D1, die dann im Plus sein sollten.

Im Realkonto hatte ich den Indikator leider nicht aktiviert zur Deaktivierung des Tradings und habe damit den Handelstag in Summe negativ abgeschlossen.


image.png

Nachdem ein Indikator/Kalender-Event ausgewählt worden ist, erscheint ein neuer zusätzlicher Bericht mit Startzeitpunkt des Veröffentlichungsdatums. Damit können nachträglich systematisch die Kursreaktionsmuster geprüft werden und das bisherige Setup optimiert werden.

image.png

Mittels der ausgegebenen TickSize (hier 0.1 für US500) in der Headline der Detailansicht kann durch Multiplikation zu den Punkte-Veränderungen der notwendige Stopp-Value geprüft werden.

Ich hoffe ich kann so systematisch die relevanten Wirtschaftsnachrichten mit einem besonderen Trading schalten. Theoretisch kann auch auf die eigentlichen Nachrichten reagiert werden. Hier erscheinen mir die Sonderbedingungen für die Interpretation zu vielfältig, dass ich es zum jetzigen Zeitpunkt automatisieren möchte.

2023-01-07

Kalender-Events lassen sich nun direkt in der UI schalten

Das Stoppen von neuen Trades und/oder High-Volume-Trades und/oder vorherige Schließen aller offenen Trades auf Basis von bevorstehenden Wirtschaftsnachrichten/Kalender lässt sich nun direkt aus der UI aktivieren. Damit steht einer nicht technischen Nutzung nichts im Wege.

image.png

Statistiktabelle mit Sortierung und Optimierungen Darstellung 

Die für das Mirror-Trading aktivierten Strategien werden unterschieden nach High/Low-Volume dargestellt. Die relevanten Spalten sind nun für Sortierungen anklickbar.

image.png

Strategie-Toggle-Empfehlungen direkt in der Anzeige

Liegt ein Dismatch zwischen den Empfehlungen auf Basis der Strategieergebnisse aus dem D2-Konto (alle Strategien, kein manuelles Eingreifen) wird ein Achtungszeichen gezeigt. Dies betrifft alle Aktivierungen des D1-Kontos und die Einstellungen für High-Volume-Trading.

image.png

Die Berechnungen erfolgen immer automatisch auf Basis der D2-Ergebnisse der letzten 14 Tage. Die Empfehlungen verschieben sich dabei automatisch, wenn Strategien sich im Markt anders verhalten. Das Aktivierung erfolgt dennoch manuell, da der Erfolg der Trading-Woche daran hängen kann.

Strategie-Toggles können nun manuell direkt in der UI gesetzt werden

Um nicht mehr direkt auf der DB arbeiten zu müssen, können Strategien nun gesetzt werden.

image.png

Positionen können nun direkt in der UI geschlossen werden

image.png

Manuell geschlossene Positionen auf P-werden im Mirror-Trading nicht nochmals eröffnet

Wird in der UI oder direkt im XTB-Konto inkl. Mobile-App eine Position manuell geschlossen, wird durch das Mirror-Trading die Position nicht nochmals eröffnet, wenn diese im D1 Konto noch aktiv ist und die Trading-Rahmenbedingungen erfüllt. Es kann somit im Notfall "eingegriffen" werden ohne die Trading-Setups grundsätzlich aussetzen zu müssen.

Statistik-Ansicht-Optimierungen

Der Wechsel zwischen Statistik-Ansicht und Trading-Board ist ohne history. Back nun nativ möglich d.h. auch bei veränderten Statistikansichten kann ein direkter Wechsel zum richtigen Symbol, Konto und Zeitrahmen erfolgen.

Auto-Scrolling für alle Tabellen

Alle Tabellen werden nun bei Überschreiten der Maximalhöhe automatisch in ein Scrollable-Area verändert, so dass sich Daten-Strukturen nicht mehr überschreiben.

2023-01-02

Chart-Daten automatisch aktualisieren für alle Positionen

Für die Stoppkurs-Justierung werden die Chartdaten benötigt in der Datenbank für die nachfolgenden Berechnungen. Diese werden fortan automatisch "geladen" und aktualisiert. Die Stoppkurs-Justierung kann daher fortan automatisch erfolgen. 

2023-01-01

Automatische Stopp-Berechnung

Mittels der 0.97 Percentile wird der Stopp-Kurs automatisch auf den Ziel-Titeln im Zusammenspiel mit den vorhandenen Kursdaten gesetzt. Es wird hierzu die Bewegungen innerhalb der Zeitfenster analysiert auf Basis der High/Low-Bewegungen. Damit ist auch eine Unterscheidung zwischen Long und Short-Trades und der sinnvollen Absicherungs-Level denkbar. Es wird dabei unterstellt, dass High-Bewegungen für Long und Low-Bewegungen für Short relevant sind. Die saubere Unterscheidung im Code erfolgt aber erst nachgelagert.

Damit wird auf folgenden Ebenen eine deutliche Optimierung erreicht:

  • Stoppkurse orientieren sich auf historischen Daten 
  • Stoppkurse sind auf Timeframes optimiert
  • Stopps für Long & Short werden unterschieden

Damit sind die Ziel-Definitionen der Stopp-Level nun auf den aktuellen Daten justiert. Eine automatische Justierung kann dann nachfolgend ebenso erfolgen. 

image.png

Dies basiert dabei auf folgender Betrachtung:

image.png

Technisch musste ich hierfür noch auf MariaDB 10.6 wechseln, damit ich die Percentile-Berechnung nicht selbst als Funktion schreiben muss. Die Berechnungen sind daher sehr übersichtlich abbildbar:

SELECT `st`.`symbol` AS `symbol`,
       `p`.`tf` AS `timeframe`,
       `s`.`stoppOffset` AS `curr_stop`,
       round(`p`.`90er_percentile_high` * `sy`.`tickSize`, 1) AS `rec_stop_long`,
       -1*round(`p`.`90er_percentile_low` * `sy`.`tickSize`, 1) AS `rec_stop_short`,
       `p`.`50er_percentile_high` AS `50p_high`,
       `p`.`80er_percentile_high` AS `80er_high`,
       `p`.`90er_percentile_high` AS `90er_high`,
       `p`.`50er_percentile_low` AS `50er_low`,
       `p`.`80er_percentile_low` AS `80er_low`,
       `p`.`90er_percentile_low` AS `90er_low`,
       round(`st`.min_high,1) AS `min_high`,
       round(`st`.max_high,1) AS `max_high`,
       round(`st`.avg_high,1) AS `avg_high`,
       round(`st`.std_high,1) AS `std_high`,
       round(`st`.min_low,1) AS `min_low`,
       round(`st`.max_low,1) AS `max_low`,
       round(`st`.avg_low,1) AS `avg_low`,
       round(`st`.std_low,1) AS `std_low`
FROM (((
    (SELECT `c`.`symbol` AS `symbol`,
            `c`.`tf` AS `tf`,
            percentile_disc(0.5) within GROUP (ORDER BY round(`c`.`high`, 0) asc) OVER (PARTITION BY `c`.`symbol`,`c`.`tf`) AS `50er_percentile_high`,
            percentile_disc(0.8) within GROUP (ORDER BY round(`c`.`high`, 0) asc) OVER (PARTITION BY `c`.`symbol`,`c`.`tf`) AS `80er_percentile_high`,
            percentile_disc(0.97) within GROUP (ORDER BY round(`c`.`high`, 0) asc) OVER (PARTITION BY `c`.`symbol`,`c`.`tf`) AS `90er_percentile_high`,
            percentile_disc(0.5) within GROUP (ORDER BY round(`c`.`low`, 0) desc) OVER (PARTITION BY `c`.`symbol`,`c`.`tf`) AS `50er_percentile_low`,
            percentile_disc(0.8) within GROUP (ORDER BY round(`c`.`low`, 0) desc) OVER (PARTITION BY `c`.`symbol`,`c`.`tf`) AS `80er_percentile_low`,
            percentile_disc(0.97) within GROUP (ORDER BY round(`c`.`low`, 0) desc) OVER (PARTITION BY `c`.`symbol`,`c`.`tf`) AS `90er_percentile_low`
     FROM `chartdata` `c`) `p`
        JOIN
        (SELECT `chartdata`.`symbol` AS `symbol`,
                min(`chartdata`.`high`) AS `min_high`,
                max(`chartdata`.`high`) AS `max_high`,
                avg(`chartdata`.`high`) AS `avg_high`,
                std(`chartdata`.`high`) AS std_high,
                min(`chartdata`.`low`) AS `min_low`,
                max(`chartdata`.`low`) AS `max_low`,
                avg(`chartdata`.`low`) AS `avg_low`,
                std(`chartdata`.`low`) AS std_low
         FROM `chartdata`
         GROUP BY `chartdata`.`symbol`) `st`)
    JOIN `symbol-setups` `s`)
    JOIN `symbols` `sy`)
WHERE `p`.`symbol` = `st`.`symbol`
  AND `p`.`symbol` = `s`.`symbol`
  AND `p`.`symbol` = `sy`.`symbol`
  AND `p`.`tf` = `s`.`stoppOffSet_targetTF`
GROUP BY `p`.`symbol`,`p`.`tf`,`p`.`50er_percentile_high`,`p`.`80er_percentile_high`,`p`.`90er_percentile_high`,`p`.`50er_percentile_low`,`p`.`80er_percentile_low`,`p`.`90er_percentile_low`,`s`.`stoppOffset`

DB-Mirroring der Chartdaten in verschiedenen Timeframes

Für weitergehende Analysen insb. zur Optimierung des Stopp-Managements sollen die Chartdaten der Trading-Titel importiert werden können. Dies ist nun mit beliebigen Timeframes möglich.

image.png

2022-12-30

Automatisches Stock-Screening für P2-Konto

Da es ohnehin hierfür vorbereitet war, ist nun auch mit dem P2-Konto das zweite Produktions-Konto aktiviert für praktisch erstmal 3 Titel: Microsoft, BionTech & ASML. Es werden automatisch nur LONG-Positionen aufgebaut über die bulls-eye-Strategie. Stopp-Kurse werden automatisch aktiviert bei Start. Das Setup ist auf ein Zeitfenster von 4h im Trading eingestellt, d.h. agiert nicht hypernervös. Positionen werden nicht geshortet (auch wenn möglich).

Die Positionen werden aktuell nur mit Minimalgrößen von jeweils 1x Position aufgebaut für den Anfang. Spätere Anpassungen sind aber wahrscheinlich.

Die Positionen werden auf dem D1/D2-Konto jeweils nicht aktiviert, da hier ausschließlich im Sinne eines "Sparplans" gearbeitet werden soll. Es werden jeweils nur Positionen "dazu" aufgebaut.

image.png

Timeframe anpassbar

Der Chart kann nun beliebig im Zeitfenster angepasst werden. Dies ermöglicht primär auch die Einordnung auf übergeordnete Zeiteinheiten.

image.png

Wirtschaftsindikatoren mit optionaler Erklärung bei MouseOver

Ich kann mir aktuell die genauen Erläuterungen der Wirtschaftsindikatoren noch nicht merken und zeigen deshalb ein Info-Screen an.

image.png

Detail-Informationen für hinterlegte News-Trading-Einstellungen

Die hinterlegten no-Trade-Events können direkt in der Tabelle eingesehen und kontrolliert werden mit den spezifischen Möglichkeiten alle Trades im Zeitraum vor- und nach Veröffentlichung von Wirtschaftsnachrichten zu sperren, High-Volume-Trades auf Low-Volume-Trades umzuwandeln und alle offenen Trades zuvor automatisch zu schließen.

image.png

2022-12-29

Darstellungen im Dashboard optimiert

Doppel-Trades die aber technisch "ausgeblendet" sind, werden nun auch im Chart nicht mehr dargestellt.

image.png

Direkter Wechsel zwischen den Konten

image.png

Produktionskonto für Aktien-Investments/Trades separat eröffnet

Ich möchte gerne parallel aber möglichst nicht von Tagesschwankungen beeinflusst Aktien-Investments vornehmen. Dies sollte auf dem 2. Produktionskonto erfolgen. Das ganze Dashboarding ist so angepasst, dass auch das P2-Konto betrachtet werden kann. Dies ist hier im Normalfall wenig spektakulär.

image.png

Praxis-Lauf

Trades im D2-Simulationskonto (alle Trades ohne Einschränkungen)

image.png

Trades, die im D1-Konto erfolgt sind auf Basis des bisherigen Performance-Verhaltens der Strategie über Aktivierungs-Flags. Diese werden am Wochenende geschaltet.

image.png

Und am Ende des Produktions-Konto mit "Mirror-Trading" auf dem D2-Konto. Damit werden nur Positionen übernommen, die mind. 10€ im Plus gelaufen sind. Dadurch geht natürlich auch Performance verloren, Miss-Trades werden aber ebenso reduziert.

image.png

Wochenanalyse in den Statistiken

Die Tabellen-Elemente können jeweils ein- und ausgeklappt werden. Die Abstände zur Darstellung von sehr vielen Einträgen sind zudem reduziert.

image.png

2022-12-28

Strategie-Setup

Nach 2 Tagen-Erfahrung im Setup habe ich das Setup jetzt so umgestellt, dass es doch 3stufig bleibt d.h.

  • Komplett-Trading auf D2
  • Auf Basis D2-Statistiken Aktivierung von D1-Setups
  • Auf Produktion wird das Mirror-Trading auf Basis der D2-Trades aktiviert

Statistik-Boards

Die Boards zeigen jetzt nicht nur eine visuelle Sicht, sondern auch die zugehörigen Grunddaten in Tabellen an inkl. Min, Max, Avg-Werten. Daneben wird eine Tagesanalyse der Gesamtergebnisse angezeigt. Damit liegen dann alle notwendigen Vergleiche für weitere Analysen vor.

image.png

Die Aktivierung & Deaktivierung von Strategien muss weiterhin über das Backend erfolgen und kann noch nicht über das FE direkt eingegeben werden.

2022-12-25

Copy-Trading

Ich habe lange nach einer Möglichkeit gesucht die verlustreichen Seitwärtsbewegungen als auch die Hoch-Volatilitäts-Trades bei Wirtschaftsnachrichten zu umgehen. Die Idee ist es nun grundsätzlich es gar nicht zu versuchen, aber das Trading zunächst in eine Simulations-Umgebung zu nehmen und erst bei erfolgreicher Durchführung nach einem bestimmten Zeitraum, wird dann die bisher simulierte Position in das Echt-Depot übernommen.

Dies hat zwei Vorteile:

  • Es wird zunächst abgewartet, welche Positionen wirklich ins Plus laufen
  • Es wird nicht mehr zwingend eine wöchentliche Justierung der Strategie-Toggles benötigt, da zunächst alle Strategien laufen und die "erfolgreichen" werden kopiert.

Das Setup wird dabei kombiniert mit der Möglichkeit das Trading anzupassen, wenn High-Impact-Nachrichten vorliegen. Entsprechend wird dann mit einer Vor-und Nachlaufzeit in Minuten zur eigentlichen Veröffentlichung der Daten/Presse-Konferenz das Trading gänzlich eingestellt, alle Positionen zuvor geschlossen und/oder alle Positionen nur mit verringertem Volumen eingegangen. Auf dem Ausgangsdepot bleibt die Position natürlich in voller Höhe.

Die Kernbedingungen für die Übernahme sind konkret:

  • Keine Kalender-Einträge mit vorgegebenen Einschränkungen z.B. zur Deaktivierung von Trades etc. Die Tabelle wird dabei auf Basis von definierten Filtern gegen die vorhandenen Kalender-Einträgen verglichen.

image.png

... im Vergleich zu den Kalender-Einträgen für die Wirtschaftsdaten:

image.png

  • Trades auf dem Konto müssen grundsätzlich ins Plus gelaufen sein mit einem minimalen Profit-Zielwert z.B. 10€ zum Zeitpunkt der Prüfung (aktuell Prüfung alle 5min, evtl. später erst alle 15min). Der genaue Wert muss noch in der Praxis justiert werden.
  • Positionen aus der Simulation haben maximal 60m Zeit ins Plus zu laufen. Danach gilt die Position als irrelevant für eine "Übernahme"

Das Setup ist soweit live und ich bin gespannt, wie es sich in der Praxis verhält.

Weitere Besonderheiten:

  • Alle Aktivitäten werden "mitgeloggt", so dass das Copy-Trading-Setup ein eigenes Monitoring zur Nachvollziehbarkeit besitzt insb. da nicht jede Aktivität sofort zu einem neuen Trade führt.
  • Um die Nachvollziehkarkeit und spätere Zeichen-Objekte anlegen zu können, wird ein "source_account" und "source_xtb_orderID" an der Trade-Tabelle mitgeführt. Damit sind neue Positionen auf Basis von Copy-Trading referenzierbar und sogar im Chart zeichenbar d.h. woher die Position "ursprünglich" erstellt worden ist und mit welchem Zeitversatz und hoffentlich Vorteil die Position dann auch übernommen worden ist.

Thesen:

  • Trotz des Systems kann eine Position jederzeit drehen und dennoch ins Minus laufen. Die ursprünglichen Stopp-Loss-Werte werden daher übernommen und auch die automatischen Stopp-Moves (vstops) sind auch für die Copy-Trades gültig und werden aktiviert.
  • Grundsätzlich sollten alle wahrscheinlich "profitablen" Handelsstrategien genutzt werden. Mittels dem Copy-Trading können dann ohne weiteres die relevanten Positionen übernommen werden. Die wöchentliche Feinjustierung der Aktivierungen und Mid-/Highvolume-Strategien entfällt wahrscheinlich erstmal.
  • Das Setup geht davon aus, dass jedes XTB-Konto als Trading-Quelle dienen kann. Damit ist es auch möglich zunächst D2 für alle Trading-Signale zu verwenden, D1 auf Basis von Wochenergebnisse zu justieren und die Produktion P1 dann auf D1 zu setzen. Ich starte aber erstmal mit D2 direkt.

2022-12-22

Kalender-Anzeige mit anstehenden Wirtschaftsdaten und Forecast/Current-Werten

Mit dem Ziel bestimmte Handels-Events auszusetzen bzw. das Trading in dem Moment automatisch zu justieren, sind jetzt von XTB die Handelskalender synchronisiert und in eigene Datentabellen übernommen, so dass der Algotrader damit arbeiten kann. In der ersten Version sind zunächst die Daten erstmal importiert und automatisch angezeigt.

image.png

Es sind folgende Toggles vorgesehen pro Kalendereintrag. Es kann damit im Vorfeld von anstehenden Handels-Events eine Feinjustierung des Tradings vorgenommen werden ohne manuell einzugreifen. Das Ziel ist tatsächlich keinerlei manuelle Anpassungen oder Aktionen in der Ziel-Ausbaustufe zu haben. Es soll nur noch um Feinjustierung gehen.

  • toggle_deactivate_new_trades
  • toggle_deactivate_high_volume_trades
  • toggle_refresh_stopploss

System heute extrem erfolgreich 

Es laufen 2 Demo-Konten und ein 1x Praxiskonto mit dem System. Betrachte ich das Demokonto, wo ich keinerlei Eingriffe vornehmen, so steht hier ein Tagesergebnis von 5.200€ an.

image.png

image.png

Hier auch nochmals als Zahlenwerte:

image.png

Um den Erfolg zu sehen hier nochmals als Beispiel der US2000-Chart. Es sind die Strategie-Einstiege und Ausstiege, Stoppkurse und Ergebnisse zu sehen. Das System hat dabei sowohl die komplette Short-Welle als auch bereits erste Long-Positionen am Wendepunkt eingegangen.

image.png

System-Trennung zwischen Bridge und App

Um weitere Ausbaustufen sauber durchführen zu können sind die Bridge und die App (Chart-Funktionen und Statistiken) nun voneinander getrennt. Die Entwicklungen können daher unabhängig voneinander erfolgen.

Verknüpfung zwischen App-Dashboard und Statistiken

Zwischen den beiden Kern-Views sind nun Sprünge/Querverweise unter Beibehaltung der Parameter-Einstellungen möglich. Dies erleichtert die Nutzung etwas und erzwingt keine unnötigen Bookmark-Listen.

2022-12-21

Auto-Strategie-Justierung per Script

Es ist jetzt für mich möglich neben der visuellen Darstellung der Strategie-Ergebnisse auch per Script (später wahrscheinlich in die UI integriert) die profitablen Trades für die Produktion zu aktivieren und/oder das High-Volume-Positions-Größen für eine Strategie freizuschalten. Im System unterscheide ich weiterhin zwischen Normal und High-Volume-Strategien, insb. um noch zwischen Simulation und Produktion eine Zwischenstufe zu haben:

UPDATE `strategy-toggle` s
LEFT JOIN (SELECT SUM(v.norm_profit) as sum_profit, AVG(v.norm_profit) AS avg_profit, MIN(strategy) AS strategy, MIN(symbol) AS symbol FROM strategy_results_view v 
 WHERE v.`TYPE`='D2' 
   AND v.exit_time>="2022-12-18" 
 GROUP BY strategy, symbol) jt 
    ON s.strategy=jt.strategy AND s.symbol=jt.symbol
   SET s.activate_p1=
	      CASE
	          WHEN jt.avg_profit > 50 OR s.strategy='vstop' THEN 1
	          ELSE 0
	      END,
        s.activate_high_volume=
	      CASE
	          WHEN jt.sum_profit > 100 THEN 1
	          ELSE 0
	      END

Für den Vergleich wird dabei nicht das 1:1 Volumen verwendet, sondern eine normalisierte Profit-Variante. Dies dient dem Abgleich, wenn auch auf einem Demokonto zunächst nur die normale Volume-Positionierung verwendet worden ist. Dies ist dann aber nicht vergleichbar mit den anderen Strategien die vielleicht schon auf High-Volume laufen. 

Daten-Synchronisation zwischen XTB und TradingView

Die Datentabellen werden jetzt statt in 3s in 0.3s abgeglichen. Ich habe die bisherigen Statements für mich zusammengeführt in einer Routine.

 -- update xtb-trade-comments with help of orginal tradingview-trades

 UPDATE `xtb-trades` xt
 JOIN (SELECT CONCAT(strategy, ": ", symbol, ": ", timeframe, "m") AS COMMENT, 
              `create`, 
				  `symbol`, 
				  `strategy`, 
				  `account`, 
				  `xtb_orderid`,
				  `cmd`,
				  `timeframe` FROM `trades`) t
   ON (xt.comment='[S/L]' OR xt.comment IS NULL OR xt.comment='' or xt.xtb_orderid='')
  AND xt.symbol=t.symbol 
  AND TIMESTAMPDIFF(SECOND, t.`create`, xt.entry_time) BETWEEN -10 AND 10
  AND t.strategy<>'vstop' AND t.account=xt.account
  SET xt.comment = t.comment,
      xt.strategy = t.strategy,
      xt.xtb_orderid= t.xtb_orderid,
		xt.cmd = t.cmd,		
		xt.manual_stop =
		CASE
	          WHEN xt.manual_stop THEN 1
	          ELSE 0
      END;   

2022-12-20

Box-Plot-Diagramme eingeführt

Ich kann so für alle aktuell konfigurierten und laufenden Strategien nicht nur ein Min-Max-Media-Betrachtung, sondern auch einer Percentile-Betrachtung der Datenverteilung der Tagesergebnisse vornehmen. Jeder Datenpunkt ist damit das Trading-Ergebnis innerhalb einer Strategie.

image.png

Quelle: Chat-GPT :)

Ein Boxplot, auch als Box-and-Whisker-Diagramm bezeichnet, ist ein Diagramm, das verwendet wird, um die Verteilung von Daten zu visualisieren. Es besteht aus einer Box, die die obere und untere Quartile des Datensatzes darstellt, sowie Linien, die als "Whisker" bezeichnet werden, die die Spannweite der Daten darstellen.

Hier ist eine Anleitung, wie Sie ein Boxplot-Diagramm lesen können:

  1. Die Box selbst repräsentiert den Bereich, in dem die Hälfte der Daten liegt. Der obere Rand der Box gibt das obere Quartil an, während der untere Rand das untere Quartil darstellt. Die Linie in der Mitte der Box wird als Median bezeichnet und gibt den Wert an, der genau in der Mitte des Datensatzes liegt.

  2. Die Linien, die als "Whisker" bezeichnet werden, zeigen die Spannweite der restlichen Daten an. Sie reichen von dem niedrigsten Wert, der nicht als Ausreißer gilt, bis zum höchsten Wert, der nicht als Ausreißer gilt.

  3. Ausreißer werden als einzelne Punkte dargestellt und liegen außerhalb der Whisker. Sie können verwendet werden, um extreme Werte im Datensatz zu identifizieren.

  4. Vergleichen Sie die Boxplots verschiedener Gruppen, um Unterschiede in der Verteilung der Daten zu erkennen. Wenn die Boxen unterschiedlich breit sind, kann dies darauf hinweisen, dass die Daten in einer Gruppe stärker verbreitet sind als in einer anderen. Wenn die Boxen unterschiedlich hoch sind, kann dies darauf hinweisen, dass die Werte in einer Gruppe im Durchschnitt höher oder niedriger sind als in einer anderen.

2022-12-18

Umstellung der Entwicklungsumgebung

Eigentlich wollte ich mit dem Setup nur spielen. Mittlerweile ist die Codebasis aber bereits größer geworden, so dass ich intern auf eine IntelliJ-IDE umgestellt habe. Damit läuft die VCS, Deployment, Debugging, Datenbank-Mgmt, Entwicklung, SSH-Console an einer Stelle zusammen.

Ich habe zuvor HandsOn mit UltraEdit gearbeitet, was auch bereits Code-Folding, SSH und Deployment-Features mitbringt.

Persistierung der Strategie-Setups

Die bisherige einfache README für alle Konfigurations-Setups für die Strategien, die so in TradingView hinterlegt werden müssen, damit die Bridge korrekt arbeitet, ist nun strukturiert abgelegt.

image.png

2022-12-12

Automatisch nachlaufende Stopps (vStopps) über Volatilitäts-Indikatoren

image.png

  • Aktivierung der vStops kann bereits mit 0.2% Change erfolgen

Ableitungen:

  • Aktivierungslevel in TradingView angepasst
  • Im Trading-Chart werden die Stopp-Level gezeichnet und nachgeführt

Annotations endlich direkt im Chart mit den Strategie-Details zu den Einstiegszeitpunkten

image.png

Ich habe endlich eine Möglichkeit gefunden in den D3-Charts auch Annotations zu platzieren und über eine einfachen Positionierungsmechanismus bei mehreren Trade-Einstiegen zu einem Zeitpunkt kollisionsfreie Darstellungen zu ermöglichen. Dies erleichtert das Lesen und Arbeiten mit dem Trading-Setup enorm.

Der Code erklärt hier schneller den Aufbau als längerer Text. Hier für mich auch einmal als Zwischenversion (auch wenn der Code ohnehin in einer Versionsverwaltung steht):

$data .= '{
             note: {
                label: "'.($trade->cmd==0?'long':'short').',vol:' . $trade->trade_volume .($trade->calculated_profit<>0?', '.number_format($trade->calculated_profit,1).'€':''). '",
                title: "' . $trade->strategy. '",
                fontSize: 9,
                wrap: 300
              },
              connector: {
                 end: "dot",        
                 type: "line",      
                 lineType : "vertical",    
                 endScale: 10
              },
              color: ["' . ($trade->calculated_profit> 0 ? 'green' : ($trade->calculated_profit< 0 ?'red':'black')) . '"],
              x: x(parseDate("' . $trade->create . '")),
              y: y(' . $trade->price . '),
              dy: ' . ($trade->cmd == 0 ? 85 : -35) . ',
              dx: ' . ($trade->cmd == 0 ? $distance+20: $distance) . '
          }, ';

2022-12-10

Erste Tests von neuen automatischen Stopp-Modellen

  • Trailing-Stopps sind gut um bei schwankenden Märkten hier schnell ins Plus zu laufen. Sie verhindern bei einem normalen Setup aber wirkliche Gewinne
  • Manuelle Trading-Setups sollten vermieden werden
  • Trading-Größe ist unter Umständen den Marktgegebenheiten/Volatilität anzupassen

Ableitungen:

  • Einführung von neuen vStopp-Alerts
  • Nutzung ausschließlich von normalen Initial-Stopps
  • Alle Trading-Setups sind auf Mid-Chance-Volume umgestellt
  • Versuch keine manuellen Trades durchzuführen, da diese und letzte Woche empfindlich schlecht dadurch gelaufen sind