I cannot make sense of the parameters below... what must I adjust to get a %K that spans a 14 day period and a %D that's a 3 period moving average of my %K ?
slowk, slowd = talib.STOCH(high[stock],
low[stock],
close[stock],
fastk_period=5,
slowk_period=3,
slowk_matype=0,
slowd_period=3,
slowd_matype=0)
Quantopian provides this sample code demonstrating usage of the TAlib function:
# This algorithm uses talib's STOCH function to determine entry and exit points.
# When the stochastic oscillator dips below 10, the stock is determined to be oversold
# and a long position is opened. The position is exited when the indicator rises above 90
# because the stock is thought to be overbought.
# Because this algorithm uses the history function, it will only run in minute mode.
# We will constrain the trading to once per day at market open in this example.
import talib
import numpy as np
import pandas as pd
# Setup our variables
def initialize(context):
context.stocks = symbols('SPY', 'AAPL', 'GLD', 'AMZN')
# Set the percent of the account to be invested per stock
context.long_pct_per_stock = 1.0 / len(context.stocks)
# Create a variable to track the date change
context.date = None
def handle_data(context, data):
todays_date = get_datetime().date()
# Do nothing unless the date has changed
if todays_date == context.date:
return
# Set the new date
context.date = todays_date
# Load historical data for the stocks
high = history(30, '1d', 'high')
low = history(30, '1d', 'low')
close = history(30, '1d', 'close_price')
# Iterate over our list of stocks
for stock in context.stocks:
current_position = context.portfolio.positions[stock].amount
slowk, slowd = talib.STOCH(high[stock],
low[stock],
close[stock],
fastk_period=5,
slowk_period=3,
slowk_matype=0,
slowd_period=3,
slowd_matype=0)
# get the most recent value
slowk = slowk[-1]
slowd = slowd[-1]
# If either the slowk or slowd are less than 10, the stock is
# 'oversold,' a long position is opened if there are no shares
# in the portfolio.
if slowk < 10 or slowd < 10 and current_position <= 0:
order_target_percent(stock, context.long_pct_per_stock)
# If either the slowk or slowd are larger than 90, the stock is
# 'overbought' and the position is closed.
elif slowk > 90 or slowd > 90 and current_position >= 0:
order_target(stock, 0)