def analyzeGoldenAndDeathCross(companyName='GOOG',
                               nDays_short=50,
                               nDays_long=200,
                               start='2019-10-31'):
    # Load dataframe for company
    dataFr = general.loadCompanyData(companyName, start=start)

    # Create moving average columns
    dataFr = getMovingAverage(dataFr, colName='Close', nDays=nDays_short)
    dataFr = getMovingAverage(dataFr, colName='Close', nDays=nDays_long)

    fig = plt.figure(figsize=(20, 10))
    ax = fig.add_subplot(111)
    ax.plot(dataFr['Date'].to_list(),
            dataFr['Close'].to_list(),
            label='Closing')
    ax.plot(dataFr['Date'].to_list(),
            dataFr['movingAverage_{}'.format(nDays_short)].to_list(),
            label='{}-day SMA'.format(nDays_short),
            linewidth=3)
    ax.plot(dataFr['Date'].to_list(),
            dataFr['movingAverage_{}'.format(nDays_long)].to_list(),
            label='{}-day SMA'.format(nDays_long),
            linewidth=3)
    plt.xticks(rotation=45, ha="right")
    for n, label in enumerate(ax.xaxis.get_ticklabels()):
        if n % every_nth != 0:
            label.set_visible(False)
    plt.legend(prop={'size': 20})
Ejemplo n.º 2
0
def computeAndPlotFullStochasticOscillator(companyName='GOOG',
                                           n1=14,
                                           n2=3,
                                           n3=3,
                                           start='2019-10-31',
                                           every_nth=20):
    # Load dataframe for company
    dataFr = general.loadCompanyData(companyName, start=start)

    dataFr['fast_%K'] = STOK(dataFr, n1)
    # SMA
    dataFr['full_%K'] = dataFr['fast_%K'].rolling(n2).mean()
    dataFr['full_%D'] = dataFr['full_%K'].rolling(n3).mean()

    fig = plt.figure(figsize=(20, 10))
    # set height ratios for sublots
    gs = gridspec.GridSpec(2, 1, height_ratios=[2, 1])

    # the fisrt subplot
    ax0 = plt.subplot(gs[0])
    #     ax0.plot(dataFr['Date'].to_list(),
    #                 dataFr['Close'].to_list(),
    #                 label='Closing');
    highList = dataFr['High'].to_list()
    lowList = dataFr['Low'].to_list()
    dateList = dataFr['Date'].to_list()
    closeList = dataFr['Close'].to_list()
    lowerError = [a - b for a, b in zip(closeList, lowList)]
    upperError = [a - b for a, b in zip(highList, closeList)]
    ax0.errorbar(x=dateList,
                 y=closeList,
                 yerr=[lowerError, upperError],
                 fmt='o')
    for n, label in enumerate(ax0.xaxis.get_ticklabels()):
        if n % every_nth != 0:
            label.set_visible(False)
    plt.xticks(rotation=45, ha="right")

    # the second subplot
    ax1 = plt.subplot(gs[1], sharex=ax0)
    ax1.plot(dataFr['Date'].to_list(),
             dataFr['full_%K'].to_list(),
             label='Full %K',
             c='r')
    ax1.plot(dataFr['Date'].to_list(),
             dataFr['full_%D'].to_list(),
             label='Full %D',
             c='k')
    ax1.axhline(y=50, linestyle='-.')
    ax1.axhline(y=20, linestyle='-')
    ax1.axhline(y=80, linestyle='-')
    for n, label in enumerate(ax1.xaxis.get_ticklabels()):
        if n % every_nth != 0:
            label.set_visible(False)
    plt.xticks(rotation=45, ha="right")
    plt.yticks([0, 20, 50, 80, 100])
    plt.legend(prop={'size': 14})
Ejemplo n.º 3
0
def getRSI(companyName='GOOG', start='2020-01-01', n=14, every_nth=20):
    # Load dataframe for company
    dataFr = general.loadCompanyData(companyName, start=start)
    dataFr.index = range(len(dataFr))

    dataFr['change'] = dataFr['Close'].diff()
    dataFr['gain'] = dataFr.change.mask(dataFr.change < 0, 0.0)
    dataFr['loss'] = -dataFr.change.mask(dataFr.change > 0, -0.0)
    dataFr.loc[n:, 'avg_gain'] = rma(dataFr.gain[n + 1:].values, n,
                                     dataFr.loc[:n, 'gain'].mean())
    dataFr.loc[n:, 'avg_loss'] = rma(dataFr.loss[n + 1:].values, n,
                                     dataFr.loc[:n, 'loss'].mean())
    dataFr['rs'] = dataFr.avg_gain / dataFr.avg_loss
    dataFr['rsi_14'] = 100 - (100 / (1 + dataFr.rs))

    # Plot data
    fig = plt.figure(figsize=(20, 10))
    # set height ratios for sublots
    gs = gridspec.GridSpec(2, 1, height_ratios=[2, 1])

    # the first subplot
    ax0 = plt.subplot(gs[0])
    #     ax0.plot(dataFr['Date'].to_list(),
    #                 dataFr['Close'].to_list(),
    #                 label='Closing');
    highList = dataFr['High'].to_list()
    lowList = dataFr['Low'].to_list()
    dateList = dataFr['Date'].to_list()
    closeList = dataFr['Close'].to_list()
    lowerError = [a - b for a, b in zip(closeList, lowList)]
    upperError = [a - b for a, b in zip(highList, closeList)]
    ax0.errorbar(x=dateList,
                 y=closeList,
                 yerr=[lowerError, upperError],
                 fmt='o')
    for n, label in enumerate(ax0.xaxis.get_ticklabels()):
        if n % every_nth != 0:
            label.set_visible(False)
    plt.xticks(rotation=45, ha="right")

    # the second subplot
    ax1 = plt.subplot(gs[1], sharex=ax0)
    ax1.plot(dataFr['Date'].to_list(),
             dataFr['rsi_14'].to_list(),
             label='RSI',
             c='c')
    ax1.axhline(y=50, linestyle='-.', color='k')
    ax1.axhline(y=30, linestyle='-', color='g')
    ax1.axhline(y=70, linestyle='-', color='r')
    for n, label in enumerate(ax1.xaxis.get_ticklabels()):
        if n % every_nth != 0:
            label.set_visible(False)
    plt.xticks(rotation=45, ha="right")
    plt.yticks([0, 30, 50, 70, 100])
    plt.legend(prop={'size': 12}, loc='upper left')
Ejemplo n.º 4
0
def getMACD(companyName='GOOG',
            start='2020-01-01',
            n1=12,
            n2=26,
            n3=9,
            every_nth=20):
    # Load dataframe for company
    dataFr = general.loadCompanyData(companyName, start=start)

    dataFr = getExponentialMovingAverage(dataFr, nDays=n1)
    dataFr = getExponentialMovingAverage(dataFr, nDays=n2)

    dataFr['MACD'] = dataFr.apply(
        lambda row: (row['EMA_{}'.format(n1)] - row['EMA_{}'.format(n2)]),
        axis=1)

    dataFr = getSignalLine(dataFr, colName='MACD', nDays=n3, n2=n2)

    dataFr['MACD_histogram'] = dataFr.apply(
        lambda row: row['MACD'] - row['SignalLine'], axis=1)

    # Plot data
    fig = plt.figure(figsize=(20, 10))
    # set height ratios for sublots
    gs = gridspec.GridSpec(2, 1, height_ratios=[2, 1])

    # the first subplot
    ax0 = plt.subplot(gs[0])
    #     ax0.plot(dataFr['Date'].to_list(),
    #                 dataFr['Close'].to_list(),
    #                 label='Closing');
    highList = dataFr['High'].to_list()
    lowList = dataFr['Low'].to_list()
    dateList = dataFr['Date'].to_list()
    closeList = dataFr['Close'].to_list()
    lowerError = [a - b for a, b in zip(closeList, lowList)]
    upperError = [a - b for a, b in zip(highList, closeList)]
    ax0.errorbar(x=dateList,
                 y=closeList,
                 yerr=[lowerError, upperError],
                 fmt='o')
    for n, label in enumerate(ax0.xaxis.get_ticklabels()):
        if n % every_nth != 0:
            label.set_visible(False)
    plt.xticks(rotation=45, ha="right")
    ax0.plot(dateList,
             dataFr['EMA_{}'.format(n1)].to_list(),
             color='y',
             linewidth=3,
             label='{}-day EMA'.format(n1))
    ax0.plot(dateList,
             dataFr['EMA_{}'.format(n2)].to_list(),
             color='m',
             linewidth=3,
             label='{}-day EMA'.format(n2))
    plt.legend(prop={'size': 12}, loc='upper left')

    # the second subplot
    ax1 = plt.subplot(gs[1], sharex=ax0)
    ax1.plot(dataFr['Date'].to_list(),
             dataFr['MACD'].to_list(),
             label='MACD',
             c='r')
    ax1.plot(dataFr['Date'].to_list(),
             dataFr['SignalLine'].to_list(),
             label='Signal Line',
             c='k')
    ax1.bar(dataFr['Date'].to_list(),
            dataFr['MACD_histogram'].to_list(),
            label='MACD histogram',
            width=0.2,
            color='g')
    for n, label in enumerate(ax1.xaxis.get_ticklabels()):
        if n % every_nth != 0:
            label.set_visible(False)
    plt.xticks(rotation=45, ha="right")
    plt.legend(prop={'size': 12}, loc='upper left')