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
#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    


Nachrichten in diesem Thema
Open Source Tools und Daten - von Lancelot - 02.01.2023, 15:36
RE: Open Source Tools und Daten - von Lancelot - 03.01.2023, 10:44
RE: Open Source Tools und Daten - von Bucketeer - 03.01.2023, 15:52
RE: Open Source Tools und Daten - von Lancelot - 03.01.2023, 16:33
RE: Open Source Tools und Daten - von Bucketeer - 03.01.2023, 18:58
RE: Open Source Tools und Daten - von saphir - 03.01.2023, 20:39
RE: Open Source Tools und Daten - von rienneva - 04.01.2023, 07:57
RE: Open Source Tools und Daten - von Lancelot - 04.01.2023, 10:47
RE: Open Source Tools und Daten - von lomo - 04.01.2023, 11:04
RE: Open Source Tools und Daten - von Lancelot - 04.01.2023, 11:18
RE: Open Source Tools und Daten - von TomJoe - 04.01.2023, 15:33
RE: Open Source Tools und Daten - von Lancelot - 04.01.2023, 17:33
RE: Open Source Tools und Daten - von TomJoe - 04.01.2023, 21:37
RE: Open Source Tools und Daten - von rienneva - 04.01.2023, 19:17
RE: Open Source Tools und Daten - von lomo - 05.01.2023, 11:07
RE: Open Source Tools und Daten - von Lancelot - 04.01.2023, 19:24
RE: Open Source Tools und Daten - von Lancelot - 04.01.2023, 22:25
RE: Open Source Tools und Daten - von TomJoe - 04.01.2023, 23:38
RE: Open Source Tools und Daten - von Lancelot - 05.01.2023, 12:01
RE: Open Source Tools und Daten - von Lancelot - 05.01.2023, 12:08
RE: Open Source Tools und Daten - von TomJoe - 05.01.2023, 14:05
RE: Open Source Tools und Daten - von Lancelot - 05.01.2023, 14:38
RE: Open Source Tools und Daten - von TomJoe - 05.01.2023, 15:00
RE: Open Source Tools und Daten - von lomo - 05.01.2023, 18:03
RE: Open Source Tools und Daten - von Lancelot - 05.01.2023, 19:02
RE: Open Source Tools und Daten - von lomo - 06.01.2023, 11:08
RE: Open Source Tools und Daten - von lomo - 12.01.2023, 15:58
RE: Open Source Tools und Daten - von TomJoe - 12.01.2023, 16:32
RE: Open Source Tools und Daten - von lomo - 12.01.2023, 17:08
RE: Open Source Tools und Daten - von Lancelot - 13.01.2023, 14:03
RE: Open Source Tools und Daten - von Lancelot - 03.03.2023, 15:13
RE: Open Source Tools und Daten - von Lancelot - 07.03.2023, 13:17
RE: Open Source Tools und Daten - von TomJoe - 09.03.2023, 12:31
RE: Open Source Tools und Daten - von Noni-Binder - 09.03.2023, 19:29
RE: Open Source Tools und Daten - von Lancelot - 30.04.2023, 19:09
RE: Open Source Tools und Daten - von Lancelot - 09.01.2024, 14:57
RE: Open Source Tools und Daten - von Lancelot - 09.01.2024, 15:08

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

Gehe zu:


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