volatility = pd.rolling_sum((x - x.shift(1)).abs(), n) er = change / volatility sc = (er * (2.0 / (pow1 + 1.0) - 2.0 / (pow2 + 1.0)) + 2.0 / (pow2 + 1.0))**2.0 kama = [np.nan] * sc.size first_value = True for i in range(len(kama)): if not pd.isnull(sc[i]): if first_value: kama[i] = x[i] first_value = False else: kama[i] = kama[i - 1] + sc[i] * (x[i] - kama[i - 1]) return Series(data=[np.nan] * nan_count + kama, name="KAMA_%d,%d,%d" % (n, pow1, pow2)) def test_kama(closes): """KAMA test function.""" kama10 = kama(closes, 10, 2, 30) data = pd.concat([closes, kama10], axis=1) # print(data) data.plot(title="KAMA Chart") plt.show() if __name__ == "__main__": test_kama(gen_closes())
wma = [] bar_count = len(arg) nan_count = window - 1 if bar_count < nan_count: nan_count = bar_count for i in range(nan_count): wma.append(np.nan) div = (window + 1) * window / 2.0 for i in range(window-1, bar_count): sum = 0 for j in range(window): sum += arg[i - j] * (window - j) wma.append(sum / div); return Series(data = wma, name="wma" + str(window), index = arg.index) def test_wma(closes): """WMA test function.""" wma5 = wma(closes, 5) wma10 = wma(closes, 10) data = pd.concat([closes, wma5, wma10], axis=1) # print(data) data.plot(title = "WMA Chart") plt.show() if __name__ == "__main__": test_wma(gen_closes())
which will be used in calculating Bollinger Bands. """ sd = [np.nan] * min(closes.size, window - 1) for i in range(window - 1, closes.size): sum = 0.0 m = boll_mid[i] for j in range(window): sum += (closes[i - j] - m) ** 2; sd.append(math.sqrt(sum / window)) return Series(data = sd, name = "sd") boll_mid = sma(closes, window) sd = calc_sd() boll_up = boll_mid + sd * d boll_low = boll_mid - sd * d return DataFrame({"BOLL_UP":boll_up, "BOLL_MID":boll_mid, "BOLL_LOW":boll_low}) def test_bbands(closes): """BBANDS test function.""" bb = bbands(closes, 20, 2) data = pd.concat([DataFrame(closes), bb], axis=1) # print(data) data.plot(title = "BBANDS Chart") plt.show() if __name__ == "__main__": test_bbands(gen_closes(200))
def sma(arg, window): """SMA: Simple Moving Average. Params: arg (Series): Time series data such as close prices. window (int): Moving average window size. Returns: Series: Simple moving average of arg. """ ma = pd.rolling_mean(arg, window) return Series(data=ma, name="SMA" + str(window)) def test_sma(closes): """SMA test function.""" sma5 = sma(closes, 5) sma10 = sma(closes, 10) data = pd.concat([closes, sma5, sma10], axis=1) # print(data) data.plot(title="SMA Chart") plt.show() if __name__ == "__main__": test_sma(gen_closes())
"""DEMA: Double Exponential Moving Average. Params: arg (Series): Time series data such as close prices. window (int): Moving average window size. Returns: Series: Double exponential moving average of arg. """ ema1 = ema(arg, window) ema2 = ema(ema1, window) dema = ema1 * 2 - ema2 return Series(data = dema, name = "dema" + str(window)) def test_dema(closes): """DEMA test function.""" dema5 = dema(closes, 5) dema10 = dema(closes, 10) data = pd.concat([closes, dema5, dema10], axis=1) # print(data) data.plot(title = "DEMA Chart") plt.show() if __name__ == "__main__": test_dema(gen_closes())
"divergence": divergence }) def test_macd(closes): """MACD test function.""" macd_indicator = macd(closes) data = macd_indicator # print(data) # Plot the price series. ax1 = plt.subplot2grid((6, 4), (0, 0), rowspan=4, colspan=4) ax1.grid(True) ax1.plot(closes) plt.ylabel("CLOSE") plt.title("MACD Chart") # Plot MACD. ax2 = plt.subplot2grid((6, 4), (4, 0), sharex=ax1, rowspan=2, colspan=4) ax2.grid(True) ax2.plot(data["macd"]) ax2.plot(data["signal"]) ax2.fill_between(data.index, data["divergence"], 0, alpha=0.5) plt.ylabel("MACD") plt.setp(ax1.get_xticklabels(), visible=False) plt.show() if __name__ == "__main__": test_macd(gen_closes())
def sma(arg, window): """SMA: Simple Moving Average. Params: arg (Series): Time series data such as close prices. window (int): Moving average window size. Returns: Series: Simple moving average of arg. """ ma = arg.rolling(window=window,center=False).mean() return Series(data = ma, name = "sma" + str(window)) def test_sma(closes): """SMA test function.""" sma5 = sma(closes, 5) sma10 = sma(closes, 10) data = pd.concat([closes, sma5, sma10], axis=1) # print(data) data.plot(title = "SMA Chart") plt.show() if __name__ == "__main__": test_sma(gen_closes())
Params: arg (Series): Time series data such as close prices. window (int): Moving average window size. Returns: Series: Triple exponential moving average of arg. """ ema1 = ema(arg, window) ema2 = ema(ema1, window) ema3 = ema(ema2, window) tema = ema1 * 3 - ema2 * 3 + ema3 return Series(data = tema, name = "tema" + str(window)) def test_tema(closes): """TEMA test function.""" tema5 = tema(closes, 5) tema10 = tema(closes, 10) data = pd.concat([closes, tema5, tema10], axis=1) # print(data) data.plot(title = "TEMA Chart") plt.show() if __name__ == "__main__": test_tema(gen_closes())
Params: arg (Series): Time series data such as close prices. window (int): Moving average window size. Returns: Series: Exponential moving average of arg. """ arg = Series(arg.dropna().values) ema = [] w = 2.0 / (window + 1) ema.append(arg[0]) for i in range(1, len(arg)): ema.append(arg[i] * w + ema[-1] * (1.0 - w)) return Series(data=ema, name="EMA" + str(window)) def test_ema(closes): """EMA test function.""" ema5 = ema(closes, 5) ema10 = ema(closes, 10) data = pd.concat([closes, ema5, ema10], axis=1) # print(data) data.plot(title="EMA Chart") plt.show() if __name__ == "__main__": test_ema(gen_closes())
Params: arg (Series): Time series data such as close prices. window (int): Moving average window size. Returns: Series: Exponential moving average of arg. """ arg = Series(arg.dropna().values, index = arg.index) ema = [] w = 2.0 / (window + 1) ema.append(arg[0]) for i in range(1, len(arg)): ema.append(arg[i] * w + ema[-1] * (1.0 - w)) return Series(data = ema, name = "ema" + str(window), index = arg.index) def test_ema(closes): """EMA test function.""" ema5 = ema(closes, 5) ema10 = ema(closes, 10) data = pd.concat([closes, ema5, ema10], axis=1) # print(data) data.plot(title = "EMA Chart") plt.show() if __name__ == "__main__": test_ema(gen_closes())
change = (x - x.shift(n)).abs() volatility = (x - x.shift(1)).abs().rolling(window=n).sum() er = change / volatility sc = (er * (2.0 /(pow1 + 1.0) - 2.0 / (pow2 + 1.0)) + 2.0 / (pow2 + 1.0)) ** 2.0 kama = [np.nan] * sc.size first_value = True for i in range(len(kama)): if not pd.isnull(sc[i]): if first_value: kama[i] = x[i] first_value = False else: kama[i] = kama[i-1] + sc[i] * (x[i] - kama[i-1]) return Series(data = [np.nan] * nan_count + kama, name = "kama(%d,%d,%d)" % (n, pow1, pow2), index = x.index) def test_kama(closes): """KAMA test function.""" kama10 = kama(closes, 10, 2, 30) data = pd.concat([closes, kama10], axis=1) # print(data) data.plot(title = "KAMA Chart") plt.show() if __name__ == "__main__": test_kama(gen_closes())