Jump to content
Tom Next - Daytrading Community

cxalgo

Developer
  • Posts

    502
  • Joined

  • Last visited

  • Days Won

    44

Posts posted by cxalgo

  1. Danke sehr. Konverter steht auf alle Fälle auf meiner Liste und gebe hier gerne bescheid.

     

    MongoDB wegen NoSql und ArrayDB-Funktionalität bzw. In-Memory. Ich will ja nicht immer die Kursdaten als Primary-Key nehmen, sondern Titel zu bestimmte Szenarien indexieren lassen und passende HS via AI finden, bzw. Ableitungen von HS, so die Idee dahinter.

     

    Die """ stehen für Parser-Entries, damit sich das System selbst dokumentiert und hier neue Ableitungen eintragen kann, quasi als Text-Trigger

    • Upvote 4
  2. Hier noch etwas für die Statistiker: Daily Returns in %

     

    # -*- coding: utf-8 -*-
    """
    Created on Tue Jan 17 11:25:12 2017
    
    @author: MarcusLencyzk
    """
    
    """Compute daily returns."""
    
    import os
    import pandas as pd
    import matplotlib.pyplot as plt
    
    def symbol_to_path(symbol, base_dir="data"):
        """Return CSV file path given ticker symbol."""
        return os.path.join(base_dir, "{}.csv".format(str(symbol)))
    
    
    def get_data(symbols, dates):
        """Read stock data (adjusted close) for given symbols from CSV files."""
        df = pd.DataFrame(index=dates)
        if 'SPY' not in symbols:  # add SPY for reference, if absent
            symbols.insert(0, 'SPY')
    
        for symbol in symbols:
            df_temp = pd.read_csv(symbol_to_path(symbol), index_col='Date',
                    parse_dates=True, usecols=['Date', 'Adj Close'], na_values=['nan'])
            df_temp = df_temp.rename(columns={'Adj Close': symbol})
            df = df.join(df_temp)
            if symbol == 'SPY':  # drop dates SPY did not trade
                df = df.dropna(subset=["SPY"])
    
        return df
    
    
    def plot_data(df, title="Stock prices", xlabel="Date", ylabel="Price"):
        """Plot stock prices with a custom title and meaningful axis labels."""
        ax = df.plot(title=title, fontsize=12)
        ax.set_xlabel(xlabel)
        ax.set_ylabel(ylabel)
        plt.show()
    
    
    def compute_daily_returns(df):
        """Compute and return the daily return values."""
        daily_returns = df.copy() #copy given DateFrame to match size an dcolumn names
        #compute daily return for row 1 onwords
        daily_returns[1:] = (df[1:]/df[:-1].values)-1
        daily_returns.ix[0,:] = 0 #set daily return for row 0 to 0
        return daily_returns
            
        
    
    def test_run():
        # Read data
        dates = pd.date_range('2012-07-01', '2012-07-31')  # one month only
        symbols = ['SPY','TXN']
        df = get_data(symbols, dates)
        plot_data(df)
    
        # Compute daily returns
        daily_returns = compute_daily_returns(df)
        plot_data(daily_returns, title="Daily returns", ylabel="Daily returns")
    
    
    if __name__ == "__main__":
        test_run()
    
    

     

    Daily_returns.PNG

    Daily_returns_visual.PNG

    • Upvote 4
  3. heute noch etwas Zeit gehabt um das Beispiel mal mit den Bollinger Band(20) zu coden und gleichzeitig zu zeigen, wie genial einfach es mit der Python Bibliothek pandas und matplotlib zu programmieren ist.

     

    # -*- coding: utf-8 -*-
    """
    Created on Tue Jan 17 11:11:22 2017
    
    @author: MarcusLencyzk
    """
    
    """Bollinger Bands."""
    
    import os
    import pandas as pd
    import matplotlib.pyplot as plt
    
    def symbol_to_path(symbol, base_dir="data"):
        """Return CSV file path given ticker symbol."""
        return os.path.join(base_dir, "{}.csv".format(str(symbol)))
    
    
    def get_data(symbols, dates):
        """Read stock data (adjusted close) for given symbols from CSV files."""
        df = pd.DataFrame(index=dates)
        if 'SPY' not in symbols:  # add SPY for reference, if absent
            symbols.insert(0, 'SPY')
    
        for symbol in symbols:
            df_temp = pd.read_csv(symbol_to_path(symbol), index_col='Date',
                    parse_dates=True, usecols=['Date', 'Adj Close'], na_values=['nan'])
            df_temp = df_temp.rename(columns={'Adj Close': symbol})
            df = df.join(df_temp)
            if symbol == 'SPY':  # drop dates SPY did not trade
                df = df.dropna(subset=["SPY"])
    
        return df
    
    
    def plot_data(df, title="Stock prices"):
        """Plot stock prices with a custom title and meaningful axis labels."""
        ax = df.plot(title=title, fontsize=12)
        ax.set_xlabel("Date")
        ax.set_ylabel("Price")
        plt.show()
    
    
    def get_rolling_mean(values, window):
        """Return rolling mean of given values, using specified window size."""
        return pd.rolling_mean(values, window=window)
    
    
    def get_rolling_std(values, window):
        """Return rolling standard deviation of given values, using specified window size."""
        return pd.rolling_std(values, window=window)
        
    
    def get_bollinger_bands(rm, rstd):
        """Return upper and lower Bollinger Bands."""
        upper_band = rm + rstd *2
        lower_band = rm - rstd *2
        return upper_band, lower_band
    
    
    def test_run():
        # Read data
        dates = pd.date_range('2012-01-01', '2012-12-31')
        symbols = ['SPY']
        df = get_data(symbols, dates)
    
        # Compute Bollinger Bands
        # 1. Compute rolling mean
        rm_SPY = get_rolling_mean(df['SPY'], window=20)
    
        # 2. Compute rolling standard deviation
        rstd_SPY = get_rolling_std(df['SPY'], window=20)
    
        # 3. Compute upper and lower bands
        upper_band, lower_band = get_bollinger_bands(rm_SPY, rstd_SPY)
        
        # Plot raw SPY values, rolling mean and Bollinger Bands
        ax = df['SPY'].plot(title="Bollinger Bands", label='SPY')
        rm_SPY.plot(label='Rolling mean', ax=ax)
        upper_band.plot(label='upper band', ax=ax)
        lower_band.plot(label='lower band', ax=ax)
    
        # Add axis labels and legend
        ax.set_xlabel("Date")
        ax.set_ylabel("Price")
        ax.legend(loc='upper left')
        plt.show()
    
    
    if __name__ == "__main__":
        test_run()
    
    

     

    hier das visuelle Ergebnis in Steps:

     

     

    BollingerBands_long_short.PNG

    BollingerBands_long_short_visual.PNG

    • Upvote 6
  4. Hallo Zusammen,

     

    nach 2 Monaten habe ich frustriert aufgegeben, mit MQL5 und Ctrader eine saubere Lösung zu programmieren, weil einfach die Anbindung für GPU-Power, genügend freie AI, etc. Bibliotheken fehlen.

     

    Fazit: nach einiger Recherche lerne ich eine neue Programmiersprache und baue hier auf die freien Bibliotheken auf. Da ich wirklich von 0 anfange, muss ich natürlich erstmal Finanzdaten visualisieren. Ich habe mich entschlossen, erstmal mit Aktien EOD (Yahoo Finance Histories) anzufangen und will den Fortschritt hier mit euch teilen, soweit Interesse besteht.

     

    Ziel ist es, Lifedaten von MT4 & 5, cTrader und L&P Daten live in eine Mongo-DB zu laden, die Daten automatisch aufzubereiten, zu slicen und anschließend zu plotten (Charts).

    Danach werden die Bibliotheken von R, Python, Anaconda und Mathlab angezapft und via Matrix-KPI-Metering und anderen mathematischen & statistischen Verfahren gewertet und der Computer soll mit GPU-Power möglichst präzise Vorhersagen (Predictions) errechnen können.

     

    Hier die ersten Codesnippets zum visualisieren von EOD-CSV-Daten.

     

    # -*- coding: utf-8 -*-
    """
    Created on Tue Jan 17 09:30:18 2017
    
    @author: MarcusLencyzk
    """
    
    """Slice and plot"""
    
    import os
    import pandas as pd
    import matplotlib.pyplot as plt
    
    
    def plot_selected(df, columns, start_index, end_index):
        """Plot the desired columns over index values in the given range."""
        plot_data(df.ix[start_index:end_index, columns], title="Selected Data")
    
    
    def symbol_to_path(symbol, base_dir="data"):
        """Return CSV file path given ticker symbol."""
        return os.path.join(base_dir, "{}.csv".format(str(symbol)))
    
    
    def get_data(symbols, dates):
        """Read stock data (adjusted close) for given symbols from CSV files."""
        df = pd.DataFrame(index=dates)
        if 'SPY' not in symbols:  # add SPY for reference, if absent
            symbols.insert(0, 'SPY')
    
        for symbol in symbols:
            df_temp = pd.read_csv(symbol_to_path(symbol), index_col='Date',
                    parse_dates=True, usecols=['Date', 'Adj Close'], na_values=['nan'])
            df_temp = df_temp.rename(columns={'Adj Close': symbol})
            df = df.join(df_temp)
            if symbol == 'SPY':  # drop dates SPY did not trade
                df = df.dropna(subset=["SPY"])
    
        return df
        
    def normalize_data(df):
        """Nomalize stock prices using the first row of the dataframe."""
        return df/ df.ix[0,:]
    
    def plot_data(df, title="Stock prices"):
        """Plot stock prices with a custom title and meaningful axis labels."""
        ax = df.plot(title=title, fontsize=12)
        ax.set_xlabel("Date")
        ax.set_ylabel("Price")
        plt.show()
    
    
    def test_run():
        # Define a date range
        dates = pd.date_range('2012-01-01', '2016-12-31')
    
        # Choose stock symbols to read
        symbols = ['MSFT', 'IBM', 'TXN']  # SPY will be added in get_data()
        
        # Get stock data
        df = get_data(symbols, dates)
    
        # Slice and plot
        plot_selected(df, ['SPY', 'IBM', 'MSFT', 'TN'], '2012-03-01', '2016-04-01')
    
    
    
    if __name__ == "__main__":
        test_run()
    
    

     

    Sieht noch sehr "simple" aus, funktioniert aber schon mal, siehe hier das Ergebnis:

     

    Python_Part1.PNG

    • Upvote 7
  5. @Marcus - schön Dich wieder in Action zu sehen :wub:

     

    japp, ist schon ein seltsames Gefühl, nach einer "Ewigkeit" mal wieder ein HS zu coden .... macht aber mit noch Spass

     

    @Microsoft AML:

    Die Anbindung von cAlgo per API zu AML ist ja wirklich kinderleicht ... die GUI in AML erkennt mit ein wenig Hilfe sofort die Inputwerte und schlägt passen "Vorlagen" für Input-Kind-Eltern-Kind-Outpout-NetzSysteme mit Gewichtungsmatrix und Optionen vor (Evolution Modell, etc.) ... sind sehr interessante "Konzepte" dabei .... aber genug der langen Worte ... nach einem Tag mal einen groben Überblick:

     

    First_MAML_V1.PNG

     

    in 1 Tag und ~1,24 Std. sind 590 Ergebnisse gelaufen. Range trotz AML als "Worst-Case-Szenario" netto 378 Trades mit einem NetProfit siehe Bild unten, derzeitiges max siehe Bild oben

    First_MAML_V1_1.PNG

     

    Als Hardware laufen derzeit 24 Xeon x3 CPU mit 512 GB DDR4 und 2 SSD-Platten von WD + MAML auf 2 verteilten virt. Servern ...

    • Upvote 3
  6. Die ersten Schritte sind vollbracht und 2 Systeme laufen mal auf einem "TestAccount". Was sehr interessant ist, dass ich ein "Basicsystem" coden kann und dieses auf alle gewählten Timeframes auf zum Beispiel 1Minute open Bars quertesten ... -> optimizing.png

     

    Was sehr übersichtlich in cTrader respektive cAlgo ... gleiches System für alle verfügbaren Währungspaare /Rohstoffe und Indices aktivieren und läuft ... -> System_Options.png

     

    Was ein riesen Vorteil beim Optimieren ist: Hast du 24 Prozessoren, werden diese auch genutzt und du kannst die Auslastung in % (0-100) einstellen, geht zwar bei MT5 auch, aber ich wollte nie Pakete auf fremden Rechnern oder in der Cloud haben und der Aufwand, jedem Server & Rechner die Verteilung von MT5 zu installieren ist schon aufwendig, vor allem wenn neue Releases rauskommen.

     

    Basissystem steht, jetzt kommt die eigentliche Arbeit, die Parameter via Neuronen und Netzwerke als Inputdaten zu gewichten und dann trainieren zu lassen, damit auch was sinnvollen rauskommt

    • Upvote 3
  7. also das handling ist etwas gewöhnungsbedürftig, aber das coden in visual studio mit c# ist super. Sehr verständliche API Referenz und einige gute Beispiele.

     

    mit http://2calgo.com kann ich meine ganzen Indikatoren aus MT4 in cAlgo konvertieren und was ich bisher probiert habe, läuft und zeigt es auch so an.

     

    Mein erstes HS is am optimieren und schaut auch relativ gut aus. Nächster Schritt wird die Implementierung für deep learning via Microsoft AML oder Nvidia Cuda SDK

    • Upvote 3
  8. Hallo nach langer Zeit mal wieder,

     

    hat wer schon mal mit cTrader getradet bzw. mit cAlgo (alles in C#) HS programmiert. Spiele seit letzter Woche wieder ein bisschen und mich würden eure Erfahrungen interessieren.

     

    Schönen Abend noch

  9. Hi,

     

    bin kein Experte im Bereich dll aber ein paar fragen kann ich vielleicht beantworten.

    - AFAIK kannst du in MQL4 nur per DLL externen Code einbinden. Rein theoretisch kann man über ein dll vermutlich beliebigen anderen Code ausführen (über cmd-line befehle etc.) aber das wird dann vermutlich etwas zu fancy und performance mäßig nicht wirklich besser.

    - Ich weiß das man c/C++ code in dlls kompilieren kann, ich vermute C# geht auch. Weitere sprachen womöglich, aber weiß ich nichts von.

    - Es gibt keine "Sprache" die gut/schnell in so Dingen wie NNs ist. Wie du schreibst geht es hier immer um die Module die jemand anders in der Sprache geschrieben hat und zur Verfügung stellt bzw. das Framework rundherum. Matlab zB wird teils als eigene Programmiersprache gehandelt, aber du benötigst Matlab selbst um es auszuführen und kannst somit die Matlab-module (für NN etc.) nutzen.

    - Zukunftsfähig... Es gibt viele moderne Sprachen die manche Dinge komfortabler können. Umgekehrt bin ich mir sicher das es auch in 20 Jahren noch C/C++ entwickler geben wird und die Sprache aktiv genutzt wird. Geschwindigkeitsmäßig ist C/C++ soweit ich weiß derzeit relativ unschlagbar.

    - thema Multicore: wenn du es in MT4 einbindest bist du grundsätzlich mal single-threaded. Theoretisch kannst du natürlich in der DLL das ganze aufsplitten, parallel rechnen lassen und zusammenwarten, aber bedenke das du das alles selber implementieren musst. Hier ist C sicher eine der komplizierteren Sprachen um sowas umzusetzen. Moderne Sprachen liefern bereits komfortable tools für Multithreading, aber am Ende bleibt es dennoch bei dir die Logik selbst zu bauen und parallelisierbar zu machen. Der Teil darf nicht unterschätzt werden ;)

     

    hth

     

    per DLL-Injection geht das in MetaTrader auch und du kannst sogar, soweit in der DLL alles definiert, deine Indikatoren, Crosses, Arrows, etc. ... in die NN´s aus MT4 laden für einen definierten Zeitraum (Trainingszeitraum) und das trainierte NN im Anschluß für einen Forward-Test hernehmen.

     

    Geht in C/C++, C#, R oder anderen Algo-NN-Sprachen. Für Multithreading sollten dann aber die entsprechenden Prozessor-und GPU-CUDA-Bibliotheken mit kompiliert werden und in dieser DLL-Injection nur beim Training ausserhalb von MT4 laufen.

     

    Multicore mit GPU macht halt auch nur Sinn, wenn du mehr als 1 Mrd. Kombinationen, Kursmuster oder sonstige Vorhersage-Parameter hast. Da bringt es enorm was, in Bezug auf Dauer der Eltern-Kind-Input-Kind-Neuronen. Aber nicht vergessen, dass du auch ein Rauschen der Kurse von mind. 3-5% per Random-Engine mit einbaust, damit die NN´s nicht "auswendig" lernen, weil diese immer die gleichen Kursreihen bekommen. Eine zusätzliche Dämpfung von

    Indikatoren macht auch Sinn um hier das maximale Potential aus den NN´s ziehen kannst.

     

    Wenn du NN´s trainierst, dann kannst du ja die NN´s nicht nur auf die Kursreihen beziehen sondern auch auf Indikatoren oder Kursmuster. Mit etwas Geschickt und Rechenpower kommen teilweise super Kombinationen heraus, wo Kursmuster mit technischen Indi´s hervorragend zusammenspielen in bestimmten Märkten.

     

    Willkommen und viel Spaß und Ausdauer in der "Unendlichkeit" der Kombinationen mit NN´s good.gif

    • Upvote 3
  10. INV ist ein sehr mächtiges Tool, habe dich dir aber auch so glaub vor ca. 2 Jahren gesagt. Macht aber Spass, wenn man mal drin ist skiing.gif und die Möglichkeiten sind endlos ...

     

     

    ot.gif

    Und es ist klar , das INV zukünftig meine Hauptplattform werden wird . Nur bin ich seit geraumer Zeit beruflich so stark gebunden, dass mir kaum Zeit , und wenn dann auch nur an den WE bleibt , um mein Wissen auf dieser Plattform so weit zu entwickeln, dass ich alles andere abschalten und mich zu 100% auf INV fokussieren kann .

  11. hat für mich persönlich wenig sinn ... würde sonst nach einer durchzechten Nacht eh nur Unsinn rauskommen ...

     

    Die Menschen springen auch auf fast jeden sry "Scheiss" an und wirklich sinnvoll bzw. produktiv wirkt Twitter auf mich nicht,

    mal ganz abgesehen vom nicht vorhandenen USP. Wird auch ohne mich weiterlaufen ... ^^

  12. ...aber wegen "Repaint" des Supertrend-Indikators beibt dieser rot

    Um 7:21 erfolgte dann der nachhaltige Durchbruch des Downtrends.

    Um 7:28 und 7:29 Bruch des Uptrends, doppeltes Bimmeln wegen Indikator-Repaint.

     

    Deswegen ist dieser auch nicht für EA´s zum Empfehlen, schaut gut aus, bringt aber nix bis wenig. captn.gif blackjack.gif

  13. Ich postiere mich einfach gegen 13.30 vor den Ständen 1.1, 1.2 und 1.3.

    Ich hab nen schwarz/bunten-Rucksack dabei. Wer mich anquatschen will soll das dort einfach tun :wink2:

     

    13:30 - 13:39 keiner mit einem schwarz/bunten Rucksack, hab 2 komische Leute sogar angesprochen mit nem Bier in der Hand ... aber die waren es auch nicht crazy.gif

  14. Ich postiere mich einfach gegen 13.30 vor den Ständen 1.1, 1.2 und 1.3.

    Ich hab nen schwarz/bunten-Rucksack dabei. Wer mich anquatschen will soll das dort einfach tun :wink2:

     

    klar, dann werde ich dich wohl mal anquatschen, halt ein kaltes Bier bereit ;) ist dann ja schon nach 12 Uhr idea.gif

  15. Dann werden wir mal konkret:

     

    1. Auf/Mit welcher Plattform handeln Sie? Sehe auf der Homepage nur ein eToro-Widget und sonst keine weiteren Informationen, Youtube ist leer!

    1.1 Sollte Metatrader 4 dabei sein, einfach per myfxbook.com mal nen längeren Account zeigen, der auf einem Lifekonto gehandelt wurde. Kostet keine Minute und kann per Klick auch alles in % ausweisen etc..

    2. Screenshots von deinem Coaching mit 2-3 Sätzen zur Erklärung gibt leichter Aufschluss über das KnowHow des "Coach". Bilder sagen mehr als 1000 Worte.

    3. Ist dein Ansatz technische Analyse, fundamental Analyse, per Algos, marktechnische Analyse oder ganz was anderes?

    4. Auf welchen Zeitraum wird gehandelt? Kurz-, Mittel-, oder Langfristig?

     

    Einen schönen Abend noch

    • Upvote 2
×
×
  • Create New...