def generate_signals(data):
short_window = 14
long_window = 28
high_low = data["high"] - data["low"]
high_close = abs(data["high"] - data["close"].shift(1))
low_close = abs(data["low"] - data["close"].shift(1))
true_range = high_low.to_frame().join(high_close.to_frame()).join(low_close.to_frame()).max(axis=1)
data["atr"] = true_range.rolling(window=14, min_periods=1).mean()
data["middle_line"] = data["close"].ewm(span=20, adjust=False).mean()
data["upper_band"] = data["middle_line"] + (2 * data["atr"])
data["lower_band"] = data["middle_line"] - (2 * data["atr"])
data["signal"] = 0
data.loc[data["close"] > data["upper_band"], "signal"] = 1
data.loc[data["close"] < data["lower_band"], "signal"] = -1
Everything you need to develop, test, and refine your quantitative trading strategies in one powerful platform.
Access comprehensive end-of-day market data to thoroughly test your trading strategies across multiple timeframes and market conditions.
Write and test your strategies in Python with our robust online code. Levrage your favorite libraries like pandas and numpy.
Get Popular Trading Strategy Templates and Start backtesting quickly using the presets or customising them for your use case.
Backdrop is good 👍.