Exemple #1
0
def main(argv):
    
    l_event_strategies = []

    l_event_strategies.append(es.UnderThreshold('sp5002012', 'actual_close', 9))
    #l_event_strategies.append(es.RelativeStrength('sp5002008', 'close', -5, 'SPY', 2))    
    #l_event_strategies.append(es.DailyChange('sp5002008', 'close', -10, '%'))
    #l_event_strategies.append(es.RelativeStrengthWithVolume('sp5002008', 'close', -5, 'SPY', 2))
    
    dt_start = dt.datetime(2008, 1, 1)
    dt_end = dt.datetime(2009, 12, 31)
    
    print 'AnalysisEngine : Events to Analyze:'
    i = 0
    for e in l_event_strategies:
        i += 1
        print 'AnalysisEngine : %00d   - %s' % (i, e.getName())
        
    print
    print 'AnalysisEngine : Profiling Events'
    ep.profile_events(dt_start, dt_end, l_event_strategies)
    
    print
    print 'AnalysisEngine : Simulating Orders'
    ms.simulate_orders(50000, l_event_strategies)
    
    print
    print 'AnalysisEngine : Analyzing Results'
    pa.analize_results('$SPX', l_event_strategies, dt_start, dt_end)   
Exemple #2
0
def main_optimal():

    # Set-up initial parameters for simulation
    symbol = "JPM"
    sd = dt.datetime(2008, 1, 2)
    ed = dt.datetime(2009, 12, 31)
    sv = 100000
    commission = 0
    impact = 0

    # Calculate optimal portfolio values
    optimal_trades = testPolicy(symbol=symbol, sd=sd, ed=ed, sv=sv)
    optimal_trades = process_trades_df(optimal_trades, "JPM")
    optimal_port_vals = ms.compute_portvals(optimal_trades,
                                            start_val=sv,
                                            commission=commission,
                                            impact=impact)
    optimal_port_vals = optimal_port_vals / optimal_port_vals.iloc[0, :]

    # Calculate benchmark portfolio values
    benchmark_trades = pd.DataFrame(data=[["JPM", "BUY", 1000]],
                                    index=[sd, ed],
                                    columns=["Symbol", "Order", "Shares"])
    benchmark_port_vals = ms.compute_portvals(benchmark_trades,
                                              start_val=sv,
                                              commission=commission,
                                              impact=impact)
    benchmark_port_vals = benchmark_port_vals / benchmark_port_vals.iloc[0, :]

    # Plot optimal strategy
    plt.plot(benchmark_port_vals, color='g', linewidth=0.7)
    plt.plot(optimal_port_vals, color='r', linewidth=0.7)
    plt.legend(["Benchmark", "Optimal"])
    plt.title("Portfolio Values: Benchmark vs. Optimal", fontsize=10)
    plt.ylabel("Normalized Values", fontsize=8)
    plt.xlabel("Date Range", fontsize=8)
    plt.savefig('Optimal.png')

    ocr, oadr, osddr, osr = id.calculate_portfolio_metrics(optimal_port_vals)
    bcr, badr, bsddr, bsr = id.calculate_portfolio_metrics(benchmark_port_vals)
    print("Optimal: ", ocr, oadr, osddr, osr)
    print("Benchmark:", bcr, badr, bsddr, bsr)
Exemple #3
0
def main(argv):

    # parameters
    s_list_name = "sp5002012"
    dt_start = dt.datetime(2008, 1, 1)
    dt_end = dt.datetime(2009, 12, 31)
    s_bench_sym = "SPY"
    i_initial_cash = 100000

    print "TechInv : Bollinger Event Study"

    # read market data
    dataobj = da.DataAccess("Yahoo")
    ls_symbols = dataobj.get_symbols_from_list(s_list_name)
    ls_symbols.append(s_bench_sym)
    d_data = get_symbol_data(dataobj, ls_symbols, dt_start, dt_end)

    # create the object that implements the strategy
    event_strategy = es.BollingerRelWeakness(s_list_name, d_data, i_initial_cash, 20)
    df_events, i_event_counter = event_strategy.find_events(ls_symbols, "close", 2.0, s_bench_sym, 1.3)

    print "EventProfiler : For the %1.1f %s event with the components of %s, we find %d events. Date Range = (%s) to (%s)." % (
        event_strategy.f_size,
        event_strategy.s_feature,
        event_strategy.s_list_name,
        i_event_counter,
        dt_start,
        dt_end,
    )

    print "TechInv : Profiling Events"
    ep.profile_event(event_strategy, ls_symbols, dt_start, dt_end, df_events, 100, 5)

    print ""
    ms.simulate_market(event_strategy)

    event_strategy.s_bench_sym = "$SPX"
    print ""
    pa.analyze_event(event_strategy, dt_start, dt_end)
Exemple #4
0

def main_manual(sd= dt.datetime(2008, 1, 2), ed= dt.datetime(2009, 12, 31), out_file = "default.png", out_subtitle = "Default"):
	'''
	Main script to run an experiment with the manual strategy in comparison to buy and hold benchmark.
	'''
    # Set-up initial parameters for simulation
    symbol = "JPM"

    sv = 100000
    commission = 9.95;
    impact = 0.005;

    # Calculate optimal portfolio values
    manual_trades = testPolicy(symbol = symbol, sd = sd, ed = ed, sv = sv)
    manual_port_vals = ms.compute_portvals(manual_trades, start_val = sv, commission = commission, impact = impact)
    manual_port_vals = manual_port_vals / manual_port_vals.iloc[0,:]
    manual_port_vals.rename(columns = {"Portfolio Value":"Manual"}, inplace = True)

    # Calculate benchmark portfolio values
    benchmark_trades = pd.DataFrame(data = [["JPM","BUY",1000]], index = [sd, ed], columns = ["Symbol", "Order", "Shares"])
    benchmark_port_vals = ms.compute_portvals(benchmark_trades, start_val = sv, commission = commission, impact = impact)
    benchmark_port_vals = benchmark_port_vals / benchmark_port_vals.iloc[0,:]
    benchmark_port_vals.rename(columns = {"Portfolio Value":"Benchmark"}, inplace = True)

    port_vals = pd.DataFrame(benchmark_port_vals["Benchmark"], index = benchmark_port_vals.index)
    port_vals["Manual"] = manual_port_vals["Manual"]
    port_vals.fillna(method = 'ffill', inplace=True)

    # Plot optimal strategy
    plt.gcf().subplots_adjust(bottom=0.2)
Exemple #5
0
def experiment_2_helper(symbol,
                        start_train,
                        end_train,
                        start_test,
                        end_test,
                        sv=100000,
                        commission=0.0,
                        impact=0.0):

    np.random.seed(1000)
    random.seed(1000)

    slearner = sl.StrategyLearner(impact=impact)
    slearner.addEvidence(symbol=symbol, sd=start_train, ed=end_train, sv=sv)

    # In-Sample Experiment 1
    # Calculate manual strategy portfolio values
    manual_trades = man.testPolicy(symbol=symbol,
                                   sd=start_test,
                                   ed=end_test,
                                   sv=sv)
    manual_port_vals = ms.compute_portvals(manual_trades,
                                           start_val=sv,
                                           commission=commission,
                                           impact=impact)
    manual_port_vals = manual_port_vals / manual_port_vals.iloc[0, :]
    manual_port_vals.rename(columns={"Portfolio Value": "Manual"},
                            inplace=True)

    # Calculate benchmark portfolio values
    dates = pd.date_range(start_test, end_test)
    syms = [symbol]
    price_range = get_data(syms, dates)  # automatically adds SPY
    benchmark_trades = pd.DataFrame(
        data=[[symbol, "BUY", 1000]],
        index=[price_range.index[0], price_range.index[-1]],
        columns=["Symbol", "Order", "Shares"])
    bench_port_vals = ms.compute_portvals(benchmark_trades,
                                          start_val=sv,
                                          commission=commission,
                                          impact=impact)
    bench_port_vals = bench_port_vals / bench_port_vals.iloc[0, :]
    bench_port_vals.rename(columns={"Portfolio Value": "Benchmark"},
                           inplace=True)

    # Calculate strategy learner portfolio values
    temp_strategylearner_trades = slearner.testPolicy(symbol=symbol,
                                                      sd=start_test,
                                                      ed=end_test,
                                                      sv=sv)
    strategylearner_trades = pd.DataFrame(
        columns=['Order', 'Symbol', 'Shares'])
    for row_idx in temp_strategylearner_trades.index:
        nshares = temp_strategylearner_trades.loc[row_idx][0]
        if nshares == 0:
            continue
        order = 'SELL' if nshares < 0 else 'BUY'
        new_row = pd.DataFrame([
            [order, symbol, abs(nshares)],
        ],
                               columns=['Order', 'Symbol', 'Shares'],
                               index=[
                                   row_idx,
                               ])
        strategylearner_trades = strategylearner_trades.append(new_row)

    strategylearner_port_vals = ms.compute_portvals(strategylearner_trades,
                                                    start_val=sv,
                                                    commission=commission,
                                                    impact=impact)
    strategylearner_port_vals = strategylearner_port_vals / strategylearner_port_vals.iloc[
        0, :]
    strategylearner_port_vals.rename(columns={"Portfolio Value": "Strategy"},
                                     inplace=True)

    port_vals = pd.DataFrame(bench_port_vals["Benchmark"],
                             index=bench_port_vals.index)
    port_vals["Manual"] = manual_port_vals["Manual"]
    port_vals["Strategy"] = strategylearner_port_vals["Strategy"]
    port_vals.fillna(method='ffill', inplace=True)

    mcr, madr, msddr, msr = id.calculate_portfolio_metrics(manual_port_vals)
    bcr, badr, bsddr, bsr = id.calculate_portfolio_metrics(bench_port_vals)
    scr, sadr, ssddr, ssr = id.calculate_portfolio_metrics(
        strategylearner_port_vals)
    return mcr, madr, msddr, msr, bcr, badr, bsddr, bsr, scr, sadr, ssddr, ssr
Exemple #6
0
def run_experiment_1(symbol,
                     start_train,
                     end_train,
                     start_test,
                     end_test,
                     sv=100000,
                     commission=0.0,
                     impact=0.0,
                     output="default.png"):

    np.random.seed(1000)
    random.seed(1000)

    slearner = sl.StrategyLearner(impact=impact)
    slearner.addEvidence(symbol=symbol, sd=start_train, ed=end_train, sv=sv)

    # In-Sample Experiment 1
    # Calculate manual strategy portfolio values
    manual_trades = man.testPolicy(symbol=symbol,
                                   sd=start_test,
                                   ed=end_test,
                                   sv=sv)
    manual_port_vals = ms.compute_portvals(manual_trades,
                                           start_val=sv,
                                           commission=commission,
                                           impact=impact)
    manual_port_vals = manual_port_vals / manual_port_vals.iloc[0, :]
    manual_port_vals.rename(columns={"Portfolio Value": "Manual"},
                            inplace=True)

    # Calculate benchmark portfolio values
    dates = pd.date_range(start_test, end_test)
    syms = [symbol]
    price_range = get_data(syms, dates)  # automatically adds SPY
    benchmark_trades = pd.DataFrame(
        data=[[symbol, "BUY", 1000]],
        index=[price_range.index[0], price_range.index[-1]],
        columns=["Symbol", "Order", "Shares"])
    bench_port_vals = ms.compute_portvals(benchmark_trades,
                                          start_val=sv,
                                          commission=commission,
                                          impact=impact)
    bench_port_vals = bench_port_vals / bench_port_vals.iloc[0, :]
    bench_port_vals.rename(columns={"Portfolio Value": "Benchmark"},
                           inplace=True)

    # Calculate strategy learner portfolio values
    temp_strategylearner_trades = slearner.testPolicy(symbol=symbol,
                                                      sd=start_test,
                                                      ed=end_test,
                                                      sv=sv)
    strategylearner_trades = pd.DataFrame(
        columns=['Order', 'Symbol', 'Shares'])
    for row_idx in temp_strategylearner_trades.index:
        nshares = temp_strategylearner_trades.loc[row_idx][0]
        if nshares == 0:
            continue
        order = 'SELL' if nshares < 0 else 'BUY'
        new_row = pd.DataFrame([
            [order, symbol, abs(nshares)],
        ],
                               columns=['Order', 'Symbol', 'Shares'],
                               index=[
                                   row_idx,
                               ])
        strategylearner_trades = strategylearner_trades.append(new_row)

    strategylearner_port_vals = ms.compute_portvals(strategylearner_trades,
                                                    start_val=sv,
                                                    commission=commission,
                                                    impact=impact)
    strategylearner_port_vals = strategylearner_port_vals / strategylearner_port_vals.iloc[
        0, :]
    strategylearner_port_vals.rename(columns={"Portfolio Value": "Strategy"},
                                     inplace=True)

    port_vals = pd.DataFrame(bench_port_vals["Benchmark"],
                             index=bench_port_vals.index)
    port_vals["Manual"] = manual_port_vals["Manual"]
    port_vals["Strategy"] = strategylearner_port_vals["Strategy"]
    port_vals.fillna(method='ffill', inplace=True)

    # Plot in-sample strategy
    plt.figure()
    plt.gcf().subplots_adjust(bottom=0.2)
    plt.plot(port_vals["Benchmark"], color='g', linewidth=0.7)
    plt.plot(port_vals["Manual"], color='r', linewidth=0.7)
    plt.plot(port_vals["Strategy"], color='b', linewidth=0.7)
    plt.legend(["Benchmark", "Manual", "StrategyLearner"])
    plt.title(
        "Portfolio Values: Benchmark vs. Manual Strategy vs. StrategyLearner\n",
        fontsize=10)
    plt.ylabel("Normalized Values", fontsize=8)
    plt.xlabel("Date Range", fontsize=8)
    plt.xticks(rotation=45)
    plt.savefig(output)

    mcr, madr, msddr, msr = id.calculate_portfolio_metrics(manual_port_vals)
    bcr, badr, bsddr, bsr = id.calculate_portfolio_metrics(bench_port_vals)
    scr, sadr, ssddr, ssr = id.calculate_portfolio_metrics(
        strategylearner_port_vals)
    print("--------------------Manual Strategy--------------------")
    print("Cumulative Return:", mcr)
    print("Average Daily Return:", madr)
    print("Stdev Daily Return:", msddr)
    print("Sharpe Ratio:", msr)
    print("--------------------Benchmark Strategy-----------------")
    print("Cumulative Return:", bcr)
    print("Average Daily Return:", badr)
    print("Stdev Daily Return:", bsddr)
    print("Sharpe Ratio:", bsr)
    print("--------------------StrategyLearner---------------------")
    print("Cumulative Return:", scr)
    print("Average Daily Return:", sadr)
    print("Stdev Daily Return:", ssddr)
    print("Sharpe Ratio:", ssr)