Bitcoin

Das weiss man erst danach, das einzige was sicher ist, ist dass der Preis auf der rechten Seite des Charts sein wird.

Was ist denn „alles“?
Cryptos sehen imo immer noch okay aus, aber ich kenne mich ja nicht aus mit Cryptos…

Hmja, ich denke, dass man da den Blick etwas schärfen muss, aber recht schnell die wichtigen Infos rausziehen kann (ich kenne die Candlestick-Darstellung ja als BoxPlot, aber das hängt wohl vom Kontext ab).

Das ist ja die Frage, bei der auch die (bereits subtil kritisierte) Beliebigkeit mit reinkommt. Jedes Ergebnis ist ja „streng durch die (implementierten) Regeln“ begründet. Wenn du dann von „zuverlässig“ redest, muss ich provozieren:

public static boolean containsHeadShoulderPattern(TimeSeries<Long, Double> timeSeries) {
    ...
}

Ja, wie macht man das denn „zuverlässig“? :smiley:

Sicher, man könnte das „V“ (also, die erste Hälfte von dem „W“) im Chart aus dem letzten Bild an etlichen Stellen finden, aber … da was draus zu schließen erscheint mir immer noch suspekt. Natürlich, man kann über Wahrscheinlichkeiten reden, aber … das kann man beim Lotto auch…der Punkt ist: Wenn Powell da „etwas anderes“ gesagt hätte, wäre es dort vielleicht entsprechend nach oben gegangen, und deine mühsam eingezeichnete „Top-Line“ halt „durchbrochen“ worden :confused: Aber am Ende ist das ja egal: Wenn’s „funktioniert“ ist’s ja gut.

Mein Nachfragen bezog sich ja genau darauf, warum etwas „normalerweise“ korreliertes denn bei einer (hypothetischen) konzertierten Aktion gegen ein Asset immernoch korrelieren sollte. (Außer natürlich weil Leute sehen, dass Silber hochgeht, dann annehmen, dass dann auch das korrelierte hochgeht, das deswegen kaufen, und dann… das korrelierte hochgeht :roll_eyes: - tja…).

(Übrigens taucht im Zusammenhang mit Silver-Shorts immer wieder JPMorgan auf. Die waren oder sind wohl welche, die gezielt Silber manipulieren. Zumindest wird/wurde das in den einschlägigen Foren immer wieder mal so gesagt…)

Vielleicht sollte ich meinen letzten Punkt noch als konkrete Frage formulieren (ich könnte ja versuchen zu googlen, aber…) : Werden bei der TA auch manchmal zeitlich versetzte und/oder zeitlich skalierte Kausalitäten analsyiert?

Die sehen aehnlich aus, BoxPlots haben das high (max) und low (max), aber open (preis bei „Eroeffnung“ der Kerze, also anfangspreis) und close (letzter preis), BoxPlots haben ja stattdessen median etc.
Einige Candle patterns basieren auf der relation zwischen open und close (und manchmal high/low), zB. das Doji.

Stelle ich mir sehr schwierig beim H&S vor, hat finviz zB auch nicht wirklich hinbekommen, H&S ist IMO kein guter Kanditat zur autom. Erkennung und wird wie gesagt die meistens nur zur Aufwertung von Charts gemacht die dann visuell inspiziert werden, also da guckt jemand dann drauf, ist nicht so dass ein Algo dann ploetzlich kauft/verkauft.
Die H&S/inversen H&S die ich mal gespielt hatte waren offensichtliche Kandidaten, aber sind nicht haeufig bei den Indizes, es gab aber andere Signale die auch auf einen Absturz hinwiesen.

Eine durchbrochene Toplinie (ist ja nur eine Frage der Zeit) liefert einem auch Informationen, naemlich das Kaeufer staerke zeigen. Diese Referenzpunkte/Bereiche haben ja den Zweck der „Orientierung“.

Haette Powell was anderes gesagt, haette der Merkt etwas anderes gemacht? Das weiss man nicht, was man aber sehen kann ist ob der Preis im unteren Randbereich genug Kaeufer gefunden haette, also wieder nach oben gegangen ist, oder ob Kaeufer soz. „ueberrollt“ wurden von Verkaeufern.

Es stellt eine Art Anomalie dar wenn eine Korrelation die eigentlich immer da ist ploetzlich nicht mehr da ist wenn ein Asset einen extremen Move macht, man kann dann schon versuchen rauszufinden was das verursacht haben koennte (News, Fundamentale Dinge etc.). In diesem Falle war das einzige was ich gefunden hatte „WSB is gonna squeeze silver“ und dann mache ich da nix, d.h. weder long noch short.

JPM ist auch long Silber (also deren long Positionen sind um vieles groesser), die wurden dabei ertappt das sie seit sehr langer Zeit die Preise durch sog. Spoofing manipulierten, also liquiditaet vortaeuschten wo keine war um den Preis in eine Richtung zu schieben.
Uebrigens werden Edelmetalle hauptsaechlich in London gehandelt.

Vielleicht, weiss ich ehrlich gesagt nicht genau.

Hab zB. schon von jemandem gehoert dass er im SP1500 eine Aktie gefunden hat die in 7/8 Faellen ca. 5 Sekunden vor dem SP500 reagiert hat, aber ob das immer noch so ist?

Der „Markt“ an sich ist ja recht gross, das Wetter in Brasilien hat bestimmt verzoegerte Auswirkungen auf den Preis von Kaffee, dann gibt es ja Derivate wie zB. Futures (Hebelzertifikate) und Optionen die haben Termine/Verfallsdaten, da macht sich der Markt seinen eigenen extra Zyklus.

Das ist aber alles nix fuer TA sondern eher etwas fuer Quants und Fundamentalisten :wink:

Falls vielleicht jemand gerade auf der Suche ist, es gibt eine Java Library für TAs:
https://ta4j.github.io/ta4j-wiki/Getting-started.html

Es beinhaltet mehr als 130 technische Indikatoren.

Beispiel:

	// Creating a time series (from any provider: CSV, web service, etc.)
	BarSeries series = new BaseBarSeriesBuilder().withName(name + "_Stock").build();
	List<Candlestick> bars = client1.getCandlestickBars(name + pair, CandlestickInterval.FIVE_MINUTES);
	for (Candlestick c : bars) {
		ZonedDateTime endTime = ZonedDateTime.ofInstant(Instant.ofEpochMilli(c.getCloseTime()), ZoneId.systemDefault());
		series.addBar(endTime, c.getOpen(), c.getHigh(), c.getLow(), c.getClose());
	}
	ClosePriceIndicator closePrice = new ClosePriceIndicator(series);
	SMAIndicator shortSma = new SMAIndicator(closePrice, 5);
	SMAIndicator longSma = new SMAIndicator(closePrice, 30);
	Rule buyingRule = new CrossedUpIndicatorRule(shortSma, longSma);
	Rule sellingRule = new CrossedDownIndicatorRule(shortSma, longSma);
	RSIIndicator rsiIndicator = new RSIIndicator(closePrice, series.getBarCount());
	double rsi = rsiIndicator.getValue(499).doubleValue();

So werden zwei Signale berechnet, nämlich, ob der 5-Minuten-SMA den 30-Minuten-SMA kreuzt und den RSI.

Ja, TA libs fuer Java gibt es die eine oder andere und die meisten sind verstaubt.

In diesem Bereich haben sich seit ein paar Jahren andere Sprachen etabliert, zB. R, aber vor allem Python, die pandas Bibliothek ist da sehr hilfreif, da gibt es IMO zuviele TA libs…

Das Bespiel dass du da geposted hast ist IMO schon relativ realistisch (aber sicher nicht profitabel), diese lib macht anscheinend noch mehr als nur Analyse, die Rules sehen schon ganz gut aus IMO, Broker wie zB. IBKR haben eine API um zu traden, die kann man ansteuern mit seinem Code.
Allerdings sind die gezeigten Signale leider nicht sehr profitabel, muessen sie ja nicht sein als Beispiel :wink:

Grundsaetzlich tested man seine Signale/Algos/etc., das sog. BackTesting, auch da gibt es verschiedene Ansaetze, bis hin zu WebSeiten denen man seine Regeln vorgibt und die rechnen dann durch ob die Profitabel gewesen waeren, natuerlich mit idealisierten Rahmenbedingungen („perfect fill“ etc.), was die Webseiten allerdings mit Regeln machen die profitabel sind kann sich jeder selber denken :wink:

Man hat da immer Probleme mit „Overfitting“.

Was mich persoenlich anfangs sehr ueberrascht hat war dass es in diesem Bereich zwar OSS gibt, aber keiner willens ist profitable Regeln zu teilen, was sich dann aber recht schnell von selber erklaert, sein sog. „Alpha“ will jeder schuetzen, und wie weiter oben bereits erwaehnt hoeren viele diese Signale irgendwann mal ploetzlich auf zu funktionieren.

Das ist ja schon eine Aggregation, die man irgendwie rechtfertigen müßte. Wenn dort auf der verlinkten Seite von „open/close“ die Rede ist, ist das ja mindestens eine Tages-Aggregation (könnte auch länger sein), und flapsig gesagt ist das einzige, was dann über einen LineChart hinausgeht gerade die senkrechte Linie, die ~„die Volatilität an diesem Tag“ beschreibt.

Ich hatte ja von einer TimeSeries<Long,Double> geredet, weil (ich zuletzt wieder am - inzwischen privaten TimeSeries - Libraries für Zeitserien weitergebastelt hatte, und) das (meinetwegen auch als TimeSeries<OffsetDateTime, BigDecimal>) die „feingranularste“ Darstellung ist, die es gibt. Deswegen hat mich auch gewundert, dass z.B. bei der „ta4j“-Lib diese Aggregation schon festgetackert zu sein scheint, und es da von vornherein nur eine BarSeries gibt (inklusive solcher Spezialsachen wie Bar#isBullish… na gut :confused: - ist schon klar, dass das auf die Domäne ausgerichtet ist - mit Generizität macht man sich nur das Leben schwer… ).

Die „Manipulation“, von der da geredet wird/wurde, ist/war ein großes Thema - auch im Hinblick darauf, dass sie z.B. immer kurz vor dem London-Fixing die Preise gedrückt haben. Und … die Charts hatte ich mir mal angesehen, und ~„das sah wirklich so aus“, aber natürlich bin ich nicht tief genug drin, um da „die wahren Ursachen“ zu erkennen…

Deswegen war die Frage auf TA ausgerichtet, und eben nicht auf „TA, wo man noch einen Haufen Weltwissen mit reinstecken muss, damit es funktioniert“, sondern auf das, was man mit „dummer, domänen-unspezifischer Statistik“ aus einer großen Datenbasis ableiten könnte. Ich suche doch nur eine Möglichket, ohne Arbeit schnell reich zu werden - ist das zu viel verlangt?!? :cry: :smiley:

Die Rechtfertigung fuer die sog. OHCL Werte ist wie sie interpretiert werden.
Investopedia ist nett fuer einen kurzen Ueberblick, aber sehr tief geht es da nicht.
Als Alternative zur Candlesticks gibt es ja die OHCL Bars.

Die „senkrechte Linie“ ist nicht der einzige Unterschied und es geht gar nicht um Volatilität dabei.
OHCL oder Candlesticks wenn man versuchen moechte rauszulesen wie die interaktion zwischen Kaeufern und Verkaeufern verlief, da ist es nuetzlich zu sehen wo der open, das low und der close war um das dann zu beurteilen (versuchen). Interessanterweise sind viele nuetzliche Details in den echten extremen zu finden, aber auch dort wo der Preis oeffnet und schliesst.
Man sieht das recht schnell dass das meiste Volumen (>85%) in den ersten und letzten 30 Minuten einer Session stattfinden, speziell die allerletzte Minute ist meist da wo am meisten passiert.
Hier mal ein ganz typisches Beispiel, SP500 Futures, traden 23 Stunden am Tag:
https://i.imgur.com/L4Forlj.png
wenn du unten auf das Volumen guckst (rote und gruene Balken), erkennt man eigentlich sehr deutlich wann der Markt oeffnet (9:30) und wann er schliesst (16:00).
Mit dem open und close kann ich die jetztige Kerze leicht in Relation zu der vorherigen setzen (also zu deren high/low/open/close).

Kurz: Linecharts nimmt man wenn die Praezision egal ist oder man nicht vorhat TA zu betreiben bzw. man auf viele Werte verzichten will. Fuer Durchschnittswerte nimmt man zB. MA in der einen anderen Form in charts. BoxPlots habe ich genutzt um die „seasonality“ der Wochentage darzustellen, weil da die Praezision nicht so wichtig war und es um Mittelwerte ging, da macht es auch keinen Sinn Stimmung bzw. interaktionen zwischen Kaeufern und Verkaeufern zu untersuchen.

Ja das ist eigentlich die Norm in diesem Bereich, und generisch wollten die das sowieso nicht loesen, wozu auch wenn es um Assetpreise geht?
Genaugenommen machen die meisten libs IMO den „Fehler“ floats einzusetzen, einige Datenlieferanten allerdings nutzten ints und dann sowas wie einen Faktor um dann den Preis zur Darstellung anzupassen.
So naiv das "isBullish/isBearish auch sein mag, es zeigt worum es dabei geht, den Versuch zu interpretieren was da passiert ist.

:smiley:
Das ist ganz einfach: Kaufe das was hoch gehen wird, verkaufe das was runtergehen wird, nicht umgekehrt!!!

Ansonsten hat Python und R einen riesen Vorsprung was Timeseries Analyse betrifft, scheint wohl einfacher zu implemetieren zu sein in dynamischen Sprachen , also Python pandas/dataframes fuer Java scheint es die eine oder andre zu geben aber keine kommt auch nur annaeherend an echte Dataframes ran: https://medium.com/@thijser/doing-cool-data-science-in-java-how-3-dataframe-libraries-stack-up-5e6ccb7b437

mal was anderes, jemand sagt zu Musk am 20. Dezember „kaufe doch mal Bitcoin, man koennte den den Preis erhoehen“, Musk fragt noch „kann man soviel kaufen?“ und schwupps, jetzt kauft TSLA fuer 1.5 Milliarden US Dollar BTC… hm ja… alles total normal…

https://twitter.com/elonmusk/status/1340678358456274948

Edit:
Auch dazu noch ein Kommentar aus einem subreddit

You know you’re near the top when speculative companies are investing all the money they don’t have into even more speculative assets all while both are getting pumped.

Eh, meine „Semi Scalping Trading Strategy“ scheint total dumm zu sein, ober bei Cryptos nicht zu greifen…

Hier mal ein Beispiel anhand von LTC:

BarSeries series = new BaseBarSeriesBuilder().withName("LTC" + "_Stock").build();
List<Candlestick> bars = client1.getCandlestickBars("LTC" + pair, CandlestickInterval.FIVE_MINUTES);
for (Candlestick c : bars) {
	ZonedDateTime endTime = ZonedDateTime.ofInstant(Instant.ofEpochMilli(c.getCloseTime()), ZoneId.systemDefault());
	series.addBar(endTime, c.getOpen(), c.getHigh(), c.getLow(), c.getClose());
}
ClosePriceIndicator closePrice = new ClosePriceIndicator(series);
SMAIndicator shortSma = new SMAIndicator(closePrice, 5);
SMAIndicator longSma = new SMAIndicator(closePrice, 30);
RSIIndicator rsiIndicator = new RSIIndicator(closePrice, series.getBarCount());
Rule buyingRule = new CrossedUpIndicatorRule(shortSma, longSma).or(new CrossedDownIndicatorRule(rsiIndicator, 48));
Rule sellingRule = new CrossedDownIndicatorRule(shortSma, longSma).or(new CrossedUpIndicatorRule(rsiIndicator, 53));
Strategy strategy = new BaseStrategy(buyingRule, sellingRule);

// Running our juicy trading strategy...
BarSeriesManager manager = new BarSeriesManager(series);
TradingRecord tradingRecord = manager.run(strategy);
System.out.println("Number of trades for our strategy: " + tradingRecord.getTradeCount());

// Getting the profitable trades ratio
AnalysisCriterion profitTradesRatio = new AverageProfitableTradesCriterion();
System.out.println("Profitable trades ratio: " + profitTradesRatio.calculate(series, tradingRecord));
// Getting the reward-risk ratio
AnalysisCriterion rewardRiskRatio = new RewardRiskRatioCriterion();
System.out.println("Reward-risk ratio: " + rewardRiskRatio.calculate(series, tradingRecord));

// Total profit of our strategy
// vs total profit of a buy-and-hold strategy
AnalysisCriterion vsBuyAndHold = new VersusBuyAndHoldCriterion(new TotalProfitCriterion());
System.out.println("Our profit vs buy-and-hold profit: " + vsBuyAndHold.calculate(series, tradingRecord));
Number of trades for our strategy: 9
Profitable trades ratio: 0.333
Reward-risk ratio: 18.867
Our profit vs buy-and-hold profit: 0.995

D. h., mit meiner tollen Strategie hätte 0,5 % weniger erzielt als bei Buy-and-Hold (kaufen und halten)…


Okay, nun bin ich an dem Punkt, an dem ich ohne gute Literatur nicht weiterkomme :man_shrugging:

Das hab ich gerade vor. Aber ich würden „den Markt beobachten“ nicht als nicht arbeiten bezeichnen… :slight_smile:

Gute Sache dass du das rausgefunden hast ohne Geld dabei zu verlieren!

Ja, das hilft immer.
Man laesst sich oft ja viel zu einfach mitreissen wenn Euphorie am Markt ausbricht, da hilft es eine klare Strategy zu haben.

Ich selber nutze keine oder kaum MAs (150 EMA auf 1 minuten Candles bzw. EMA 8 auf 15 Minuten candles finde ich allerdings interessant).
Scalping an sich wird oft als „mean reversion“ strategy betrieben, d.h. wenn es „so aussieht“ als ob der Preis gerade zu hoch oder zu tief ist, sollte er zu einem Mittel zurueckkehren.
Das funzt super in Situation wo der Markt in Balance ist, also keinen richtigen Trend hat sondern „seitwaerts“ geht.

VWAP finde ich gut fuer intraday scalps, ist aber Geschmackssache, wie gesagt, wenn der Market am trenden ist funktioniert mean reversion nicht weil sie nicht stattfindet.

BTCUSD mit VWAP
Da sieht man IMO auch gleich welche tage balancing waren und dass der letzte jetzt einen up trend hat.
https://i.imgur.com/ZJwuwuD.png

Die orange Linie ist VWAP, „Volume Weighted Average Price“, das ist ein Durchschnittswert, die anderen Linien sind verschiedene quadratische(?) Standardabweichungen.
Hier hatte jemand mal seine Strategie damit erklaert:
https://www.reddit.com/r/thewallstreet/comments/9pbmqh/church_of_vwap/

Hab’ die oben gepostete Strategie mal auf die Beispieldaten angewendet, wie man bei ta4j mit CsvTradesLoader.loadBitstampSeries() laden kann (wohl irgendwelche Bitcoin-daten?). Das Ergebnis war damit:

Number of trades for our strategy: 47
Profitable trades ratio: 0.46808510638297872340425531914894
Reward-risk ratio: 15.828734368693850667627483488894
Our profit vs buy-and-hold profit: 0.96175962928312784381597624186564
Result 1.1913178792980095672314448426829

Der oben schonmal beschriebenen Ansatz mit genetischer Programmierung, nur auf diese feste (!) Regelstruktur angewendet, scheint das zu verbessern:

TradingAllele [shortBarCount=6, longBarCount=37, crossedDownThreshold=54, crossedUpThreshold=44, type=DOWN_RSI]
TradingAllele [shortBarCount=5, longBarCount=34, crossedDownThreshold=34, crossedUpThreshold=56, type=DOWN_SMA]
TradingAllele [shortBarCount=5, longBarCount=21, crossedDownThreshold=57, crossedUpThreshold=45, type=UP_RSI]
TradingAllele [shortBarCount=2, longBarCount=39, crossedDownThreshold=54, crossedUpThreshold=47, type=UP_RSI]
Number of trades for our strategy: 22
Profitable trades ratio: 1
Reward-risk ratio: 22.605616441230114016829363346754
Our profit vs buy-and-hold profit: 1.3702584331093835227822792268462
Result 1.6973194974287342086292584595404

Oh jeh. Da könnte man so viel Zeit reinstecken.

Laut Code wird diese Datei geladen: ta4j/ta4j-examples/src/main/resources/bitstamp_trades_from_20131125_usd.csv at master · ta4j/ta4j · GitHub

Sind alte Bitcoindaten (1 Woche, Ende November bis Anfang Dezember 2013), sollte aber nicht schwer sein aktuelle zu bekommen, zB. Bitstamp Data

Trade ja selber nicht mit Algos und weiss auch nicht wirklich was darueber, aber was mir so ins Auge steht bei der genetischen Variante ist das weniger als halb soviele trades gemacht wurden und gleichzeitig Profit. Was seltsam wirkt ist die Profitable trades ratio von „1“, jeder Trade ein Gewinner und die R/R ist 22, IMO liegt das an den wenigen Daten.

Hehehe…

Vielen Dank maki :wink: Leben gerettet :smiley:

@Marco13 Wenn du noch bei keinem „Broker“ bist, der eine API anbietet, dann:
https://www.coingecko.com/de/api#explore-api

Es gibt auch eine Java Wrapper Lib dafür, die hat bei mir aber nicht so gut funktioniert…

Irgendwie komm’ ich hier nicht hinterher, da ist noch eine Antwort pending, aber kurz:

Ich hab’ das nur schnell und planlos hingepfuscht, was man schon daran erkennt, dass ich nichtmal genau wußte, welche Daten dahinter liegen. Hab’ einfach das aus einem Sample übernommen, weil ich mich nicht noch mit Datenquellen und Loadern befassen wollte. Aber IIRC waren das schon >4MB CSV, also nicht sooo wenige…

Und was die Messgrößen angeht: Ich hab’ (natürlich) auch (noch?) nicht reingeschaut, was er da eigentlich berechnet. Ich wollte nur mal schauen, ob man da ~„grundsätzlich irgenwdas machen könnte“. Und naiv (von meinen damaligen Experimenten ausgehend) dachte ich dann: „Ich erstell’ einfach zufällige Regeln mit zufälligen Indikatoren … was gibt’s denn da so … Indicator, all known implementing classes :astonished:… äh…ja, gut, dann wackel’ ich halt nur an den numerischen Werten rum, aus dem, was in dem Beispiel vorkam“.

(Bei den Experimenten damals hatte ich das aber auch klar trennbar gemacht: 1. Einmal eine „strukturelle“ Optimierung mit dem GA, wo ein „guter Term“ mit „passablen Regeln/Bedingungen“ rauskommt, und 2. das rein numerische Rumwackeln an den Zahlen, die da drin vorkommen, was dann (bei fester Term-Struktur) mit einem beliebigen Apache MultivariateOptimizer gemacht werden konnte).

Aber … schon die Frage, was man als Optimierungkriterium für den Genetischen Algo nimmt, könnte ja interessant sein: TotalProfitCriterion - joa, klingt gut, nehm’wer das halt mal. Etwas anderes wäre vielleicht sinnvoller…

Wie gesagt: Das ist nur schnell hingehackt. Aber… vielleicht schau’ ich da nochmal genauer.

(Ich werde ohne Arbeit reich werden! Und wenn ich dafür die nächsten Jahre Tag und Nacht arbei… … ach, vergesst’s :crazy_face: )

Nur damit ich das richtig verstehe, DU hast den TradingAllele geschrieben?
Oh wow…

Indikatoren koennte man in verschiedene Kategorien einteilen, Trend, Momentum usw.
Jeder Indikator bezieht meist auf einen Zeitraum und hat einen „lag“, man kann dieselben Indikatoren (oder mit aehnlichen/angepassten Bedingungen) auf verschiedene Zeiraeume anwenden, analysieren und dann die Ergebnisse vergleichen.

Als Beispiel waere da zB. RSI overbought condition, diese wird sich eventuell in hoere Zeitraeume (zB. zuerst auf 30, dann 60 und 120 Minuten) durchpropagiert, bis der Markt wieder umdreht oder seitwaerts geht und „abkuehlt“.

Verschiedene Assets verhalten sich da sehr unterschiedlich, BTC zB. kann extrem stark trenden (macht er gerade jetzt wieder) und diese overbought condition/trend kann sehr lange anhalten (Tage Wochen), auch nimmt man andere Filter fuer overbought und oversold (oft sieht man bei BTC 90/10 anstatt 70/30 wie zB. beim SP500).

Sorry, das geübte Auge sieht natürlich schnell, dass da noch ein , c.getVolume() fehlt, deshalb konnten einige Indikatoren auch nicht funktionieren…

Bis morgen!

zu den Testdaten, hab mir das mal angesehen und markiert mit dem lila Viereck

Sieht jetzt nicht wirklich typisch/represaentativ aus, starker uptrend, das erklaert wohl auch warum es so schwierig besser abzuschneiden mit scalping als einfach auf long zu gehen.

Bitcoin wird wohl in Richtung 50k $ marschieren, macht euch auf den Weltuntergang gefasst. :joy:

Und Danke @ Mr Musk, mein Portfolio entwickelt sich gut. :wink:

Ja, ich könnte mir vorstellen, dass man da (allgemein) periodische Daten reinpackt, z.B. mit 7 oder 12 BoxPlots, in denen man (irgendwie „normalsiert“ - vielleicht einfach „als Prozent“…) die aggregierten Verläufe von 100 Wochen/Jahren reinpackt, und man dann z.B. sieht „Mittwochs geht’s runter, Donnerstags schwankt es stark“ oder so.

Einige der in diesem Artikel verlinkten Libs hatte ich schonmal gesehen, u.A. weil ich ja bei meinem (inzwischen auch privaten) Data - Libraries für Datenverarbeitung etwas gebastelt habe, was zumindest verwandt dazu ist - wenn auch nicht mit dem erklärten Ziel, „was zu machen, was so einfach ist, wie ein dataframe“.

Allgemein bietet Python zwar viel, aber das einfache Prototyping erkauft man sich halt mit anderen Dingen - und mir ist der Preis etwas zu hoch. (Subjektiv: Wackelige Versionen/Kompatibilitäten (bzw. wenig „Stabilität“ in diesem Sinne), die fehlende Typsicherheit, und wenn ich die Signaturen von einigen scipy/numpy-Funktionen sehe, rollen sich mir die Fußägel hoch).

Was ich halt immer toll finde, ist was „visuell-interaktives“. Z.B. hatte ich kürzlich meine „TimeSeries“ mit meinem Flow-based-programming-Ding (was nicht privat ist…) verwurstet, um z.B. mal schauen zu können, was passiert, wenn man bei einer „verrauschten“ Time Series das Rauschen stärker oder ein MovingAverage breiter macht, indem man einfach an den JSpinnern zieht:

Ich finde, damit bekommt man ein viel besseres Gefühl dafür, was ein bestimmter Operator (im Datenfluss, der in der „Overview“ zu sehen ist) für Auswirkungen auf das Endergebnis hat…

Das Rote ist übrigens das Ergebnis der Berechnung von „perceptually important points“ (websuche), was anscheinend oft für „Pattern Recognition in Time Series“ verwendet wird. (Wenn man die einfach „runterimplementiert“, wie sie im Paper stehen, kann das Berechnen von 100 PIPs bei 100000 Datenpunkten schonmal 30 Sekunden dauern. Wenn man’s „richtig“ macht, sind’s dann halt nur 100 Millisekunden. D.h. das kann man auch interaktiv machen…).

Ja, das „TradingAllele“ wäre eben ein „atomarer Building Block einer Regel“. Die ganzen Begriffe/Beispiele, die du da benennst, kann ich so halt erstmal nicht einordnen. Ich hatte jetzt im wesentlichen das gegebene Beispiel verwendet. Dabei hatte ich schon ~„ein paar, wenige“ weitere Formen unterstützt, so dass die Regeln am Ende sowas sein könnten wie

CrossedUp(shortSma(12), longSma(34)) OR CrossedDown(rsi(56))
CrossedUp(rsi(23)) OR CrossedUp(shortSma(45), longSma(123)
CrossedDown(rsi(23)) OR CrossedDown(shortSma(45), longSma(123)
...

Aber die „Schwierigkeit“ (oder das, wo man die ganze Arbeit reinstecken könnte) wäre eben, dort sinnvoll andere Indikatoren zu erlauben. (Noch schwieriger wäre, nicht nur OR sondern auch AND und NOT zu erlauben, aber das kriegt man hin).

Ein Ziel könnte halt sein, dass man versucht, „gute“ Regeln zu finden, ohne zu viel Aufwand und Domänenwissen reinstecken zu müssen. Im Sinne von: „Generier’ mir mal 10 Regeln, die ‚gut‘ sind, und ich schau mir die dann in einem zweiten Schritt, als ‚Validierung‘, an, und beurteile (als Mensch) ob sie ‚sinnvoll‘ sind oder eine Mischung aus Glückstreffern und Overfitting“.

Du weißt ja sicher auch nicht, was die 100 Indicator-Implementierungen machen. Vielleicht wäre eine davon „gut“, um eine Entscheidung zu treffen? Na, lass’ halt einen Computer rausfinden, ob sie „gut“ ist. Ob sie „sinnvoll“ ist, bleibt dann immernoch dir überlassen :wink:

Könnt ihr mir vielleicht kurz etwas erklären? Ich habe gerade eine Denkblockade.

Also ich habe den VWAP berechnet und berechne die Distanz zum aktuellen Kurs so:

ClosePriceIndicator closePrice = new ClosePriceIndicator(series);

VWAPIndicator vwapIndicator = new VWAPIndicator(series, series.getBarCount());
double cp = closePrice.getValue(499).doubleValue();
double ci = (vwapIndicator.getValue(499).doubleValue() - cp) / (cp * 0.01) * 100.0;

a.vwap = (float) ci;

Wenn a.vwap < 0 ist (der VWAP liegt unter dem aktuellen Kurs), was gilt dann? Wenn a.vwap > 0 ist (der VWAP liegt über dem aktuellen Kurs), was gilt dann? Wenn a.vwap 0 nach oben hin passiert, was sollte man dann tun (VWAP kreuzt den Kurs nach oben)? Wenn a.vwap 0 nach unten hin passiert, was sollte man dann tun (VWAP kreuzt den Kurs nach unten)? Danke!