Esempio n. 1
0
def generate_indicator(ticker):
    # load the content from file
    f = 'data/' + ticker + '.txt'

    tickerData = mlab.csv2rec(f)
    tickerData.sort()

    prices = tickerData.adj_close

    volumes = tickerData.volume

    # only proceed if it's not a penny stock, with high liquidity
    # if

    # generate the MA
    ma20 = ti.moving_average(prices, 20, type='simple')
    ma200 = ti.moving_average(prices, 20, type='simple')

    # RSI
    rsi = ti.relative_strength(prices)

    # MACD
    emaSlow, emaFast, macd = ti.moving_average_convergence(prices,
                                                           nslow=26,
                                                           nfast=12)
    ema9 = ti.moving_average(macd, 9, type='exponential')

    return [tickerData, ma20, ma200, rsi, macd, ema9]
Esempio n. 2
0
def ma_crossover(ohlc_data):
    slow_lookback = 20
    fast_lookback = 10

    slow_ma = ti.moving_average(ohlc_data.tail(slow_lookback + 2), 20).tail(2)
    fast_ma = ti.moving_average(ohlc_data.tail(fast_lookback + 2), 10).tail(2)
    if fast_ma.iloc[0, 4] < slow_ma.iloc[0, 4] and fast_ma.iloc[
            1, 4] > slow_ma.iloc[1, 4]:
        return "buy"
    elif fast_ma.iloc[0, 4] > slow_ma.iloc[0, 4] and fast_ma.iloc[
            1, 4] < slow_ma.iloc[1, 4]:
        return "sell"
    else:
        return "none"
Esempio n. 3
0
def check_indicator(ticker):
    try:
        # [tickerData,ma20,ma200,rsi,macd,ema9]=generate_indicator(ticker)
        f = 'data/' + ticker + '.txt'

        tickerData = mlab.csv2rec(f)
        tickerData.sort()

        prices = tickerData.adj_close

        volumes = tickerData.volume

        # only proceed if it's not a penny stock, with high liquidity, with sufficient records
        if statistics.mean(volumes[-10:]) < 150000:
            return False
        if statistics.mean(prices[-10:]) < 1:
            return False
        if len(prices) < 200:
            return False

        # generate the MA
        ma20 = ti.moving_average(prices, 20, type='simple')
        ma200 = ti.moving_average(prices, 200, type='simple')

        # RSI
        rsi = ti.relative_strength(prices)

        # MACD
        emaSlow, emaFast, macd = ti.moving_average_convergence(prices,
                                                               nslow=26,
                                                               nfast=12)
        ema9 = ti.moving_average(macd, 9, type='exponential')

        # check RSI
        RSICheck = check_rsi(rsi)

        # check MACD
        MACDCheck = check_macd(macd, ema9)

        buySignal = RSICheck and MACDCheck

        if buySignal:
            1
            # plot_graph.plot(tickerData,ticker)

        return buySignal
    except FileNotFoundError:
        # print('Error with ticker '+ticker)
        return False
Esempio n. 4
0
         va='top',
         transform=ax1.transAxes,
         fontsize=textsize)
ax1.set_title('%s daily' % ticker)

# plot the price and volume data
dx = r.adj_close - r.close
low = r.low + dx
high = r.high + dx

deltas = np.zeros_like(prices)
deltas[1:] = np.diff(prices)
up = deltas > 0
ax2.vlines(r.date[up], low[up], high[up], color='black', label='_nolegend_')
ax2.vlines(r.date[~up], low[~up], high[~up], color='black', label='_nolegend_')
ma20 = ti.moving_average(prices, 20, type='simple')
ma200 = ti.moving_average(prices, 200, type='simple')

linema20, = ax2.plot(r.date, ma20, color='blue', lw=2, label='MA (20)')
linema200, = ax2.plot(r.date, ma200, color='red', lw=2, label='MA (200)')

last = r[-1]
s = '%s O:%1.2f H:%1.2f L:%1.2f C:%1.2f, V:%1.1fM Chg:%+1.2f' % (
    today.strftime('%d-%b-%Y'), last.open, last.high, last.low, last.close,
    last.volume * 1e-6, last.close - last.open)
t4 = ax2.text(0.3, 0.9, s, transform=ax2.transAxes, fontsize=textsize)

props = font_manager.FontProperties(size=10)
leg = ax2.legend(loc='center left', shadow=True, fancybox=True, prop=props)
leg.get_frame().set_alpha(0.5)
Esempio n. 5
0
def plot(r, ticker):
    today = datetime.date.today()
    plt.rc('axes', grid=True)
    plt.rc('grid', color='0.75', linestyle='-', linewidth=0.5)

    textsize = 9
    left, width = 0.1, 0.8
    rect1 = [left, 0.7, width, 0.2]
    rect2 = [left, 0.3, width, 0.4]
    rect3 = [left, 0.1, width, 0.2]

    fig = plt.figure(facecolor='white')
    axescolor = '#f6f6f6'

    ax1 = fig.add_axes(rect1, axisbg=axescolor)
    ax2 = fig.add_axes(rect2, axisbg=axescolor, sharex=ax1)
    ax2t = ax2.twinx()
    ax3 = fig.add_axes(rect3, axisbg=axescolor, sharex=ax1)

    prices = r.adj_close
    rsi = ti.relative_strength(prices)
    fillcolor = 'darkgoldenrod'

    ax1.plot(r.date, rsi, color=fillcolor)
    ax1.axhline(70, color=fillcolor)
    ax1.axhline(30, color=fillcolor)
    ax1.fill_between(r.date,
                     rsi,
                     70,
                     where=(rsi >= 70),
                     facecolor=fillcolor,
                     edgecolor=fillcolor)
    ax1.fill_between(r.date,
                     rsi,
                     30,
                     where=(rsi <= 30),
                     facecolor=fillcolor,
                     edgecolor=fillcolor)
    ax1.text(0.6,
             0.9,
             '>70 = overbought',
             va='top',
             transform=ax1.transAxes,
             fontsize=textsize)
    ax1.text(0.6,
             0.1,
             '<30 = oversold',
             transform=ax1.transAxes,
             fontsize=textsize)
    ax1.set_ylim(0, 100)
    ax1.set_yticks([30, 70])
    ax1.text(0.025,
             0.95,
             'RSI (14)',
             va='top',
             transform=ax1.transAxes,
             fontsize=textsize)
    ax1.set_title('%s daily' % ticker)

    # plot the price and volume data
    dx = r.adj_close - r.close
    low = r.low + dx
    high = r.high + dx

    deltas = np.zeros_like(prices)
    deltas[1:] = np.diff(prices)
    up = deltas > 0
    ax2.vlines(r.date[up],
               low[up],
               high[up],
               color='black',
               label='_nolegend_')
    ax2.vlines(r.date[~up],
               low[~up],
               high[~up],
               color='black',
               label='_nolegend_')
    ma20 = ti.moving_average(prices, 20, type='simple')
    ma200 = ti.moving_average(prices, 200, type='simple')

    linema20, = ax2.plot(r.date, ma20, color='blue', lw=2, label='MA (20)')
    linema200, = ax2.plot(r.date, ma200, color='red', lw=2, label='MA (200)')

    last = r[-1]
    s = '%s O:%1.2f H:%1.2f L:%1.2f C:%1.2f, V:%1.1fM Chg:%+1.2f' % (
        today.strftime('%d-%b-%Y'), last.open, last.high, last.low, last.close,
        last.volume * 1e-6, last.close - last.open)
    t4 = ax2.text(0.3, 0.9, s, transform=ax2.transAxes, fontsize=textsize)

    props = font_manager.FontProperties(size=10)
    leg = ax2.legend(loc='center left', shadow=True, fancybox=True, prop=props)
    leg.get_frame().set_alpha(0.5)

    volume = (r.close * r.volume) / 1e6  # dollar volume in millions
    vmax = volume.max()
    poly = ax2t.fill_between(r.date,
                             volume,
                             0,
                             label='Volume',
                             facecolor=fillcolor,
                             edgecolor=fillcolor)
    ax2t.set_ylim(0, 5 * vmax)
    ax2t.set_yticks([])

    # compute the MACD indicator
    fillcolor = 'darkslategrey'
    nslow = 26
    nfast = 12
    nema = 9
    emaslow, emafast, macd = ti.moving_average_convergence(prices,
                                                           nslow=nslow,
                                                           nfast=nfast)
    ema9 = ti.moving_average(macd, nema, type='exponential')
    ax3.plot(r.date, macd, color='black', lw=2)
    ax3.plot(r.date, ema9, color='blue', lw=1)
    ax3.fill_between(r.date,
                     macd - ema9,
                     0,
                     alpha=0.5,
                     facecolor=fillcolor,
                     edgecolor=fillcolor)

    ax3.text(0.025,
             0.95,
             'MACD (%d, %d, %d)' % (nfast, nslow, nema),
             va='top',
             transform=ax3.transAxes,
             fontsize=textsize)

    # ax3.set_yticks([])
    # turn off upper axis tick labels, rotate the lower ones, etc
    for ax in ax1, ax2, ax2t, ax3:
        if ax != ax3:
            for label in ax.get_xticklabels():
                label.set_visible(False)
        else:
            for label in ax.get_xticklabels():
                label.set_rotation(30)
                label.set_horizontalalignment('right')

        ax.fmt_xdata = mdates.DateFormatter('%Y-%m-%d')

    class MyLocator(mticker.MaxNLocator):
        def __init__(self, *args, **kwargs):
            mticker.MaxNLocator.__init__(self, *args, **kwargs)

        def __call__(self, *args, **kwargs):
            return mticker.MaxNLocator.__call__(self, *args, **kwargs)

    # at most 5 ticks, pruning the upper and lower so they don't overlap
    # with other ticks
    # ax2.yaxis.set_major_locator(mticker.MaxNLocator(5, prune='both'))
    # ax3.yaxis.set_major_locator(mticker.MaxNLocator(5, prune='both'))

    ax2.yaxis.set_major_locator(MyLocator(5, prune='both'))
    ax3.yaxis.set_major_locator(MyLocator(5, prune='both'))

    plt.show()
Esempio n. 6
0
def ma(df, n):
    ma_df = ti.moving_average(df, n)
    return ma_df