Improve QLearner so that commission is considered

This commit is contained in:
2020-11-10 11:01:21 -05:00
parent 761a0366e4
commit 6e1f70bcba
2 changed files with 38 additions and 12 deletions

View File

@@ -128,6 +128,22 @@ def compare_all_strategies(symbol, sv, sd, ed):
plt.savefig('figure_2.png', dpi=fig.dpi)
def compare_number_trades(symbol, sv, sd, ed):
df = util.get_data([symbol], pd.date_range(sd, ed))
df.drop(columns=["SPY"], inplace=True)
ql = QLearner(testing=True, verbose=False)
ql.addEvidence(symbol, sd, ed, sv)
orders = ql.testPolicy(symbol, sd, ed, sv)
n_orders_no_commission = orders[orders["Shares"] != 0].shape[0]
ql = QLearner(testing=True, verbose=False, commission=9.95, impact=0.005)
ql.addEvidence(symbol, sd, ed, sv)
orders = ql.testPolicy(symbol, sd, ed, sv)
n_orders_commision = orders[orders["Shares"] != 0].shape[0]
print(f"{n_orders_no_commission=} {n_orders_commision=}")
def experiment1(create_report=False):
symbol = "JPM"
sv = 10000
@@ -136,7 +152,7 @@ def experiment1(create_report=False):
sd_out = dt.datetime(2010, 1, 1) # out-sample
ed_out = dt.datetime(2011, 12, 31) # out-sample
df = util.get_data([symbol], pd.date_range(sd_out, ed_out))
df = util.get_data([symbol], pd.date_range(sd, ed))
df.drop(columns=["SPY"], inplace=True)
if create_report:
@@ -146,16 +162,16 @@ def experiment1(create_report=False):
# visualize_correlations(symbol, df)
# plot_indicators(symbol, df)
# compare_number_trades(symbol, sv, sd, ed)
bs = BenchmarkStrategy()
orders = bs.testPolicy(symbol, sd_out, ed_out, sv)
orders = bs.testPolicy(symbol, sd, ed, sv)
df["Benchmark"] = marketsim.compute_portvals(orders, sv)
df["Orders Benchmark"] = orders["Shares"]
# ql = QLearner(testing=True, verbose=False, commission=10, impact=0.005)
ql = QLearner(testing=True, verbose=False)
ql = QLearner(testing=True, verbose=False, commission=9.95, impact=0.005)
ql.addEvidence(symbol, sd, ed, sv)
orders = ql.testPolicy(symbol, sd_out, ed_out, sv)
orders = ql.testPolicy(symbol, sd, ed, sv)
df["QL"] = marketsim.compute_portvals(orders, sv)
df["Orders QL"] = orders["Shares"]