Quickstart

Installation

pip install gander

Examples

import gander.indicators as gi
import gander.plotting as gp
import matplotlib.pyplot as plt

Using Matplotlib and Gander to create daily stock charts

Let’s say we have a Pandas DataFrame of a stocks data and we want to make a chart of a subset of the data. Our DataFrame might look something like this:

../../_images/df_raw.png

Adding indicators to the data set

df = gi.calc_ema(df, df["close"], "ema12", window=13)
df = gi.calc_ema(df, df["close"], "ema26", window=27)
df = gi.calc_macd(df, df["ema12"], df["ema26"])

This will give us something like this:

../../_images/df_indicators.png

To get a subset of the data and positions on the x-axis, we can do:

df_plot = df[-300:-200]
xpos = range(100)

Building figure and subplots

fig = plt.figure(figsize=(12, 6))
ax1 = plt.subplot2grid((3, 1), (0, 0), rowspan=2)
ax2 = plt.subplot2grid((3, 1), (2, 0), rowspan=1)
ticks, labels = gp.daily_labels(df_plot, df_plot.index, step=5)

Customizing x-axis ticks, labels and grid

for ax in [ax1, ax2]:
    ax.set_xlim(xmin=-1, xmax=104)
    ax.set_xticks(ticks)
    ax.grid(alpha=0.3)

ax1.xaxis.set_ticklabels([])
ax1.tick_params(axis='x', length=0)
ax2.set_xticklabels(labels)

for label in ax2.get_xticklabels():
    if len(label.get_text()) == 4:
        label.set_fontsize(14)
        label.set_fontweight("bold")
    elif len(label.get_text()) == 3:
        label.set_fontsize(12)
        label.set_fontweight("bold")
    else:
        label.set_fontsize(10)

Adding plots

gp.candles(df_plot, ax1)
ax1.plot(xpos, df_plot["ema12"], "b-")
ax1.plot(xpos, df_plot["ema26"], "k-")
gp.macds(df_plot, ax2, "fast", "signal", "macd-h")
../../_images/daily_plot.png

Using Matplotlib and Gander to create weekly stock charts

Let’s again say we have a Pandas DataFrame of a stocks data and we want to make a chart of a subset of the data data. Only this time we have weekly data. Our DataFrame might look something like this:

../../_images/df_raw_weekly.png

Adding indicators to the data set

df = gi.calc_ema(df, df["close"], "ema12", window=13)
df = gi.calc_ema(df, df["close"], "ema26", window=27)
df = gi.calc_macd(df, df["ema12"], df["ema26"])

This will give us something like this:

../../_images/df_indicators_weekly.png

To get a subset of the data and positions on the x-axis, we can again do:

df_plot = df[-230:-130]
xpos = range(100)

The process of building the chart is the same as for daily data, except we might do different customizations to the lables on the x-axis:

Building figure and subplots

fig = plt.figure(figsize=(12, 6))
ax1 = plt.subplot2grid((3, 1), (0, 0), rowspan=2)
ax2 = plt.subplot2grid((3, 1), (2, 0), rowspan=1)
ticks, labels = gp.weekly_labels(df_plot, df_plot.index, step=10)

Customizing x-axis ticks, labels and grid

for ax in [ax1, ax2]:
    ax.set_xlim(xmin=-1, xmax=104)
    ax.set_xticks(ticks)
    ax.grid(alpha=0.3)

ax1.xaxis.set_ticklabels([])
ax1.tick_params(axis='x', length=0)
ax2.set_xticklabels(labels)

for label in ax2.get_xticklabels():
    if len(label.get_text()) == 4:
        label.set_fontsize(14)
        label.set_fontweight("bold")

Adding plots

gp.candles(df_plot, ax1)
ax1.plot(xpos, df_plot["ema12"], "b-")
ax1.plot(xpos, df_plot["ema26"], "k-")
gp.macds(df_plot, ax2, "fast", "signal", "macd-h")
../../_images/weekly_plot.png