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:
@@ -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')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user