Пример #1
0
def update_candle(n, tick, start_date, end_date):
    code = 'WSE/' + tick
    df = pdr.get_data_quandl(code,
                             api_key='fHsXs9kzqak6UF1haCww',
                             start=start_date,
                             end=end_date)
    figure = {
        'data': [
            go.Candlestick(x=df.index,
                           open=df['Open'],
                           close=df['Close'],
                           low=df['Low'],
                           high=df['High'],
                           increasing_line_color='lime',
                           decreasing_line_color='red')
        ],
        'layout':
        go.Layout(height=350,
                  title='Candlestick chart for {}'.format(tick),
                  plot_bgcolor='#434247',
                  paper_bgcolor='#434247',
                  yaxis={'gridcolor': '#35353b'},
                  xaxis={'gridcolor': '#35353b'},
                  font={'color': '#d8d8d8'},
                  margin=dict(t=30, b=0, l=60, r=60))
    }
    return figure
Пример #2
0
def update_sharpe(n, ticks, tries, start_date, end_date):
    if len(ticks) >= 2:
        df = pd.DataFrame()
        ret_arr = np.zeros(tries)
        vol_arr = np.zeros(tries)
        sr_arr = np.zeros(tries)

        for name in ticks:
            tick = 'WSE/' + name
            df_tick = pdr.get_data_quandl(tick,
                                          api_key='fHsXs9kzqak6UF1haCww',
                                          start=start_date,
                                          end=end_date)
            df_tick.rename({'Close': name}, axis=1, inplace=True)
            df = df.join(df_tick[name], how='outer')

        logs = np.log(df / df.shift(-1))
        all_weights = np.zeros((tries, len(logs.columns)))

        for i in range(tries):
            weights = np.array(np.random.random(len(logs.columns)))
            weights = weights / np.sum(weights)
            all_weights[i, :] = weights
            ret_arr[i] = np.sum(logs.mean() * weights * len(logs))
            vol_arr[i] = np.sqrt(
                np.dot(weights.T, np.dot(logs.cov() * len(logs), weights)))
            sr_arr[i] = ret_arr[i] / vol_arr[i]

        weights_as_string = []
        for weight in all_weights:
            weights_as_string.append(', '.join(
                str(round(i, 3)) for i in weight))

        df = pd.DataFrame({
            'returns': ret_arr,
            'volatility': vol_arr,
            'sharpe': sr_arr,
            'weights': weights_as_string
        })

        figure = px.scatter(df,
                            x='volatility',
                            y='returns',
                            color='sharpe',
                            color_continuous_scale='RdPu_r',
                            hover_data=['weights'])

        figure.update_traces(marker=dict(size=9, line=dict(width=1)))

        figure.update_layout(title='Portfolio allocation for {}'.format(
            ', '.join(ticks)),
                             yaxis={'gridcolor': '#35353b'},
                             xaxis={'gridcolor': '#35353b'},
                             xaxis_title='Volatility',
                             yaxis_title='Returns',
                             plot_bgcolor='#434247',
                             paper_bgcolor='#434247',
                             margin=dict(t=40, b=30, l=60, r=60),
                             font={'color': '#d8d8d8'})
        return figure
Пример #3
0
def update_line(n, ticks, start_date, end_date):
    traces = []
    for name, color in zip(ticks, colors):
        tick = 'WSE/' + name
        df = pdr.get_data_quandl(tick,
                                 api_key='fHsXs9kzqak6UF1haCww',
                                 start=start_date,
                                 end=end_date)
        traces.append({
            'x': df.index,
            'y': df['Close'],
            'name': name,
            'mode': 'lines',
            'line': dict(color=color)
        })
    figure = {
        'data': traces,
        'layout': {
            'height': 300,
            'title': 'Stock chart for {}'.format(', '.join(ticks)),
            'yaxis': {
                'gridcolor': '#35353b'
            },
            'xaxis': {
                'gridcolor': '#35353b'
            },
            'plot_bgcolor': '#434247',
            'paper_bgcolor': '#434247',
            'margin': dict(t=40, b=30, l=60, r=60),
            'font': {
                'color': '#d8d8d8'
            }
        }
    }
    return figure
Пример #4
0
def download_stock(symbol, start_date, end_date, save=True):
    stock = pdr.get_data_quandl(symbol, start_date, end_date)
    stock = stock[::-1]
    stock.columns = [s.lower() for s in stock.columns]
    stock = stock[['open', 'high', 'low', 'close', 'volume']]

    if save:
        name = symbol + '.csv'
        path = config.path_to_data + '/' + name
        stock.to_csv(path)

    return stock
 def create_from_quandl(cls, instrument, *args, **kwargs):
     """ Загрузка данных через pandas_datareader is https://www.quandl.com
     """
     df = pdr.get_data_quandl(instrument,
                              api_key=os.environ.get('QUANDL_API_KEY'),
                              *args,
                              **kwargs)
     return cls.create_(
         instrument, df.index.values, df, **{
             'o': 'AdjOpen',
             'h': 'AdjHigh',
             'l': 'AdjLow',
             'c': 'AdjClose',
             'v': 'AdjVolume'
         })
Пример #6
0
def update_indices(n):
    rates = []
    changes = []
    traces = []
    try:
        req = requests.get("https://stooq.pl/t/?i=528")
        soup = BeautifulSoup(req.text, 'html.parser')
        for index in indices:
            rates.append(
                float(soup.find(text=index).next_element.next_sibling.text))
            try:
                changes.append(
                    float(
                        soup.find(text=index).next_element.next_sibling.
                        next_sibling.next_sibling.text))
            except:
                continue

        if len(changes) == len(indices):
            for number, index, rate, change in zip(range(len(indices)),
                                                   indices, rates, changes):
                traces.append(
                    go.Indicator(mode='number+delta',
                                 title=index,
                                 title_font_size=14,
                                 number_font_size=20,
                                 value=rate,
                                 delta={
                                     'reference': rate - change,
                                     'relative': True,
                                     'valueformat': '.2%'
                                 },
                                 domain={
                                     'row': 1,
                                     'column': number
                                 }))
        else:
            for number, index, rate in zip(range(len(indices)), indices,
                                           rates):
                traces.append(
                    go.Indicator(mode='number',
                                 title=index,
                                 title_font_size=14,
                                 number_font_size=20,
                                 value=rate,
                                 domain={
                                     'row': 1,
                                     'column': number
                                 }))
        figure = {
            'data':
            traces,
            'layout':
            go.Layout(grid={
                'rows': 1,
                'columns': len(indices),
                'pattern': "independent"
            },
                      margin=dict(t=30, b=0, l=0, r=0),
                      plot_bgcolor='#35353b',
                      paper_bgcolor='#35353b',
                      font={'color': '#d8d8d8'},
                      height=70)
        }
        return figure

    except:
        try:
            inds = [
                'WIG', 'WIG20', 'MWIG40', 'SWIG80', 'WIG_ODZIEZ', 'WIG_LEKI'
            ]
            traces = []
            for index, number in zip(inds, range(len(inds))):
                code = 'WSE/' + index
                df = pdr.get_data_quandl(code,
                                         api_key='fHsXs9kzqak6UF1haCww',
                                         start=datetime.today().date() -
                                         timedelta(days=5))
                traces.append(
                    go.Indicator(mode='number',
                                 title=index,
                                 title_font_size=14,
                                 number_font_size=20,
                                 value=df['Close'][0],
                                 domain={
                                     'row': 1,
                                     'column': number
                                 }))
                figure = {
                    'data':
                    traces,
                    'layout':
                    go.Layout(grid={
                        'rows': 1,
                        'columns': len(inds),
                        'pattern': "independent"
                    },
                              margin=dict(t=30, b=0, l=0, r=0),
                              plot_bgcolor='#35353b',
                              paper_bgcolor='#35353b',
                              font={'color': '#d8d8d8'},
                              height=70)
                }
            return figure
        except:
            figure = {
                'data': [
                    go.Indicator(
                        title='Could not connect to stooq to get index data',
                        title_font_size=20,
                        number_font_size=1)
                ],
                'layout':
                go.Layout(plot_bgcolor='#35353b',
                          paper_bgcolor='#35353b',
                          font={'color': 'tomato'},
                          height=70)
            }
            return figure
Пример #7
0
def get_stock_quandl(stock):
    return DataFrame(
        pdr.get_data_quandl(stock,
                            api_key="A83E-dJAdqmse9P-Tpng",
                            session=session))
Пример #8
0
#import what tickers were being monitored on twitter
tickers = open('TickersToTrack.txt').read().splitlines()

#plot and to some analysis
for tick in tickers:
    s = tick.lower()
    data = df[df.Stock == s]
    #plt.plot(data['Date'],data['Sentiment'],'-r')
    #plt.title(s)
    #plt.xlabel('Date')
    #plt.ylabel('Sentiment')

    #plot tickers with stock price
    startDate = datetime.datetime(2018, 2, 1)
    endDate = datetime.datetime(2018, 2,
                                5)  #must be datetime.datetime(yyyy,mm,dd)

    # Import stock data using pandasreader
    try:
        dfstock = pdr.get_data_quandl(tick[1::], start=startDate, end=endDate)
        dfstock = dfstock.reindex(
            index=dfstock.index[::-1])  #flip index so 0th row is oldest date

        plt.plot(dfstock['Close'], data['Sentiment'], 'g-')
        plt.title('Close to Sentiment: ' + tick[1::])
        plt.xlabel('Close')
        plt.ylabel('Sentiment')
        plt.show()
    except:
        print("Couldn't get data for ticker: " + tick[1::])
Пример #9
0
# scatter plot the data
import pandas_datareader.data as web
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import minimize
start = '2017-04-22'
end = '2018-04-22'

from pandas_datareader import data, wb
import pandas_datareader as pdr
pdr.get_data_yahoo(
    'AAPL', start=start,
    end=end)  # if by default, returns 2009-2019, 2403 rows, daily stock data
pdr.get_data_quandl('EOD/BA',
                    start=start,
                    end=end,
                    api_key='DGCrDAbR7GMbx7v9wSCW')


def get_risk(prices):
    return (prices / prices.shift(1) - 1).dropna().std().values


def get_return(prices):
    return ((prices / prices.shift(1) - 1).dropna().mean() *
            np.sqrt(250)).values


# symbols = ['BA', 'AAPL', 'BRK_A', 'MSFT']
symbols = ['BA', 'C', 'AAL', 'NFLX']
prices = pd.DataFrame(index=pd.date_range(start, end))
Пример #10
0
 def data(ticker):
   return (pdr.get_data_quandl(ticker, start=startdate, end=enddate))
Пример #11
0
#pd.scatter_matrix(daily_pct_change, diagonal='kde', alpha=0.1,figsize=(12,12))   # this function is broken, use pd.plotting as pdp
pdp.scatter_matrix(daily_pct_change, diagonal='kde', alpha=0.1,figsize=(12,12))

plt.savefig('all_data_quandl_4_scattermatrix.png')
plt.show()


'''
Moving Windows, when u compute the stats on window of data by a particular period of time, then slide the window 
across the data by a specific interval. Continually calculated as long as the window falls first within the dates
of the time series.
'''
#data = quandl.get('AAPL', authtoken='-VQTkx89BPNGVyjKvD1p')
# from earlier reference (file1)
aapl = pdr.get_data_quandl('AAPL',
                           start=datetime.datetime(2006, 10, 1),
                           end=datetime.datetime(2018, 1, 1))



#must use own data, can request 20 pulls per 10 min from quandl (uses AdjClose)
#csv (uses Close)
#aapl = pd.read_csv('aapl_ohlc.csv')

adj_close_px_aapl = aapl['AdjClose']

# Calculate the moving average:
# rolling_mean(window[, min_periods, ...]) 'Moving mean'.
# rolling_std(arg, window[, min_periods, ...]) 	'Moving standard deviation'.
# rolling_max(arg, window[, min_periods, ...]) 	'Moving max of 1d array of dtype=float64 along axis=0 ignoring NaNs'.
# rolling_var(arg, window[, min_periods, ...]) 	'Numerically stable implementation using Welford’s method'.
Пример #12
0
import pandas as pd
import pandas_datareader as pdr

pd.core.common.is_list_like = pd.api.types.is_list_like

# 데이터프레임 저장
# www.quandl.com에 가입하여 api_key받기
tesla = pdr.get_data_quandl('TSLA', api_key='받은 키 입력~')
# dataframe을 파일로 저장
tesla.to_csv('tesla_stock_quandl.csv')

# date열을 datetime형으로 변환
tesla = pd.read_csv('tesla_stock_quandl.csv', parse_dates=[0])
# date열을 tesla dataframe의 인덱스로 저장
tesla.index = tesla['Date']
# 예시로 2015년의 데이터 추출
print(tesla['2015'].iloc[:5, :5])
# data열의 최솟값을 빼서 데이터 수집이후 시간흘렀는지 확인해보기
# 그 시간을 ref_date열로 추가
tesla['ref_date'] = tesla['Date'] - tesla['Date'].min()
# ref_date열을 인덱스로 지정해서 최초 5일의 데이터 추출
tesla.index = tesla['ref_date']
print(tesla['5 days':].iloc[:5, :5])