Získání EOD (end of day) dat

Info o verzi a notebooku


In [1]:
import datetime

MY_VERSION = 1,0

print('Verze notebooku:', '.'.join(map(str, MY_VERSION)))
print('Poslední aktualizace:', datetime.datetime.now())


Verze notebooku: 1.0
Poslední aktualizace: 2017-07-07 09:22:04.230511

Informace o použitých python modulech


In [2]:
import sys
import datetime
import pandas as pd
import pandas_datareader as pdr
import quandl as ql

# Load Quandl API key
import json
with open('quandl_key.json','r') as f:
    quandl_api_key = json.load(f)
ql.ApiConfig.api_key = quandl_api_key['API-key']

print('Verze pythonu:')
print(sys.version)
print('---')
print('Pandas:', pd.__version__)
print('pandas-datareader:', pdr.__version__)
print('Quandl version:', ql.version.VERSION)


Verze pythonu:
3.5.3 (default, May 10 2017, 15:05:55) 
[GCC 6.3.1 20161221 (Red Hat 6.3.1-1)]
---
Pandas: 0.20.2
pandas-datareader: 0.4.0
Quandl version: 3.2.0

Import volně dostupných dat pomocí pandas-datareader

Služby jako Google finance, Yahoo! Finance, World Bank, a další poskytují data a informace o finančních trzích. Package pandas-datareader umožňuje velmi jednoduše získat data z těchto zdrojů. Seznam všech zdrojů je možné nalézt v dokumentaci.

Bohužel momentálně nefunguje v pandas-datareader verze 0.4.0 yahoo finance. Nedávno yahoo změnilo api a ještě není zapracováno do pandas-datareaderu, info tady https://github.com/pydata/pandas-datareader/issues/354.


In [ ]:
#import pandas_datareader as pdr
import pandas_datareader.data as pdr_web
import datetime 

start_date = datetime.datetime(2015, 1, 1)
end_date = datetime.datetime.now()

sp500 = pdr.get_data_yahoo('^GSPC', 
                          start=start_date, 
                          end=end_date)
sp500

In [5]:
import pandas_datareader.data as pdr_web

start_date = datetime.datetime(2015, 1, 1)
end_date = datetime.datetime.now()


QQQ = pdr_web.DataReader("NASDAQ:QQQ", 'google', start=start_date, end=end_date)
QQQ.head()


Out[5]:
Open High Low Close Volume
Date
2015-01-02 103.76 104.20 102.44 102.94 31314599
2015-01-05 102.49 102.61 101.14 101.43 36521270
2015-01-06 101.58 101.75 99.62 100.07 66205451
2015-01-07 100.73 101.60 100.48 101.36 37577361
2015-01-08 102.22 103.50 102.11 103.30 40212640

Import dat pomocí Quandlu

Jedna z nejkvalitnějších volně dostupných databází pro futures je CHRIS-Wiki. A pro volně dostupné data jednotlivých akcií pak Wiki databáze. Obě databáze jsou spravované Quandl komunitou.

Bohužel služba Quandl zrušila databáze Yahoo finance a Google finance. Info o databázích google finance a yahoo na https://www.quantopian.com/posts/quandl-dropping-goog-and-yahoo-databases.


In [6]:
import datetime
import quandl as ql

# Load Quandl API key
import json
with open('quandl_key.json','r') as f:
    quandl_api_key = json.load(f)
ql.ApiConfig.api_key = quandl_api_key['API-key']

start_date = datetime.datetime(2015, 1, 1)
end_date = datetime.datetime.now()

ES = ql.get("CHRIS/CME_ES1", start_date=start_date, end_date=end_date)
ES.head()


Out[6]:
Open High Low Last Change Settle Volume Previous Day Open Interest
Date
2015-01-02 2055.00 2067.25 2038.75 2046.25 6.25 2046.25 1357107.0 2769700.0
2015-01-05 2045.75 2048.25 2009.50 2018.00 30.25 2016.00 2032736.0 2746750.0
2015-01-06 2019.00 2023.50 1984.25 1995.25 21.50 1994.50 2344320.0 2735166.0
2015-01-07 1996.50 2023.75 1995.75 2020.25 25.00 2019.50 1750412.0 2738793.0
2015-01-08 2020.50 2058.50 2020.25 2054.00 35.50 2055.00 1551040.0 2719370.0

In [7]:
start_date = datetime.datetime(2015, 1, 1)
end_date = datetime.datetime.now()
ES = ql.get("CHRIS/CME_ES1", start_date=start_date, end_date=end_date)
ES.head()


Out[7]:
Open High Low Last Change Settle Volume Previous Day Open Interest
Date
2015-01-02 2055.00 2067.25 2038.75 2046.25 6.25 2046.25 1357107.0 2769700.0
2015-01-05 2045.75 2048.25 2009.50 2018.00 30.25 2016.00 2032736.0 2746750.0
2015-01-06 2019.00 2023.50 1984.25 1995.25 21.50 1994.50 2344320.0 2735166.0
2015-01-07 1996.50 2023.75 1995.75 2020.25 25.00 2019.50 1750412.0 2738793.0
2015-01-08 2020.50 2058.50 2020.25 2054.00 35.50 2055.00 1551040.0 2719370.0

In [8]:
start_date = datetime.datetime(2015, 1, 1)
end_date = datetime.datetime.now()
SPY = pdr_web.DataReader("NYSEARCA:SPY", 'google', start=start_date, end=end_date)
SPY.head()


Out[8]:
Open High Low Close Volume
Date
2015-01-02 206.38 206.88 204.18 205.43 121465865
2015-01-05 204.17 204.37 201.35 201.72 169632646
2015-01-06 202.09 202.72 198.86 199.82 209151408
2015-01-07 201.42 202.72 200.88 202.31 125346709
2015-01-08 204.01 206.16 203.99 205.90 147217784

In [9]:
start_date = datetime.datetime(2015, 1, 1)
end_date = datetime.datetime.now()
IJH = pdr_web.DataReader("NYSEARCA:IJH", 'google', start=start_date, end=end_date)
IJH.head()


Out[9]:
Open High Low Close Volume
Date
2015-01-02 145.60 145.78 143.55 144.59 1115204
2015-01-05 143.63 144.21 142.05 142.42 1180490
2015-01-06 142.68 142.75 140.05 140.84 2261370
2015-01-07 141.85 142.75 141.37 142.75 805579
2015-01-08 143.80 145.02 143.66 144.95 920806

In [10]:
start_date = datetime.datetime(2015, 1, 1)
end_date = datetime.datetime.now()
MDY = pdr_web.DataReader("NYSEARCA:MDY", 'google', start=start_date, end=end_date)
MDY.head()


Out[10]:
Open High Low Close Volume
Date
2015-01-02 265.28 265.83 261.67 263.55 1532724
2015-01-05 261.90 262.90 258.98 259.65 1108494
2015-01-06 259.96 260.31 255.32 256.61 2167816
2015-01-07 258.72 260.21 257.70 260.08 1278823
2015-01-08 261.91 264.42 261.89 264.11 3690469

In [11]:
start_date = datetime.datetime(2015, 1, 1)
end_date = datetime.datetime.now()
OEF = pdr_web.DataReader("NYSEARCA:OEF", 'google', start=start_date, end=end_date)
OEF.head()


Out[11]:
Open High Low Close Volume
Date
2015-01-02 91.46 91.54 90.34 90.82 1170888
2015-01-05 90.30 90.34 89.07 89.21 1691864
2015-01-06 89.34 89.66 88.01 88.41 1895744
2015-01-07 89.15 89.70 88.90 89.46 1722197
2015-01-08 90.13 91.24 90.13 91.09 1215850

In [12]:
start_date = datetime.datetime(2015, 1, 1)
end_date = datetime.datetime.now()
YM = ql.get("CHRIS/CME_YM1", start_date=start_date, end_date=end_date)
YM.head()


Out[12]:
Open High Low Last Change Settle Volume Previous Day Open Interest
Date
2015-01-02 17781.0 17884.0 17655.0 17729.0 None 17723.0 124972.0 115776.0
2015-01-05 17726.0 17746.0 17392.0 17464.0 None 17450.0 181349.0 118271.0
2015-01-06 17470.0 17502.0 17176.0 17293.0 None 17290.0 257163.0 114761.0
2015-01-07 17309.0 17524.0 17300.0 17520.0 None 17507.0 183550.0 112371.0
2015-01-08 17515.0 17846.0 17514.0 17811.0 None 17820.0 151625.0 109518.0

In [13]:
start_date = datetime.datetime(2015, 1, 1)
end_date = datetime.datetime.now()
DIA = pdr_web.DataReader("NYSEARCA:DIA", 'google', start=start_date, end=end_date)
DIA.head()


Out[13]:
Open High Low Close Volume
Date
2015-01-02 178.65 179.23 176.98 177.94 4997212
2015-01-05 177.06 177.21 174.46 174.84 6700209
2015-01-06 175.10 175.54 172.32 173.39 10131406
2015-01-07 174.85 175.79 174.24 175.59 5546974
2015-01-08 177.26 178.96 177.21 178.76 7166658

In [14]:
start_date = datetime.datetime(2015, 1, 1)
end_date = datetime.datetime.now()
NQ = ql.get("CHRIS/CME_NQ1", start_date=start_date, end_date=end_date)
NQ.head()


Out[14]:
Open High Low Last Change Settle Volume Previous Day Open Interest
Date
2015-01-02 4240.25 4272.75 4201.00 4214.50 18.5 4214.25 229555.0 334463.0
2015-01-06 4166.50 4172.50 4082.00 4102.25 NaN 4102.25 426154.0 340477.0
2015-01-07 4105.50 4163.25 4102.75 4151.50 NaN 4151.50 328184.0 335823.0
2015-01-08 4152.25 4242.75 4152.25 4232.25 NaN 4232.25 272056.0 321125.0
2015-01-09 4232.25 4252.50 4181.00 4200.75 NaN 4200.75 341966.0 317926.0

In [15]:
start_date = datetime.datetime(2015, 1, 1)
end_date = datetime.datetime.now()
QQQ = pdr_web.DataReader("NASDAQ:QQQ", 'google', start=start_date, end=end_date)
QQQ.head()


Out[15]:
Open High Low Close Volume
Date
2015-01-02 103.76 104.20 102.44 102.94 31314599
2015-01-05 102.49 102.61 101.14 101.43 36521270
2015-01-06 101.58 101.75 99.62 100.07 66205451
2015-01-07 100.73 101.60 100.48 101.36 37577361
2015-01-08 102.22 103.50 102.11 103.30 40212640

Crude Oil (Ropa)


In [16]:
start_date = datetime.datetime(2015, 1, 1)
end_date = datetime.datetime.now()
USO = pdr_web.DataReader("NYSEARCA:USO", 'google', start=start_date, end=end_date)
USO.head()


Out[16]:
Open High Low Close Volume
Date
2015-01-02 19.97 20.35 19.69 19.89 21106488
2015-01-05 19.33 19.36 18.79 18.79 31499541
2015-01-06 18.56 18.70 18.00 18.05 42234973
2015-01-07 18.30 18.65 18.05 18.37 31332565
2015-01-08 18.28 18.59 18.06 18.55 26705476

Gold


In [17]:
start_date = datetime.datetime(2015, 1, 1)
end_date = datetime.datetime.now()
GLD = pdr_web.DataReader("NYSEARCA:GLD", 'google', start=start_date, end=end_date)
GLD.head()


Out[17]:
Open High Low Close Volume
Date
2015-01-02 112.49 114.80 112.32 114.08 7109594
2015-01-05 114.78 116.00 114.73 115.80 8177350
2015-01-06 116.22 117.50 115.80 117.12 11238313
2015-01-07 116.47 116.88 116.17 116.43 6434196
2015-01-08 116.45 116.87 115.85 115.94 7033675

EOD jednotlivých amerických akcií


In [18]:
tickers = ['AAPL', 'GOOG']
#EODdata = ql.get_table('WIKI/PRICES', ticker=['AAPL'], paginate=True)
EODdata = ql.get_table('WIKI/PRICES', ticker=tickers, qopts = { 'columns': ['ticker', 'date', 'open', 'high', 'low', 'close', 'volume'] }, paginate=True)
EODdata


Out[18]:
ticker date open high low close volume
None
0 AAPL 1980-12-12 28.75 28.8700 28.7500 28.75 2093900.0
1 AAPL 1980-12-15 27.38 27.3800 27.2500 27.25 785200.0
2 AAPL 1980-12-16 25.37 25.3700 25.2500 25.25 472000.0
3 AAPL 1980-12-17 25.87 26.0000 25.8700 25.87 385900.0
4 AAPL 1980-12-18 26.63 26.7500 26.6300 26.63 327900.0
5 AAPL 1980-12-19 28.25 28.3800 28.2500 28.25 217100.0
6 AAPL 1980-12-22 29.63 29.7500 29.6300 29.63 166800.0
7 AAPL 1980-12-23 30.88 31.0000 30.8800 30.88 209600.0
8 AAPL 1980-12-24 32.50 32.6300 32.5000 32.50 214300.0
9 AAPL 1980-12-26 35.50 35.6200 35.5000 35.50 248100.0
10 AAPL 1980-12-29 36.00 36.1300 36.0000 36.00 415900.0
11 AAPL 1980-12-30 35.25 35.2500 35.1200 35.12 307500.0
12 AAPL 1980-12-31 34.25 34.2500 34.1300 34.13 159600.0
13 AAPL 1981-01-02 34.50 34.7500 34.5000 34.50 96700.0
14 AAPL 1981-01-05 33.87 33.8700 33.7500 33.75 159500.0
15 AAPL 1981-01-06 32.37 32.3700 32.2500 32.25 201600.0
16 AAPL 1981-01-07 31.00 31.0000 30.8800 30.88 248600.0
17 AAPL 1981-01-08 30.37 30.3700 30.2500 30.25 177800.0
18 AAPL 1981-01-09 31.88 32.0000 31.8800 31.88 96000.0
19 AAPL 1981-01-12 31.88 31.8800 31.6200 31.62 105800.0
20 AAPL 1981-01-13 30.63 30.6300 30.5000 30.50 102900.0
21 AAPL 1981-01-14 30.63 30.7500 30.6300 30.63 63800.0
22 AAPL 1981-01-15 31.25 31.5000 31.2500 31.25 62800.0
23 AAPL 1981-01-16 31.12 31.1200 31.0000 31.00 59800.0
24 AAPL 1981-01-19 32.87 33.0000 32.8700 32.87 185600.0
25 AAPL 1981-01-20 32.00 32.0000 31.8800 31.88 134300.0
26 AAPL 1981-01-21 32.50 32.7500 32.5000 32.50 71000.0
27 AAPL 1981-01-22 32.87 33.1300 32.8700 32.87 158700.0
28 AAPL 1981-01-23 32.87 33.0000 32.7500 32.75 50100.0
29 AAPL 1981-01-26 32.37 32.3700 32.2500 32.25 110000.0
... ... ... ... ... ... ... ...
10016 GOOG 2017-05-24 952.98 955.0900 949.5000 954.96 990248.0
10017 GOOG 2017-05-25 957.33 972.6290 955.4700 969.54 1645873.0
10018 GOOG 2017-05-26 969.70 974.9800 965.0300 971.47 1246186.0
10019 GOOG 2017-05-30 970.31 976.2000 969.4900 975.88 1455686.0
10020 GOOG 2017-05-31 975.02 979.2700 960.1800 964.86 2426589.0
10021 GOOG 2017-06-01 968.95 971.5000 960.0100 966.95 1403200.0
10022 GOOG 2017-06-02 969.46 975.8800 966.0000 975.60 1717212.0
10023 GOOG 2017-06-05 976.55 986.9100 975.1000 983.68 1221971.0
10024 GOOG 2017-06-06 983.16 988.2500 975.1400 976.57 1796904.0
10025 GOOG 2017-06-07 979.65 984.1500 975.7700 981.08 1429834.0
10026 GOOG 2017-06-08 982.35 984.5700 977.2000 983.41 1451232.0
10027 GOOG 2017-06-09 984.50 984.5000 935.6300 949.83 3270248.0
10028 GOOG 2017-06-12 939.56 949.3550 915.2328 942.90 3731589.0
10029 GOOG 2017-06-13 951.91 959.9800 944.0900 953.40 1995350.0
10030 GOOG 2017-06-14 959.92 961.1500 942.2500 950.76 1477033.0
10031 GOOG 2017-06-15 933.97 943.3390 924.4400 942.31 2055953.0
10032 GOOG 2017-06-16 940.00 942.0400 931.5950 939.78 2921393.0
10033 GOOG 2017-06-19 949.96 959.9900 949.0500 957.37 1494191.0
10034 GOOG 2017-06-20 957.52 961.6200 950.0100 950.63 1111840.0
10035 GOOG 2017-06-21 953.64 960.1000 950.7600 959.45 1192342.0
10036 GOOG 2017-06-22 958.70 960.7200 954.5500 957.09 940373.0
10037 GOOG 2017-06-23 956.83 966.0000 954.2000 965.59 1394008.0
10038 GOOG 2017-06-26 969.90 973.3100 950.7900 952.27 1581031.0
10039 GOOG 2017-06-27 942.46 948.2900 926.8500 927.33 2553771.0
10040 GOOG 2017-06-28 929.00 942.7500 916.0000 940.49 2712222.0
10041 GOOG 2017-06-29 929.92 931.2600 910.6200 917.79 3248393.0
10042 GOOG 2017-06-30 926.05 926.0500 908.3100 908.73 2035931.0
10043 GOOG 2017-07-03 912.18 913.9400 894.7900 898.70 1710189.0
10044 GOOG 2017-07-05 901.76 914.5100 898.5000 911.94 1743497.0
10045 GOOG 2017-07-06 904.12 914.9444 899.7000 906.69 1409533.0

10046 rows × 7 columns

Závěr

Získání dat v pythonu je velmi jednoduché a to díky nástrojům jako je panadas-datareader a Quandl, které získávají finanční data ze služeb Quandl Yahoo! finance a Google Finance, a dalších. Výhodou je, že data získaná pomocí těchto nástrojů jsou připravená přímo ve strukturách DataFrame a Series, které definuje knihovna pandas, vývíjená s cílem analýzy, zpracování, agregování, pivoting dat a mnoho dalších funkcí.

Zajímavost -> Někde jsem dokonce četl, že pandas je takový Excel/Spreadsheet na steroidech.