Fajne, choć trochę ciężko mi uwierzyć że gdzieś tego już nie ma, mi się często wydaje że nie ma jakiejś biblioteki po czym implementując ją i konkretne algorytmy z tym związane często w końcu natrafiam na niszowe repo na githubie gdzie ktoś robił to samo.
W tym przypadku github podpowiada 3 strony wyników gdzie jest sporo podobnie wyglądających projektów, choć faktycznie wygląda na to że nikt nie zrobił z tego nugetowej paczki
https://github.com/kjcingel/CandlestickPatternRecognizer
https://github.com/BrendenCo/stockCandlestickAnalyzer
https://github.com/studio-hills/candlestick-analyzer-winforms
https://github.com/DanaBenish/CandleStickTrack
https://github.com/mattiadeidda91/CandlestickPatterns
https://github.com/harsha-yuvaraj/Stock-Analysis
https://github.com/victoria-field7/StockMarketDataApp
https://github.com/aatif101/Stock-Analyzer
Osobiście do takich zastosowań trzymałbym się pythona ze względu na wielkość społeczności, dedykowanych rozwiązań i prostoty kodu, ale chwali się że społeczność portuje rozwiązania na inne języki.
Korzystasz z tego osobiście do inwestowania?
Wydaje mi się że skuteczność tego typu analiz spada z każdym rokiem wraz ze wzrostem udziału AI i automatycznego pozbawionego emocji inwestowania, narzędzia próbują wyprzedzić prognozy o jeden krok w sumie zmieniając wszystkie zasady giełdy, powoli trzeba brać to pod uwagę i być dwa kroki do przodu.
Z punktu widzenia kodu jest trochę niedociągnięć, polecam zainstalować jakiś linter, użyć wbudowanych w VS refraktoryzacji, użyć resharpera albo dać do review AI. Kod jest niepotrzebnie rozwlekły w wielu miejscach i nie korzysta z nowszych featerów języka, ale też na przykład ma kilka quirków które wpływają na to że nie jest thread-safe, np
Kopiuj
IPatterns _patterns;
public AccuracyObject GetAverPercentPatternAccuracy(List<OhlcvObject> dataOhlcv, string patternName)
{
_patterns = new Patterns(dataOhlcv);
var signalsList = _patterns.GetPatternsSignalsList(patternName);
return GetAccuracyResults(signalsList, patternName);
}
czemu metody Get tworzą i przypisują nowe obiekty do pól klasy? Takie zachowania tworzą kłopotliwe "gotchas" jeśli ktoś by chciał to wykorzystać w zrównoleglonym kodzie, choć nigdzie w sumie nie wspominasz że klasy są thread safe, ale z reguły metody "Get" takie są gdy nie mutujemy obiektu nawet gdy nie jest to jasno określone.