Finish manual strategy for project 8

I struggled with the manual strategy, mostly because I tried to read
good triggers from the price action charts. Finally, I had the ingenious
(hmm) idea to scatter plot the 1, 3, and 5 day percentage returns over
different indicators. I can also use this information to train my Q
learner.
This commit is contained in:
2020-11-03 19:05:43 -05:00
parent 43e297c075
commit 0519ae9336
3 changed files with 108 additions and 46 deletions

View File

@@ -17,9 +17,7 @@ def bollinger_band(df, symbol, period=20, m=2):
std = df[symbol].rolling(period).std()
boll_up = boll_sma + m * std
boll_lo = boll_sma - m * std
key_sma = f"{symbol}-Boll({period})-sma"
key_up = f"{symbol}-Boll({period})-up"
key_lo = f"{symbol}-Boll({period})-lo"
key_sma, key_up, key_lo = "boll_sma", "boll_up", "boll_lo"
df[key_sma] = boll_sma
df[key_up] = boll_up
df[key_lo] = boll_lo
@@ -32,7 +30,7 @@ def sma(df, symbol, period):
period = [period]
keys = []
for p in period:
key = f"{symbol}-sma({p})"
key = f"sma_{p}"
df[key] = df[symbol].rolling(p).mean()
keys.append(key)
return df[keys]
@@ -44,8 +42,8 @@ def ema(df, symbol, period):
period = [period]
keys = []
for p in period:
key = f"{symbol}-ema({p})"
df[key] = df[symbol].ewm(span=period).mean()
key = f"ema_{p}"
df[key] = df[symbol].ewm(span=p).mean()
keys.append(key)
return df[keys]
@@ -56,7 +54,7 @@ def price_sma(df, symbol, period):
period = [period]
keys = []
for p in period:
key = f"{symbol}-price/sma({p})"
key = f"price_sma_{p}"
sma = df[symbol].rolling(p).mean()
df[key] = df[symbol] / sma
keys.append(key)
@@ -84,16 +82,28 @@ def rsi(df, symbol, period=14):
def macd(df, symbol):
macd = df[symbol].ewm(span=12).mean() - df[symbol].ewm(span=26).mean()
k1 = f"macd"
k2 = k1 + "-signal"
k1 = "macd"
k2 = "macd_signal"
k3 = "macd_diff"
df[k1] = macd
df[k2] = macd.rolling(9).mean()
return df[[k1, k2]]
df[k3] = df[k1] - df[k2]
return df[[k1, k2, k3]]
def price_delta(df, symbol, period=1):
"""Calculate delta between previous day and today."""
df[f"{symbol}-diff({period})"] = df[symbol].diff(periods=period)
k = f"diff_{period}"
df[k] = df[symbol].diff(periods=period)
return df[k]
def price_delta(df, symbol, period=1):
"""Calculate percentage change for period."""
k = f"pct_{period}"
df[k] = df[symbol].pct_change(periods=period)
df[k] = df[k].shift(-period)
return df[k]
def test_indicators():
@@ -135,4 +145,3 @@ def test_indicators():
df[symbol].plot(ax=axes[0], title="JPM price action")
df[["JPM-macd", "JPM-macd-signal"]].plot(ax=axes[1])
plt.savefig('figure_5.png')