Trading-Stocks.de

Normale Version: Kostenlose Historische EOD Daten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4 5 6 7
EOD Daten download ..sind meisten kostenlos abrufbar;
Ich selbst verwende den bezahlten datenfeed von IB + Agenatrader Andromeda, sowie die TWS. Python for finance als Einsatz im Beispiel.

Python in Anwendung mit etwas script als Beispiel:
Darstellung mit EMA(10), EMA(20) + Adj Close Daten + Grafik

Erfahrung Python und IDLE interpreter mit diesen script Zeilen:

----------------------------------------------------------------------
# C:\Python27\Tools\Scripts\filename.py
import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

from matplotlib import style
#from matplotlib.finance import candlestick_ohlc

from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()

import pandas as pd
import pandas_datareader as web
style.use('ggplot')
###--------------------------------------
###  read symbols from file DaxSymb.csv
###--------------------------------------
tickers= pd.read_csv(file, parse_dates=True, index_col=0)
tickers1= pd.read_csv(file)

print(tickers,'\n','----------')
print(tickers1)
###--------------------------------------
start = dt.datetime(2019,1,1)
end = dt.datetime(2020,4,24)
###--------------------------------------
fName='ALV.DE'
###--------------------------------------
df = web.DataReader(fName,'yahoo',start,end)
df.to_csv(fName +'.csv')
###--------------------------------------
###print(df)
###print(fName + '.csv')
###--------------------------------------
df = pd.read_csv(fName+'.csv', parse_dates=True, index_col =0)
df['20ma'] = df['Adj Close'].rolling(window=20, min_periods=0).mean()
df['10ma'] = df['Adj Close'].rolling(window=10, min_periods=0).mean()
###--------------------------------------

print(df)

ax1 = plt.subplot2grid((6,1),(0,0),rowspan=5,colspan=1)
ax2 = plt.subplot2grid((6,1),(5,0),rowspan=1,colspan=1, sharex=ax1)
ax1.plot(df.index, df['Adj Close'])
ax1.plot(df.index, df['10ma'])
ax1.plot(df.index, df['20ma'])
ax2.bar(df.index, df['Volume'])
df.plot()
plt.show()
#----------------------------------------------------------------------
print: das sind die EOD Daten 5 lines start, 5 lines end EOD
                  High        Low  ...        20ma        10ma
Date                                ...                       
2019-01-02  175.559998  171.960007  ...  167.464111  167.464111
2019-01-03  175.220001  172.539993  ...  166.583733  166.583733
2019-01-04  178.020004  172.960007  ...  167.629985  167.629985
2019-01-07  178.240005  174.600006  ...  167.808613  167.808613
2019-01-08  178.179993  175.440002  ...  167.950241  167.950241
...                ...        ...  ...        ...        ...
2020-04-20  168.179993  163.160004  ...  155.817002  161.374001
2020-04-21  165.259995  160.679993  ...  157.145002  162.572000
2020-04-22  164.339996  160.279999  ...  158.611002  162.842000
2020-04-23  162.580002  158.740005  ...  158.948002  162.508000
2020-04-24  159.139999  155.139999  ...  158.888001  161.986000

[331 rows x 8 columns]
Diese Daten stehen als csv file für weitere Auswertungen zur Verfügung.
Python liefert weitere Funktionen fürs trading.
Die Grafik zeigt die ausgewählten Daten.

Zur Vertiefung gibts auf youtube Erweiterungen von Sentdex
python - Test auf Überschneidungen (intersections )

>Test von 2 Funktionen auf Überschneidungen (script mit Beispiel)
>>spätere Anwendung z.B. EMA10 mit EMA20 auf Tagesdaten (EOD timeseries); siehe Beispiel zuvor.
>>oder buy/sell Signale mit indiv. Berechnungen
(ich weiss, es gibt bereits viele Tools; meist können sie aber nicht angepasst werden auf die indiv. Forderungen eines traders oder jede Anpassung kostet und rechnet sich nicht für Private).

Ref: weitere Abhandlungen sind zu finden unter:
https://stackoverflow.com/questions/2067...-two-lines

script:  ....erstaunlich....es läuft auf anhieb :-))

import numpy as np
import matplotlib.pyplot as plt
"""
Sukhbinder
5 April 2017
Based on:   
"""

def _rect_inter_inner(x1,x2):
    n1=x1.shape[0]-1
    n2=x2.shape[0]-1
    X1=np.c_[x1[:-1],x1[1:]]
    X2=np.c_[x2[:-1],x2[1:]]   
    S1=np.tile(X1.min(axis=1),(n2,1)).T
    S2=np.tile(X2.max(axis=1),(n1,1))
    S3=np.tile(X1.max(axis=1),(n2,1)).T
    S4=np.tile(X2.min(axis=1),(n1,1))
    return S1,S2,S3,S4

def _rectangle_intersection_(x1,y1,x2,y2):
    S1,S2,S3,S4=_rect_inter_inner(x1,x2)
    S5,S6,S7,S8=_rect_inter_inner(y1,y2)

    C1=np.less_equal(S1,S2)
    C2=np.greater_equal(S3,S4)
    C3=np.less_equal(S5,S6)
    C4=np.greater_equal(S7,S8)

    ii,jj=np.nonzero(C1 & C2 & C3 & C4)
    return ii,jj

def intersection(x1,y1,x2,y2):
    """
INTERSECTIONS Intersections of curves.
  Computes the (x,y) locations where two curves intersect.  The curves
  can be broken with NaNs or have vertical segments.
usage:
x,y=intersection(x1,y1,x2,y2)
    Example:
    a, b = 1, 2
    phi = np.linspace(3, 10, 100)
    x1 = a*phi - b*np.sin(phi)
    y1 = a - b*np.cos(phi)
    x2=phi   
    y2=np.sin(phi)+2
    x,y=intersection(x1,y1,x2,y2)
    plt.plot(x1,y1,c='r')
    plt.plot(x2,y2,c='g')
    plt.plot(x,y,'*k')
    plt.show()
    """
    ii,jj=_rectangle_intersection_(x1,y1,x2,y2)
    n=len(ii)

    dxy1=np.diff(np.c_[x1,y1],axis=0)
    dxy2=np.diff(np.c_[x2,y2],axis=0)

    T=np.zeros((4,n))
    AA=np.zeros((4,4,n))
    AA[0:2,2,:]=-1
    AA[2:4,3,:]=-1
    AA[0::2,0,:]=dxy1[ii,:].T
    AA[1::2,1,:]=dxy2[jj,:].T

    BB=np.zeros((4,n))
    BB[0,:]=-x1[ii].ravel()
    BB[1,:]=-x2[jj].ravel()
    BB[2,:]=-y1[ii].ravel()
    BB[3,:]=-y2[jj].ravel()

    for i in range(n):
        try:
            T[:,i]=np.linalg.solve(AA[:,:,i],BB[:,i])
        except:
            T[:,i]=np.NaN


    in_range= (T[0,:] >=0) & (T[1,:] >=0) & (T[0,:] <=1) & (T[1,:] <=1)

    xy0=T[2:,in_range]
    xy0=xy0.T
    return xy0[:,0],xy0[:,1]


if __name__ == '__main__':

    # a piece of a prolate cycloid, and am going to find
    a, b = 1, 2
    phi = np.linspace(3, 10, 100)
    x1 = a*phi - b*np.sin(phi)
    y1 = a - b*np.cos(phi)

    x2=phi
    y2=np.sin(phi)+2
    x,y=intersection(x1,y1,x2,y2)
    plt.plot(x1,y1,c='r')
    plt.plot(x2,y2,c='g')
    plt.plot(x,y,'*k')
    plt.show()
Kostenberechnung Aktien- und / Optionen
bei Comdirect -->mit excel VBA
bei TWS --> muss nach der Formel suchen ?
--------------------------------------------
Case 1: ' comdirect
'---------------------------------------------------
baseCost = 4.9: max1 = 59.9: min1 = 9.9
costActual = baseCost + 0.0025 * (Cells(35, ActiveCell.Column) * Cells(36, ActiveCell.Column))

If costActual < min1 Then costActual = 9.9
If costActual > max1 Then costActual = 59.9
If costActual > min1 And costActual < max1 Then cost = costActual

costRabatt = costActual * 0.85 'bei 15 % Rabatt

breakEven = ActiveCell.Offset(-1, 0) + 2 * (costRabatt / ActiveCell.Offset(-2, 0)) ' KK + 2 x costRabatt = B/E
msgStr = "comdirect"

Case 2: ' TWS
Kauf heute HEI1 (Heidelbergcement) 500 stk (smart) Kosten 35.76 € + Option 5 Kontrakte 10 €
--> muss noch nach der Berechnungsmethode suchen
- kann gerne auch gepostet werden thx
CBOE Daten als download in excel csv file
und mit Python auswerten,.....
läuft in IDLE und notebook jupyter

Anmerkung:
nach dem download der script müssen diese umbenannt werden
für python:  CBOE_VIX_Graph_180820.py
für jupyter Notebook:  CBOE_VIX_Graph_180820.ipynb

Grafik ist dazu bei bimbes (Stillhalter....) 18.8.20 abgebildet
EOD data von ALV (Dax30)
---------------------------------
dieses Beispiel als scriplet erzeugt aus Datenreihen buy/sell Signale
mit grafischer Darstellung.
Lauffähiges file für Python IDLE oder Notebook jupyter im Anhang:
Charts ebenso
---------------------------------
Hat jemand im Forum py script für Optmierungsläufe der Parameter ?
feedback jeder Art wäre hilfreich 
---------------------------------

py_macd_buy_sell_signal.txt   -->  *.txt  in  *.py umbenennen
(file ist virenfrei)
 
-------------------------------------------------------------------- 
Besprechung zur Generierung von crossover Signalen 
-------------------------------------------------------------------- 
für Datenreihen aus: --High, Low, Close, Adj Close, Volume
für Indikator-Reihen z.B. : -- macd, sma, ema, etc.....
--------------------------------------------------------------------
scriplet:
erzeugen eines macd buy/sell signals :
###-------------------------------------------------------
sma12 = df['Adj Close'].rolling(12).mean()
sma26 = df['Adj Close'].rolling(26).mean()
MACD = sma12 -sma26
signal = MACD.ewm(span=9, adjust=False).mean()
###-------------------------------------------------------
# create new columns
df['MACD'] = MACD
df['Signal Line'] = signal
#-----------------------------
### generate buy sell signal from macd crossover
def buy_sell(signal):
    Buy=[]
    Sell=[]
    flag=-1
    for i in range(0,len(signal)):
        if signal['MACD'][i] > signal['Signal Line'][i]:
            Sell.append(np.nan)
            if flag != 1:
                Buy.append(signal['Close'][i])
                flag = 1
            else:
                Buy.append(np.nan)
        #------------------------------------------------
        elif signal['MACD'][i] < signal['Signal Line'][i]:
            Buy.append(np.nan)
            if flag != 0:
                Sell.append(signal['Close'][i])
                flag = 0
            else:
                Sell.append(np.nan)
        else:
            Buy.append(np.nan)
            Sell.append(np.nan)
    return(Buy, Sell)
#-------------------------------------------------
#  store macd buy and sell signal
a = buy_sell(df)
df['Buy_Signal']= a[0]
df['Sell_Signal']= a[1]
#-------------------------------------------------
# visually show stock buy sell data
plt.figure(figsize=(10,4.5))
plt.scatter(df.index,df['Buy_Signal'], color='green',label='macd Buy', marker='^',alpha=1)
plt.scatter(df.index,df['Sell_Signal'], color='red',label='macd Sell', marker='v',alpha=1)
plt.plot(df['MACD'], label='SMA26', alpha = 0.9)
plt.plot(df['Signal Line'], label='Close Price', alpha = 0.9)
plt.plot(df['Close'], label='Close Price', alpha = 0.9)
titel = symb1 + '  Price ' + '( Dax30 )' + '  \n' + 'macd buy/sell signal on close '
plt.title(titel)
plt.xlabel('Date as index -> 2.1.20 - 28.8.20')
plt.ylabel('Close Price')
plt.legend(loc='upper left')
plt.show()
#-------------------------------------------------
EOD backtesting link gefunden
im Chartfenster ist die Zeitachse verschiebbar
(sind Daten 2004 - 2012 hinterlegt)

py file--> in jupyter ausprobiert >> sehr impressive <<

Garfik : bt.plot()
Ausdruck (Auswertung): print(stats)

https://pypi.org/project/Backtesting/
Ich habe Jupiter laufen. Aber wenig Zeit momentan. Ist das Python 3 oder noch 2?
Ich verstehe das hier nicht.
Hier werden wild code snippets gepostet um was zu tun oder zu erreichen?  

@rienneva: laut Doku will das Projekt python 3.4  oder höher.
(30.08.2020, 16:35)rienneva schrieb: [ -> ]Ich habe Jupiter laufen. Aber wenig Zeit momentan. Ist das Python 3 oder noch 2?


----------------------------------------------------------
die scripts + lets laufen bei mir mit
Python 3.7.6 aktuelle Version - 64 bit auf win10 -
'3.7.6 (default, Jan 8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)]'
------------------------------
IDLE
------
jupyter Notebook aktuell
zum Prüfen von script Teilen gut zum testen :-)
----------------------------------------------------------

Absicht: für Privatanwender
EOD Daten Abruf
zur Auswertung nach eigenen Vorstellungen
mit excel oder python
---------------------------
scripts für diese apps austauschenen / erweitern / ändern jederzeit (selbst)

es gibt Profi-Apps:
TWS(IB), ProRealtime, TradingDesk Boerse Stuttgart,
Agenatrader, u.a.......um nur einige zu nennen
info update für multi symbol data:
EOD Daten free über yahoo (Open,High,Low,Close,Volume)
------------------------------------------------------------------
Ref: https://pypi.org/project/yfinance/
------------------------------------------------------------------
Ziel:.............eigene Strategien ausprobieren
Zeitrahmen:..getestet 1-1-2000 bis 4-3-21
Tool:.............jupyter
Sprache:.......python
code:...........3-zeilig
--------------------------------------
import yfinance as yf
data = yf.download("SPY AAPL MSFT", start="2000-01-01", end="2021-03-04")
print(data)
--------------------------------------
Beispiel Extrakt
*********************100%***********************] 3 of 3 completed
Adj Close Close \
AAPL MSFT SPY AAPL MSFT
Date
1999-12-31 0.790705 37.076923 99.116180 0.917969 58.375000
....
Seiten: 1 2 3 4 5 6 7