Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert sind; Die von diesem Forum gesetzten Cookies düfen nur auf dieser Website verwendet werden und stellen kein Sicherheitsrisiko dar. Cookies auf diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Open Source Tools und Daten
#31
Notiz 

RE: Open Source Tools und Daten

Finde ich ganz nett:

https://simplywall.st/stocks/in/food-bev...ies-shares

__________________
Forum-Besserwisser und Wissenschafts-Faschist
#32

RE: Open Source Tools und Daten

(13.01.2023, 14:03)Lancelot schrieb: Die Diskussion hatte ich erst vor kurzem mit jemanden aus der frühen Schachprogrammierwelt. Eventuell ist das alles gar nicht so toll, was wir Menschen machen. Also unsere Intelligenzleistung ist vielleicht nicht so überragend ...

Warum so "negativ" gestimmt? Natürlich ist die Intelligenzleistung überragend, denn "wir" sind die Schöpfer solcher Innovationen.

Ich muss ja auch zugeben, dass ich zu der Fraktion "AI, LOL, hat man schon in den 60er gehypted und wir warten immer noch sehr, sehr, sehr lange drauf", aber ich finde das Thema hochinteressant.

Spinnt man das "zu Ende", wird es eines Tages möglich sein, Welten, in welchen wir leben zu simulieren und dann gibt es ganz andere Möglichkeiten ... werde ich aber nicht mehr erleben, es sei denn, wir befinden uns bereits in einer Simulation, geschaffen von unserem Schöpfer Wink
#33
Notiz 

RE: Open Source Tools und Daten

(03.01.2023, 10:44)Lancelot schrieb: Python war hier am Board schon mehrfach im Gespräch. 

Hier die wichtigsten packages für den Umgang mit Daten:

pandas: Alles was man mit xls machen kann...und mehr. Wenn man sich eingearbeitet hat, ist es recht intuitiv:
https://pandas.pydata.org/

polars: wenn die Daten größer werden, mann aber noch immer auf einem einzelnen Rechner arbeiten will. PyArrow als Columns. Geschrieben in Rust:
https://www.pola.rs/

scipy: wichtige library für Nummerik, Statistik und signal processing (FFT!)
https://scipy.org/

scikit learn: supervised und unsupervised learning (PCA...wichtig für Factor Analysis). Immernoch der Gold Standard im MAchine Learning:
https://scikit-learn.org/stable/

klassische statistische Modellierung. Hypothesetests und SARIMAX Zeitreihenprognose. Hat auch einen wrapper um das berühmte "forecast" R-packagde von Hyndman.  
https://www.statsmodels.org/stable/index.html 

Data is King. Immer noch. Aber auf der algorithmischen Seite kommt Gradient Boosting free-lunch erstaunlich nahe. Es ist erstaunlich wie gut Anfänger mit den Default-Einstellungen werden können. Auch die Hyperparameter Optimierung lässt sich mit Copy& Paste aus der Dokumentation gut hinbekommen.
Hier die 3 Platzhirsche:
https://xgboost.readthedocs.io/en/stable/ (NVIDIA)
https://catboost.ai/ (Yandex)
https://lightgbm.readthedocs.io/en/v3.3.2/ (Microsoft)

Darts: ich bin noch immer nicht zufrieden, aber es geht in die richtige Richtung. Endlich mal ein brauchbares time series package:
https://unit8co.github.io/darts/ 

der quantopian stack:
zipline: backtesting engine
https://github.com/quantopian/zipline
Pyfolio; Portfolio Analyse:
https://github.com/quantopian/pyfolio

danke für die ausgesuchten links für py Anwendungen
bin in (meist) jupyter notebook am Strategie schreiben und
bin am Info Austausch interessiert (Rad nicht neu erfinden)

EMA, MACD, RSI, Aaron ?
#34
Notiz 

RE: Open Source Tools und Daten

(06.03.2023, 13:03)Noni-Binder schrieb: danke für die ausgesuchten links für py Anwendungen
bin in (meist) jupyter notebook am Strategie schreiben und
bin am Info Austausch interessiert (Rad nicht neu erfinden)

EMA, MACD, RSI, Aaron ?

Pandas:[attachment=12694]
Code:
import pandas as pd
import pandas_datareader.data as web

df= web.DataReader('SPY', 'stooq')
df["mid_price"] = 0.5 * (df.Close + df.Open) 
df["ewma_1"] = df["mid_price"].ewm(span=12, adjust=False).mean()
df["ewma_2"] = df["mid_price"].ewm(span=26, adjust=False).mean()
df["macd"] = (df.ewma_1 - df.ewma_2).ewm(span=10, adjust=False).mean()
  
df[["mid_price","ewma_1","ewma_2","macd"]].plot(figsize = (15,7),grid= True, secondary_y=True)   

__________________
Forum-Besserwisser und Wissenschafts-Faschist
#35
Notiz 

RE: Open Source Tools und Daten

danke für's script als feedback

als grafische Erweiterung ein Tageschart des DAX von eben.
Die vertikalen Linien rot/grün zeigen die möglichen Schaltunkte für Aaron Indikator
Verfeinerung der Schaltunkte mit EMA, Max/Min od. crossover RSI und MACD.
Hier der Tageschart, der das Prinzip aufzeigt.

das macd script steht zum Test an;
wenige script Zeilen sind erstrebenswert, wie dieses scriptlet :-)

teste mit EOD Daten


Angehängte Dateien    
#36
Notiz 

RE: Open Source Tools und Daten

ALV screenshot mit RSI,MACD
in Arbeit sind:  Aaron und buy/sell markers


Angehängte Dateien    
#37
Notiz 

RE: Open Source Tools und Daten

Perioden Auschnitt eines  Testlaufs:
Aaron  buy/sell markern - scheint ok
Eintrag in Kurs plot ??   Wonder


Angehängte Dateien    
#38

RE: Open Source Tools und Daten

...ist hier angedacht die, scriptlets rein zu stellen ?
#39
Notiz 

RE: Open Source Tools und Daten

(09.03.2023, 11:23)Noni-Binder schrieb: ...ist hier angedacht die, scriptlets rein zu stellen ?

würde zumindest helfen und Zeit sparen  Tup
#40
Notiz 

RE: Open Source Tools und Daten

(09.03.2023, 12:31)TomJoe schrieb: würde zumindest helfen und Zeit sparen  Tup

Code:
#pip install yfinance
#pip install mplfinance
import yfinance as yf
import mplfinance as mpf
import talib as ta
import numpy as np
import pandas as pd
import math
from mplfinance import _styles
#_styles.available_styles()
# styles = ['binance','blueskies','brasil','charles','checkers','classic','default','ibd',
# 'kenan','mike','sas','starsandstripes','yahoo']
#------------------------------------------------
path = 'C:/....your path to file.csv/'
symbol = 'ALV.DE'    # bei yahoo für DAX xxx.DE verwendet
#------------------------------------------------
data= yf.download(symbol, period='9mo')   # max, 1y,3mo,5min
data.to_csv(path+symbol + '_1y.csv')
#------------------------------------------------
# check data to plot
#mpf.plot(data, type='candle', figsize=(20,5),mav=(5,20), volume=True)
#------------------------------------------------
# # Calculate MACD values using the pandas_ta library
df['ema9'] = df['Close'].ewm(span=9, adjust=False, min_periods=12).mean()
df['ema12'] = df['Close'].ewm(span=12, adjust=False, min_periods=12).mean()
df['ema26'] = df['Close'].ewm(span=26, adjust=False, min_periods=12).mean()

# Subtract the 26-day EMA from the 12-Day EMA to get the MACD signal line
df['macd_line'] = df['ema12'] - df['ema26']
df['macd_signal'] = df['macd_line'].ewm(span=9, adjust=False, min_periods=9).mean()
#------------------------------------------------
# check mpf plot
mpf.plot(df, type='candle', volume=True, addplot=macd_plot)
#------------------------------------------------
#  macd plot
import mplfinance as mpf
import talib as ta

from matplotlib import style
import matplotlib.pyplot as plt
plt.style.use('classic')

def MACD(df, window_slow, window_fast, window_signal):
    macd = pd.DataFrame()
    macd['ema_slow'] = df['Close'].ewm(span=window_slow).mean()
    macd['ema_fast'] = df['Close'].ewm(span=window_fast).mean()
    macd['macd'] = macd['ema_slow'] - macd['ema_fast']
    macd['signal'] = macd['macd'].ewm(span=window_signal).mean()
    macd['diff'] = macd['macd'] - macd['signal']
    macd['bar_positive'] = macd['diff'].map(lambda x: x if x > 0 else 0)
    macd['bar_negative'] = macd['diff'].map(lambda x: x if x < 0 else 0)
    return macd

macd = MACD(df, 12, 26, 9)

macd_plot = [
mpf.make_addplot((macd['macd']), color='#606060', panel=2, ylabel='MACD', secondary_y=False),
mpf.make_addplot((macd['signal']), color='#1f77b4', panel=2, secondary_y=False),
mpf.make_addplot((macd['bar_positive']), type='bar', color='#4dc790', panel=2),
mpf.make_addplot((macd['bar_negative']), type='bar', color='#fd6b6c', panel=2),]
mpf.plot(df, type='candle', volume=True, addplot=macd_plot)
#-------------------------------------------

# macd
data["macd"], data["macd_signal"], data["macd_hist"] = ta.MACD(data['Close'])
# plot macd
macd_plot = mpf.make_addplot(data["macd"], panel=1, color='fuchsia', title="MACD")
colors = ['g' if v >= 0 else 'r' for v in data["macd_hist"]]
macd_hist_plot = mpf.make_addplot(data["macd_hist"], type='bar', panel=1, color=colors) # color='dimgray'
macd_signal_plot = mpf.make_addplot(data["macd_signal"], panel=1, color='b')
#----------------------------------------------
def detect_macd_signals(data):
    """Use MACD cross-over to decide buy/sell
    Args:
      data: panda DataFrame with OHLC with MACD data
   
    Return:
      buy_signals, sell_signals: for chart plot
      signals: buy/sell transaction for summary printing
    """
#----------------------------------------------
    buy_signals = [np.nan]
    sell_signals = [np.nan]
    signals = []
    last_signal = None
    for i in range(1, len(data)):
        if data['macd_hist'][i-1] < 0 and data['macd_hist'][i] > 0:
            price = (data['Open'][i] + data['Close'][i]) / 2
            buy_signals.append(price)
            last_signal = 'buy'
            signals.append({
                'date': data.index[i],
                'action': 'buy',
                'price': price
                })           
            sell_signals.append(np.nan)
        elif data['macd_hist'][i-1] > 0 and data['macd_hist'][i] < 0 and last_signal == 'buy':
            price = (data['Open'][i] + data['Close'][i]) / 2
            sell_signals.append(price)
            last_signal = 'sell'
            signals.append({
                'date': data.index[i],
                'action': 'sell',
                'price': price
                })           
            buy_signals.append(np.nan)
        else:
            buy_signals.append(np.nan)
            sell_signals.append(np.nan)
    return buy_signals, sell_signals, signals
#------------------------------------------------
# performance calculation
def print_performance_summary(signals):
    """Print buy/sell transactions and statistics
   
    Args:
      signals: recorded buy/sell transactions
    """
    pairs = zip(*[iter(signals)]*2)
    rows = []
    profit_count = 0
    profit_pct_avg = 0
    for (buy, sell) in pairs:
        profit = sell['price'] - buy['price']
        profit_pct = profit / buy['price']
        if profit > 0:
            profit_count += 1
        profit_pct_avg += profit_pct
        row = {
            'buy_date': buy['date'],
            'duration':  (sell['date'] - buy['date']).days,
            'profit': profit,
            'profit_pct': "{0:.2%}".format(profit_pct)
        }
        rows.append(row)
    df =  pd.DataFrame(rows, columns=['buy_date', 'duration',
                                      'profit', 'profit_pct'])
    with pd.option_context('display.max_rows', None, 'display.max_columns', None):
        print(df)
    total_transaction = math.floor(len(signals) / 2)
   
    stats = {
        'total_transaction': total_transaction,
        'profit_rate': "{0:.2%}".format(profit_count / total_transaction),
        'avg_profit_per_transaction': "{0:.2%}".format(profit_pct_avg / total_transaction)
    }
    for key, value in stats.items():
        print('{0:30}  {1}'.format(key, value))
#---------------------------------------------------
# buy/sell
buy_signals, sell_signals, signals = detect_macd_signals(data)
#---------------------------------------------------
# print buy/sell transaction and stats
print_performance_summary(signals)
# so sollte die performance Ausgabe aussehen
#                   buy_date  duration     profit profit_pct
#0 2022-09-12 00:00:00+02:00        14  -7.089996     -4.09%
#1 2022-10-10 00:00:00+02:00        49  40.110001     24.44%
#2 2023-01-04 00:00:00+01:00        26  12.724998      6.10%
#total_transaction               3
#profit_rate                     66.67%
#avg_profit_per_transaction      8.82%
#---------------------------------------------------
# plot buy/sell
buy_plot = mpf.make_addplot(buy_signals, type='scatter', marker='^',
                            markersize=50, panel=0)
sell_plot = mpf.make_addplot(sell_signals, type='scatter', marker='v',
                            markersize=50, panel=0)
#---------------------------------------------------
# plot candle chart and all
plots = [macd_plot, macd_signal_plot, macd_hist_plot, buy_plot, sell_plot]
mpf.plot(data, type='candle',figsize=(20,10), style='classic',
         addplot=plots, title=f"\n{symbol}", ylabel='Price (€)')

und so sieht der mit mplfinance erstelle chart von Allianz aus.

jetzt fehlt noch zum Vergleich (optimieren) anstatt macd crossover max(grün) und min(rot) von macd histogram als buy sell datzustellen. Pctap


Angehängte Dateien    


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
Notiz Kostenlose Historische EOD Daten atze2000 69 73.809 04.03.2021, 15:55
Letzter Beitrag: Noni-Binder
Notiz EOD Daten Feeds atze2000 7 9.236 08.02.2019, 12:59
Letzter Beitrag: Noni-Binder
Notiz Free Future Daten atze2000 0 2.255 11.01.2019, 13:27
Letzter Beitrag: atze2000
Notiz Cot Daten atze2000 2 3.722 10.01.2019, 19:46
Letzter Beitrag: atze2000

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste