예제 #1
0
def rebalance_porfolio(date, asset, companies_data):
    # date_string = datetime.datetime.strftime(date, "%Y-%m-%d")
    print("=" * 50)
    print("Rebalancing Portfolio For Current Date: ", date)
    print("=" * 50)

    # Load Trained Model
    lstm = LstmModel(name="Test2", load=True)

    # Save Values In Dict
    companies_rtv = dict()
    companies_prices = dict()

    # Predict One-Week Price
    # Calculate Return-To-Volatility
    # Save The Result For Different Companies
    day_in, day_want, step = 50, 10, 2
    for company, data in companies_data.items():
        # Predictions From LSTM
        idx = data[data['Date'] == date].index.item()
        _input = data.iloc[idx - day_in:idx + day_want - step + 1,
                           1:data.shape[1]]
        predictions = pd.DataFrame(lstm.predict(_input),
                                   index=pd.date_range(start=date, periods=10))

        # Calculate Return-To-Volatility
        rtv = calculate_rtv(predictions)
        companies_rtv[company] = rtv

        # Get Price List
        companies_prices[company] = data.iloc[idx, 5]

    # Sort The Results Descending & Choose Top 10 Companies
    filtered_list = list(filter(lambda x: x[1] >= 0, companies_rtv.items()))
    sorted_list = sorted(filtered_list, key=lambda x: x[1], reverse=True)
    companies_rtv_filter = {t[0]: t[1] for t in sorted_list[:10]}

    # Build Portfolio
    rtv_sum = sum(companies_rtv_filter.values())
    portfolio_pct = {
        key: (value / rtv_sum)
        for key, value in companies_rtv_filter.items()
    }
    portfolio = {
        company: ((asset * pct) / companies_prices[company])
        for company, pct in portfolio_pct.items()
    }

    print("Company Prices: ", companies_prices)
    print("Companies Return-To-Volatility: ", companies_rtv)
    print("Filtered 10 Companies: ", companies_rtv_filter)
    print("Portfolio Percentage: ", portfolio_pct)
    print("Portfolio: ", portfolio)

    return portfolio, portfolio_pct
예제 #2
0
def dummy_porfolio(date, asset, companies_data):
    lstm = LstmModel(name="Test2", load=True)
    day_in, day_want, step = 50, 10, 2
    for company, data in companies_data.items():
        # Predictions From LSTM
        idx = data[data['Date'] == date].index.item()
        print(data.iloc[idx - day_in:idx + day_want - step + 1,
                        0:data.shape[1]])
        _input = data.iloc[idx - day_in:idx + day_want - step + 1,
                           1:data.shape[1]]
        predictions = pd.DataFrame(lstm.predict(_input),
                                   index=pd.date_range(start=date, periods=10))
        break
    return {}, {}
예제 #3
0
def rebalance_porfolio(date, asset, companies_data):
    # date_string = datetime.datetime.strftime(date, "%Y-%m-%d")
    print("=" * 50)
    print("Rebalancing Portfolio For Current Date: ", date)
    print("=" * 50)

    # Load Trained Model
    lstm = LstmModel(name="Old1", load=True)

    # Save Values In Dict
    companies_rtv = dict()
    companies_prices = dict()

    # Predict One-Week Price
    # Calculate Return-To-Volatility
    # Save The Result For Different Companies
    day_in, day_out, num_features = lstm.load_settings()

    for company, data in companies_data.items():
        # Current Date's Index
        try:
            idx = data[data['Date'] == date].index.values[0]
        except IndexError:  # When Company Data Is Empty On That Date
            continue

        # Predictions From LSTM
        _input = data.iloc[idx - day_in:idx]['Adj Close'].values
        _input = np.reshape(_input, (_input.shape[0], 1))
        predictions = pd.DataFrame(lstm.predict(company=company,
                                                _input=_input),
                                   index=pd.date_range(start=date,
                                                       periods=day_out))

        # Calculate Return-To-Volatility
        rtv = calculate_rtv(predictions)
        companies_rtv[company] = rtv

        # Get Adj Closing Price List
        companies_prices[company] = data.iloc[idx, 4]

    # Sort The Results Descending & Choose Top 10 Companies
    filtered_list = list(filter(lambda x: x[1] > 0, companies_rtv.items()))
    sorted_list = sorted(filtered_list, key=lambda x: x[1], reverse=True)
    companies_rtv_filter = {t[0]: t[1] for t in sorted_list[:10]}

    # Build Portfolio
    rtv_sum = sum(companies_rtv_filter.values())
    portfolio_pct = {
        key: (value / rtv_sum)
        for key, value in companies_rtv_filter.items()
    }
    portfolio = {
        company: ((asset * pct) / companies_prices[company])
        for company, pct in portfolio_pct.items()
    }

    print("Company Prices: ", companies_prices)
    print("Companies Return-To-Volatility: ", companies_rtv)
    print("Filtered 10 Companies: ", companies_rtv_filter)
    print("Portfolio Percentage: ", portfolio_pct)
    print("Portfolio: ", portfolio)

    return portfolio, portfolio_pct